dropio 3.0.0.pre1 → 3.0.0.pre2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|