boxr 0.25.0 → 0.26.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/README.md +13 -7
- data/lib/boxr/auth.rb +19 -6
- data/lib/boxr/client.rb +33 -8
- data/lib/boxr/events.rb +1 -1
- data/lib/boxr/metadata.rb +4 -0
- data/lib/boxr/version.rb +1 -1
- data/spec/boxr_spec.rb +4 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 80bb5e98b518eb34aaaddc369a739111cb2bbcd1
|
4
|
+
data.tar.gz: 852abc3f680cf0e7e379c67e1fad79096c871d3a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb43cff1678d67aaa57366a99bed71eed95babcaa3d608404c3362385d26e30e3d69d5a528f11e1ec752b1a3f83ce168c3da4c984f8bdbc65f9e44064540de61
|
7
|
+
data.tar.gz: 24926c43ccc5d4992168b231c97f68780732e5d502be9590f359107edf7c6cadf37171f76b4b9153397c42f8cfa1a6de026abd16067f6e90c1ae23ac8f5bcc15
|
data/README.md
CHANGED
@@ -97,22 +97,28 @@ client = Boxr::Client.new #using ENV['BOX_DEVELOPER_TOKEN']
|
|
97
97
|
|
98
98
|
folder = client.folder_from_path('/some/directory/structure')
|
99
99
|
file = client.upload_file('test.txt', folder)
|
100
|
-
|
101
|
-
puts "Shared Link: #{
|
100
|
+
updated_file = client.create_shared_link_for_file(file, access: :open)
|
101
|
+
puts "Shared Link: #{updated_file.shared_link.url}"
|
102
102
|
```
|
103
103
|
|
104
104
|
### Methods
|
105
|
-
#### [OAuth](https://developers.box.com/docs/#oauth-2)
|
105
|
+
#### [OAuth & JWT](https://developers.box.com/docs/#oauth-2)
|
106
106
|
```ruby
|
107
107
|
#NOTE: these are all module methods
|
108
108
|
|
109
|
-
|
109
|
+
#OAuth methods
|
110
|
+
Boxr::oauth_url(state, host: "app.box.com", response_type: "code", scope: nil, folder_id: nil, client_id: ENV['BOX_CLIENT_ID'])
|
110
111
|
|
111
|
-
Boxr::get_tokens(code, grant_type: "authorization_code", username: nil,
|
112
|
+
Boxr::get_tokens(code=nil, grant_type: "authorization_code", assertion: nil, scope: nil, username: nil, client_id: ENV['BOX_CLIENT_ID'], client_secret: ENV['BOX_CLIENT_SECRET'])
|
112
113
|
|
113
|
-
Boxr::refresh_tokens(refresh_token,
|
114
|
+
Boxr::refresh_tokens(refresh_token, client_id: ENV['BOX_CLIENT_ID'], client_secret: ENV['BOX_CLIENT_SECRET'])
|
114
115
|
|
115
|
-
Boxr::revoke_tokens(token,
|
116
|
+
Boxr::revoke_tokens(token, client_id: ENV['BOX_CLIENT_ID'], client_secret: ENV['BOX_CLIENT_SECRET'])
|
117
|
+
|
118
|
+
#JWT methods
|
119
|
+
Boxr::get_enterprise_token(private_key: ENV['JWT_PRIVATE_KEY'], private_key_password: ENV['JWT_PRIVATE_KEY_PASSWORD'], enterprise_id: ENV['BOX_ENTERPRISE_ID'], client_id: ENV['BOX_CLIENT_ID'])
|
120
|
+
|
121
|
+
Boxr::get_user_token(user_id, private_key: ENV['JWT_PRIVATE_KEY'], private_key_password: ENV['JWT_PRIVATE_KEY_PASSWORD'], client_id: ENV['BOX_CLIENT_ID'])
|
116
122
|
```
|
117
123
|
#### [Folders](https://developers.box.com/docs/#folders)
|
118
124
|
```ruby
|
data/lib/boxr/auth.rb
CHANGED
@@ -24,12 +24,16 @@ module Boxr
|
|
24
24
|
auth_post(uri, body)
|
25
25
|
end
|
26
26
|
|
27
|
-
def self.get_enterprise_token(private_key
|
28
|
-
|
27
|
+
def self.get_enterprise_token(private_key: ENV['JWT_PRIVATE_KEY'], private_key_password: ENV['JWT_PRIVATE_KEY_PASSWORD'],
|
28
|
+
enterprise_id: ENV['BOX_ENTERPRISE_ID'], client_id: ENV['BOX_CLIENT_ID'])
|
29
|
+
unlocked_private_key = unlock_key(private_key, private_key_password)
|
30
|
+
jwt_auth_post(unlocked_private_key, client_id, enterprise_id, "enterprise")
|
29
31
|
end
|
30
32
|
|
31
|
-
def self.get_user_token(
|
32
|
-
|
33
|
+
def self.get_user_token(user_id, private_key: ENV['JWT_PRIVATE_KEY'], private_key_password: ENV['JWT_PRIVATE_KEY_PASSWORD'],
|
34
|
+
client_id: ENV['BOX_CLIENT_ID'])
|
35
|
+
unlocked_private_key = unlock_key(private_key, private_key_password)
|
36
|
+
jwt_auth_post(unlocked_private_key, client_id, user_id, "user")
|
33
37
|
end
|
34
38
|
|
35
39
|
def self.refresh_tokens(refresh_token, client_id: ENV['BOX_CLIENT_ID'], client_secret: ENV['BOX_CLIENT_SECRET'])
|
@@ -54,7 +58,8 @@ module Boxr
|
|
54
58
|
|
55
59
|
private
|
56
60
|
|
57
|
-
|
61
|
+
|
62
|
+
def self.jwt_auth_post(private_key, iss, sub, box_sub_type)
|
58
63
|
payload = {
|
59
64
|
iss: iss,
|
60
65
|
sub: sub,
|
@@ -65,7 +70,7 @@ module Boxr
|
|
65
70
|
}
|
66
71
|
assertion = JWT.encode(payload, private_key, "RS256")
|
67
72
|
|
68
|
-
get_token(grant_type: JWT_GRANT_TYPE, assertion: assertion
|
73
|
+
get_token(grant_type: JWT_GRANT_TYPE, assertion: assertion)
|
69
74
|
end
|
70
75
|
|
71
76
|
def self.auth_post(uri, body)
|
@@ -81,4 +86,12 @@ module Boxr
|
|
81
86
|
end
|
82
87
|
end
|
83
88
|
|
89
|
+
def self.unlock_key(private_key, private_key_password)
|
90
|
+
if private_key.is_a?(OpenSSL::PKey::RSA)
|
91
|
+
private_key
|
92
|
+
else
|
93
|
+
OpenSSL::PKey::RSA.new(private_key, private_key_password)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
84
97
|
end
|
data/lib/boxr/client.rb
CHANGED
@@ -53,14 +53,26 @@ module Boxr
|
|
53
53
|
VALID_COLLABORATION_ROLES = ['editor','viewer','previewer','uploader','previewer uploader','viewer uploader','co-owner','owner']
|
54
54
|
|
55
55
|
|
56
|
-
def initialize(access_token=ENV['BOX_DEVELOPER_TOKEN'],
|
57
|
-
|
56
|
+
def initialize( access_token=ENV['BOX_DEVELOPER_TOKEN'],
|
57
|
+
refresh_token: nil,
|
58
|
+
client_id: ENV['BOX_CLIENT_ID'],
|
59
|
+
client_secret: ENV['BOX_CLIENT_SECRET'],
|
60
|
+
enterprise_id: ENV['BOX_ENTERPRISE_ID'],
|
61
|
+
jwt_private_key: ENV['JWT_PRIVATE_KEY'],
|
62
|
+
jwt_private_key_password: ENV['JWT_PRIVATE_KEY_PASSWORD'],
|
63
|
+
identifier: nil,
|
64
|
+
as_user: nil,
|
65
|
+
&token_refresh_listener)
|
66
|
+
|
58
67
|
@access_token = access_token
|
59
68
|
raise BoxrError.new(boxr_message: "Access token cannot be nil") if @access_token.nil?
|
60
69
|
|
61
70
|
@refresh_token = refresh_token
|
62
71
|
@client_id = client_id
|
63
72
|
@client_secret = client_secret
|
73
|
+
@enterprise_id = enterprise_id
|
74
|
+
@jwt_private_key = jwt_private_key
|
75
|
+
@jwt_private_key_password = jwt_private_key_password
|
64
76
|
@identifier = identifier
|
65
77
|
@as_user_id = ensure_id(as_user)
|
66
78
|
@token_refresh_listener = token_refresh_listener
|
@@ -179,21 +191,34 @@ module Boxr
|
|
179
191
|
|
180
192
|
def standard_headers()
|
181
193
|
headers = {"Authorization" => "Bearer #{@access_token}"}
|
182
|
-
|
194
|
+
if @jwt_private_key.nil?
|
195
|
+
headers['As-User'] = "#{@as_user_id}" unless @as_user_id.nil?
|
196
|
+
end
|
183
197
|
headers
|
184
198
|
end
|
185
199
|
|
186
200
|
def with_auto_token_refresh
|
187
|
-
return yield unless @refresh_token
|
201
|
+
return yield unless @refresh_token or @jwt_secret_key
|
188
202
|
|
189
203
|
res = yield
|
190
204
|
if res.status == 401
|
191
205
|
auth_header = res.header['WWW-Authenticate'][0]
|
192
206
|
if auth_header && auth_header.include?('invalid_token')
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
207
|
+
if @refresh_token
|
208
|
+
new_tokens = Boxr::refresh_tokens(@refresh_token, client_id: client_id, client_secret: client_secret)
|
209
|
+
@access_token = new_tokens.access_token
|
210
|
+
@refresh_token = new_tokens.refresh_token
|
211
|
+
@token_refresh_listener.call(@access_token, @refresh_token, @identifier) if @token_refresh_listener
|
212
|
+
else
|
213
|
+
if @as_user_id
|
214
|
+
new_token = Boxr::get_user_token(@as_user_id, private_key: @jwt_private_key, private_key_password: @jwt_private_key_password, client_id: @client_id)
|
215
|
+
@access_token = new_token.access_token
|
216
|
+
else
|
217
|
+
new_token = Boxr::get_enterprise_token(private_key: @jwt_private_key, private_key_password: @jwt_private_key_password, enterprise_id: @enterprise_id, client_id: @client_id)
|
218
|
+
@access_token = new_token.access_token
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
197
222
|
res = yield
|
198
223
|
end
|
199
224
|
end
|
data/lib/boxr/events.rb
CHANGED
@@ -12,7 +12,7 @@ module Boxr
|
|
12
12
|
events = []
|
13
13
|
loop do
|
14
14
|
event_response = get_enterprise_events(created_after, created_before, stream_position, event_type, limit)
|
15
|
-
event_response.events
|
15
|
+
events.concat(event_response.events)
|
16
16
|
stream_position = event_response.next_stream_position
|
17
17
|
|
18
18
|
break if event_response.events.empty?
|
data/lib/boxr/metadata.rb
CHANGED
@@ -18,6 +18,10 @@ module Boxr
|
|
18
18
|
def update_metadata(file, updates, scope: :global, template: :properties)
|
19
19
|
file_id = ensure_id(file)
|
20
20
|
uri = "#{METADATA_URI}/#{file_id}/metadata/#{scope}/#{template}"
|
21
|
+
|
22
|
+
#in the event just one update is specified ensure that it is packaged inside an array
|
23
|
+
updates = [updates] unless updates.is_a? Array
|
24
|
+
|
21
25
|
metadata, response = put(uri, updates, content_type: "application/json-patch+json")
|
22
26
|
metadata
|
23
27
|
end
|
data/lib/boxr/version.rb
CHANGED
data/spec/boxr_spec.rb
CHANGED
@@ -169,7 +169,7 @@ describe Boxr::Client do
|
|
169
169
|
|
170
170
|
puts "download file"
|
171
171
|
file = BOX_CLIENT.download_file(test_file)
|
172
|
-
f = open("./spec/test_files/#{DOWNLOADED_TEST_FILE_NAME}", 'w+')
|
172
|
+
f = File.open("./spec/test_files/#{DOWNLOADED_TEST_FILE_NAME}", 'w+')
|
173
173
|
f.write(file)
|
174
174
|
f.close
|
175
175
|
expect(FileUtils.identical?("./spec/test_files/#{TEST_FILE_NAME}","./spec/test_files/#{DOWNLOADED_TEST_FILE_NAME}")).to eq(true)
|
@@ -469,8 +469,10 @@ describe Boxr::Client do
|
|
469
469
|
expect(metadata.a).to eq("hello")
|
470
470
|
|
471
471
|
puts "update metadata"
|
472
|
-
metadata = BOX_CLIENT.update_metadata(test_file,
|
472
|
+
metadata = BOX_CLIENT.update_metadata(test_file, {op: :replace, path: "/b", value: "there"})
|
473
473
|
expect(metadata.b).to eq("there")
|
474
|
+
metadata = BOX_CLIENT.update_metadata(test_file, [{op: :replace, path: "/b", value: "friend"}])
|
475
|
+
expect(metadata.b).to eq("friend")
|
474
476
|
|
475
477
|
puts "get metadata"
|
476
478
|
metadata = BOX_CLIENT.metadata(test_file)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: boxr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.26.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chad Burnette
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|