imagevenue 0.0.2 → 0.0.3
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/bin/image_venue +2 -105
- data/lib/image_venue.rb +39 -35
- data/lib/image_venue/cli.rb +125 -0
- data/lib/image_venue/{authenticate.rb → connection.rb} +81 -19
- data/lib/image_venue/directory.rb +106 -169
- data/lib/image_venue/file.rb +253 -71
- data/lib/image_venue/net_http_post_extensions.rb +5 -18
- metadata +4 -5
- data/lib/image_venue/upload.rb +0 -137
- data/lib/image_venue/upload_file.rb +0 -84
data/bin/image_venue
CHANGED
@@ -2,110 +2,7 @@
|
|
2
2
|
|
3
3
|
$LOAD_PATH.push(File.expand_path(File.dirname(__FILE__) + '/../lib'))
|
4
4
|
|
5
|
-
require 'getoptlong'
|
6
|
-
#require 'rubygems'
|
7
5
|
require 'image_venue'
|
6
|
+
require 'image_venue/cli'
|
8
7
|
|
9
|
-
|
10
|
-
options = GetoptLong.new(
|
11
|
-
['-c', '--cookie', GetoptLong::OPTIONAL_ARGUMENT],
|
12
|
-
['-p', '--password', GetoptLong::REQUIRED_ARGUMENT],
|
13
|
-
['-u', '--username', GetoptLong::REQUIRED_ARGUMENT]
|
14
|
-
)
|
15
|
-
options_hash = {}
|
16
|
-
options.each do |option, argument|
|
17
|
-
options_hash[option] = argument
|
18
|
-
end
|
19
|
-
command = ARGV.shift
|
20
|
-
cookie = nil
|
21
|
-
|
22
|
-
if command == 'list'
|
23
|
-
ImageVenue.authenticate(options_hash['-u'], options_hash['-p'], cookie)
|
24
|
-
if ImageVenue.authenticate.login
|
25
|
-
ImageVenue.directory.list.each do |directory|
|
26
|
-
puts directory
|
27
|
-
end
|
28
|
-
exit(0)
|
29
|
-
else
|
30
|
-
exit(-10)
|
31
|
-
end
|
32
|
-
|
33
|
-
elsif command == 'files'
|
34
|
-
directory = ARGV.shift
|
35
|
-
unless directory.nil? or directory.empty?
|
36
|
-
ImageVenue.authenticate(options_hash['-u'], options_hash['-p'], cookie)
|
37
|
-
if ImageVenue.authenticate.login
|
38
|
-
ImageVenue.directory.files(directory).each do |file|
|
39
|
-
puts file.basename
|
40
|
-
end
|
41
|
-
exit(0)
|
42
|
-
else
|
43
|
-
exit(-10)
|
44
|
-
end
|
45
|
-
else
|
46
|
-
exit(-20)
|
47
|
-
end
|
48
|
-
|
49
|
-
elsif command == 'create'
|
50
|
-
directory = ARGV.shift
|
51
|
-
unless directory.nil? or directory.empty?
|
52
|
-
ImageVenue.authenticate(options_hash['-u'], options_hash['-p'], cookie)
|
53
|
-
if ImageVenue.authenticate.login
|
54
|
-
if ImageVenue.directory.create(directory)
|
55
|
-
exit(0)
|
56
|
-
else
|
57
|
-
exit(-30)
|
58
|
-
end
|
59
|
-
else
|
60
|
-
exit(-10)
|
61
|
-
end
|
62
|
-
else
|
63
|
-
exit(-20)
|
64
|
-
end
|
65
|
-
|
66
|
-
elsif command == 'upload'
|
67
|
-
directory = ARGV.shift
|
68
|
-
files = ARGV.clone
|
69
|
-
unless directory.nil? or directory.empty? or files.nil? or files.empty?
|
70
|
-
ImageVenue.authenticate(options_hash['-u'], options_hash['-p'], cookie)
|
71
|
-
if ImageVenue.authenticate.login
|
72
|
-
if ImageVenue.directory.select_or_create(directory)
|
73
|
-
upload = ImageVenue::Upload.new
|
74
|
-
files.each do |file|
|
75
|
-
upload_file = ImageVenue::UploadFile.from_local_path(file)
|
76
|
-
upload.add(upload_file)
|
77
|
-
end
|
78
|
-
upload.debug = true
|
79
|
-
upload.process
|
80
|
-
exit(0)
|
81
|
-
else
|
82
|
-
exit(-30)
|
83
|
-
end
|
84
|
-
else
|
85
|
-
exit(-10)
|
86
|
-
end
|
87
|
-
else
|
88
|
-
exit(-20)
|
89
|
-
end
|
90
|
-
|
91
|
-
elsif command == 'delete'
|
92
|
-
directory = ARGV.shift
|
93
|
-
unless directory.nil? or directory.empty?
|
94
|
-
ImageVenue.authenticate(options_hash['-u'], options_hash['-p'], cookie)
|
95
|
-
if ImageVenue.authenticate.login
|
96
|
-
if ImageVenue.directory.delete(directory)
|
97
|
-
exit(0)
|
98
|
-
else
|
99
|
-
exit(-30)
|
100
|
-
end
|
101
|
-
else
|
102
|
-
exit(-10)
|
103
|
-
end
|
104
|
-
else
|
105
|
-
exit(-20)
|
106
|
-
end
|
107
|
-
|
108
|
-
else
|
109
|
-
puts "USAGE: #{$0} -u <USERNAME> -p <PASSWORD> <COMMAND> [<ARGUMENT>]"
|
110
|
-
exit(-1)
|
111
|
-
end
|
8
|
+
ImageVenue::Cli.main
|
data/lib/image_venue.rb
CHANGED
@@ -7,47 +7,51 @@ require 'uri' unless defined?(URI)
|
|
7
7
|
require 'rubygems' unless defined?(Gem)
|
8
8
|
require 'hpricot' unless defined?(Hpricot)
|
9
9
|
|
10
|
+
Kernel_File = File
|
10
11
|
module Kernel
|
11
|
-
class File <
|
12
|
+
class File < Kernel_File
|
12
13
|
end
|
13
14
|
end
|
14
15
|
|
15
16
|
module ImageVenue
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
17
|
+
class << self
|
18
|
+
attr_accessor :debug
|
19
|
+
|
20
|
+
def debug?
|
21
|
+
(self.debug) ? true : false
|
22
|
+
end
|
23
|
+
|
24
|
+
def puts_debug(*args)
|
25
|
+
if self.debug?
|
26
|
+
puts(*args)
|
27
|
+
return true
|
28
|
+
else
|
29
|
+
return false
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def base_url
|
34
|
+
@base_url ||= 'http://users.imagevenue.com'
|
35
|
+
end
|
36
|
+
|
37
|
+
def base_uri
|
38
|
+
@base_uri ||= URI.parse(self.base_url)
|
39
|
+
end
|
40
|
+
|
41
|
+
def version
|
42
|
+
@version ||= [0, 1, 0]
|
43
|
+
end
|
44
|
+
|
45
|
+
def login(username, password, &block)
|
46
|
+
connection = ImageVenue::Connection.new(username, password)
|
47
|
+
if connection.login
|
48
|
+
block.call(connection) if block_given?
|
49
|
+
end
|
50
|
+
return connection
|
51
|
+
end
|
46
52
|
end
|
47
53
|
end
|
48
54
|
|
49
|
-
require 'image_venue/
|
55
|
+
require 'image_venue/connection'
|
50
56
|
require 'image_venue/directory'
|
51
|
-
require 'image_venue/file'
|
52
|
-
require 'image_venue/upload'
|
53
|
-
require 'image_venue/upload_file'
|
57
|
+
require 'image_venue/file'
|
@@ -0,0 +1,125 @@
|
|
1
|
+
require 'getoptlong'
|
2
|
+
|
3
|
+
module ImageVenue
|
4
|
+
class Cli
|
5
|
+
class << self
|
6
|
+
def main
|
7
|
+
cli = self.new
|
8
|
+
cli.main
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
attr_accessor :options
|
13
|
+
attr_accessor :options_hash
|
14
|
+
attr_accessor :command
|
15
|
+
attr_accessor :arguments
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
self.options = GetoptLong.new(
|
19
|
+
['-d', '--debug', GetoptLong::NO_ARGUMENT],
|
20
|
+
['-p', '--password', GetoptLong::REQUIRED_ARGUMENT],
|
21
|
+
['-u', '--username', GetoptLong::REQUIRED_ARGUMENT]
|
22
|
+
)
|
23
|
+
self.options_hash = {}
|
24
|
+
self.options.each do |option, argument|
|
25
|
+
self.options_hash[option] = argument
|
26
|
+
end
|
27
|
+
self.command = ARGV.shift
|
28
|
+
self.arguments = ARGV.clone
|
29
|
+
return nil
|
30
|
+
end
|
31
|
+
|
32
|
+
def main
|
33
|
+
ImageVenue.debug = self.options_hash.has_key?('-d')
|
34
|
+
|
35
|
+
if self.command.nil? or self.command.empty?
|
36
|
+
puts "USAGE: #{$0} -u <USERNAME> -p <PASSWORD> <COMMAND> [<ARGUMENT>]"
|
37
|
+
return false
|
38
|
+
else
|
39
|
+
command_block = nil
|
40
|
+
self.command = self.command.to_sym
|
41
|
+
|
42
|
+
if self.command == :list
|
43
|
+
command_block = lambda do |connection|
|
44
|
+
connection.directories.each do |directory|
|
45
|
+
puts directory.name
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
elsif self.command == :files
|
50
|
+
directory_name = self.arguments.shift
|
51
|
+
unless directory_name.nil? or directory_name.empty?
|
52
|
+
command_block = lambda do |connection|
|
53
|
+
directory = connection.directories.find {|dir| dir.name == directory_name}
|
54
|
+
if directory
|
55
|
+
directory.files.each do |file|
|
56
|
+
puts file.real_name
|
57
|
+
end
|
58
|
+
else
|
59
|
+
puts "NOT_FOUND_ERROR"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
elsif self.command == :create
|
65
|
+
directory_name = self.arguments.shift
|
66
|
+
unless directory_name.nil? or directory_name.empty?
|
67
|
+
command_block = lambda do |connection|
|
68
|
+
directory = ImageVenue::Directory.new(connection, directory_name)
|
69
|
+
if directory.save
|
70
|
+
puts "OK"
|
71
|
+
else
|
72
|
+
puts "ERROR"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
elsif self.command == :upload
|
78
|
+
directory_name = self.arguments.shift
|
79
|
+
filepathes = self.arguments
|
80
|
+
unless directory_name.nil? or directory_name.empty? or filepathes.nil? or filepathes.empty?
|
81
|
+
command_block = lambda do |connection|
|
82
|
+
directory = connection.directories.find {|dir| dir.name == directory_name}
|
83
|
+
if directory
|
84
|
+
directory.select
|
85
|
+
filepathes.each do |filepath|
|
86
|
+
file = ImageVenue::File.new(directory, filepath)
|
87
|
+
if file.save
|
88
|
+
puts "OK #{filepath}"
|
89
|
+
else
|
90
|
+
puts "ERROR #{filepath}"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
else
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
elsif self.command == :delete
|
99
|
+
directory_name = self.arguments.shift
|
100
|
+
unless directory_name.nil? or directory_name.empty?
|
101
|
+
command_block = lambda do |connection|
|
102
|
+
directory = connection.directories.find {|dir| dir.name == directory_name}
|
103
|
+
if directory
|
104
|
+
if directory.destroy
|
105
|
+
puts "OK"
|
106
|
+
else
|
107
|
+
puts "ERROR"
|
108
|
+
end
|
109
|
+
else
|
110
|
+
puts "NOT_FOUND_ERROR"
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
if command_block
|
117
|
+
ImageVenue.login(options_hash['-u'], options_hash['-p']) do |connection|
|
118
|
+
command_block.call(connection)
|
119
|
+
connection.logout
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module ImageVenue
|
2
|
-
class
|
2
|
+
class Connection
|
3
3
|
class << self
|
4
4
|
def login_uri
|
5
5
|
@login_uri ||= URI.parse(ImageVenue.base_url + '/process_logon.php')
|
@@ -32,13 +32,29 @@ module ImageVenue
|
|
32
32
|
def cookie_timestamp_key
|
33
33
|
@cookie_timestamp_key ||= 'tsctr'
|
34
34
|
end
|
35
|
+
|
36
|
+
def cookie_directory_key
|
37
|
+
@cookie_directory_key ||= 'cur_upload_dir'
|
38
|
+
end
|
39
|
+
|
40
|
+
def cookie_view_directory
|
41
|
+
@cookie_view_directory ||= 'view_dir'
|
42
|
+
end
|
43
|
+
|
44
|
+
def login_params(connection)
|
45
|
+
{
|
46
|
+
self.login_action_key => connection.action,
|
47
|
+
self.login_username_key => connection.username,
|
48
|
+
self.login_password_key => connection.password
|
49
|
+
}
|
50
|
+
end
|
35
51
|
end
|
36
52
|
|
37
53
|
attr_accessor :action
|
38
|
-
attr_accessor :username
|
39
|
-
attr_accessor :password
|
40
54
|
attr_accessor :cookie
|
41
55
|
attr_accessor :debug
|
56
|
+
attr_accessor :password
|
57
|
+
attr_accessor :username
|
42
58
|
|
43
59
|
def initialize(username, password, cookie=nil)
|
44
60
|
self.action = '1'
|
@@ -49,7 +65,7 @@ module ImageVenue
|
|
49
65
|
end
|
50
66
|
|
51
67
|
def debug?
|
52
|
-
(ImageVenue.debug or self.debug)
|
68
|
+
(ImageVenue.debug or self.debug)
|
53
69
|
end
|
54
70
|
|
55
71
|
def puts_debug(*args)
|
@@ -62,8 +78,8 @@ module ImageVenue
|
|
62
78
|
end
|
63
79
|
|
64
80
|
def login
|
65
|
-
puts_debug "Trying to login ..."
|
66
|
-
response = Net::HTTP.post_form(self.class.login_uri, self.login_params)
|
81
|
+
self.puts_debug "Trying to login ..."
|
82
|
+
response = Net::HTTP.post_form(self.class.login_uri, self.class.login_params(self))
|
67
83
|
unless response.header['Set-Cookie'].nil? or response.header['Set-Cookie'].empty?
|
68
84
|
self.cookie = {}
|
69
85
|
self.cookie[self.class.cookie_user_key] = $1 if response.header['Set-Cookie'] =~ /#{Regexp.escape(self.class.cookie_user_key)}=(.+?)[,;]/
|
@@ -71,10 +87,10 @@ module ImageVenue
|
|
71
87
|
response_timestamp = Net::HTTP.get_response(ImageVenue.base_uri)
|
72
88
|
unless response_timestamp.header['Set-Cookie'].nil? or response_timestamp.header['Set-Cookie'].empty?
|
73
89
|
self.cookie[self.class.cookie_timestamp_key] = $1 if response_timestamp.header['Set-Cookie'] =~ /#{Regexp.escape(self.class.cookie_timestamp_key)}=(.+?)[,;]/
|
74
|
-
puts_debug "Login successfull!"
|
90
|
+
self.puts_debug "Login successfull!"
|
75
91
|
return true
|
76
92
|
else
|
77
|
-
puts_debug "Login failed!"
|
93
|
+
self.puts_debug "Login failed!"
|
78
94
|
return false
|
79
95
|
end
|
80
96
|
else
|
@@ -83,14 +99,6 @@ module ImageVenue
|
|
83
99
|
end
|
84
100
|
end
|
85
101
|
|
86
|
-
def login_params
|
87
|
-
{
|
88
|
-
self.class.login_action_key => self.action,
|
89
|
-
self.class.login_username_key => self.username,
|
90
|
-
self.class.login_password_key => self.password
|
91
|
-
}
|
92
|
-
end
|
93
|
-
|
94
102
|
def logged_in?
|
95
103
|
unless self.cookie.nil?
|
96
104
|
return true
|
@@ -100,19 +108,59 @@ module ImageVenue
|
|
100
108
|
end
|
101
109
|
|
102
110
|
def logout
|
103
|
-
puts_debug "Trying to logout ..."
|
111
|
+
self.puts_debug "Trying to logout ..."
|
104
112
|
response = Net::HTTP.get_response(self.class.logout_uri)
|
105
113
|
if response.is_a?(Net::HTTPSuccess) or response.is_a?(Net::HTTPFound)
|
106
114
|
self.cookie = nil
|
107
|
-
puts_debug "Logout successfull! Resetting cookie."
|
115
|
+
self.puts_debug "Logout successfull! Resetting cookie."
|
108
116
|
return true
|
109
117
|
else
|
110
118
|
self.cookie = nil
|
111
|
-
puts_debug "Logout failed! But resetting cookie anyway."
|
119
|
+
self.puts_debug "Logout failed! But resetting cookie anyway."
|
112
120
|
return false
|
113
121
|
end
|
114
122
|
end
|
115
123
|
|
124
|
+
def selected_directory
|
125
|
+
if self.cookie.is_a?(Hash)
|
126
|
+
return self.cookie[self.class.cookie_directory_key]
|
127
|
+
else
|
128
|
+
return nil
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def selected_directory=(directory)
|
133
|
+
if self.cookie.is_a?(Hash)
|
134
|
+
if directory.nil?
|
135
|
+
return self.cookie.delete(self.class.cookie_directory_key)
|
136
|
+
else
|
137
|
+
return self.cookie[self.class.cookie_directory_key] = directory
|
138
|
+
end
|
139
|
+
else
|
140
|
+
return nil
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def view_directory
|
145
|
+
if self.cookie.is_a?(Hash)
|
146
|
+
return self.cookie[self.class.cookie_view_directory]
|
147
|
+
else
|
148
|
+
return nil
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def view_directory(directory)
|
153
|
+
if self.cookie.is_a?(Hash)
|
154
|
+
if directory.nil?
|
155
|
+
return self.cookie.delete(self.class.cookie_view_directory)
|
156
|
+
else
|
157
|
+
return self.cookie[self.class.cookie_view_directory] = directory
|
158
|
+
end
|
159
|
+
else
|
160
|
+
return nil
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
116
164
|
def cookie_as_string
|
117
165
|
unless self.cookie.nil?
|
118
166
|
cookie_str = self.cookie.map {|key, value| [key, value].join('=')}.join('; ')
|
@@ -121,5 +169,19 @@ module ImageVenue
|
|
121
169
|
return nil
|
122
170
|
end
|
123
171
|
end
|
172
|
+
|
173
|
+
def directories(reload=false)
|
174
|
+
if reload or @directories.nil?
|
175
|
+
@directories = ImageVenue::Directory.list(self)
|
176
|
+
else
|
177
|
+
self.puts_debug "Directories from cache!"
|
178
|
+
end
|
179
|
+
return @directories
|
180
|
+
end
|
181
|
+
|
182
|
+
def clear_cache
|
183
|
+
@directories = nil
|
184
|
+
self.puts_debug "Connection's cache cleared."
|
185
|
+
end
|
124
186
|
end
|
125
187
|
end
|