browse-everything 0.14.2 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +0 -19
- data/README.md +9 -9
- data/app/helpers/font_awesome_version_helper.rb +17 -0
- data/app/views/browse_everything/index.html.erb +24 -22
- data/browse-everything.gemspec +2 -3
- data/lib/browse_everything.rb +0 -1
- data/lib/browse_everything/driver/s3.rb +1 -1
- data/lib/browse_everything/version.rb +1 -1
- data/lib/generators/browse_everything/templates/browse_everything_providers.yml.example +0 -3
- data/spec/spec_helper.rb +0 -4
- data/spec/support/app/views/file_handler/main.html.erb +2 -2
- metadata +9 -26
- data/app/helpers/bootstrap_version_helper.rb +0 -33
- data/lib/browse_everything/driver/sky_drive.rb +0 -125
- data/spec/unit/sky_drive_spec.rb +0 -65
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 730808dd49026de8e75b8344369e54ccd437b397
|
4
|
+
data.tar.gz: fd60f9a6709d2dae71fedb6b6f1d5a62a0174219
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d5c2642e90c7dbd4babdaff36ea7408418813e00467c2a321abae41fb963bbec09aede9dfb111d7b082f7ed5781f63a81bf3f78b3088f2303ce1fe18c828347
|
7
|
+
data.tar.gz: 976c6e152a9712df3bf074a6a84df9a1d7321fe111386ed6f7c6235f8a5bde2056606b1e66ce8a5a6337dd59b16e1bc8e03301858c5124906f4388396947c919
|
data/.rubocop_todo.yml
CHANGED
@@ -64,12 +64,10 @@ Rails/OutputSafety:
|
|
64
64
|
Rails/TimeZone:
|
65
65
|
Exclude:
|
66
66
|
- 'lib/browse_everything/driver/google_drive.rb'
|
67
|
-
- 'lib/browse_everything/driver/sky_drive.rb'
|
68
67
|
- 'lib/browse_everything/retriever.rb'
|
69
68
|
- 'spec/unit/browse_everything_helper_spec.rb'
|
70
69
|
- 'spec/unit/file_entry_spec.rb'
|
71
70
|
- 'spec/unit/retriever_spec.rb'
|
72
|
-
- 'spec/unit/sky_drive_spec.rb'
|
73
71
|
- 'spec/views/browse_everything/_file.html.erb_spec.rb'
|
74
72
|
|
75
73
|
# Offense count: 3
|
@@ -96,7 +94,6 @@ Style/FileName:
|
|
96
94
|
Style/GuardClause:
|
97
95
|
Exclude:
|
98
96
|
- 'lib/browse_everything/driver/google_drive.rb'
|
99
|
-
- 'lib/browse_everything/driver/sky_drive.rb'
|
100
97
|
|
101
98
|
# Offense count: 1
|
102
99
|
Style/MultilineBlockChain:
|
@@ -109,22 +106,6 @@ Style/MultilineBlockLayout:
|
|
109
106
|
Exclude:
|
110
107
|
- 'spec/unit/dropbox_spec.rb'
|
111
108
|
|
112
|
-
# Offense count: 2
|
113
|
-
# Cop supports --auto-correct.
|
114
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
115
|
-
# SupportedStyles: symmetrical, new_line, same_line
|
116
|
-
Style/MultilineHashBraceLayout:
|
117
|
-
Exclude:
|
118
|
-
- 'spec/unit/sky_drive_spec.rb'
|
119
|
-
|
120
|
-
# Offense count: 4
|
121
|
-
# Cop supports --auto-correct.
|
122
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
123
|
-
# SupportedStyles: aligned, indented, indented_relative_to_receiver
|
124
|
-
Style/MultilineMethodCallIndentation:
|
125
|
-
Exclude:
|
126
|
-
- 'spec/unit/sky_drive_spec.rb'
|
127
|
-
|
128
109
|
# Offense count: 1
|
129
110
|
# Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist.
|
130
111
|
# NamePrefix: is_, has_, have_
|
data/README.md
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
[](http://badge.fury.io/rb/browse-everything)
|
2
|
-
[](https://travis-ci.org/samvera/browse-everything)
|
3
|
+
[](https://coveralls.io/github/samvera/browse-everything?branch=master)
|
4
4
|
|
5
5
|
# BrowseEverything
|
6
6
|
|
7
7
|
This Gem allows your rails application to access user files from cloud storage.
|
8
8
|
Currently there are drivers implemented for [Dropbox](http://www.dropbox.com),
|
9
|
-
[
|
9
|
+
[Google Drive](http://drive.google.com),
|
10
10
|
[Box](http://www.box.com), [Amazon S3](https://aws.amazon.com/s3/),
|
11
11
|
and a server-side directory share.
|
12
12
|
|
@@ -39,7 +39,7 @@ After installing the gem, run the generator
|
|
39
39
|
|
40
40
|
This generator will set up the _config/browse_everything_providers.yml_ file and add the browse-everything engine to your application's routes.
|
41
41
|
|
42
|
-
If you prefer not to use the generator, or need info on how to set up providers in the browse_everything_providers.yml, use the info on [Configuring browse-everything](https://github.com/
|
42
|
+
If you prefer not to use the generator, or need info on how to set up providers in the browse_everything_providers.yml, use the info on [Configuring browse-everything](https://github.com/samvera/browse-everything/wiki/Configuring-browse-everything).
|
43
43
|
|
44
44
|
### Include the CSS and JavaScript
|
45
45
|
|
@@ -57,8 +57,8 @@ In `app/assets/javascripts/application.js` include jquery and the BrowseEverythi
|
|
57
57
|
|
58
58
|
### Adding Providers
|
59
59
|
In order to connect to a provider like [Dropbox](http://www.dropbox.com),
|
60
|
-
[
|
61
|
-
[Box](http://www.box.com), you must provide API keys in _config/browse_everything_providers.yml_. For info on how to edit this file, see [Configuring browse-everything](https://github.com/
|
60
|
+
[Google Drive](http://drive.google.com), or
|
61
|
+
[Box](http://www.box.com), you must provide API keys in _config/browse_everything_providers.yml_. For info on how to edit this file, see [Configuring browse-everything](https://github.com/samvera/browse-everything/wiki/Configuring-browse-everything)
|
62
62
|
|
63
63
|
### Views
|
64
64
|
|
@@ -103,7 +103,7 @@ $('#browse').browseEverything({
|
|
103
103
|
})
|
104
104
|
```
|
105
105
|
|
106
|
-
See [JavaScript Methods](https://github.com/
|
106
|
+
See [JavaScript Methods](https://github.com/samvera/browse-everything/wiki/JavaScript-Methods) for more info on using javascript to trigger browse-everything.
|
107
107
|
|
108
108
|
### The Results (Data Structure)
|
109
109
|
|
@@ -133,7 +133,7 @@ If you initialized browse-everything via JavaScript, the results data passed to
|
|
133
133
|
}
|
134
134
|
]
|
135
135
|
```
|
136
|
-
See [JavaScript Methods](https://github.com/
|
136
|
+
See [JavaScript Methods](https://github.com/samvera/browse-everything/wiki/JavaScript-Methods) for more info on using javascript to trigger browse-everything.
|
137
137
|
|
138
138
|
If you initialized browse-everything via data-attributes and set the _target_ option (via the _data-target_ attribute or via the _target_ option on the javascript method), the results data be written as hidden fields in the `<form>` you've specified as the target. When the user submits that form, the results will look like this:
|
139
139
|
```ruby
|
@@ -193,4 +193,4 @@ create a fully-functioning demo app in `spec/internal` (though you will have to
|
|
193
193
|
|
194
194
|
## Help
|
195
195
|
|
196
|
-
For help with
|
196
|
+
For help with Browse Everything, contact <samvera-tech@googlegroups.com>.
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module FontAwesomeVersionHelper
|
2
|
+
def font_awesome_four?
|
3
|
+
Bundler.environment.specs['font-awesome-rails'].first.version >= Gem::Version.new('4')
|
4
|
+
end
|
5
|
+
|
6
|
+
def fa3(if3)
|
7
|
+
fa3or4(if3, '')
|
8
|
+
end
|
9
|
+
|
10
|
+
def fa4(if4)
|
11
|
+
fa3or4('', if4)
|
12
|
+
end
|
13
|
+
|
14
|
+
def fa3or4(if3, if4)
|
15
|
+
font_awesome_four? ? if4 : if3
|
16
|
+
end
|
17
|
+
end
|
@@ -1,26 +1,28 @@
|
|
1
|
-
|
2
|
-
<div class="modal-
|
3
|
-
<
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
<div class="modal-body ev-body" tabindex="-1">
|
9
|
-
<div class="loading-progress" aria-live="assertive">
|
10
|
-
<span class="loading-text">Loading...</span>
|
1
|
+
<div class="modal-dialog">
|
2
|
+
<div class="modal-content">
|
3
|
+
<div class="modal-header">
|
4
|
+
<h4 class="sr-only" id="beModalLabel">Select a provider in the list to browse your files.</h4>
|
5
|
+
<div class="ev-providers">
|
6
|
+
<%= render :partial => 'providers' %>
|
7
|
+
</div>
|
11
8
|
</div>
|
12
|
-
<div class="
|
13
|
-
<div class="
|
14
|
-
|
9
|
+
<div class="modal-body ev-body" tabindex="-1">
|
10
|
+
<div class="loading-progress" aria-live="assertive">
|
11
|
+
<span class="loading-text">Loading...</span>
|
12
|
+
</div>
|
13
|
+
<div class="ev-browser row" aria-live="polite">
|
14
|
+
<div class="<%=fa3or4('fa3','fa4')%> col-xs-12 ev-files list">
|
15
|
+
<%= render :partial => 'files' if provider.present? %>
|
16
|
+
</div>
|
15
17
|
</div>
|
16
18
|
</div>
|
19
|
+
<div class="modal-footer">
|
20
|
+
<span class="pull-left ev-status">0 files selected</span>
|
21
|
+
<%= form_tag '#', :class => "ev-submit-form form-horizontal", :data => { :resolver => browse_everything_engine.resolver_path } do %>
|
22
|
+
<input type="hidden" name="context" value=""/>
|
23
|
+
<button class="ev-cancel btn btn-danger"><%= t('browse_everything.modal_form.cancel')%></button>
|
24
|
+
<button class="ev-submit btn btn-primary" data-loading-text="Loading..."><%= t('browse_everything.modal_form.submit')%></button>
|
25
|
+
<% end %>
|
26
|
+
</div>
|
17
27
|
</div>
|
18
|
-
|
19
|
-
<span class="pull-left ev-status">0 files selected</span>
|
20
|
-
<%= form_tag '#', :class => "ev-submit-form form-horizontal", :data => { :resolver => browse_everything_engine.resolver_path } do %>
|
21
|
-
<input type="hidden" name="context" value=""/>
|
22
|
-
<button class="ev-cancel btn btn-danger"><%= t('browse_everything.modal_form.cancel')%></button>
|
23
|
-
<button class="ev-submit btn btn-primary" data-loading-text="Loading..."><%= t('browse_everything.modal_form.submit')%></button>
|
24
|
-
<% end %>
|
25
|
-
</div>
|
26
|
-
<% if bootstrap_three? %></div></div><% end %>
|
28
|
+
</div>
|
data/browse-everything.gemspec
CHANGED
@@ -22,15 +22,14 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_dependency 'addressable', '~> 2.5'
|
23
23
|
spec.add_dependency 'google_drive'
|
24
24
|
spec.add_dependency 'dropbox-sdk', '>= 1.6.2'
|
25
|
-
spec.add_dependency 'skydrive'
|
26
25
|
spec.add_dependency 'ruby-box'
|
27
26
|
spec.add_dependency 'sass-rails'
|
28
|
-
spec.add_dependency 'bootstrap-sass'
|
27
|
+
spec.add_dependency 'bootstrap-sass', '~> 3.2'
|
29
28
|
spec.add_dependency 'font-awesome-rails'
|
30
29
|
spec.add_dependency 'google-api-client', '~> 0.9'
|
31
30
|
spec.add_dependency 'signet'
|
32
31
|
spec.add_dependency 'httparty'
|
33
|
-
spec.add_dependency 'aws-sdk'
|
32
|
+
spec.add_dependency 'aws-sdk-s3'
|
34
33
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
35
34
|
spec.add_development_dependency 'rspec-rails'
|
36
35
|
spec.add_development_dependency 'rspec-its'
|
data/lib/browse_everything.rb
CHANGED
@@ -12,7 +12,6 @@ module BrowseEverything
|
|
12
12
|
autoload :Base, 'browse_everything/driver/base'
|
13
13
|
autoload :FileSystem, 'browse_everything/driver/file_system'
|
14
14
|
autoload :Dropbox, 'browse_everything/driver/dropbox'
|
15
|
-
autoload :SkyDrive, 'browse_everything/driver/sky_drive'
|
16
15
|
autoload :Box, 'browse_everything/driver/box'
|
17
16
|
autoload :GoogleDrive, 'browse_everything/driver/google_drive'
|
18
17
|
autoload :S3, 'browse_everything/driver/s3'
|
@@ -18,6 +18,3 @@
|
|
18
18
|
# :app_secret: YOUR_AWS_S3_SECRET # explicitly here, or left out to use system-configured
|
19
19
|
# :region: YOUR_AWS_S3_REGION # defaults.
|
20
20
|
# See https://aws.amazon.com/blogs/security/a-new-and-standardized-way-to-manage-credentials-in-the-aws-sdks/
|
21
|
-
# sky_drive:
|
22
|
-
# :client_id: YOUR_MS_LIVE_CONNECT_CLIENT_ID
|
23
|
-
# :client_secret: YOUR_MS_LIVE_CONNECT_CLIENT_SECRET
|
data/spec/spec_helper.rb
CHANGED
@@ -60,10 +60,6 @@ module BrowserConfigHelper
|
|
60
60
|
client_id: 'GoogleClientId',
|
61
61
|
client_secret: 'GoogleClientSecret'
|
62
62
|
},
|
63
|
-
'sky_drive' => {
|
64
|
-
client_id: 'SkyDriveClientId',
|
65
|
-
client_secret: 'SkyDriveClientSecret'
|
66
|
-
},
|
67
63
|
's3' => {
|
68
64
|
app_key: 'S3AppKey',
|
69
65
|
app_secret: 'S3AppSecret',
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<div class="
|
1
|
+
<div class="jumbotron">
|
2
2
|
<h1>Welcome!</h1>
|
3
3
|
|
4
4
|
<p>Please click the button below to start pickin' files!</p>
|
@@ -19,4 +19,4 @@
|
|
19
19
|
.cancel(function() { window.alert('Canceled!') });
|
20
20
|
});
|
21
21
|
</script>
|
22
|
-
</div>
|
22
|
+
</div>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: browse-everything
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carolyn Cole
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date: 2017-
|
16
|
+
date: 2017-10-11 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: rails
|
@@ -71,20 +71,6 @@ dependencies:
|
|
71
71
|
- - ">="
|
72
72
|
- !ruby/object:Gem::Version
|
73
73
|
version: 1.6.2
|
74
|
-
- !ruby/object:Gem::Dependency
|
75
|
-
name: skydrive
|
76
|
-
requirement: !ruby/object:Gem::Requirement
|
77
|
-
requirements:
|
78
|
-
- - ">="
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
version: '0'
|
81
|
-
type: :runtime
|
82
|
-
prerelease: false
|
83
|
-
version_requirements: !ruby/object:Gem::Requirement
|
84
|
-
requirements:
|
85
|
-
- - ">="
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
version: '0'
|
88
74
|
- !ruby/object:Gem::Dependency
|
89
75
|
name: ruby-box
|
90
76
|
requirement: !ruby/object:Gem::Requirement
|
@@ -117,16 +103,16 @@ dependencies:
|
|
117
103
|
name: bootstrap-sass
|
118
104
|
requirement: !ruby/object:Gem::Requirement
|
119
105
|
requirements:
|
120
|
-
- - "
|
106
|
+
- - "~>"
|
121
107
|
- !ruby/object:Gem::Version
|
122
|
-
version: '
|
108
|
+
version: '3.2'
|
123
109
|
type: :runtime
|
124
110
|
prerelease: false
|
125
111
|
version_requirements: !ruby/object:Gem::Requirement
|
126
112
|
requirements:
|
127
|
-
- - "
|
113
|
+
- - "~>"
|
128
114
|
- !ruby/object:Gem::Version
|
129
|
-
version: '
|
115
|
+
version: '3.2'
|
130
116
|
- !ruby/object:Gem::Dependency
|
131
117
|
name: font-awesome-rails
|
132
118
|
requirement: !ruby/object:Gem::Requirement
|
@@ -184,7 +170,7 @@ dependencies:
|
|
184
170
|
- !ruby/object:Gem::Version
|
185
171
|
version: '0'
|
186
172
|
- !ruby/object:Gem::Dependency
|
187
|
-
name: aws-sdk
|
173
|
+
name: aws-sdk-s3
|
188
174
|
requirement: !ruby/object:Gem::Requirement
|
189
175
|
requirements:
|
190
176
|
- - ">="
|
@@ -479,8 +465,8 @@ files:
|
|
479
465
|
- app/assets/stylesheets/browse_everything/_browse_everything.scss
|
480
466
|
- app/assets/stylesheets/jquery.treetable.theme.browse.css
|
481
467
|
- app/controllers/browse_everything_controller.rb
|
482
|
-
- app/helpers/bootstrap_version_helper.rb
|
483
468
|
- app/helpers/browse_everything_helper.rb
|
469
|
+
- app/helpers/font_awesome_version_helper.rb
|
484
470
|
- app/views/browse_everything/_auth.html.erb
|
485
471
|
- app/views/browse_everything/_file.html.erb
|
486
472
|
- app/views/browse_everything/_files.html.erb
|
@@ -502,7 +488,6 @@ files:
|
|
502
488
|
- lib/browse_everything/driver/file_system.rb
|
503
489
|
- lib/browse_everything/driver/google_drive.rb
|
504
490
|
- lib/browse_everything/driver/s3.rb
|
505
|
-
- lib/browse_everything/driver/sky_drive.rb
|
506
491
|
- lib/browse_everything/engine.rb
|
507
492
|
- lib/browse_everything/file_entry.rb
|
508
493
|
- lib/browse_everything/retriever.rb
|
@@ -544,7 +529,6 @@ files:
|
|
544
529
|
- spec/unit/file_system_spec.rb
|
545
530
|
- spec/unit/retriever_spec.rb
|
546
531
|
- spec/unit/s3_spec.rb
|
547
|
-
- spec/unit/sky_drive_spec.rb
|
548
532
|
- spec/views/browse_everything/_file.html.erb_spec.rb
|
549
533
|
- tasks/ci.rake
|
550
534
|
- vendor/assets/javascripts/jquery.treetable.js
|
@@ -570,7 +554,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
570
554
|
version: '0'
|
571
555
|
requirements: []
|
572
556
|
rubyforge_project:
|
573
|
-
rubygems_version: 2.
|
557
|
+
rubygems_version: 2.6.13
|
574
558
|
signing_key:
|
575
559
|
specification_version: 4
|
576
560
|
summary: AJAX/Rails engine file browser for cloud storage services
|
@@ -607,5 +591,4 @@ test_files:
|
|
607
591
|
- spec/unit/file_system_spec.rb
|
608
592
|
- spec/unit/retriever_spec.rb
|
609
593
|
- spec/unit/s3_spec.rb
|
610
|
-
- spec/unit/sky_drive_spec.rb
|
611
594
|
- spec/views/browse_everything/_file.html.erb_spec.rb
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module BootstrapVersionHelper
|
2
|
-
def bootstrap_three?
|
3
|
-
Bundler.environment.specs['bootstrap-sass'].first.version >= Gem::Version.new('3')
|
4
|
-
end
|
5
|
-
|
6
|
-
def bs2(if2)
|
7
|
-
bs2or3(if2, '')
|
8
|
-
end
|
9
|
-
|
10
|
-
def bs3(if3)
|
11
|
-
bs2or3('', if3)
|
12
|
-
end
|
13
|
-
|
14
|
-
def bs2or3(if2, if3)
|
15
|
-
bootstrap_three? ? if3 : if2
|
16
|
-
end
|
17
|
-
|
18
|
-
def font_awesome_four?
|
19
|
-
Bundler.environment.specs['font-awesome-rails'].first.version >= Gem::Version.new('4')
|
20
|
-
end
|
21
|
-
|
22
|
-
def fa3(if3)
|
23
|
-
fa3or4(if3, '')
|
24
|
-
end
|
25
|
-
|
26
|
-
def fa4(if4)
|
27
|
-
fa3or4('', if4)
|
28
|
-
end
|
29
|
-
|
30
|
-
def fa3or4(if3, if4)
|
31
|
-
font_awesome_four? ? if4 : if3
|
32
|
-
end
|
33
|
-
end
|
@@ -1,125 +0,0 @@
|
|
1
|
-
module BrowseEverything
|
2
|
-
module Driver
|
3
|
-
class SkyDrive < Base
|
4
|
-
require 'skydrive'
|
5
|
-
|
6
|
-
def icon
|
7
|
-
'windows'
|
8
|
-
end
|
9
|
-
|
10
|
-
def container_items
|
11
|
-
%w(folder album)
|
12
|
-
end
|
13
|
-
|
14
|
-
def validate_config
|
15
|
-
unless config[:client_id]
|
16
|
-
raise BrowseEverything::InitializationError, 'SkyDrive driver requires a :client_id argument'
|
17
|
-
end
|
18
|
-
unless config[:client_secret]
|
19
|
-
raise BrowseEverything::InitializationError, 'SkyDrive driver requires a :client_secret argument'
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def contents(path = '')
|
24
|
-
result = []
|
25
|
-
token_obj = rehydrate_token
|
26
|
-
client = Skydrive::Client.new(token_obj)
|
27
|
-
if path == ''
|
28
|
-
folder = client.my_skydrive
|
29
|
-
# TODO: do some loop to get down to my path
|
30
|
-
else
|
31
|
-
folder = client.get("/#{path.tr('-', '.')}/")
|
32
|
-
result += [parent_folder_details(folder)] if folder.parent_id
|
33
|
-
end
|
34
|
-
|
35
|
-
files = folder.files
|
36
|
-
files.items.each do |item|
|
37
|
-
if container_items.include? item.type
|
38
|
-
result += [folder_details(item)]
|
39
|
-
else
|
40
|
-
Rails.logger.warn("\n\nID #{item.id} #{item.type}")
|
41
|
-
result += [file_details(item)]
|
42
|
-
end
|
43
|
-
end
|
44
|
-
result
|
45
|
-
end
|
46
|
-
|
47
|
-
def link_for(path)
|
48
|
-
response = Skydrive::Client.new(rehydrate_token).get("/#{real_id(path)}/")
|
49
|
-
[response.download_link, { expires: 1.hour.from_now, file_name: File.basename(path), file_size: response.size.to_i }]
|
50
|
-
end
|
51
|
-
|
52
|
-
def file_details(file)
|
53
|
-
BrowseEverything::FileEntry.new(
|
54
|
-
safe_id(file.id),
|
55
|
-
"#{key}:#{safe_id(file.id)}",
|
56
|
-
file.name,
|
57
|
-
file.size,
|
58
|
-
file.updated_time,
|
59
|
-
false
|
60
|
-
)
|
61
|
-
end
|
62
|
-
|
63
|
-
def parent_folder_details(file)
|
64
|
-
BrowseEverything::FileEntry.new(
|
65
|
-
safe_id(file.parent_id),
|
66
|
-
"#{key}:#{safe_id(file.parent_id)}",
|
67
|
-
'..',
|
68
|
-
0,
|
69
|
-
Time.now,
|
70
|
-
true
|
71
|
-
)
|
72
|
-
end
|
73
|
-
|
74
|
-
def folder_details(folder)
|
75
|
-
BrowseEverything::FileEntry.new(
|
76
|
-
safe_id(folder.id),
|
77
|
-
"#{key}:#{safe_id(folder.id)}",
|
78
|
-
folder.name,
|
79
|
-
0,
|
80
|
-
folder.updated_time,
|
81
|
-
true,
|
82
|
-
'directory' # TODO: how are we getting mime type
|
83
|
-
)
|
84
|
-
end
|
85
|
-
|
86
|
-
def auth_link
|
87
|
-
oauth_client.authorize_url
|
88
|
-
end
|
89
|
-
|
90
|
-
def authorized?
|
91
|
-
return false unless @token.present?
|
92
|
-
!rehydrate_token.expired?
|
93
|
-
end
|
94
|
-
|
95
|
-
def connect(params, _data)
|
96
|
-
Rails.logger.warn "params #{params.inspect}"
|
97
|
-
token = oauth_client.get_access_token(params[:code])
|
98
|
-
@token = { token: token.token, expires_at: token.expires_at }
|
99
|
-
end
|
100
|
-
|
101
|
-
private
|
102
|
-
|
103
|
-
def oauth_client
|
104
|
-
Skydrive::Oauth::Client.new(config[:client_id], config[:client_secret], callback.to_s, 'wl.skydrive')
|
105
|
-
# TODO: error checking here
|
106
|
-
end
|
107
|
-
|
108
|
-
def rehydrate_token
|
109
|
-
return @rehydrate_token if @rehydrate_token
|
110
|
-
token_str = @token[:token]
|
111
|
-
token_expires = @token[:expires_at]
|
112
|
-
Rails.logger.warn "\n\n Rehydrating: #{@token} #{token_str} #{token_expires}"
|
113
|
-
@rehydrate_token = oauth_client.get_access_token_from_hash(token_str, expires_at: token_expires)
|
114
|
-
end
|
115
|
-
|
116
|
-
def safe_id(id)
|
117
|
-
id.tr('.', '-')
|
118
|
-
end
|
119
|
-
|
120
|
-
def real_id(id)
|
121
|
-
id.tr('-', '.')
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
data/spec/unit/sky_drive_spec.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
describe BrowseEverything::Driver::SkyDrive do
|
2
|
-
include BrowseEverything::Engine.routes.url_helpers
|
3
|
-
|
4
|
-
let(:provider_yml) do
|
5
|
-
{
|
6
|
-
client_id: 'CLIENTID', client_secret: 'CLIENTSECRET',
|
7
|
-
url_options: { port: '3000', protocol: 'http://', host: 'example.com' }
|
8
|
-
}
|
9
|
-
end
|
10
|
-
|
11
|
-
let(:redirect_url) { connector_response_url(provider_yml[:url_options]) }
|
12
|
-
|
13
|
-
let(:response_body) do
|
14
|
-
{
|
15
|
-
'client_id' => 'CLIENTID', 'client_secret' => 'CLIENTSECRET', 'code' => 'code',
|
16
|
-
'grant_type' => 'authorization_code', 'redirect_uri' => redirect_url.to_s
|
17
|
-
}
|
18
|
-
end
|
19
|
-
|
20
|
-
let(:driver) { described_class.new(provider_yml) }
|
21
|
-
|
22
|
-
subject { driver }
|
23
|
-
|
24
|
-
context 'when expiration is in the future' do
|
25
|
-
before do
|
26
|
-
stub_request(:post, 'https://login.live.com/oauth20_token.srf')
|
27
|
-
.with(body: response_body)
|
28
|
-
.to_return(status: 200,
|
29
|
-
body: {
|
30
|
-
'token_type' => 'bearer',
|
31
|
-
'expires_at' => (Time.now + (60 * 60 * 24)).to_i,
|
32
|
-
'scope' => 'wl.skydrive_update,wl.offline_access',
|
33
|
-
'access_token' => 'access_token',
|
34
|
-
'refresh_token' => 'refresh_token',
|
35
|
-
'authentication_token' => 'authentication_token'
|
36
|
-
}.to_json,
|
37
|
-
headers: {
|
38
|
-
'content-type' => 'application/json' })
|
39
|
-
driver.connect({ code: 'code' }, {})
|
40
|
-
end
|
41
|
-
|
42
|
-
it { is_expected.to be_authorized }
|
43
|
-
end
|
44
|
-
|
45
|
-
context 'when the session has expired' do
|
46
|
-
before do
|
47
|
-
stub_request(:post, 'https://login.live.com/oauth20_token.srf')
|
48
|
-
.with(body: response_body)
|
49
|
-
.to_return(status: 200,
|
50
|
-
body: {
|
51
|
-
'token_type' => 'bearer',
|
52
|
-
'expires_at' => (Time.now - (60 * 60 * 24)).to_i,
|
53
|
-
'scope' => 'wl.skydrive_update,wl.offline_access',
|
54
|
-
'access_token' => 'access_token',
|
55
|
-
'refresh_token' => 'refresh_token',
|
56
|
-
'authentication_token' => 'authentication_token'
|
57
|
-
}.to_json,
|
58
|
-
headers: {
|
59
|
-
'content-type' => 'application/json' })
|
60
|
-
driver.connect({ code: 'code' }, {})
|
61
|
-
end
|
62
|
-
|
63
|
-
it { is_expected.not_to be_authorized }
|
64
|
-
end
|
65
|
-
end
|