browse-everything 0.15.1 → 0.16.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 +5 -5
- data/.rubocop.yml +61 -9
- data/.rubocop_todo.yml +2 -15
- data/.travis.yml +19 -19
- data/CONTRIBUTING.md +6 -6
- data/Gemfile +12 -8
- data/README.md +30 -0
- data/Rakefile +2 -1
- data/app/assets/javascripts/browse_everything/behavior.js.coffee +5 -0
- data/app/controllers/browse_everything_controller.rb +75 -23
- data/app/helpers/browse_everything_helper.rb +2 -8
- data/app/helpers/font_awesome_version_helper.rb +9 -8
- data/app/services/browse_everything_session.rb +10 -0
- data/app/services/browse_everything_session/provider_session.rb +42 -0
- data/app/services/browser_factory.rb +25 -0
- data/app/views/browse_everything/_files.html.erb +56 -6
- data/browse-everything.gemspec +29 -25
- data/config/routes.rb +7 -2
- data/lib/browse-everything.rb +2 -0
- data/lib/browse_everything.rb +45 -12
- data/lib/browse_everything/auth/google/credentials.rb +28 -0
- data/lib/browse_everything/auth/google/request_parameters.rb +61 -0
- data/lib/browse_everything/browser.rb +11 -4
- data/lib/browse_everything/driver/authentication_factory.rb +22 -0
- data/lib/browse_everything/driver/base.rb +72 -19
- data/lib/browse_everything/driver/box.rb +46 -17
- data/lib/browse_everything/driver/dropbox.rb +36 -10
- data/lib/browse_everything/driver/file_system.rb +14 -26
- data/lib/browse_everything/driver/google_drive.rb +187 -54
- data/lib/browse_everything/driver/s3.rb +81 -75
- data/lib/browse_everything/engine.rb +3 -2
- data/lib/browse_everything/file_entry.rb +3 -1
- data/lib/browse_everything/retriever.rb +103 -31
- data/lib/browse_everything/version.rb +3 -1
- data/lib/generators/browse_everything/assets_generator.rb +3 -2
- data/lib/generators/browse_everything/config_generator.rb +11 -9
- data/lib/generators/browse_everything/install_generator.rb +3 -2
- data/lib/generators/browse_everything/templates/browse_everything_providers.yml.example +12 -11
- data/spec/controllers/browse_everything_controller_spec.rb +80 -0
- data/spec/features/select_files_spec.rb +13 -13
- data/spec/features/test_compiling_stylesheets_spec.rb +2 -0
- data/spec/fixtures/vcr_cassettes/google_drive.yml +331 -0
- data/spec/fixtures/vcr_cassettes/retriever.yml +93 -0
- data/spec/helper/browse_everything_controller_helper_spec.rb +21 -7
- data/spec/javascripts/jasmine_spec.rb +2 -0
- data/spec/javascripts/support/jasmine_helper.rb +1 -0
- data/spec/lib/browse_everything/auth/google/credentials_spec.rb +41 -0
- data/spec/{unit → lib/browse_everything}/browse_everything_helper_spec.rb +2 -0
- data/spec/lib/browse_everything/browser_spec.rb +109 -0
- data/spec/{unit → lib/browse_everything/driver}/base_spec.rb +5 -4
- data/spec/{unit → lib/browse_everything/driver}/box_spec.rb +20 -5
- data/spec/{unit → lib/browse_everything/driver}/dropbox_spec.rb +15 -18
- data/spec/{unit → lib/browse_everything/driver}/file_system_spec.rb +32 -26
- data/spec/lib/browse_everything/driver/google_drive_spec.rb +171 -0
- data/spec/{unit → lib/browse_everything/driver}/s3_spec.rb +38 -21
- data/spec/lib/browse_everything/driver_spec.rb +38 -0
- data/spec/{unit → lib/browse_everything}/file_entry_spec.rb +4 -1
- data/spec/lib/browse_everything/retriever_spec.rb +200 -0
- data/spec/lib/browse_everything_spec.rb +67 -0
- data/spec/services/browse_everything_session/provider_session_spec.rb +50 -0
- data/spec/services/browser_factory_spec.rb +40 -0
- data/spec/spec_helper.rb +39 -18
- data/spec/support/app/controllers/file_handler_controller.rb +4 -4
- data/spec/support/app/views/file_handler/main.html.erb +1 -1
- data/spec/support/capybara.rb +17 -0
- data/spec/support/rake.rb +3 -1
- data/spec/support/wait_for_ajax.rb +14 -0
- data/spec/test_app_templates/Gemfile.extra +1 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +10 -4
- data/spec/views/browse_everything/{_file.html.erb_spec.rb → _files.html.erb_spec.rb} +24 -18
- data/tasks/ci.rake +2 -0
- metadata +159 -107
- data/app/views/browse_everything/_file.html.erb +0 -52
- data/app/views/browse_everything/resolve.html.erb +0 -1
- data/spec/unit/browser_spec.rb +0 -76
- data/spec/unit/retriever_spec.rb +0 -109
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f010bc868532bf8d950f23deb2057dbf1ef250d3e3ea6a8350cdd4d5652406e5
|
4
|
+
data.tar.gz: 61b2d58f7cec21225de6e85392fb0603d768ac2859aa842763dfdd65d535a0a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c0580e42f8762c2f29e64860c5e7444f82f4c569e724edd9cac32e894506a62f9a192591e7dbf294f6747906170223f6cd4ff59c09e7a56c9c65ece3065cd275
|
7
|
+
data.tar.gz: 311ab92c994db67da4a8f4206edc00a6d50006dbd3a9492a06ea87002067b20121cce4e8afb3110a2f46aef84fbb43682b520d7a47f63709e0d82370ef755236
|
data/.rubocop.yml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
inherit_from: .rubocop_todo.yml
|
2
2
|
|
3
3
|
AllCops:
|
4
|
-
TargetRubyVersion: 2.
|
4
|
+
TargetRubyVersion: 2.4
|
5
5
|
DisplayCopNames: true
|
6
6
|
Include:
|
7
7
|
- '**/Rakefile'
|
@@ -10,35 +10,87 @@ AllCops:
|
|
10
10
|
|
11
11
|
Rails:
|
12
12
|
Enabled: true
|
13
|
+
Rails/FilePath:
|
14
|
+
Exclude:
|
15
|
+
- 'lib/generators/browse_everything/config_generator.rb'
|
13
16
|
|
14
17
|
Metrics/ClassLength:
|
15
18
|
Max: 130
|
16
|
-
|
17
|
-
|
19
|
+
Exclude:
|
20
|
+
- 'lib/browse_everything/driver/google_drive.rb'
|
18
21
|
Metrics/LineLength:
|
19
22
|
Max: 400
|
23
|
+
Metrics/BlockLength:
|
24
|
+
Exclude:
|
25
|
+
- 'spec/views/browse_everything/_files.html.erb_spec.rb'
|
26
|
+
- 'spec/unit/browse_everything_helper_spec.rb'
|
27
|
+
- 'spec/unit/browse_everything/retriever_spec.rb'
|
28
|
+
- 'spec/unit/browse_everything/file_entry_spec.rb'
|
29
|
+
- 'spec/unit/browse_everything/driver/s3_spec.rb'
|
30
|
+
- 'spec/unit/browse_everything/driver/google_drive_spec.rb'
|
31
|
+
- 'spec/unit/browse_everything/driver/file_system_spec.rb'
|
32
|
+
- 'spec/unit/browse_everything/driver/dropbox_spec.rb'
|
33
|
+
- 'spec/unit/browse_everything/driver/box_spec.rb'
|
34
|
+
- 'spec/unit/browse_everything/browser_spec.rb'
|
35
|
+
- 'spec/services/browser_factory_spec.rb'
|
36
|
+
- 'spec/services/browse_everything_session/provider_session_spec.rb'
|
37
|
+
- 'spec/helper/browse_everything_controller_helper_spec.rb'
|
38
|
+
- 'spec/controllers/browse_everything_controller_spec.rb'
|
39
|
+
- 'browse-everything.gemspec'
|
20
40
|
|
21
41
|
RSpec/NestedGroups:
|
22
42
|
Enabled: false
|
23
43
|
|
24
|
-
RSpec/FilePath:
|
25
|
-
Enabled: false
|
26
|
-
|
27
44
|
RSpec/LeadingSubject:
|
28
45
|
Enabled: false
|
29
46
|
|
30
47
|
RSpec/ExampleLength:
|
31
48
|
Exclude:
|
32
|
-
- 'spec/unit/
|
49
|
+
- 'spec/unit/browse_everything/driver/base_spec.rb'
|
50
|
+
- 'spec/unit/browse_everything/driver/box_spec.rb'
|
51
|
+
- 'spec/unit/browse_everything/driver/dropbox_spec.rb'
|
52
|
+
- 'spec/unit/browse_everything/driver/file_system_spec.rb'
|
53
|
+
- 'spec/unit/browse_everything/driver/google_drive_spec.rb'
|
54
|
+
- 'spec/unit/browse_everything/driver/s3_spec.rb'
|
33
55
|
- 'spec/features/select_files_spec.rb'
|
34
56
|
- 'spec/javascripts/jasmine_spec.rb'
|
35
57
|
|
36
58
|
RSpec/MultipleExpectations:
|
37
59
|
Exclude:
|
38
|
-
- 'spec/unit/
|
60
|
+
- 'spec/unit/browse_everything/driver/base_spec.rb'
|
61
|
+
- 'spec/unit/browse_everything/driver/box_spec.rb'
|
62
|
+
- 'spec/unit/browse_everything/driver/dropbox_spec.rb'
|
63
|
+
- 'spec/unit/browse_everything/driver/file_system_spec.rb'
|
64
|
+
- 'spec/unit/browse_everything/driver/google_drive_spec.rb'
|
65
|
+
- 'spec/unit/browse_everything/driver/s3_spec.rb'
|
66
|
+
- 'spec/features/**/*'
|
67
|
+
- 'spec/controllers/browse_everything_controller_spec.rb'
|
68
|
+
- 'spec/unit/browse_everything/browser_spec.rb'
|
39
69
|
|
40
70
|
Style/NumericLiterals:
|
41
71
|
MinDigits: 7
|
42
72
|
|
43
|
-
|
73
|
+
Layout/IndentationConsistency:
|
44
74
|
EnforcedStyle: rails
|
75
|
+
|
76
|
+
Naming/FileName:
|
77
|
+
Exclude:
|
78
|
+
- 'browse-everything.gemspec'
|
79
|
+
- 'Gemfile'
|
80
|
+
- 'lib/browse-everything.rb'
|
81
|
+
|
82
|
+
Style/MixinUsage:
|
83
|
+
Exclude:
|
84
|
+
- 'spec/unit/browse_everything/driver/s3_spec.rb'
|
85
|
+
- 'spec/unit/browse_everything/driver/google_drive_spec.rb'
|
86
|
+
- 'spec/unit/browse_everything/driver/file_system_spec.rb'
|
87
|
+
- 'spec/unit/browse_everything/driver/dropbox_spec.rb'
|
88
|
+
- 'spec/unit/browse_everything/driver/box_spec.rb'
|
89
|
+
- 'spec/unit/browse_everything/driver/base_spec.rb'
|
90
|
+
- 'spec/unit/browse_everything/browser_spec.rb'
|
91
|
+
- 'spec/services/browser_factory_spec.rb'
|
92
|
+
- 'spec/helper/browse_everything_controller_helper_spec.rb'
|
93
|
+
|
94
|
+
Bundler/DuplicatedGem:
|
95
|
+
Exclude:
|
96
|
+
- 'Gemfile'
|
data/.rubocop_todo.yml
CHANGED
@@ -36,13 +36,6 @@ RSpec/DescribeClass:
|
|
36
36
|
Exclude:
|
37
37
|
- 'spec/javascripts/jasmine_spec.rb'
|
38
38
|
|
39
|
-
# Offense count: 2
|
40
|
-
# Configuration parameters: Max.
|
41
|
-
RSpec/ExampleLength:
|
42
|
-
Exclude:
|
43
|
-
- 'spec/features/select_files_spec.rb'
|
44
|
-
- 'spec/javascripts/jasmine_spec.rb'
|
45
|
-
|
46
39
|
# Offense count: 2
|
47
40
|
RSpec/MultipleExpectations:
|
48
41
|
Max: 2
|
@@ -83,12 +76,6 @@ Style/ClassAndModuleChildren:
|
|
83
76
|
Style/Documentation:
|
84
77
|
Enabled: false
|
85
78
|
|
86
|
-
# Offense count: 1
|
87
|
-
# Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts.
|
88
|
-
Style/FileName:
|
89
|
-
Exclude:
|
90
|
-
- 'lib/browse-everything.rb'
|
91
|
-
|
92
79
|
# Offense count: 2
|
93
80
|
# Configuration parameters: MinBodyLength.
|
94
81
|
Style/GuardClause:
|
@@ -102,7 +89,7 @@ Style/MultilineBlockChain:
|
|
102
89
|
|
103
90
|
# Offense count: 1
|
104
91
|
# Cop supports --auto-correct.
|
105
|
-
|
92
|
+
Layout/MultilineBlockLayout:
|
106
93
|
Exclude:
|
107
94
|
- 'spec/unit/dropbox_spec.rb'
|
108
95
|
|
@@ -111,7 +98,7 @@ Style/MultilineBlockLayout:
|
|
111
98
|
# NamePrefix: is_, has_, have_
|
112
99
|
# NamePrefixBlacklist: is_, has_, have_
|
113
100
|
# NameWhitelist: is_a?
|
114
|
-
|
101
|
+
Naming/PredicateName:
|
115
102
|
Exclude:
|
116
103
|
- 'spec/**/*'
|
117
104
|
- 'app/helpers/browse_everything_helper.rb'
|
data/.travis.yml
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
language: ruby
|
2
2
|
sudo: false
|
3
|
+
dist: trusty
|
4
|
+
sudo: required
|
5
|
+
addons:
|
6
|
+
chrome: stable
|
3
7
|
cache:
|
4
8
|
bundler: true
|
5
|
-
|
6
|
-
- "travis_phantomjs"
|
9
|
+
|
7
10
|
before_install:
|
8
|
-
-
|
9
|
-
-
|
10
|
-
-
|
11
|
-
- "if [ $(phantomjs --version) != '2.1.1' ]; then rm -rf $PWD/travis_phantomjs; mkdir -p $PWD/travis_phantomjs; fi"
|
12
|
-
- "if [ $(phantomjs --version) != '2.1.1' ]; then wget https://assets.membergetmember.co/software/phantomjs-2.1.1-linux-x86_64.tar.bz2 -O $PWD/travis_phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2; fi"
|
13
|
-
- "if [ $(phantomjs --version) != '2.1.1' ]; then tar -xvf $PWD/travis_phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2 -C $PWD/travis_phantomjs; fi"
|
14
|
-
- "phantomjs --version"
|
11
|
+
- gem update --system # https://docs.travis-ci.com/user/languages/ruby/#Upgrading-RubyGems
|
12
|
+
- gem install bundler
|
13
|
+
- google-chrome-stable --headless --disable-gpu --remote-debugging-port=9222 http://localhost &
|
15
14
|
|
16
15
|
rvm:
|
17
|
-
-
|
18
|
-
|
19
|
-
-
|
16
|
+
- 2.5.1
|
17
|
+
- 2.4.4
|
18
|
+
- 2.3.7
|
19
|
+
|
20
20
|
env:
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
-
|
25
|
-
|
26
|
-
-
|
27
|
-
|
21
|
+
global:
|
22
|
+
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true
|
23
|
+
matrix:
|
24
|
+
- "RAILS_VERSION=5.2.0"
|
25
|
+
- "RAILS_VERSION=5.1.6"
|
26
|
+
- "RAILS_VERSION=5.0.7"
|
27
|
+
- "RAILS_VERSION=4.2.10"
|
data/CONTRIBUTING.md
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
# How to Contribute
|
2
2
|
|
3
|
-
We want your help to make
|
3
|
+
We want your help to make Samvera Community great.
|
4
4
|
There are a few guidelines that we need contributors to follow so that we can have a chance of keeping on top of things.
|
5
5
|
|
6
6
|
## Code of Conduct
|
7
7
|
|
8
|
-
The
|
8
|
+
The Samvera Community is dedicated to providing a welcoming and positive experience for all its
|
9
9
|
members, whether they are at a formal gathering, in a social setting, or taking part in activities
|
10
|
-
online. Please see our [Code of Conduct](https://wiki.duraspace.org/display/
|
10
|
+
online. Please see our [Code of Conduct](https://wiki.duraspace.org/display/samvera/Code+of+Conduct)
|
11
11
|
for more information.
|
12
12
|
|
13
|
-
##
|
13
|
+
## Samvera Community Intellectual Property Licensing and Ownership
|
14
14
|
|
15
15
|
All code contributors must have an Individual Contributor License Agreement (iCLA) on file with the Hydra Project Steering Group.
|
16
16
|
If the contributor works for an institution, the institution must have a Corporate Contributor License Agreement (cCLA) on file.
|
17
17
|
|
18
|
-
https://wiki.duraspace.org/display/
|
18
|
+
https://wiki.duraspace.org/display/samvera/Samvera+Community+Intellectual+Property+Licensing+and+Ownership
|
19
19
|
|
20
20
|
You should also add yourself to the `CONTRIBUTORS.md` file in the root of the project.
|
21
21
|
|
@@ -61,7 +61,7 @@ You should also add yourself to the `CONTRIBUTORS.md` file in the root of the pr
|
|
61
61
|
* This work greatly increases the usability of the code base and supports the on-ramping of new committers.
|
62
62
|
* We will all be understanding of one another's time constraints in this area.
|
63
63
|
* YARD examples:
|
64
|
-
* [
|
64
|
+
* [Hyrax::AdminSet](https://github.com/samvera/hyrax/blob/master/app/models/admin_set.rb)
|
65
65
|
* [ActiveTriples::LocalName::Minter](https://github.com/ActiveTriples/active_triples-local_name/blob/master/lib/active_triples/local_name/minter.rb)
|
66
66
|
* [Getting started with YARD](http://www.rubydoc.info/gems/yard/file/docs/GettingStarted.md)
|
67
67
|
|
data/Gemfile
CHANGED
@@ -1,8 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
source 'https://rubygems.org'
|
2
4
|
|
3
5
|
# Specify your gem's dependencies in browse_everything.gemspec
|
4
6
|
gemspec
|
5
7
|
|
8
|
+
group :development, :test do
|
9
|
+
gem 'pry-byebug' unless ENV['CI']
|
10
|
+
end
|
11
|
+
|
6
12
|
# BEGIN ENGINE_CART BLOCK
|
7
13
|
# engine_cart: 0.10.0
|
8
14
|
# engine_cart stanza: 0.10.0
|
@@ -28,17 +34,15 @@ else
|
|
28
34
|
end
|
29
35
|
|
30
36
|
case ENV['RAILS_VERSION']
|
31
|
-
when /^5
|
32
|
-
gem 'capybara', '~> 2.
|
33
|
-
when /^4
|
34
|
-
gem 'responders', '~> 2.0'
|
35
|
-
gem 'sass-rails', '>= 5.0'
|
37
|
+
when /^5\./
|
38
|
+
gem 'capybara', '~> 2.18.0'
|
39
|
+
when /^4\.2/
|
36
40
|
gem 'coffee-rails', '~> 4.1.0'
|
37
41
|
gem 'json', '~> 1.8'
|
42
|
+
gem 'responders', '~> 2.0'
|
43
|
+
gem 'sass-rails', '>= 5.0'
|
38
44
|
end
|
39
45
|
end
|
40
46
|
# END ENGINE_CART BLOCK
|
41
47
|
|
42
|
-
unless File.exist?(file)
|
43
|
-
eval_gemfile File.expand_path('spec/test_app_templates/Gemfile.extra', File.dirname(__FILE__))
|
44
|
-
end
|
48
|
+
eval_gemfile File.expand_path('spec/test_app_templates/Gemfile.extra', File.dirname(__FILE__)) unless File.exist?(file)
|
data/README.md
CHANGED
@@ -16,6 +16,20 @@ download the files.
|
|
16
16
|
|
17
17
|
**This gem does not depend on hydra-head**
|
18
18
|
|
19
|
+
## Supported Ruby Releases
|
20
|
+
Currently, the following releases of Ruby are supported:
|
21
|
+
- 2.5.1
|
22
|
+
- 2.4.4
|
23
|
+
- 2.3.7
|
24
|
+
- Please note that this is the last release in the 2.3.x series, and support is [scheduled to be withdrawn](https://www.ruby-lang.org/en/news/2018/03/28/ruby-2-3-7-released/). We would strongly recommend that one upgrades from 2.3.7 in response to this.
|
25
|
+
|
26
|
+
## Supported Rails Releases
|
27
|
+
- 5.2.0
|
28
|
+
- 5.1.6
|
29
|
+
- 5.0.7
|
30
|
+
- 4.2.10
|
31
|
+
- The supported Rail releases follow those specified by [the security policy of the Rails Community](https://rubyonrails.org/security/). As is the case with the supported Ruby releases, it is recommended that one upgrades from any Rails release no longer receiving security updates.
|
32
|
+
|
19
33
|
## Installation
|
20
34
|
|
21
35
|
Add this lines to your application's Gemfile:
|
@@ -52,6 +66,22 @@ In `app/assets/javascripts/application.js` include jquery and the BrowseEverythi
|
|
52
66
|
//= require browse_everything
|
53
67
|
```
|
54
68
|
|
69
|
+
## Testing
|
70
|
+
This is a Rails Engine which is tested using the [engine_cart](https://github.com/cbeer/engine_cart) Gem. Test suites may be executed with the following invocation:
|
71
|
+
|
72
|
+
```bash
|
73
|
+
bundle exec rake
|
74
|
+
```
|
75
|
+
|
76
|
+
### Testing Problems
|
77
|
+
Should you attempt to execute the test suite and encounter the following error:
|
78
|
+
```bash
|
79
|
+
Your Ruby version is 2.x.x, but your Gemfile specified 2.y.z
|
80
|
+
```
|
81
|
+
...then you must clean the internal test app generated by `engine_cart` with the following:
|
82
|
+
```bash
|
83
|
+
bundle exec rake engine_cart:clean
|
84
|
+
```
|
55
85
|
|
56
86
|
## Usage
|
57
87
|
|
data/Rakefile
CHANGED
@@ -323,6 +323,11 @@ $ ->
|
|
323
323
|
|
324
324
|
auto_toggle = ->
|
325
325
|
triggers = $('*[data-toggle=browse-everything]')
|
326
|
+
if Rails?
|
327
|
+
$.ajaxSetup({
|
328
|
+
headers: { 'X-CSRF-TOKEN': (Rails || $.rails).csrfToken() || '' }
|
329
|
+
});
|
330
|
+
|
326
331
|
triggers.each () ->
|
327
332
|
ctx = $(this).data('ev-state')
|
328
333
|
$(this).browseEverything($(this).data()) unless ctx?
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require File.expand_path('../helpers/browse_everything_helper', __dir__)
|
2
4
|
|
3
5
|
class BrowseEverythingController < ActionController::Base
|
4
6
|
layout 'browse_everything'
|
@@ -6,66 +8,115 @@ class BrowseEverythingController < ActionController::Base
|
|
6
8
|
|
7
9
|
protect_from_forgery with: :exception
|
8
10
|
|
9
|
-
after_action
|
11
|
+
after_action do
|
12
|
+
provider_session.token = provider.token unless provider.nil? || provider.token.blank?
|
13
|
+
end
|
14
|
+
|
15
|
+
def provider_contents
|
16
|
+
raise BrowseEverything::NotImplementedError, 'No provider supported' if provider.nil?
|
17
|
+
raise BrowseEverything::NotAuthorizedError, 'Not authorized' unless provider.authorized?
|
18
|
+
|
19
|
+
provider.contents(browse_path)
|
20
|
+
end
|
10
21
|
|
11
22
|
def index
|
12
23
|
render layout: !request.xhr?
|
13
24
|
end
|
14
25
|
|
26
|
+
# Either render the link to authorization or render the files
|
27
|
+
# provider#show method is invoked here
|
15
28
|
def show
|
16
|
-
render layout: !request.xhr?
|
29
|
+
render partial: 'files', layout: !request.xhr?
|
30
|
+
rescue StandardError => error
|
31
|
+
reset_provider_session!
|
32
|
+
|
33
|
+
# Should an error be raised, log the error and redirect the use to reauthenticate
|
34
|
+
logger.warn "Failed to retrieve the hosted files: #{error}"
|
35
|
+
render partial: 'auth', layout: !request.xhr?
|
17
36
|
end
|
18
37
|
|
38
|
+
# Action for the OAuth2 callback
|
39
|
+
# Authenticate against the Google API and store the token in the session
|
19
40
|
def auth
|
20
|
-
|
41
|
+
# params contains the access code with with the key :code
|
42
|
+
provider_session.token = provider.connect(params, provider_session.data)
|
21
43
|
end
|
22
44
|
|
23
45
|
def resolve
|
24
46
|
selected_files = params[:selected_files] || []
|
25
|
-
|
26
|
-
|
27
|
-
|
47
|
+
selected_links = selected_files.collect do |file|
|
48
|
+
provider_key_value, uri = file.split(/:/)
|
49
|
+
provider_key = provider_key_value.to_sym
|
50
|
+
(url, extra) = browser.providers[provider_key].link_for(uri)
|
28
51
|
result = { url: url }
|
29
52
|
result.merge!(extra) unless extra.nil?
|
30
53
|
result
|
31
54
|
end
|
55
|
+
|
32
56
|
respond_to do |format|
|
33
57
|
format.html { render layout: false }
|
34
|
-
format.json { render json:
|
58
|
+
format.json { render json: selected_links }
|
35
59
|
end
|
36
60
|
end
|
37
61
|
|
38
62
|
private
|
39
63
|
|
64
|
+
# Constructs or accesses an existing session manager Object
|
65
|
+
# @return [BrowseEverythingSession::ProviderSession] the session manager
|
66
|
+
def provider_session
|
67
|
+
BrowseEverythingSession::ProviderSession.new(session: session, name: provider_name)
|
68
|
+
end
|
69
|
+
|
70
|
+
# Clears all authentication tokens, codes, and other data from the Rails session
|
71
|
+
def reset_provider_session!
|
72
|
+
return unless @provider_session
|
73
|
+
@provider_session.token = nil
|
74
|
+
@provider_session.code = nil
|
75
|
+
@provider_session.data = nil
|
76
|
+
@provider_session = nil
|
77
|
+
end
|
78
|
+
|
79
|
+
# Generates the authentication link for a given provider service
|
80
|
+
# @return [String] the authentication link
|
40
81
|
def auth_link
|
41
82
|
@auth_link ||= if provider.present?
|
42
83
|
link, data = provider.auth_link
|
43
|
-
|
84
|
+
provider_session.data = data
|
44
85
|
link = "#{link}&state=#{provider.key}" unless link.to_s.include?('state')
|
45
86
|
link
|
46
|
-
end
|
87
|
+
end
|
47
88
|
end
|
48
89
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
p.token = session["#{p.key}_token"]
|
54
|
-
end
|
55
|
-
end
|
56
|
-
@browser
|
90
|
+
# Accesses the relative path for browsing from the Rails session
|
91
|
+
# @return [String]
|
92
|
+
def browse_path
|
93
|
+
params[:path] || ''
|
57
94
|
end
|
58
95
|
|
59
|
-
|
60
|
-
|
96
|
+
# Generate the provider name from the Rails session state value
|
97
|
+
# @return [String]
|
98
|
+
def provider_name_from_state
|
99
|
+
params[:state].to_s.split(/\|/).last
|
61
100
|
end
|
62
101
|
|
102
|
+
# Generates the name of the provider using Rails session values
|
103
|
+
# @return [String]
|
104
|
+
def provider_name
|
105
|
+
params[:provider] || provider_name_from_state || browser.providers.each_key.to_a.first
|
106
|
+
end
|
107
|
+
|
108
|
+
# Retrieve the Driver for each request
|
109
|
+
# @return [BrowseEverything::Driver::Base]
|
63
110
|
def provider
|
64
|
-
|
111
|
+
browser.providers[provider_name.to_sym] || browser.first_provider
|
65
112
|
end
|
66
113
|
|
67
|
-
|
68
|
-
|
114
|
+
# Constructs a browser manager Object
|
115
|
+
# Browser state cannot persist between requests to the Controller
|
116
|
+
# Hence, a Browser must be reinstantiated for each request using the state provided in the Rails session
|
117
|
+
# @return [BrowseEverything::Browser]
|
118
|
+
def browser
|
119
|
+
BrowserFactory.build(session: session, url_options: url_options)
|
69
120
|
end
|
70
121
|
|
71
122
|
helper_method :auth_link
|
@@ -73,4 +124,5 @@ class BrowseEverythingController < ActionController::Base
|
|
73
124
|
helper_method :browse_path
|
74
125
|
helper_method :provider
|
75
126
|
helper_method :provider_name
|
127
|
+
helper_method :provider_contents
|
76
128
|
end
|