dbox 0.7.6 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,42 +0,0 @@
1
- 1.3.1 (2012-5-16)
2
- * Increase metadata() file list limit to 25,000 (used to be 10,000).
3
- * Use CGI.escape() instead of the deprecated URI.escape().
4
-
5
- 1.3 (2012-3-26)
6
- * Add support for the /delta API.
7
- * Add support for the "copy ref" API.
8
-
9
- 1.2 (2012-1-11)
10
- * Adds a method to the SDK that returns the file metadata when downloading a
11
- file or its thumbnail.
12
- * Validate server's SSL certificate against CAs in included certificate file.
13
-
14
- 1.1 (2011-10-17)
15
- * Various bug fixes found during beta period
16
- * Improved documentation
17
- * Improved module structure
18
- * Removed dependency on the oauth module, using plaintext authentication over https
19
-
20
- 1.0 (2011-8-16)
21
- * Backwards compatibility broken
22
- - Changed interface
23
- - Change 'sandbox' references to 'app_folder'
24
- * Updated SDK to Dropbox API Version 1, supporting all calls
25
- - Added 'rev' parameter to metadata and get_file
26
- - Added 'parent_rev' parameter to put_file
27
- - Added search, share, media, revisions, and restore
28
- - put_file uses /files_put instead of multipart POST
29
- - Removed methods for calls that were removed from v1 of the REST API
30
- * Changed return format for calls
31
- - On error (non-200 response), an exception is raised
32
- - On success, the JSON is parsed and a Hash is returned
33
- * Updated examples
34
- - Improved CLI example
35
- - Added a Ruby on Rails 3 controller example
36
- - Added a web based file browser/uploader that uses Sinatra
37
- * put_file no longer takes a "name" arugment, only takes a full path
38
- * Removed reliance on config files
39
- * Assorted bugfixes and improvements
40
- * All calls are now made over SSL
41
- * Fully documented code for RDoc generation
42
- * Added a CHANGELOG
@@ -1,20 +0,0 @@
1
- Copyright (c) 2009-2011 Dropbox Inc., http://www.dropbox.com/
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,7 +0,0 @@
1
- Getting started with the Dropbox Ruby SDK:
2
- 1. Install json and oauth ruby gems with:
3
- gem install json oauth
4
- 2. Edit cli_example.rb to to include your APP_KEY and APP_SECRET
5
- 3. Try running the example app: 'ruby cli_example.rb'.
6
- 4. See dropbox_controller.rb for an example Ruby on Rails controller. It needs an APP_KEY and APP_SECRET set too.
7
- 5. Check out the dropbox website for reference and help! http://dropbox.com/developers_beta
@@ -1,206 +0,0 @@
1
- require './lib/dropbox_sdk'
2
- require 'pp'
3
-
4
- ####
5
- # An example app using the Dropbox API Ruby Client
6
- # This ruby script sets up a basic command line interface (CLI)
7
- # that prompts a user to authenticate on the web, then
8
- # allows them to type commands to manipulate their dropbox.
9
- ####
10
-
11
- # You must use your Dropbox App key and secret to use the API.
12
- # Find this at https://www.dropbox.com/developers
13
- APP_KEY = ''
14
- APP_SECRET = ''
15
- ACCESS_TYPE = :app_folder #The two valid values here are :app_folder and :dropbox
16
- #The default is :app_folder, but your application might be
17
- #set to have full :dropbox access. Check your app at
18
- #https://www.dropbox.com/developers/apps
19
-
20
- class DropboxCLI
21
- LOGIN_REQUIRED = %w{put get cp mv rm ls mkdir info logout search thumbnail}
22
-
23
- def initialize
24
- if APP_KEY == '' or APP_SECRET == ''
25
- puts "You must set your APP_KEY and APP_SECRET in cli_example.rb!"
26
- puts "Find this in your apps page at https://www.dropbox.com/developers/"
27
- exit
28
- end
29
-
30
- @session = DropboxSession.new(APP_KEY, APP_SECRET)
31
- @client = nil
32
- end
33
-
34
- def login
35
- ########
36
- # Instead of going to a authorize URL, you can set a access token key and secret
37
- # from a previous session
38
- ########
39
- # @session.set_access_token('key', 'secret')
40
-
41
- if @session.authorized?
42
- puts "already logged in!"
43
- else
44
-
45
- # grab the request token for session
46
- @session.get_request_token
47
-
48
- authorize_url = @session.get_authorize_url
49
- puts "Got a request token. Your request token key is #{@session.request_token.key} and your token secret is #{@session.request_token.secret}"
50
-
51
- # make the user log in and authorize this token
52
- puts "AUTHORIZING", authorize_url, "Please visit that web page and hit 'Allow', then hit Enter here."
53
- gets
54
-
55
- # get the access token from the server. Its then stored in the session.
56
- @session.get_access_token
57
-
58
- end
59
- puts "You are logged in. Your access token key is #{@session.access_token.key} your secret is #{@session.access_token.secret}"
60
- @client = DropboxClient.new(@session, ACCESS_TYPE)
61
- end
62
-
63
- def command_loop
64
- puts "Enter a command or 'help' or 'exit'"
65
- command_line = ''
66
- while command_line.strip != 'exit'
67
- begin
68
- execute_dropbox_command(command_line)
69
- rescue RuntimeError => e
70
- puts "Command Line Error! #{e.class}: #{e}"
71
- puts e.backtrace
72
- end
73
- print '> '
74
- command_line = gets.strip
75
- end
76
- puts 'goodbye'
77
- exit(0)
78
- end
79
-
80
- def execute_dropbox_command(cmd_line)
81
- command = cmd_line.split
82
- method = command.first
83
- if LOGIN_REQUIRED.include? method
84
- if @client
85
- send(method.to_sym, command)
86
- else
87
- puts 'must be logged in; type \'login\' to get started.'
88
- end
89
- elsif ['login', 'help'].include? method
90
- send(method.to_sym)
91
- else
92
- if command.first && !command.first.strip.empty?
93
- puts 'invalid command. type \'help\' to see commands.'
94
- end
95
- end
96
- end
97
-
98
- def logout(command)
99
- @session.clear_access_token
100
- puts "You are logged out."
101
- @client = nil
102
- end
103
-
104
- def put(command)
105
- fname = command[1]
106
-
107
- #If the user didn't specifiy the file name, just use the name of the file on disk
108
- if command[2]
109
- new_name = command[2]
110
- else
111
- new_name = File.basename(fname)
112
- end
113
-
114
- if fname && !fname.empty? && File.exists?(fname) && (File.ftype(fname) == 'file') && File.stat(fname).readable?
115
- #This is where we call the the Dropbox Client
116
- pp @client.put_file(new_name, open(fname))
117
- else
118
- puts "couldn't find the file #{ fname }"
119
- end
120
- end
121
-
122
- def get(command)
123
- dest = command[2]
124
- if !command[1] || command[1].empty?
125
- puts "please specify item to get"
126
- elsif !dest || dest.empty?
127
- puts "please specify full local path to dest, i.e. the file to write to"
128
- elsif File.exists?(dest)
129
- puts "error: File #{dest} already exists."
130
- else
131
- src = clean_up(command[1])
132
- out,metadata = @client.get_file_and_metadata('/' + src)
133
- puts "Metadata:"
134
- pp metadata
135
- open(dest, 'w'){|f| f.puts out }
136
- puts "wrote file #{dest}."
137
- end
138
- end
139
-
140
- def mkdir(command)
141
- pp @client.file_create_folder(command[1])
142
- end
143
-
144
- # Example:
145
- # > thumbnail pic1.jpg ~/pic1-local.jpg large
146
- def thumbnail(command)
147
- dest = command[2]
148
- command[3] ||= 'small'
149
- out,metadata = @client.thumbnail_and_metadata(command[1], command[3])
150
- puts "Metadata:"
151
- pp metadata
152
- open(dest, 'w'){|f| f.puts out }
153
- puts "wrote thumbnail#{dest}."
154
- end
155
-
156
- def cp(command)
157
- src = clean_up(command[1])
158
- dest = clean_up(command[2])
159
- pp @client.file_copy(src, dest)
160
- end
161
-
162
- def mv(command)
163
- src = clean_up(command[1])
164
- dest = clean_up(command[2])
165
- pp @client.file_move(src, dest)
166
- end
167
-
168
- def rm(command)
169
- pp @client.file_delete(clean_up(command[1]))
170
- end
171
-
172
- def search(command)
173
- resp = @client.search('/',clean_up(command[1]))
174
-
175
- for item in resp
176
- puts item['path']
177
- end
178
- end
179
-
180
- def info(command)
181
- pp @client.account_info
182
- end
183
-
184
- def ls(command)
185
- command[1] = '/' + clean_up(command[1] || '')
186
- resp = @client.metadata(command[1])
187
-
188
- if resp['contents'].length > 0
189
- for item in resp['contents']
190
- puts item['path']
191
- end
192
- end
193
- end
194
-
195
- def help
196
- puts "commands are: login #{LOGIN_REQUIRED.join(' ')} help exit"
197
- end
198
-
199
- def clean_up(str)
200
- return str.gsub(/^\/+/, '') if str
201
- str
202
- end
203
- end
204
-
205
- cli = DropboxCLI.new
206
- cli.command_loop
@@ -1,155 +0,0 @@
1
- require './lib/dropbox_sdk'
2
- require 'json'
3
-
4
- # You must use your Dropbox App key and secret to use the API.
5
- # Find this at https://www.dropbox.com/developers
6
- APP_KEY = ''
7
- APP_SECRET = ''
8
- ACCESS_TYPE = :app_folder #The two valid values here are :app_folder and :dropbox
9
- #The default is :app_folder, but your application might be
10
- #set to have full :dropbox access. Check your app at
11
- #https://www.dropbox.com/developers/apps
12
-
13
- STATE_FILE = 'copy_between_accounts.json'
14
-
15
- def main()
16
- prog_name = __FILE__
17
- if APP_KEY == '' or APP_SECRET == ''
18
- warn "ERROR: Set your APP_KEY and APP_SECRET at the top of #{prog_name}"
19
- exit
20
- end
21
- args = ARGV
22
- if args.size == 0
23
- warn("Usage:\n")
24
- warn(" #{prog_name} link Link to a user's account. Also displays UID.")
25
- warn(" #{prog_name} list List linked users including UID.")
26
- warn(" #{prog_name} copy '<uid>:<path>' '<uid>:<path>' Copies a file from the first user's path, to the second user's path.")
27
- warn("\n\n <uid> is the account UID shown when linked. <path> is a path to a file on that user's dropbox.")
28
- exit
29
- end
30
-
31
- command = args[0]
32
- if command == 'link'
33
- command_link(args)
34
- elsif command == 'list'
35
- command_list(args)
36
- elsif command == 'copy'
37
- command_copy(args)
38
- else
39
- warn "ERROR: Unknown command: #{command}"
40
- warn "Run with no arguments for help."
41
- exit(1)
42
- end
43
- end
44
-
45
- def command_link(args)
46
- if args.size != 1
47
- warn "ERROR: \"link\" doesn't take any arguments"
48
- exit
49
- end
50
-
51
- sess = DropboxSession.new(APP_KEY, APP_SECRET)
52
- sess.get_request_token
53
-
54
- # Make the user log in and authorize this token
55
- url = sess.get_authorize_url
56
- puts "1. Go to: #{url}"
57
- puts "2. Authorize this app."
58
- puts "After you're done, press ENTER."
59
- STDIN.gets
60
-
61
- # This will fail if the user didn't visit the above URL and hit 'Allow'
62
- sess.get_access_token
63
- access_token = sess.access_token
64
- c = DropboxClient.new(sess, ACCESS_TYPE)
65
- account_info = c.account_info()
66
-
67
- puts "Link successful. #{account_info['display_name']} is uid #{account_info['uid']} "
68
-
69
- state = load_state()
70
- state[account_info['uid']] = {
71
- 'access_token' => [access_token.key, access_token.secret],
72
- 'display_name' => account_info['display_name'],
73
- }
74
-
75
- save_state(state)
76
- end
77
-
78
- def command_list(args)
79
- if args.size != 1
80
- warn "ERROR: \"list\" doesn't take any arguments"
81
- exit
82
- end
83
-
84
- state = load_state()
85
- for e in state.keys()
86
- puts "#{state[e]['display_name']} is uid #{e}"
87
- end
88
- end
89
-
90
- def command_copy(args)
91
- if args.size != 3
92
- warn "ERROR: \"copy\" takes exactly two arguments"
93
- exit
94
- end
95
-
96
- state = load_state()
97
-
98
- if state.keys().length < 2
99
- warn "ERROR: You can't use the copy command until at least two users have linked"
100
- exit
101
- end
102
-
103
- from = args[1].gsub(/['"]/,'')
104
- to = args[2].gsub(/['"]/,'')
105
-
106
- if not to.index(':') or not from.index(':')
107
- warn "ERROR: Ill-formated paths. Run #{prog_name} without arugments to see documentation."
108
- exit
109
- end
110
-
111
- from_uid, from_path = from.split ":"
112
- to_uid, to_path = to.split ":"
113
-
114
- if not state.has_key?(to_uid) or not state.has_key?(from_uid)
115
- warn "ERROR: Those UIDs have not linked. Run #{prog_name} list to see linked UIDs."
116
- exit
117
- end
118
-
119
- from_token = state[from_uid]['access_token']
120
- to_token = state[to_uid]['access_token']
121
-
122
- from_session = DropboxSession.new(APP_KEY, APP_SECRET)
123
- to_session = DropboxSession.new(APP_KEY, APP_SECRET)
124
-
125
- from_session.set_access_token(*from_token)
126
- to_session.set_access_token(*to_token)
127
-
128
- from_client = DropboxClient.new(from_session, ACCESS_TYPE)
129
- to_client = DropboxClient.new(to_session, ACCESS_TYPE)
130
-
131
- #Create a copy ref under the identity of the from user
132
- copy_ref = from_client.create_copy_ref(from_path)['copy_ref']
133
-
134
- metadata = to_client.add_copy_ref(to_path, copy_ref)
135
-
136
- puts "File successly copied from #{state[from_uid]['display_name']} to #{state[to_uid]['display_name']}!"
137
- puts "The file now exists at #{metadata['path']}"
138
-
139
- end
140
-
141
- def save_state(state)
142
- File.open(STATE_FILE,"w") do |f|
143
- f.write(JSON.pretty_generate(state))
144
- end
145
- end
146
-
147
- def load_state()
148
- if not FileTest.exists?(STATE_FILE)
149
- return {}
150
- end
151
- JSON.parse(File.read(STATE_FILE))
152
- end
153
-
154
-
155
- main()
@@ -1,57 +0,0 @@
1
- require 'dropbox_sdk'
2
-
3
- # This is an example of a Rails 3 controller that authorizes an application
4
- # and then uploads a file to the user's Dropbox.
5
-
6
- # You must set these
7
- APP_KEY = ""
8
- APP_SECRET = ""
9
- ACCESS_TYPE = :app_folder #The two valid values here are :app_folder and :dropbox
10
- #The default is :app_folder, but your application might be
11
- #set to have full :dropbox access. Check your app at
12
- #https://www.dropbox.com/developers/apps
13
-
14
-
15
- # Examples routes for config/routes.rb (Rails 3)
16
- #match 'db/authorize', :controller => 'db', :action => 'authorize'
17
- #match 'db/upload', :controller => 'db', :action => 'upload'
18
-
19
- class DbController < ApplicationController
20
- def authorize
21
- if not params[:oauth_token] then
22
- dbsession = DropboxSession.new(APP_KEY, APP_SECRET)
23
-
24
- session[:dropbox_session] = dbsession.serialize #serialize and save this DropboxSession
25
-
26
- #pass to get_authorize_url a callback url that will return the user here
27
- redirect_to dbsession.get_authorize_url url_for(:action => 'authorize')
28
- else
29
- # the user has returned from Dropbox
30
- dbsession = DropboxSession.deserialize(session[:dropbox_session])
31
- dbsession.get_access_token #we've been authorized, so now request an access_token
32
- session[:dropbox_session] = dbsession.serialize
33
-
34
- redirect_to :action => 'upload'
35
- end
36
- end
37
-
38
- def upload
39
- # Check if user has no dropbox session...re-direct them to authorize
40
- return redirect_to(:action => 'authorize') unless session[:dropbox_session]
41
-
42
- dbsession = DropboxSession.deserialize(session[:dropbox_session])
43
- client = DropboxClient.new(dbsession, ACCESS_TYPE) #raise an exception if session not authorized
44
- info = client.account_info # look up account information
45
-
46
- if request.method != "POST"
47
- # show a file upload page
48
- render :inline =>
49
- "#{info['email']} <br/><%= form_tag({:action => :upload}, :multipart => true) do %><%= file_field_tag 'file' %><%= submit_tag %><% end %>"
50
- return
51
- else
52
- # upload the posted file to dropbox keeping the same name
53
- resp = client.put_file(params[:file].original_filename, params[:file].read)
54
- render :text => "Upload successful! File now at #{resp['path']}"
55
- end
56
- end
57
- end