aspera-cli 4.13.0 → 4.14.0

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.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +28 -5
  4. data/CONTRIBUTING.md +17 -1
  5. data/README.md +782 -401
  6. data/examples/dascli +1 -1
  7. data/examples/rubyc +24 -0
  8. data/lib/aspera/aoc.rb +21 -32
  9. data/lib/aspera/ascmd.rb +1 -0
  10. data/lib/aspera/cli/basic_auth_plugin.rb +6 -6
  11. data/lib/aspera/cli/formatter.rb +17 -25
  12. data/lib/aspera/cli/main.rb +21 -27
  13. data/lib/aspera/cli/manager.rb +128 -114
  14. data/lib/aspera/cli/plugin.rb +87 -38
  15. data/lib/aspera/cli/plugins/alee.rb +2 -2
  16. data/lib/aspera/cli/plugins/aoc.rb +216 -102
  17. data/lib/aspera/cli/plugins/ats.rb +16 -18
  18. data/lib/aspera/cli/plugins/bss.rb +3 -3
  19. data/lib/aspera/cli/plugins/config.rb +177 -367
  20. data/lib/aspera/cli/plugins/console.rb +4 -6
  21. data/lib/aspera/cli/plugins/cos.rb +12 -13
  22. data/lib/aspera/cli/plugins/faspex.rb +17 -18
  23. data/lib/aspera/cli/plugins/faspex5.rb +332 -216
  24. data/lib/aspera/cli/plugins/node.rb +171 -142
  25. data/lib/aspera/cli/plugins/orchestrator.rb +15 -18
  26. data/lib/aspera/cli/plugins/preview.rb +38 -60
  27. data/lib/aspera/cli/plugins/server.rb +22 -15
  28. data/lib/aspera/cli/plugins/shares.rb +24 -33
  29. data/lib/aspera/cli/plugins/sync.rb +3 -3
  30. data/lib/aspera/cli/transfer_agent.rb +29 -26
  31. data/lib/aspera/cli/version.rb +1 -1
  32. data/lib/aspera/colors.rb +9 -7
  33. data/lib/aspera/data/6 +0 -0
  34. data/lib/aspera/environment.rb +7 -3
  35. data/lib/aspera/fasp/agent_connect.rb +5 -0
  36. data/lib/aspera/fasp/agent_direct.rb +5 -5
  37. data/lib/aspera/fasp/agent_httpgw.rb +138 -60
  38. data/lib/aspera/fasp/agent_trsdk.rb +2 -0
  39. data/lib/aspera/fasp/error_info.rb +2 -0
  40. data/lib/aspera/fasp/installation.rb +18 -19
  41. data/lib/aspera/fasp/parameters.rb +18 -17
  42. data/lib/aspera/fasp/parameters.yaml +2 -1
  43. data/lib/aspera/fasp/resume_policy.rb +3 -3
  44. data/lib/aspera/fasp/transfer_spec.rb +6 -5
  45. data/lib/aspera/fasp/uri.rb +23 -21
  46. data/lib/aspera/faspex_postproc.rb +1 -1
  47. data/lib/aspera/hash_ext.rb +12 -2
  48. data/lib/aspera/keychain/macos_security.rb +13 -13
  49. data/lib/aspera/log.rb +1 -0
  50. data/lib/aspera/node.rb +62 -80
  51. data/lib/aspera/oauth.rb +1 -1
  52. data/lib/aspera/persistency_action_once.rb +1 -1
  53. data/lib/aspera/preview/terminal.rb +61 -15
  54. data/lib/aspera/preview/utils.rb +3 -3
  55. data/lib/aspera/proxy_auto_config.js +2 -2
  56. data/lib/aspera/rest.rb +37 -0
  57. data/lib/aspera/secret_hider.rb +6 -1
  58. data/lib/aspera/ssh.rb +1 -1
  59. data/lib/aspera/sync.rb +2 -0
  60. data.tar.gz.sig +0 -0
  61. metadata +3 -4
  62. metadata.gz.sig +0 -0
  63. data/docs/test_env.conf +0 -186
  64. data/lib/aspera/data/7 +0 -0
@@ -11,11 +11,9 @@ module Aspera
11
11
  private_constant :DEFAULT_FILTER_AGE_SECONDS
12
12
  def initialize(env)
13
13
  super(env)
14
- options.add_opt_date(:filter_from, 'only after date')
15
- options.add_opt_date(:filter_to, 'only before date')
16
14
  time_now = Time.now
17
- options.set_option(:filter_from, Manager.time_to_string(time_now - DEFAULT_FILTER_AGE_SECONDS))
18
- options.set_option(:filter_to, Manager.time_to_string(time_now))
15
+ options.declare(:filter_from, 'Only after date', values: :date, default: Manager.time_to_string(time_now - DEFAULT_FILTER_AGE_SECONDS))
16
+ options.declare(:filter_to, 'Only before date', values: :date, default: Manager.time_to_string(time_now))
19
17
  options.parse_options!
20
18
  end
21
19
 
@@ -54,8 +52,8 @@ module Aspera
54
52
  return {
55
53
  type: :object_list,
56
54
  data: api_console.read('transfers', {
57
- 'from' => options.get_option(:filter_from, is_type: :mandatory),
58
- 'to' => options.get_option(:filter_to, is_type: :mandatory)
55
+ 'from' => options.get_option(:filter_from, mandatory: true),
56
+ 'to' => options.get_option(:filter_to, mandatory: true)
59
57
  })[:data],
60
58
  fields: %w[id contact name status]}
61
59
  end
@@ -11,14 +11,13 @@ module Aspera
11
11
  def initialize(env)
12
12
  super(env)
13
13
  @service_creds = nil
14
- options.add_opt_simple(:bucket, 'Bucket name')
15
- options.add_opt_simple(:endpoint, 'Storage endpoint url')
16
- options.add_opt_simple(:apikey, 'Storage API key')
17
- options.add_opt_simple(:crn, 'Resource instance id')
18
- options.add_opt_simple(:service_credentials, 'IBM Cloud service credentials (Hash)')
19
- options.add_opt_simple(:region, 'Storage region')
20
- options.add_opt_simple(:identity, "Authentication url (#{CosNode::IBM_CLOUD_TOKEN_URL})")
21
- options.set_option(:identity, CosNode::IBM_CLOUD_TOKEN_URL)
14
+ options.declare(:bucket, 'Bucket name')
15
+ options.declare(:endpoint, 'Storage endpoint url')
16
+ options.declare(:apikey, 'Storage API key')
17
+ options.declare(:crn, 'Resource instance id')
18
+ options.declare(:service_credentials, 'IBM Cloud service credentials', types: Hash)
19
+ options.declare(:region, 'Storage region')
20
+ options.declare(:identity, "Authentication url (#{CosNode::IBM_CLOUD_TOKEN_URL})", default: CosNode::IBM_CLOUD_TOKEN_URL)
22
21
  options.parse_options!
23
22
  end
24
23
 
@@ -28,22 +27,22 @@ module Aspera
28
27
  command = options.get_next_command(ACTIONS)
29
28
  case command
30
29
  when :node
31
- bucket_name = options.get_option(:bucket, is_type: :mandatory)
30
+ bucket_name = options.get_option(:bucket, mandatory: true)
32
31
  # get service credentials, Hash, e.g. @json:@file:...
33
32
  service_credentials = options.get_option(:service_credentials)
34
33
  storage_endpoint = options.get_option(:endpoint)
35
34
  raise CliBadArgument, 'one of: endpoint or service_credentials is required' if service_credentials.nil? && storage_endpoint.nil?
36
35
  raise CliBadArgument, 'endpoint and service_credentials are mutually exclusive' unless service_credentials.nil? || storage_endpoint.nil?
37
36
  if service_credentials.nil?
38
- service_api_key = options.get_option(:apikey, is_type: :mandatory)
39
- instance_id = options.get_option(:crn, is_type: :mandatory)
37
+ service_api_key = options.get_option(:apikey, mandatory: true)
38
+ instance_id = options.get_option(:crn, mandatory: true)
40
39
  else
41
- params = CosNode.parameters_from_svc_creds(service_credentials, options.get_option(:region, is_type: :mandatory))
40
+ params = CosNode.parameters_from_svc_creds(service_credentials, options.get_option(:region, mandatory: true))
42
41
  storage_endpoint = params[:storage_endpoint]
43
42
  service_api_key = params[:service_api_key]
44
43
  instance_id = params[:instance_id]
45
44
  end
46
- api_node = CosNode.new(bucket_name, storage_endpoint, instance_id, service_api_key, options.get_option(:identity, is_type: :mandatory))
45
+ api_node = CosNode.new(bucket_name, storage_endpoint, instance_id, service_api_key, options.get_option(:identity, mandatory: true))
47
46
  node_plugin = Node.new(@agents.merge(skip_basic_auth_options: true, node_api: api_node))
48
47
  command = options.get_next_command(Node::COMMANDS_COS)
49
48
  return node_plugin.execute_action(command)
@@ -102,13 +102,12 @@ module Aspera
102
102
  @api_v3 = nil
103
103
  @api_v4 = nil
104
104
  super(env)
105
- options.add_opt_simple(:link, 'public link for specific operation')
106
- options.add_opt_simple(:delivery_info, 'package delivery information (extended value)')
107
- options.add_opt_simple(:source_name, 'create package from remote source (by name)')
108
- options.add_opt_simple(:storage, 'Faspex local storage definition')
109
- options.add_opt_simple(:recipient, 'use if recipient is a dropbox (with *)')
110
- options.add_opt_list(:box, ATOM_MAILBOXES, 'package box')
111
- options.set_option(:box, :inbox)
105
+ options.declare(:link, 'Public link for specific operation')
106
+ options.declare(:delivery_info, 'Package delivery information', types: Hash)
107
+ options.declare(:source_name, 'Create package from remote source (by name)')
108
+ options.declare(:storage, 'Faspex local storage definition')
109
+ options.declare(:recipient, 'Use if recipient is a dropbox (with *)')
110
+ options.declare(:box, 'Package box', values: ATOM_MAILBOXES, default: :inbox)
112
111
  options.parse_options!
113
112
  end
114
113
 
@@ -121,13 +120,13 @@ module Aspera
121
120
 
122
121
  def api_v4
123
122
  if @api_v4.nil?
124
- faspex_api_base = options.get_option(:url, is_type: :mandatory)
123
+ faspex_api_base = options.get_option(:url, mandatory: true)
125
124
  @api_v4 = Rest.new({
126
125
  base_url: faspex_api_base + '/api',
127
126
  auth: {
128
127
  type: :oauth2,
129
128
  base_url: faspex_api_base + '/auth/oauth2',
130
- auth: {type: :basic, username: options.get_option(:username, is_type: :mandatory), password: options.get_option(:password, is_type: :mandatory)},
129
+ auth: {type: :basic, username: options.get_option(:username, mandatory: true), password: options.get_option(:password, mandatory: true)},
131
130
  grant_method: :generic,
132
131
  generic: {grant_type: 'password'},
133
132
  scope: 'admin'
@@ -138,11 +137,11 @@ module Aspera
138
137
 
139
138
  # query supports : {"startIndex":10,"count":1,"page":109,"max":2,"pmax":1}
140
139
  def mailbox_filtered_entries(stop_at_id: nil)
141
- recipient_names = [options.get_option(:recipient) || options.get_option(:username, is_type: :mandatory)]
140
+ recipient_names = [options.get_option(:recipient) || options.get_option(:username, mandatory: true)]
142
141
  # some workgroup messages have no star in recipient name
143
142
  recipient_names.push(recipient_names.first[1..-1]) if recipient_names.first.start_with?('*')
144
143
  # mailbox is in ATOM_MAILBOXES
145
- mailbox = options.get_option(:box, is_type: :mandatory)
144
+ mailbox = options.get_option(:box, mandatory: true)
146
145
  # parameters
147
146
  mailbox_query = options.get_option(:query)
148
147
  max_items = nil
@@ -265,7 +264,7 @@ module Aspera
265
264
  textify: lambda {|table_data|Faspex.textify_package_list(table_data)}
266
265
  }
267
266
  when :send
268
- delivery_info = options.get_option(:delivery_info, is_type: :mandatory)
267
+ delivery_info = options.get_option(:delivery_info, mandatory: true)
269
268
  raise CliBadArgument, 'delivery_info must be hash, refer to doc' unless delivery_info.is_a?(Hash)
270
269
  # actual parameter to faspex API
271
270
  package_create_params = {'delivery' => delivery_info}
@@ -308,15 +307,15 @@ module Aspera
308
307
  skip_ids_persistency = nil
309
308
  case link_url
310
309
  when nil # usual case: no link
311
- if options.get_option(:once_only, is_type: :mandatory)
310
+ if options.get_option(:once_only, mandatory: true)
312
311
  skip_ids_persistency = PersistencyActionOnce.new(
313
312
  manager: @agents[:persistency],
314
313
  data: skip_ids_data,
315
314
  id: IdGenerator.from_list([
316
315
  'faspex_recv',
317
- options.get_option(:url, is_type: :mandatory),
318
- options.get_option(:username, is_type: :mandatory),
319
- options.get_option(:box, is_type: :mandatory).to_s
316
+ options.get_option(:url, mandatory: true),
317
+ options.get_option(:username, mandatory: true),
318
+ options.get_option(:box, mandatory: true).to_s
320
319
  ]))
321
320
  end
322
321
  # get command line parameters
@@ -332,7 +331,7 @@ module Aspera
332
331
  else
333
332
  # TODO: delivery id is the right one if package was receive by workgroup
334
333
  endpoint =
335
- case options.get_option(:box, is_type: :mandatory)
334
+ case options.get_option(:box, mandatory: true)
336
335
  when :inbox, :archive then'received'
337
336
  when :sent then 'sent'
338
337
  end
@@ -412,7 +411,7 @@ module Aspera
412
411
  # get id and name
413
412
  source_name = source_ids.first['name']
414
413
  # source_id=source_ids.first['id']
415
- source_hash = options.get_option(:storage, is_type: :mandatory)
414
+ source_hash = options.get_option(:storage, mandatory: true)
416
415
  # check value of option
417
416
  raise CliError, 'storage option must be a Hash' unless source_hash.is_a?(Hash)
418
417
  source_hash.each do |name, storage|