dropio 3.0.0.pre1 → 3.0.0.pre2
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.
- data/dropio.gemspec +1 -1
- data/lib/dropio/api.rb +81 -38
- data/lib/dropio/asset.rb +2 -2
- data/lib/dropio.rb +1 -1
- metadata +3 -3
data/dropio.gemspec
CHANGED
data/lib/dropio/api.rb
CHANGED
@@ -16,12 +16,11 @@ class Dropio::Api
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def drop(drop_name, token = nil)
|
19
|
-
self.class.get("/drops/#{drop_name}", :query => {:token => token})
|
19
|
+
self.class.get("/drops/#{drop_name}", :query => sign_if_needed({:token => token}))
|
20
20
|
end
|
21
21
|
|
22
22
|
def manager_drops(manager_api_token, page = 1)
|
23
|
-
|
24
|
-
self.class.get("/accounts/drops", :query => {:version=> '2.0', :manager_api_token => manager_api_token, :page => page})
|
23
|
+
self.class.get("/accounts/drops", :query => sign_if_needed({:manager_api_token => manager_api_token, :page => page}))
|
25
24
|
end
|
26
25
|
|
27
26
|
def generate_drop_url(drop_name, token)
|
@@ -29,42 +28,42 @@ class Dropio::Api
|
|
29
28
|
end
|
30
29
|
|
31
30
|
def create_drop(params = {})
|
32
|
-
self.class.post("/drops",:body => params)
|
31
|
+
self.class.post("/drops",:body => sign_if_needed(params))
|
33
32
|
end
|
34
33
|
|
35
34
|
def update_drop(drop_name, admin_token, params = {})
|
36
35
|
params[:token] = admin_token
|
37
|
-
self.class.put("/drops/#{drop_name}", :body => params)
|
36
|
+
self.class.put("/drops/#{drop_name}", :body => sign_if_needed(params))
|
38
37
|
end
|
39
38
|
|
40
39
|
def change_drop_name(drop_name, admin_token, new_name)
|
41
40
|
params = {:token => admin_token, :name => new_name}
|
42
|
-
self.class.put("/drops/#{drop_name}", :body => params)
|
41
|
+
self.class.put("/drops/#{drop_name}", :body => sign_if_needed(params))
|
43
42
|
end
|
44
43
|
|
45
44
|
def empty_drop(drop_name, admin_token)
|
46
|
-
self.class.put("/drops/#{drop_name}/empty", :query => {:token => admin_token})
|
45
|
+
self.class.put("/drops/#{drop_name}/empty", :query => sign_if_needed({:token => admin_token}))
|
47
46
|
end
|
48
47
|
|
49
48
|
def delete_drop(drop_name, admin_token)
|
50
|
-
self.class.delete("/drops/#{drop_name}", :query => {:token => admin_token})
|
49
|
+
self.class.delete("/drops/#{drop_name}", :query => sign_if_needed({:token => admin_token}))
|
51
50
|
end
|
52
51
|
|
53
52
|
def promote_nick(drop_name, nick, admin_token)
|
54
|
-
self.class.post("/drops/#{drop_name}", :query => {:nick => nick, :token => admin_token})
|
53
|
+
self.class.post("/drops/#{drop_name}", :query => sign_if_needed({:nick => nick, :token => admin_token}))
|
55
54
|
end
|
56
55
|
|
57
56
|
def drop_upload_code(drop_name, token = nil)
|
58
|
-
self.class.get("/drops/#{drop_name}/upload_code", :query => {:token => token})
|
57
|
+
self.class.get("/drops/#{drop_name}/upload_code", :query => sign_if_needed({:token => token}))
|
59
58
|
end
|
60
59
|
|
61
60
|
def create_link(drop_name, url, title = nil, description = nil, token = nil)
|
62
|
-
self.class.post("/drops/#{drop_name}/assets", :body => {:url => url, :title => title, :description => description, :token => token})
|
61
|
+
self.class.post("/drops/#{drop_name}/assets", :body => sign_if_needed({:url => url, :title => title, :description => description, :token => token}))
|
63
62
|
end
|
64
63
|
|
65
64
|
def create_note(drop_name, contents, title = nil, description = nil, token = nil)
|
66
65
|
params = {:contents => contents, :title => title, :token => token, :description => description}
|
67
|
-
self.class.post("/drops/#{drop_name}/assets", :body => params)
|
66
|
+
self.class.post("/drops/#{drop_name}/assets", :body => sign_if_needed(params))
|
68
67
|
end
|
69
68
|
|
70
69
|
def add_file(drop_name, file_path, description = nil, convert_to = nil, pingback_url = nil, comment = nil, token = nil)
|
@@ -73,9 +72,9 @@ class Dropio::Api
|
|
73
72
|
File.open(file_path) do |file|
|
74
73
|
mime_type = (MIME::Types.type_for(file_path)[0] || MIME::Types["application/octet-stream"][0])
|
75
74
|
req = Net::HTTP::Post::Multipart.new url.path,
|
76
|
-
{ 'api_key' => self.class.default_params[:api_key], 'drop_name' => drop_name, 'format' => 'json', 'description' => description,
|
75
|
+
sign_if_needed({ 'api_key' => self.class.default_params[:api_key], 'drop_name' => drop_name, 'format' => 'json', 'description' => description,
|
77
76
|
'token' => token, 'version' => Dropio::Config.version, 'convert_to' => convert_to, 'pingback_url' => pingback_url,
|
78
|
-
'comment' => comment, 'file' => UploadIO.new(file, mime_type, file_path) }
|
77
|
+
'comment' => comment, 'file' => UploadIO.new(file, mime_type, file_path) })
|
79
78
|
http = Net::HTTP.new(url.host, url.port)
|
80
79
|
http.set_debug_output $stderr if Dropio::Config.debug
|
81
80
|
r = http.start{|http| http.request(req)}
|
@@ -85,108 +84,152 @@ class Dropio::Api
|
|
85
84
|
end
|
86
85
|
|
87
86
|
def add_file_from_url(drop_name, url, description = nil, convert_to = nil, pingback_url = nil, token = nil)
|
88
|
-
self.class.post("/drops/#{drop_name}/assets", :body => {:token => token, :file_url => url, :description => description, :convert_to => convert_to, :pingback_url => pingback_url})
|
87
|
+
self.class.post("/drops/#{drop_name}/assets", :body => sign_if_needed({:token => token, :file_url => url, :description => description, :convert_to => convert_to, :pingback_url => pingback_url}))
|
89
88
|
end
|
90
89
|
|
91
90
|
def assets(drop_name, page = 1, order = :oldest, token = nil)
|
92
|
-
self.class.get("/drops/#{drop_name}/assets", :query => {:token => token, :page => page, :order => order.to_s, :show_pagination_details => true})
|
91
|
+
self.class.get("/drops/#{drop_name}/assets", :query => sign_if_needed({:token => token, :page => page, :order => order.to_s, :show_pagination_details => true}))
|
93
92
|
end
|
94
93
|
|
95
94
|
def asset(drop_name, asset_name, token = nil)
|
96
|
-
self.class.get("/drops/#{drop_name}/assets/#{asset_name}", :query => {:token => token})
|
95
|
+
self.class.get("/drops/#{drop_name}/assets/#{asset_name}", :query => sign_if_needed({:token => token}))
|
97
96
|
end
|
98
97
|
|
99
98
|
def generate_asset_url(drop_name, asset_name, token)
|
100
99
|
signed_url(drop_name, token, asset_name)
|
101
100
|
end
|
102
101
|
|
103
|
-
def generate_original_file_url(drop_name, asset_name,
|
104
|
-
|
102
|
+
def generate_original_file_url(drop_name, asset_name, time_to_live = 600)
|
103
|
+
#TODO - signed download URLs
|
104
|
+
#this is now available via the API response itself
|
105
|
+
download_url = Dropio::Config.api_url + "/drops/#{drop_name}/assets/#{asset_name}/download/original?"
|
106
|
+
params = {:version => Dropio::Config.version, :api_key=>self.class.default_params[:api_key], :format=>'json'}
|
107
|
+
params = sign_if_needed(params)
|
108
|
+
paramstring = ''
|
109
|
+
params.each do |k, v|
|
110
|
+
paramstring << "#{k}=#{v}&"
|
111
|
+
end
|
112
|
+
paramstring.chop!
|
113
|
+
download_url += paramstring
|
105
114
|
end
|
106
115
|
|
107
116
|
def asset_embed_code(drop_name, asset_name, token = nil)
|
108
|
-
self.class.get("/drops/#{drop_name}/assets/#{asset_name}/embed_code", :query => {:token => token})
|
117
|
+
self.class.get("/drops/#{drop_name}/assets/#{asset_name}/embed_code", :query => sign_if_needed({:token => token}))
|
109
118
|
end
|
110
119
|
|
111
120
|
def update_asset(drop_name, asset_name, params = {}, token = nil)
|
112
121
|
params[:token] = token
|
113
|
-
self.class.put("/drops/#{drop_name}/assets/#{asset_name}", :body => params)
|
122
|
+
self.class.put("/drops/#{drop_name}/assets/#{asset_name}", :body => sign_if_needed(params))
|
114
123
|
end
|
115
124
|
|
116
125
|
def change_asset_name(drop_name, asset_name, token, new_name)
|
117
126
|
params = {:token => token, :name => new_name}
|
118
|
-
self.class.put("/drops/#{drop_name}/assets/#{asset_name}", :body => params)
|
127
|
+
self.class.put("/drops/#{drop_name}/assets/#{asset_name}", :body => sign_if_needed(params))
|
119
128
|
end
|
120
129
|
|
121
130
|
def delete_asset(drop_name, asset_name, token = nil)
|
122
|
-
self.class.delete("/drops/#{drop_name}/assets/#{asset_name}", :body => {:token => token})
|
131
|
+
self.class.delete("/drops/#{drop_name}/assets/#{asset_name}", :body => sign_if_needed({:token => token}))
|
123
132
|
end
|
124
133
|
|
125
134
|
def send_asset_to_drop(drop_name, asset_name, target_drop, drop_token = nil, token = nil)
|
126
|
-
self.class.post("/drops/#{drop_name}/assets/#{asset_name}/send_to", :body => {:medium => "drop", :drop_name => target_drop, :token => token, :drop_token => drop_token})
|
135
|
+
self.class.post("/drops/#{drop_name}/assets/#{asset_name}/send_to", :body => sign_if_needed({:medium => "drop", :drop_name => target_drop, :token => token, :drop_token => drop_token}))
|
127
136
|
end
|
128
137
|
|
129
138
|
def send_asset_to_fax(drop_name, asset_name, fax_number, token = nil)
|
130
|
-
self.class.post("/drops/#{drop_name}/assets/#{asset_name}/send_to", :body => {:medium => "fax", :fax_number => fax_number, :token => token})
|
139
|
+
self.class.post("/drops/#{drop_name}/assets/#{asset_name}/send_to", :body => sign_if_needed({:medium => "fax", :fax_number => fax_number, :token => token}))
|
131
140
|
end
|
132
141
|
|
133
142
|
def send_asset_to_emails(drop_name, asset_name, emails, message = nil, token = nil)
|
134
|
-
self.class.post("/drops/#{drop_name}/assets/#{asset_name}/send_to", :body => {:medium => "emails", :emails => emails, message => message, :token => token})
|
143
|
+
self.class.post("/drops/#{drop_name}/assets/#{asset_name}/send_to", :body => sign_if_needed({:medium => "emails", :emails => emails, message => message, :token => token}))
|
135
144
|
end
|
136
145
|
|
137
146
|
def copy_asset(drop_name, asset_name, target_drop, target_drop_token, token = nil)
|
138
147
|
params = {:token => token, :drop_name => target_drop, :drop_token => target_drop_token}
|
139
|
-
self.class.post("/drops/#{drop_name}/assets/#{asset_name}/copy", :body => params)
|
148
|
+
self.class.post("/drops/#{drop_name}/assets/#{asset_name}/copy", :body => sign_if_needed(params))
|
140
149
|
end
|
141
150
|
|
142
151
|
def move_asset(drop_name, asset_name, target_drop, target_drop_token, token = nil)
|
143
152
|
params = {:token => token, :drop_name => target_drop, :drop_token => target_drop_token}
|
144
|
-
self.class.post("/drops/#{drop_name}/assets/#{asset_name}/move", :body => params)
|
153
|
+
self.class.post("/drops/#{drop_name}/assets/#{asset_name}/move", :body => sign_if_needed(params))
|
145
154
|
end
|
146
155
|
|
147
156
|
def comments(drop_name, asset_name, page = 1, token = nil)
|
148
|
-
self.class.get("/drops/#{drop_name}/assets/#{asset_name}/comments", :query => {:token => token, :page => page, :show_pagination_details => true})
|
157
|
+
self.class.get("/drops/#{drop_name}/assets/#{asset_name}/comments", :query => sign_if_needed({:token => token, :page => page, :show_pagination_details => true}))
|
149
158
|
end
|
150
159
|
|
151
160
|
def create_comment(drop_name, asset_name, contents, token = nil)
|
152
|
-
self.class.post("/drops/#{drop_name}/assets/#{asset_name}/comments",:body => {:contents => contents, :token => token})
|
161
|
+
self.class.post("/drops/#{drop_name}/assets/#{asset_name}/comments",:body => sign_if_needed({:contents => contents, :token => token}))
|
153
162
|
end
|
154
163
|
|
155
164
|
def comment(drop_name, asset_name, comment_id, token = nil)
|
156
|
-
self.class.get("/drops/#{drop_name}/assets/#{asset_name}/comments/#{comment_id}", :query => {:token => token})
|
165
|
+
self.class.get("/drops/#{drop_name}/assets/#{asset_name}/comments/#{comment_id}", :query => sign_if_needed({:token => token}))
|
157
166
|
end
|
158
167
|
|
159
168
|
def update_comment(drop_name, asset_name, comment_id, contents, admin_token)
|
160
|
-
self.class.put("/drops/#{drop_name}/assets/#{asset_name}/comments/#{comment_id}", :body => {:contents => contents, :token => admin_token})
|
169
|
+
self.class.put("/drops/#{drop_name}/assets/#{asset_name}/comments/#{comment_id}", :body => sign_if_needed({:contents => contents, :token => admin_token}))
|
161
170
|
end
|
162
171
|
|
163
172
|
def delete_comment(drop_name, asset_name, comment_id, admin_token)
|
164
|
-
self.class.delete("/drops/#{drop_name}/assets/#{asset_name}/comments/#{comment_id}", :body => {:token => admin_token})
|
173
|
+
self.class.delete("/drops/#{drop_name}/assets/#{asset_name}/comments/#{comment_id}", :body => sign_if_needed({:token => admin_token}))
|
165
174
|
end
|
166
175
|
|
167
176
|
def create_twitter_subscription(drop_name, username, password, message = nil, events = {}, token = nil)
|
168
|
-
self.class.post("/drops/#{drop_name}/subscriptions", :body => { :token => token, :type => "twitter", :username => username, :password => password, :message => message}.merge(events))
|
177
|
+
self.class.post("/drops/#{drop_name}/subscriptions", :body => sign_if_needed({ :token => token, :type => "twitter", :username => username, :password => password, :message => message}.merge(events)))
|
169
178
|
end
|
170
179
|
|
171
180
|
def create_pingback_subscription(drop_name, url, events = {}, token = nil)
|
172
|
-
self.class.post("/drops/#{drop_name}/subscriptions", :body => { :token => token, :type => "pingback", :url => url}.merge(events))
|
181
|
+
self.class.post("/drops/#{drop_name}/subscriptions", :body => sign_if_needed({ :token => token, :type => "pingback", :url => url}.merge(events)))
|
173
182
|
end
|
174
183
|
|
175
184
|
def create_email_subscription(drop_name, emails, message = nil, welcome_message = nil, welcome_subject = nil, welcome_from = nil, events = {}, token = nil)
|
176
185
|
params = {:token => token, :type => "email", :emails => emails, :message => message, :welcome_from => welcome_from , :welcome_subject => welcome_subject, :welcome_message => welcome_message }.merge(events)
|
177
|
-
self.class.post("/drops/#{drop_name}/subscriptions", :body => params)
|
186
|
+
self.class.post("/drops/#{drop_name}/subscriptions", :body => sign_if_needed(params))
|
178
187
|
end
|
179
188
|
|
180
189
|
def subscriptions(drop_name, page, admin_token)
|
181
|
-
self.class.get("/drops/#{drop_name}/subscriptions", :query => {:token => admin_token, :page => page, :show_pagination_details => true})
|
190
|
+
self.class.get("/drops/#{drop_name}/subscriptions", :query => sign_if_needed({:token => admin_token, :page => page, :show_pagination_details => true}))
|
182
191
|
end
|
183
192
|
|
184
193
|
def delete_subscription(drop_name, subscription_id, admin_token)
|
185
|
-
self.class.delete("/drops/#{drop_name}/subscriptions/#{subscription_id}", :body => {:token => admin_token})
|
194
|
+
self.class.delete("/drops/#{drop_name}/subscriptions/#{subscription_id}", :body => sign_if_needed({:token => admin_token}))
|
195
|
+
end
|
196
|
+
|
197
|
+
def get_signature(params={})
|
198
|
+
#returns a signature for the passed params, without any modifcation to the params
|
199
|
+
params = sign_request(params)
|
200
|
+
params[:signature]
|
186
201
|
end
|
187
202
|
|
188
203
|
private
|
189
204
|
|
205
|
+
def sign_request(params={})
|
206
|
+
#returns all params, including signature and any required params for signing (currently only timestamp)
|
207
|
+
params_for_sig = params.clone
|
208
|
+
params_for_sig[:api_key] = Dropio::Config.api_key.to_s
|
209
|
+
params_for_sig[:version] = Dropio::Config.version.to_s
|
210
|
+
params_for_sig[:format] ||= 'json'
|
211
|
+
paramstring = ''
|
212
|
+
params_for_sig.keys.sort_by {|s| s.to_s}.each {|key| paramstring += key.to_s + '=' + params_for_sig[key].to_s}
|
213
|
+
params[:signature] = Digest::SHA1.hexdigest(paramstring + Dropio::Config.api_secret)
|
214
|
+
params
|
215
|
+
end
|
216
|
+
|
217
|
+
def sign_if_needed(params = {})
|
218
|
+
if Dropio::Config.api_secret
|
219
|
+
params = add_required_params(params)
|
220
|
+
params = sign_request(params)
|
221
|
+
params
|
222
|
+
else
|
223
|
+
params
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
def add_required_params(params = {})
|
228
|
+
#10 minute window
|
229
|
+
params[:timestamp] = (Time.now.to_i + 600).to_s
|
230
|
+
params
|
231
|
+
end
|
232
|
+
|
190
233
|
def signed_url(drop_name, token, asset_name = nil)
|
191
234
|
# 10 minute window.
|
192
235
|
expires = (Time.now.utc + 10*60).to_i
|
data/lib/dropio/asset.rb
CHANGED
@@ -84,8 +84,8 @@ class Dropio::Asset < Dropio::Resource
|
|
84
84
|
end
|
85
85
|
|
86
86
|
# Generates a url if there's access to the original file.
|
87
|
-
def original_file_url
|
88
|
-
Dropio::Resource.client.generate_original_file_url(self)
|
87
|
+
def original_file_url(time_to_live = 600)
|
88
|
+
Dropio::Resource.client.generate_original_file_url(self)
|
89
89
|
end
|
90
90
|
|
91
91
|
end
|
data/lib/dropio.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dropio
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: -
|
4
|
+
hash: -1876988207
|
5
5
|
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 3
|
8
8
|
- 0
|
9
9
|
- 0
|
10
|
-
-
|
11
|
-
version: 3.0.0.
|
10
|
+
- pre2
|
11
|
+
version: 3.0.0.pre2
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Jake Good
|