browse-everything 0.12.0 → 0.13.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/.engine_cart.yml +1 -0
- data/.rubocop.yml +6 -0
- data/.rubocop_todo.yml +8 -32
- data/README.md +2 -1
- data/app/assets/javascripts/browse_everything/behavior.js.coffee +20 -10
- data/app/assets/stylesheets/browse_everything/_browse_everything.scss +15 -16
- data/app/controllers/browse_everything_controller.rb +29 -29
- data/app/views/browse_everything/_files.html.erb +0 -5
- data/app/views/browse_everything/index.html.erb +3 -0
- data/browse-everything.gemspec +1 -1
- data/lib/browse_everything/browser.rb +1 -1
- data/lib/browse_everything/driver/base.rb +8 -8
- data/lib/browse_everything/driver/box.rb +81 -72
- data/lib/browse_everything/driver/dropbox.rb +35 -29
- data/lib/browse_everything/driver/file_system.rb +50 -30
- data/lib/browse_everything/driver/google_drive.rb +15 -15
- data/lib/browse_everything/driver/s3.rb +82 -27
- data/lib/browse_everything/driver/sky_drive.rb +17 -17
- data/lib/browse_everything/version.rb +1 -1
- data/lib/generators/browse_everything/templates/browse_everything_providers.yml.example +5 -4
- data/spec/fixtures/vcr_cassettes/box.yml +498 -0
- data/spec/unit/box_spec.rb +168 -0
- data/spec/unit/s3_spec.rb +62 -5
- metadata +10 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 517bf8920fbeb90a14f3f2e1d3c33f73d68c0578
|
4
|
+
data.tar.gz: 3abe80da837a6adafc95893c3a9a0cbba89bdd1c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: efdb8266d087e847282d2822a49a4363e33c5e070f65df84a16156077df9fd8704a0c1289ec7ece5df5244fec5a08f18c0a7fa64fc2daf78a9cef21f9bbdd6e5
|
7
|
+
data.tar.gz: 1b5a31483ea411070cc6fcbeb790ada41cc34afd102f5df8d28561e70e7f8a05fa5f7df98608adc51c543dcd12b7ee9bd6c32c4c8b4f64249db0354fc6d05f87
|
data/.engine_cart.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rails_options: "<%= '--skip-listen' if ENV.fetch('RAILS_VERSION', '') < '5.0' %>"
|
data/.rubocop.yml
CHANGED
@@ -11,6 +11,9 @@ AllCops:
|
|
11
11
|
Rails:
|
12
12
|
Enabled: true
|
13
13
|
|
14
|
+
Metrics/ClassLength:
|
15
|
+
Max: 130
|
16
|
+
|
14
17
|
# Configuration parameters: AllowURI, URISchemes.
|
15
18
|
Metrics/LineLength:
|
16
19
|
Max: 400
|
@@ -26,3 +29,6 @@ RSpec/LeadingSubject:
|
|
26
29
|
|
27
30
|
Style/NumericLiterals:
|
28
31
|
MinDigits: 7
|
32
|
+
|
33
|
+
Style/IndentationConsistency:
|
34
|
+
EnforcedStyle: rails
|
data/.rubocop_todo.yml
CHANGED
@@ -2,7 +2,7 @@ require: rubocop-rspec
|
|
2
2
|
|
3
3
|
# This configuration was generated by
|
4
4
|
# `rubocop --auto-gen-config`
|
5
|
-
# on 2017-
|
5
|
+
# on 2017-03-22 15:27:02 -0400 using RuboCop version 0.42.0.
|
6
6
|
# The point is for the user to remove these configuration records
|
7
7
|
# one by one as the offenses are removed from the code base.
|
8
8
|
# Note that changes in the inspected code, or installation of new
|
@@ -13,15 +13,15 @@ Lint/Loop:
|
|
13
13
|
Exclude:
|
14
14
|
- 'lib/browse_everything/driver/google_drive.rb'
|
15
15
|
|
16
|
-
# Offense count:
|
16
|
+
# Offense count: 6
|
17
17
|
Metrics/AbcSize:
|
18
|
-
Max:
|
18
|
+
Max: 31
|
19
19
|
|
20
|
-
# Offense count:
|
20
|
+
# Offense count: 2
|
21
21
|
Metrics/CyclomaticComplexity:
|
22
22
|
Max: 7
|
23
23
|
|
24
|
-
# Offense count:
|
24
|
+
# Offense count: 10
|
25
25
|
# Configuration parameters: CountComments.
|
26
26
|
Metrics/MethodLength:
|
27
27
|
Max: 26
|
@@ -31,10 +31,6 @@ Metrics/MethodLength:
|
|
31
31
|
Metrics/ParameterLists:
|
32
32
|
Max: 7
|
33
33
|
|
34
|
-
# Offense count: 1
|
35
|
-
Metrics/PerceivedComplexity:
|
36
|
-
Max: 9
|
37
|
-
|
38
34
|
# Offense count: 1
|
39
35
|
RSpec/DescribeClass:
|
40
36
|
Exclude:
|
@@ -62,13 +58,11 @@ Rails/OutputSafety:
|
|
62
58
|
Exclude:
|
63
59
|
- 'app/helpers/browse_everything_helper.rb'
|
64
60
|
|
65
|
-
# Offense count:
|
61
|
+
# Offense count: 11
|
66
62
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
67
63
|
# SupportedStyles: strict, flexible
|
68
64
|
Rails/TimeZone:
|
69
65
|
Exclude:
|
70
|
-
- 'lib/browse_everything/driver/box.rb'
|
71
|
-
- 'lib/browse_everything/driver/dropbox.rb'
|
72
66
|
- 'lib/browse_everything/driver/google_drive.rb'
|
73
67
|
- 'lib/browse_everything/driver/sky_drive.rb'
|
74
68
|
- 'lib/browse_everything/retriever.rb'
|
@@ -87,7 +81,7 @@ Style/ClassAndModuleChildren:
|
|
87
81
|
- 'lib/generators/browse_everything/config_generator.rb'
|
88
82
|
- 'lib/generators/browse_everything/install_generator.rb'
|
89
83
|
|
90
|
-
# Offense count:
|
84
|
+
# Offense count: 18
|
91
85
|
Style/Documentation:
|
92
86
|
Enabled: false
|
93
87
|
|
@@ -97,13 +91,10 @@ Style/FileName:
|
|
97
91
|
Exclude:
|
98
92
|
- 'lib/browse-everything.rb'
|
99
93
|
|
100
|
-
# Offense count:
|
94
|
+
# Offense count: 2
|
101
95
|
# Configuration parameters: MinBodyLength.
|
102
96
|
Style/GuardClause:
|
103
97
|
Exclude:
|
104
|
-
- 'lib/browse_everything/driver/box.rb'
|
105
|
-
- 'lib/browse_everything/driver/dropbox.rb'
|
106
|
-
- 'lib/browse_everything/driver/file_system.rb'
|
107
98
|
- 'lib/browse_everything/driver/google_drive.rb'
|
108
99
|
- 'lib/browse_everything/driver/sky_drive.rb'
|
109
100
|
|
@@ -143,18 +134,3 @@ Style/PredicateName:
|
|
143
134
|
Exclude:
|
144
135
|
- 'spec/**/*'
|
145
136
|
- 'app/helpers/browse_everything_helper.rb'
|
146
|
-
|
147
|
-
# Offense count: 2
|
148
|
-
# Cop supports --auto-correct.
|
149
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles, AllowInnerSlashes.
|
150
|
-
# SupportedStyles: slashes, percent_r, mixed
|
151
|
-
Style/RegexpLiteral:
|
152
|
-
Exclude:
|
153
|
-
- 'lib/browse_everything/driver/box.rb'
|
154
|
-
- 'lib/browse_everything/driver/dropbox.rb'
|
155
|
-
|
156
|
-
# Offense count: 1
|
157
|
-
# Cop supports --auto-correct.
|
158
|
-
Style/RescueModifier:
|
159
|
-
Exclude:
|
160
|
-
- 'lib/browse_everything/driver/file_system.rb'
|
data/README.md
CHANGED
@@ -7,7 +7,8 @@
|
|
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
|
[Skydrive](https://skydrive.live.com/), [Google Drive](http://drive.google.com),
|
10
|
-
[Box](http://www.box.com),
|
10
|
+
[Box](http://www.box.com), [Amazon S3](https://aws.amazon.com/s3/),
|
11
|
+
and a server-side directory share.
|
11
12
|
|
12
13
|
The gem uses [OAuth](http://oauth.net/) to connect to a user's account and
|
13
14
|
generate a list of single use urls that your application can then use to
|
@@ -118,8 +118,7 @@ $ ->
|
|
118
118
|
table.treetable("unloadBranch", node)
|
119
119
|
onNodeExpand: ->
|
120
120
|
node = this
|
121
|
-
|
122
|
-
$("html").addClass("wait")
|
121
|
+
startWait()
|
123
122
|
size = $(node.row).find('td.ev-file-size').text().trim()
|
124
123
|
start = 1
|
125
124
|
increment = 1
|
@@ -173,17 +172,28 @@ $ ->
|
|
173
172
|
selectAll(rows)
|
174
173
|
.always ->
|
175
174
|
clearInterval progressIntervalID
|
176
|
-
|
177
|
-
$("html").removeClass("wait")
|
175
|
+
stopWait()
|
178
176
|
|
179
177
|
setProgress = (done)->
|
180
|
-
$('
|
181
|
-
$('#loading_progress').html(done+'% complete')
|
182
|
-
$('#loading_progress').attr('aria-valuenow', done)
|
178
|
+
$('.loading-text').text(done+'% complete')
|
183
179
|
|
184
180
|
refreshFiles = ->
|
185
181
|
$('.ev-providers select').change()
|
186
182
|
|
183
|
+
startWait = ->
|
184
|
+
$('.loading-progress').removeClass("hidden")
|
185
|
+
$('body').css('cursor','wait')
|
186
|
+
$("html").addClass("wait")
|
187
|
+
$(".ev-browser").addClass("loading")
|
188
|
+
$('.ev-submit').attr('disabled', true)
|
189
|
+
|
190
|
+
stopWait = ->
|
191
|
+
$('.loading-progress').addClass("hidden")
|
192
|
+
$('body').css('cursor','default')
|
193
|
+
$("html").removeClass("wait")
|
194
|
+
$(".ev-browser").removeClass("loading")
|
195
|
+
$('.ev-submit').attr('disabled', false)
|
196
|
+
|
187
197
|
$(window).on('resize', -> sizeColumns($('table#file-list')))
|
188
198
|
|
189
199
|
$.fn.browseEverything = (options) ->
|
@@ -224,7 +234,7 @@ $ ->
|
|
224
234
|
$(document).on 'click', 'button.ev-submit', (event) ->
|
225
235
|
event.preventDefault()
|
226
236
|
$(this).button('loading')
|
227
|
-
|
237
|
+
startWait()
|
228
238
|
main_form = $(this).closest('form')
|
229
239
|
resolver_url = main_form.data('resolver')
|
230
240
|
ctx = dialog.data('ev-state')
|
@@ -255,7 +265,7 @@ $ ->
|
|
255
265
|
|
256
266
|
$(document).on 'change', '.ev-providers select', (event) ->
|
257
267
|
event.preventDefault()
|
258
|
-
|
268
|
+
startWait()
|
259
269
|
$.ajax
|
260
270
|
url: $(this).val(),
|
261
271
|
data:
|
@@ -272,7 +282,7 @@ $ ->
|
|
272
282
|
else
|
273
283
|
$('.ev-files').html(xhr.responseText)
|
274
284
|
.always ->
|
275
|
-
|
285
|
+
stopWait()
|
276
286
|
|
277
287
|
$(document).on 'click', '.ev-providers a', (event) ->
|
278
288
|
$('.ev-providers li').removeClass('ev-selected')
|
@@ -73,22 +73,6 @@
|
|
73
73
|
padding: 4px;
|
74
74
|
}
|
75
75
|
|
76
|
-
.fa3 .ev-selected .indenter {
|
77
|
-
font-family: FontAwesome;
|
78
|
-
font-weight: normal;
|
79
|
-
font-style: normal;
|
80
|
-
text-decoration: inherit;
|
81
|
-
-webkit-font-smoothing: antialiased;
|
82
|
-
*margin-right: .3em;
|
83
|
-
@extend .icon-check !optional;
|
84
|
-
}
|
85
|
-
|
86
|
-
.fa4 .ev-selected .indenter {
|
87
|
-
background-color: inherit;
|
88
|
-
@extend .fa;
|
89
|
-
@extend .fa-check !optional;
|
90
|
-
}
|
91
|
-
|
92
76
|
.ev-files {
|
93
77
|
table {
|
94
78
|
width: 100%;
|
@@ -114,4 +98,19 @@
|
|
114
98
|
select { width: 30% }
|
115
99
|
}
|
116
100
|
|
101
|
+
.loading {
|
102
|
+
pointer-events: none;
|
103
|
+
opacity: 0.2;
|
104
|
+
}
|
105
|
+
|
106
|
+
.loading-progress {
|
107
|
+
position: absolute;
|
108
|
+
top: 8em;
|
109
|
+
left: 4em;
|
110
|
+
}
|
111
|
+
|
112
|
+
// Massively large text instead of something more artistic
|
113
|
+
.loading-text {
|
114
|
+
font-size: 4em;
|
115
|
+
}
|
117
116
|
}
|
@@ -37,40 +37,40 @@ class BrowseEverythingController < ActionController::Base
|
|
37
37
|
|
38
38
|
private
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
40
|
+
def auth_link
|
41
|
+
@auth_link ||= if provider.present?
|
42
|
+
link, data = provider.auth_link
|
43
|
+
session["#{provider_name}_data"] = data
|
44
|
+
link = "#{link}&state=#{provider.key}" unless link.to_s.include?('state')
|
45
|
+
link
|
46
|
+
end # else nil, implicitly
|
47
|
+
end
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
49
|
+
def browser
|
50
|
+
if @browser.nil?
|
51
|
+
@browser = BrowseEverything::Browser.new(url_options)
|
52
|
+
@browser.providers.values.each do |p|
|
53
|
+
p.token = session["#{p.key}_token"]
|
54
|
+
end
|
54
55
|
end
|
56
|
+
@browser
|
55
57
|
end
|
56
|
-
@browser
|
57
|
-
end
|
58
58
|
|
59
|
-
|
60
|
-
|
61
|
-
|
59
|
+
def browse_path
|
60
|
+
@path ||= params[:path] || ''
|
61
|
+
end
|
62
62
|
|
63
|
-
|
64
|
-
|
65
|
-
|
63
|
+
def provider
|
64
|
+
@provider ||= browser.providers[provider_name]
|
65
|
+
end
|
66
66
|
|
67
|
-
|
68
|
-
|
69
|
-
|
67
|
+
def provider_name
|
68
|
+
@provider_name ||= params[:provider] || params[:state].to_s.split(/\|/).last
|
69
|
+
end
|
70
70
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
71
|
+
helper_method :auth_link
|
72
|
+
helper_method :browser
|
73
|
+
helper_method :browse_path
|
74
|
+
helper_method :provider
|
75
|
+
helper_method :provider_name
|
76
76
|
end
|
@@ -1,8 +1,3 @@
|
|
1
|
-
<div class="progress" id="loading_progress" aria-live="polite">
|
2
|
-
<div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 100%;">
|
3
|
-
100% Complete
|
4
|
-
</div>
|
5
|
-
</div>
|
6
1
|
<table id="file-list" role="grid" tabindex="-1" title="Choose files to upload from the table below" aria-live="polite">
|
7
2
|
<thead>
|
8
3
|
<tr role="row" tabindex="-1">
|
@@ -6,6 +6,9 @@
|
|
6
6
|
</div>
|
7
7
|
</div>
|
8
8
|
<div class="modal-body ev-body" tabindex="-1">
|
9
|
+
<div class="loading-progress" aria-live="assertive">
|
10
|
+
<span class="loading-text">Loading...</span>
|
11
|
+
</div>
|
9
12
|
<div class="ev-browser row<%=bs2('-fluid')%>" aria-live="polite">
|
10
13
|
<div class="<%=fa3or4('fa3','fa4')%> <%=bs2or3('bs2 span','bs3 col-xs-')%>12 ev-files list">
|
11
14
|
<%= render :partial => 'files' if provider.present? %>
|
data/browse-everything.gemspec
CHANGED
@@ -44,7 +44,7 @@ Gem::Specification.new do |spec|
|
|
44
44
|
spec.add_development_dependency 'vcr'
|
45
45
|
spec.add_development_dependency 'sqlite3'
|
46
46
|
spec.add_development_dependency 'factory_girl_rails'
|
47
|
-
spec.add_development_dependency 'engine_cart', '~> 0
|
47
|
+
spec.add_development_dependency 'engine_cart', '~> 1.0'
|
48
48
|
spec.add_development_dependency 'capybara'
|
49
49
|
spec.add_development_dependency 'jasmine', '~> 2.3'
|
50
50
|
spec.add_development_dependency 'coveralls'
|
@@ -16,7 +16,7 @@ module BrowseEverything
|
|
16
16
|
begin
|
17
17
|
driver_klass = BrowseEverything::Driver.const_get((config[:driver] || driver.to_s).camelize.to_sym)
|
18
18
|
@providers[driver] = driver_klass.new(config.merge(url_options: url_options))
|
19
|
-
rescue
|
19
|
+
rescue NameError
|
20
20
|
Rails.logger.warn "Unknown provider: #{driver}"
|
21
21
|
end
|
22
22
|
end
|
@@ -53,15 +53,15 @@ module BrowseEverything
|
|
53
53
|
|
54
54
|
private
|
55
55
|
|
56
|
-
|
57
|
-
|
58
|
-
|
56
|
+
def callback
|
57
|
+
connector_response_url(callback_options)
|
58
|
+
end
|
59
59
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
60
|
+
# remove the script_name parameter from the url_options since that is causing issues
|
61
|
+
# with the route not containing the engine path in rails 4.2.0
|
62
|
+
def callback_options
|
63
|
+
config[:url_options].reject { |k, _v| k == :script_name }
|
64
|
+
end
|
65
65
|
end
|
66
66
|
end
|
67
67
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
module BrowseEverything
|
2
2
|
module Driver
|
3
|
+
# Driver for accessing the Box API (https://www.box.com/home)
|
3
4
|
class Box < Base
|
4
5
|
require 'ruby-box'
|
5
6
|
|
@@ -10,104 +11,112 @@ module BrowseEverything
|
|
10
11
|
end
|
11
12
|
|
12
13
|
def validate_config
|
13
|
-
|
14
|
-
|
15
|
-
end
|
16
|
-
unless config[:client_secret]
|
17
|
-
raise BrowseEverything::InitializationError, 'Box driver requires a :client_secret argument'
|
18
|
-
end
|
14
|
+
return if config[:client_id] && config[:client_secret]
|
15
|
+
raise BrowseEverything::InitializationError, 'Box driver requires both :client_id and :client_secret argument'
|
19
16
|
end
|
20
17
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
)
|
18
|
+
# @param [String] id of the file or folder in Box
|
19
|
+
# @return [Array<RubyBox::File>]
|
20
|
+
def contents(id = '')
|
21
|
+
if id.empty?
|
22
|
+
folder = box_client.root_folder
|
23
|
+
results = []
|
24
|
+
else
|
25
|
+
folder = box_client.folder_by_id(id)
|
26
|
+
results = [parent_directory(folder)]
|
29
27
|
end
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
File.join(path, f.name), # id here
|
34
|
-
"#{key}:#{File.join(path, f.name)}", # single use link
|
35
|
-
f.name,
|
36
|
-
f.size,
|
37
|
-
f.created_at,
|
38
|
-
f.type == 'folder'
|
39
|
-
)
|
28
|
+
|
29
|
+
folder.items(ITEM_LIMIT, 0, %w(name size created_at)).collect do |f|
|
30
|
+
results << directory_entry(f)
|
40
31
|
end
|
41
|
-
|
32
|
+
results
|
42
33
|
end
|
43
34
|
|
44
|
-
|
45
|
-
|
35
|
+
# @param [String] id of the file in Box
|
36
|
+
# @return [Array<String, Hash>]
|
37
|
+
def link_for(id)
|
38
|
+
file = box_client.file_by_id(id)
|
46
39
|
download_url = file.download_url
|
47
40
|
auth_header = { 'Authorization' => "Bearer #{@token}" }
|
48
41
|
extras = { auth_header: auth_header, expires: 1.hour.from_now, file_name: file.name, file_size: file.size.to_i }
|
49
42
|
[download_url, extras]
|
50
43
|
end
|
51
44
|
|
45
|
+
# @return [String]
|
46
|
+
# Authorization url that is used to request the initial access code from Box
|
52
47
|
def auth_link
|
53
|
-
|
48
|
+
box_session.authorize_url(callback.to_s)
|
54
49
|
end
|
55
50
|
|
51
|
+
# @return [Boolean]
|
56
52
|
def authorized?
|
57
|
-
|
53
|
+
box_token.present? && box_refresh_token.present? && !token_expired?
|
58
54
|
end
|
59
55
|
|
56
|
+
# @return [Hash]
|
57
|
+
# Gets the appropriate tokens from Box using the access code returned from :auth_link:
|
60
58
|
def connect(params, _data)
|
61
|
-
|
62
|
-
@token = { 'token' => access_token.token, 'refresh_token' => access_token.refresh_token }
|
59
|
+
register_access_token(box_session.get_access_token(params[:code]))
|
63
60
|
end
|
64
61
|
|
65
62
|
private
|
66
63
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
end
|
64
|
+
def token_expired?
|
65
|
+
return true if expiration_time.nil?
|
66
|
+
Time.now.to_i > expiration_time
|
67
|
+
end
|
72
68
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
result = new_session.get("#{RubyBox::API_URL}/users/me")
|
81
|
-
result['status'] != 200
|
82
|
-
rescue RubyBox::AuthError => e
|
83
|
-
Rails.logger.error("AuthError occured when checking token. Exception #{e.class.name} : #{e.message}. token as expired and need to refresh it")
|
84
|
-
return true
|
85
|
-
end
|
69
|
+
def box_client
|
70
|
+
if token_expired?
|
71
|
+
session = box_session(box_token)
|
72
|
+
register_access_token(session.refresh_token(box_refresh_token))
|
73
|
+
end
|
74
|
+
RubyBox::Client.new(box_session(box_token, box_refresh_token))
|
75
|
+
end
|
86
76
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
access_token: token
|
94
|
-
)
|
95
|
-
access_token = session.refresh_token(refresh_token)
|
96
|
-
@token = { 'token' => access_token.token, 'refresh_token' => access_token.refresh_token }
|
97
|
-
end
|
77
|
+
def box_session(token = nil, refresh_token = nil)
|
78
|
+
RubyBox::Session.new(client_id: config[:client_id],
|
79
|
+
client_secret: config[:client_secret],
|
80
|
+
access_token: token,
|
81
|
+
refresh_token: refresh_token)
|
82
|
+
end
|
98
83
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
84
|
+
# If there is an active session, {@token} will be set by {BrowseEverythingController} using data stored in the
|
85
|
+
# session. However, if there is no prior session, or the token has expired, we reset it here using # a new
|
86
|
+
# access_token received from {#box_session}.
|
87
|
+
#
|
88
|
+
# @param [OAuth2::AccessToken] access_token
|
89
|
+
def register_access_token(access_token)
|
90
|
+
@token = {
|
91
|
+
'token' => access_token.token,
|
92
|
+
'refresh_token' => access_token.refresh_token,
|
93
|
+
'expires_at' => access_token.expires_at
|
94
|
+
}
|
95
|
+
end
|
96
|
+
|
97
|
+
def box_token
|
98
|
+
return unless @token
|
99
|
+
@token.fetch('token', nil)
|
100
|
+
end
|
101
|
+
|
102
|
+
def box_refresh_token
|
103
|
+
return unless @token
|
104
|
+
@token.fetch('refresh_token', nil)
|
105
|
+
end
|
106
|
+
|
107
|
+
def expiration_time
|
108
|
+
return unless @token
|
109
|
+
@token.fetch('expires_at', nil).to_i
|
110
|
+
end
|
111
|
+
|
112
|
+
# Used to represent the ".." parent directory of the folder
|
113
|
+
def parent_directory(folder)
|
114
|
+
BrowseEverything::FileEntry.new(Pathname(folder.name).join('..'), '', '..', 0, Time.current, true)
|
115
|
+
end
|
116
|
+
|
117
|
+
def directory_entry(f)
|
118
|
+
BrowseEverything::FileEntry.new(f.id, "#{key}:#{f.id}", f.name, f.size, f.created_at, f.type == 'folder')
|
119
|
+
end
|
111
120
|
end
|
112
121
|
end
|
113
122
|
end
|