phoseum-cli 0.0.8 → 0.0.13

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 64322b7d05911b8e332b53a9c71e802ba0328a3f566f510a4c987eaab30447ad
4
- data.tar.gz: 7f44480404aa5d42533deef77414997b9cf459d215726ce4723aeb37055ed9b9
3
+ metadata.gz: 052beefab210d213c09986b11dfe93e499d328f6523f7f3cba71ecb2502ead53
4
+ data.tar.gz: 75fd5b65b74758d1517c61e65f69295ca445e70ba37e32ae57863da0ddb825d9
5
5
  SHA512:
6
- metadata.gz: eb7348f7bbac6a5f225be5e19a633fb46a57eb33122392dcbff9735eeca51c154acb4a2a7a269642c4145e8c26843620c6f9e3a7483db15fa3dc68ad650cd0fb
7
- data.tar.gz: 27739486308f80512d929123d46a46b809e1ec930c5b63ff1f227654e9bf42aba183b823646b8a71eddc7f392b8b231e9a84a39b7b66f46ccf773b9529054d3e
6
+ metadata.gz: 44173a8f4ed5893c0fdd6b5a9ef2b4ab463b091ed4c35f237be7f3ad369044a281d9067edbf7bd9d72670c45973827d9428fc015a6071f4eff5e1ff1ffd55c5f
7
+ data.tar.gz: 68c50ae1d3cc2c35e4d369bc02bbba99236a07a1a3f3e314f73ff411bab7e3ee27965507afbb22b44220df36a411ee10a84586ad5109be62e4e2bf974cba7f95
@@ -23,17 +23,17 @@ $MULTI = options[:multiple] ? true : false
23
23
 
24
24
  client_checks
25
25
 
26
- def upload(album)
27
-
28
- if $config['TOKEN']
29
- headers={ "bearer" => "#{$config['TOKEN']}" }
30
- else
26
+ def upload(album,syn_name='',description='')
27
+ headers = {}
28
+ if !validate_token($config['TOKEN'])
31
29
  if token = user_login()
32
30
  headers = { "bearer" => token }
33
31
  else
34
32
  puts "Login Failed".red
35
33
  exit 1
36
34
  end
35
+ else
36
+ headers={ "bearer" => "#{$config['TOKEN']}" }
37
37
  end
38
38
 
39
39
  list=Dir.entries("./")
@@ -65,7 +65,8 @@ def upload(album)
65
65
  # last resort solution for accents and unrecognizable characters
66
66
  # but then will need to remove extension, pass the filter, then add extension again.
67
67
  # human_name = check_string_sanity(filename)
68
- human_name = filename
68
+ human_name = filename.dup
69
+ human_name = human_name.gsub!(/(.*)\.JPG|JPEG|PNG|GIF$/i,'\1')
69
70
 
70
71
  somefound = search_image(image.signature)
71
72
  if somefound
@@ -84,6 +85,12 @@ def upload(album)
84
85
  post_body << "\r\n--#{BOUNDARY}--\r\n"
85
86
  http = Net::HTTP.new(uri.host, uri.port)
86
87
  headers = headers.merge({ "filename" => "#{image.signature}.#{image.type}", "album" => "#{album}", "name" => human_name })
88
+ if ! syn_name.nil?
89
+ headers = headers.merge({ "album_name" => syn_name })
90
+ end
91
+ if ! description.nil?
92
+ headers = headers.merge({ "description" => description })
93
+ end
87
94
  request = Net::HTTP::Post.new(uri, headers)
88
95
  request.body = post_body.join
89
96
  request["Content-Type"] = "multipart/form-data, boundary=#{BOUNDARY}"
@@ -108,6 +115,7 @@ def upload(album)
108
115
  else
109
116
  puts "\n#{msg_resp['error']}".red
110
117
  error += 1
118
+ break
111
119
  end
112
120
  rescue
113
121
  puts "\nThe server sent out an Error:".red
@@ -153,15 +161,16 @@ end
153
161
 
154
162
  def health(what='',name='')
155
163
  headers = {}
156
- if $config['TOKEN']
157
- headers={ "bearer" => "#{$config['TOKEN']}" }
158
- else
164
+
165
+ if !validate_token($config['TOKEN']) || !$config['TOKEN']
159
166
  if token = user_login()
160
167
  headers = { "bearer" => token }
161
168
  else
162
169
  puts "Login Failed".red
163
170
  exit 1
164
171
  end
172
+ else
173
+ headers={ "bearer" => "#{$config['TOKEN']}" }
165
174
  end
166
175
  some_uri=''
167
176
  if what == "album"
@@ -232,6 +241,10 @@ def user_mgmt(action,user,pass='',role='')
232
241
  post_body={}
233
242
  if action == "add_user"
234
243
  post_body=JSON.generate({"action" => "create-user", "user" => "#{user}", "password" => "#{pass}", "role" => "#{role}"})
244
+ if !$config['DEFAULT_SECRET']
245
+ puts "You must have a DEFAULT_SECRET setting to be able to create a user".red
246
+ exit 1
247
+ end
235
248
  end
236
249
  base = URI.parse("#{$config['SERVERURL']}")
237
250
  puts "\nConnecting to: #{$config['SERVERURL']}".yellow if !$QUIET
@@ -263,29 +276,28 @@ def user_mgmt(action,user,pass='',role='')
263
276
  exit 0
264
277
  end
265
278
 
266
- def user_login()
279
+ def user_login(puser='',ppass='')
267
280
  post_body={}
268
- user=''
269
- pass=''
281
+ user= !puser ? '' : puser
282
+ pass= !ppass ? '' : ppass
270
283
  if $config['USER']
271
284
  user=$config['USER']
272
285
  else
273
286
  print "Username: "
274
- user=STDIN.noecho(&:gets).chomp
287
+ user=STDIN.gets.chomp
275
288
  end
276
289
  if $config['PASS']
277
290
  pass=$config['PASS']
278
- puts "Keeping your password on the configuration file is UNSAFE".red
291
+ puts "\nKeeping your password on the configuration file is UNSAFE".red
279
292
  else
280
- print "\nPassword: "
281
- pass=STDIN.noecho(&:gets).chomp
293
+ pass=STDIN.getpass('Password: ')
282
294
  end
283
295
  post_body=JSON.generate({"action" => "user-login", "user" => "#{user}", "password" => "#{pass}"})
284
296
  base = URI.parse("#{$config['SERVERURL']}")
285
297
  puts "\nLogging to: #{$config['SERVERURL']}".yellow if !$QUIET
286
298
  request = Net::HTTP::Post.new(base)
287
299
  request.body = post_body
288
- request.basic_auth("auth", $config['DEFAULT_SECRET'])
300
+ request.basic_auth("cli", "loginNOauth")
289
301
  response = Net::HTTP.start(base.hostname, $config['PORT'],
290
302
  :timeout => $config['CALL_TIMEOUT'],
291
303
  :use_ssl => base.scheme == "https",
@@ -322,38 +334,40 @@ end
322
334
 
323
335
 
324
336
  def delete(what='',path='')
325
- puts "You must write 'YES' to confirm, otherwise NO is assumed".yellow
326
- print "Are you sure you want to delete the Album #{path} :[YES/NO]: "
327
- confirm=STDIN.gets.chomp
328
- if confirm == "YES"
329
- headers={}
330
- if $config['TOKEN']
331
- headers={ "bearer" => "#{$config['TOKEN']}" }
337
+ if !validate_token($config['TOKEN'])
338
+ if token = user_login()
339
+ headers = { "bearer" => token }
332
340
  else
333
- if token = user_login()
334
- headers = { "bearer" => token }
335
- else
336
- puts "Login Failed".red
337
- exit 1
338
- end
339
- end
340
-
341
- base = URI.parse("#{$config['SERVERURL']}/#{path}")
342
- puts "Connecting to: #{$config['SERVERURL']}".yellow if !$QUIET
343
- request = Net::HTTP::Delete.new(base,headers)
344
- response = Net::HTTP.start(base.hostname, $config['PORT'],
345
- :timeout => $config['CALL_TIMEOUT'],
346
- :use_ssl => base.scheme == "https",
347
- :verify_mode => OpenSSL::SSL::VERIFY_PEER,
348
- :ca_file => $config['CA_TRUST']
349
- ) do |http|
350
- http.request(request)
341
+ puts "Login Failed".red
342
+ exit 1
351
343
  end
352
- list = JSON.parse(response.body)
353
- # missing begin test result
354
- puts list
355
344
  else
356
- puts "Deleting cancelled.".green
345
+ headers={ "bearer" => "#{$config['TOKEN']}" }
346
+ end
347
+ base = URI.parse("#{$config['SERVERURL']}/#{path}")
348
+ puts "Connecting to: #{$config['SERVERURL']}".yellow if !$QUIET
349
+ request = Net::HTTP::Delete.new(base,headers)
350
+ response = Net::HTTP.start(base.hostname, $config['PORT'],
351
+ :timeout => $config['CALL_TIMEOUT'],
352
+ :use_ssl => base.scheme == "https",
353
+ :verify_mode => OpenSSL::SSL::VERIFY_PEER,
354
+ :ca_file => $config['CA_TRUST']
355
+ ) do |http|
356
+ http.request(request)
357
+ end
358
+ begin
359
+ list = JSON.parse(response.body)
360
+ if list['error']
361
+ puts list['error'].red
362
+ exit 1
363
+ else
364
+ puts list['success'].green
365
+ exit 0
366
+ end
367
+ rescue
368
+ puts "\nThe server sent out an Error:".red
369
+ puts clean_html(response.body)
370
+ exit 1
357
371
  end
358
372
  end
359
373
 
@@ -374,10 +388,10 @@ case options
374
388
  puts "You need to select one of the valid Roles".red
375
389
  exit 1
376
390
  else
377
- print "Please type the password twice for user #{value}.\n\tPassword: "
378
- new_password=STDIN.noecho(&:gets).chomp
379
- print "\n\tConfirm: "
380
- confirm=STDIN.noecho(&:gets).chomp
391
+ print "Please type the password twice for user #{value}.\n\t"
392
+ new_password=STDIN.getpass('Password: ')
393
+ print "\t"
394
+ confirm=STDIN.getpass('Confirm: ')
381
395
  if new_password == confirm
382
396
  user_mgmt(what,value,new_password,options[:role])
383
397
  end
@@ -388,13 +402,70 @@ case options
388
402
  if options[:album]
389
403
  value=check_string_sanity(options[:album])
390
404
  what='album'
405
+ if value == "/" or value == '' or value.nil?
406
+ puts "It is Not possible to delete base album".red
407
+ exit 1
408
+ end
409
+ if !confirm_action("Are you sure you want to delete the #{what} #{value}")
410
+ puts "Deleting #{what} cancelled.".green
411
+ end
412
+ end
413
+ if options[:image]
414
+ if _found = check_image_exists(options[:image])
415
+ if _found =~ /^Signature Found at \[\"(.*)\"\]/
416
+ capt = _found.match(/^Signature Found at \[\"(.*)\"\]/).captures
417
+ capt_part = capt[0].match(/.*(Albums.*)$/).captures
418
+ value = capt_part[0]
419
+ else
420
+ img_data = JSON.parse(_found)
421
+ value="#{img_data['web_path']}/#{img_data['image']}"
422
+ end
423
+ what='image'
424
+ else
425
+ puts "Image not found on server".red
426
+ exit 1
427
+ end
428
+ if confirm_action("Are you sure you want to delete the #{what} #{value}")
429
+ puts "Deleting #{what} #{value}".green if !$QUIET
430
+ delete(what,value)
431
+ else
432
+ puts "Deleting #{what} cancelled.".green
433
+ end
391
434
  end
392
- if value == "/" or value == '' or value.nil?
393
- puts "It is Not possible to delete base album".red
435
+ if options[:user]
436
+ what='user'
437
+ value=options[:user]
438
+ if confirm_action("Are you sure you want to delete the #{what} #{value}")
439
+ puts "Deleting #{what} #{value}".green if !$QUIET
440
+ if delete_user(value)
441
+ puts "#{value} successfully deleted.".green
442
+ else
443
+ puts "#{value} failed to be deleted.".red
444
+ end
445
+ else
446
+ puts "Deleting #{what} cancelled.".green
447
+ end
448
+ end
449
+ if !what
450
+ puts "Got no object to delete. Exiting.".red
451
+ exit 1
452
+ end
453
+ when -> (o) { o[:options] }
454
+ if options[:user]
455
+ print "Please confirm #{options[:user]} password.\n\t"
456
+ current_password=STDIN.getpass('Password: ')
457
+ if token = user_login(options[:user],current_password)
458
+ print "\n Change [P]assword, [U]sername, [R]ole :[P/U/R]: "
459
+ confirm=STDIN.gets.chomp
460
+ else
461
+ puts "User Check Failed".red
462
+ exit 1
463
+ end
464
+ else
465
+ # if !what
466
+ puts "Got no user to work with. Exiting.".red
394
467
  exit 1
395
468
  end
396
- puts "Deleting Album #{value}".green if !$QUIET
397
- delete(what,value)
398
469
  when -> (u) { u[:upload] }
399
470
  puts "Preparing to upload images to API server".green if !$QUIET
400
471
  if !options.key?(:album)
@@ -404,8 +475,27 @@ case options
404
475
  exit 1
405
476
  else
406
477
  album_clean=check_string_sanity(options[:album])
407
- puts "Using Album destination: #{album_clean}".light_blue if !$QUIET
408
- upload(album_clean)
478
+ usable_name= options[:name] ? options[:name].dup : ''
479
+ usable_desc= options[:description] ? options[:description].dup : ''
480
+ if usable_name.length > 255 || usable_desc.length > 255
481
+ if usable_name.length > 255
482
+ puts "Synthetic name has #{usable_name.length} characters!!".red
483
+ end
484
+ if usable_desc.length > 255
485
+ puts "SHORT Description has #{usable_desc.length} characters!!".red
486
+ end
487
+ puts "This is a huge-ass string mate, what are you doing?".red
488
+ puts "We should limit this to 255 chars. Keep it short. Aborting.".red
489
+ exit 1
490
+ end
491
+ if options[:name]
492
+ usable_name = clean_name(options[:name])
493
+ usable_desc = clean_name(options[:description])
494
+ puts "Using Album destination: #{album_clean} --> Named as '#{usable_name}'".light_blue if !$QUIET
495
+ else
496
+ puts "Using Album destination: #{album_clean}".light_blue if !$QUIET
497
+ end
498
+ upload(album_clean,usable_name,usable_desc)
409
499
  end
410
500
  when -> (l) { l[:login] }
411
501
  puts "Start login process".green if !$QUIET
@@ -20,6 +20,10 @@ def option_parser(opts)
20
20
  options[:delete] = d
21
21
  end
22
22
 
23
+ opts.on("-D", "--description 'SHORTDESC'", "Add album description (up to 255 chars). Use with: [album-path]") do |ds|
24
+ options[:description] = ds
25
+ end
26
+
23
27
  opts.on("-f", "--file-cfg FILENAME", "Use alternative configuration file") do |f|
24
28
  options[:filecfg] = f
25
29
  end
@@ -36,6 +40,10 @@ def option_parser(opts)
36
40
  options[:multiple] = m
37
41
  end
38
42
 
43
+ opts.on("-N", "--name 'REALNAME'", "Set Album's synthetic name. Use with: [album-path]") do |n|
44
+ options[:name] = n
45
+ end
46
+
39
47
  opts.on("-v", "--verbose", "Run verbosely (DEBUG mode)") do |v|
40
48
  options[:verbose] = v
41
49
  end
@@ -44,6 +52,10 @@ def option_parser(opts)
44
52
  options[:role] = r
45
53
  end
46
54
 
55
+ opts.on("-o", "--options", "Update options from object. Use with: [user]") do |o|
56
+ options[:options] = o
57
+ end
58
+
47
59
  opts.on("-q", "--quiet", "Avoid regular info, useful for JSON output") do |q|
48
60
  options[:quiet] = q
49
61
  end
@@ -56,6 +68,10 @@ def option_parser(opts)
56
68
  options[:upload] = u
57
69
  end
58
70
 
71
+ opts.on("-U", "--User USERNAME", "Username for delete or change password / role. Use with: [delete, options]") do |usr|
72
+ options[:user] = usr
73
+ end
74
+
59
75
  opts.on("-h", "-h", "That is this...") do |h|
60
76
  options[:help] = h
61
77
  end
@@ -64,6 +80,17 @@ def option_parser(opts)
64
80
  return options
65
81
  end
66
82
 
83
+ def confirm_action(msg)
84
+ puts "You must write 'YES' to confirm, otherwise NO is assumed".yellow
85
+ print "#{msg} :[YES/NO]: "
86
+ confirm=STDIN.gets.chomp
87
+ if confirm == "YES"
88
+ return true
89
+ else
90
+ return false
91
+ end
92
+ end
93
+
67
94
  class String
68
95
  # colorization
69
96
  def colorize(color_code)
@@ -96,15 +123,13 @@ class String
96
123
  end
97
124
 
98
125
  def client_checks
99
-
100
126
  if $config['SERVERURL'] == ''
101
- puts "I could not find a valid SERVERURL configuration. CFG is empty.".red
102
- exit 1
127
+ puts "I could not find a valid SERVERURL configuration. CFG is empty.".red
128
+ exit 1
103
129
  elsif $config['SERVERURL'] !~ /\A#{URI::regexp(['https', 'http'])}\z/
104
130
  puts "I could not find a valid SERVERURL configuration. Contains: #{$config['SERVERURL']}".red
105
131
  exit 1
106
132
  end
107
-
108
133
  if !$config['DEFAULT_SECRET']
109
134
  puts "I could not find the DEFAULT_SECRET from Phoseum config, this will limit our actions.".red
110
135
  exit 1
@@ -132,19 +157,43 @@ def clean_html(msg)
132
157
  return msg
133
158
  end
134
159
 
135
- def search_image(sign)
136
- headers = {}
137
- if $config['TOKEN']
138
- headers={ "bearer" => "#{$config['TOKEN']}" }
160
+ def clean_name(nameval)
161
+ name_words = nameval.split(' ')
162
+ name = ''
163
+ name_words.each do |word|
164
+ cword = check_string_sanity(word)
165
+ name = name.nil? ? cword : [name,cword].join(' ')
166
+ end
167
+ name.gsub!(/^\ /,'')
168
+ return name
169
+ end
170
+
171
+ def check_image_exists(fpath)
172
+ flocal = fpath.split('/')
173
+ filename = flocal.last
174
+ album = fpath.clone
175
+ album.gsub!(/#{filename}/,'')
176
+
177
+ if ffile = search_image(filename,album)
178
+ return ffile
139
179
  else
180
+ return false
181
+ end
182
+ exit 0
183
+ end
184
+
185
+ def search_image(sign,album='')
186
+ if !validate_token($config['TOKEN'])
140
187
  if token = user_login()
141
188
  headers = { "bearer" => token }
142
189
  else
143
190
  puts "Login Failed".red
144
191
  exit 1
145
192
  end
193
+ else
194
+ headers={ "bearer" => "#{$config['TOKEN']}" }
146
195
  end
147
- some_uri="?signature=#{sign}"
196
+ some_uri= album == '' ? "?signature=#{sign}" : "?signature=#{sign}&inside_album=#{album}"
148
197
  base = URI.parse("#{$config['SERVERURL']}#{some_uri}")
149
198
  request = Net::HTTP::Get.new(base,headers)
150
199
  response = Net::HTTP.start(base.hostname, $config['PORT'],
@@ -158,6 +207,7 @@ def search_image(sign)
158
207
  begin
159
208
  list = JSON.parse(response.body)
160
209
  if list['warning']
210
+ # puts list['warning']
161
211
  return list['warning']
162
212
  end
163
213
  if list['success']
@@ -169,3 +219,69 @@ def search_image(sign)
169
219
  exit 1
170
220
  end
171
221
  end
222
+
223
+ def validate_token(token)
224
+ headers = {}
225
+ if $config['TOKEN']
226
+ headers={ "bearer" => "#{$config['TOKEN']}" }
227
+ else
228
+ return false
229
+ end
230
+ base = URI.parse("#{$config['SERVERURL']}")
231
+ request = Net::HTTP::Post.new(base,headers)
232
+ request.body = JSON.generate({"action" => "check-token" })
233
+ response = Net::HTTP.start(base.hostname, $config['PORT'],
234
+ :timeout => $config['CALL_TIMEOUT'],
235
+ :use_ssl => base.scheme == "https",
236
+ :verify_mode => OpenSSL::SSL::VERIFY_PEER,
237
+ :ca_file => $config['CA_TRUST']
238
+ ) do |http|
239
+ http.request(request)
240
+ end
241
+ begin
242
+ list = JSON.parse(response.body)
243
+ if list['error']
244
+ return false
245
+ end
246
+ if list['success']
247
+ return true
248
+ end
249
+ rescue
250
+ puts "\nThe server sent out an Error:".red
251
+ puts clean_html(response.body)
252
+ exit 1
253
+ end
254
+ end
255
+
256
+ def delete_user(username)
257
+ headers = {}
258
+ if $config['TOKEN']
259
+ headers={ "bearer" => "#{$config['TOKEN']}" }
260
+ else
261
+ return false
262
+ end
263
+ base = URI.parse("#{$config['SERVERURL']}")
264
+ request = Net::HTTP::Post.new(base,headers)
265
+ request.body = JSON.generate({"action" => "delete-user", "username" => username })
266
+ response = Net::HTTP.start(base.hostname, $config['PORT'],
267
+ :timeout => $config['CALL_TIMEOUT'],
268
+ :use_ssl => base.scheme == "https",
269
+ :verify_mode => OpenSSL::SSL::VERIFY_PEER,
270
+ :ca_file => $config['CA_TRUST']
271
+ ) do |http|
272
+ http.request(request)
273
+ end
274
+ begin
275
+ list = JSON.parse(response.body)
276
+ if list['error']
277
+ return false
278
+ end
279
+ if list['success']
280
+ return true
281
+ end
282
+ rescue
283
+ puts "\nThe server sent out an Error:".red
284
+ puts clean_html(response.body)
285
+ exit 1
286
+ end
287
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phoseum-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julio C Hegedus
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-07 00:00:00.000000000 Z
11
+ date: 2020-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: yaml