aspera-cli 4.5.0 → 4.8.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 (104) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +1 -0
  3. data/README.md +1894 -1574
  4. data/bin/ascli +21 -1
  5. data/bin/asession +38 -34
  6. data/docs/test_env.conf +14 -3
  7. data/examples/aoc.rb +17 -15
  8. data/examples/dascli +26 -0
  9. data/examples/faspex4.rb +42 -35
  10. data/examples/proxy.pac +1 -1
  11. data/examples/transfer.rb +38 -37
  12. data/lib/aspera/aoc.rb +245 -205
  13. data/lib/aspera/ascmd.rb +111 -90
  14. data/lib/aspera/ats_api.rb +16 -14
  15. data/lib/aspera/cli/basic_auth_plugin.rb +19 -18
  16. data/lib/aspera/cli/extended_value.rb +50 -39
  17. data/lib/aspera/cli/formater.rb +161 -135
  18. data/lib/aspera/cli/info.rb +18 -0
  19. data/lib/aspera/cli/listener/line_dump.rb +4 -2
  20. data/lib/aspera/cli/listener/logger.rb +3 -1
  21. data/lib/aspera/cli/listener/progress.rb +20 -21
  22. data/lib/aspera/cli/listener/progress_multi.rb +29 -31
  23. data/lib/aspera/cli/main.rb +194 -183
  24. data/lib/aspera/cli/manager.rb +213 -206
  25. data/lib/aspera/cli/plugin.rb +71 -49
  26. data/lib/aspera/cli/plugins/alee.rb +8 -7
  27. data/lib/aspera/cli/plugins/aoc.rb +675 -558
  28. data/lib/aspera/cli/plugins/ats.rb +116 -109
  29. data/lib/aspera/cli/plugins/bss.rb +35 -34
  30. data/lib/aspera/cli/plugins/config.rb +722 -542
  31. data/lib/aspera/cli/plugins/console.rb +28 -22
  32. data/lib/aspera/cli/plugins/cos.rb +28 -37
  33. data/lib/aspera/cli/plugins/faspex.rb +281 -227
  34. data/lib/aspera/cli/plugins/faspex5.rb +129 -84
  35. data/lib/aspera/cli/plugins/node.rb +426 -232
  36. data/lib/aspera/cli/plugins/orchestrator.rb +106 -98
  37. data/lib/aspera/cli/plugins/preview.rb +196 -191
  38. data/lib/aspera/cli/plugins/server.rb +131 -126
  39. data/lib/aspera/cli/plugins/shares.rb +49 -36
  40. data/lib/aspera/cli/plugins/sync.rb +27 -28
  41. data/lib/aspera/cli/transfer_agent.rb +84 -79
  42. data/lib/aspera/cli/version.rb +3 -1
  43. data/lib/aspera/colors.rb +37 -28
  44. data/lib/aspera/command_line_builder.rb +84 -63
  45. data/lib/aspera/cos_node.rb +68 -34
  46. data/lib/aspera/data_repository.rb +4 -2
  47. data/lib/aspera/environment.rb +61 -46
  48. data/lib/aspera/fasp/agent_base.rb +36 -31
  49. data/lib/aspera/fasp/agent_connect.rb +44 -37
  50. data/lib/aspera/fasp/agent_direct.rb +101 -104
  51. data/lib/aspera/fasp/agent_httpgw.rb +91 -90
  52. data/lib/aspera/fasp/agent_node.rb +36 -33
  53. data/lib/aspera/fasp/agent_trsdk.rb +28 -31
  54. data/lib/aspera/fasp/error.rb +3 -1
  55. data/lib/aspera/fasp/error_info.rb +81 -54
  56. data/lib/aspera/fasp/installation.rb +171 -151
  57. data/lib/aspera/fasp/listener.rb +2 -0
  58. data/lib/aspera/fasp/parameters.rb +105 -111
  59. data/lib/aspera/fasp/parameters.yaml +305 -249
  60. data/lib/aspera/fasp/resume_policy.rb +20 -20
  61. data/lib/aspera/fasp/transfer_spec.rb +27 -0
  62. data/lib/aspera/fasp/uri.rb +31 -29
  63. data/lib/aspera/faspex_gw.rb +95 -118
  64. data/lib/aspera/hash_ext.rb +12 -13
  65. data/lib/aspera/id_generator.rb +11 -9
  66. data/lib/aspera/keychain/encrypted_hash.rb +73 -57
  67. data/lib/aspera/keychain/macos_security.rb +27 -29
  68. data/lib/aspera/log.rb +40 -39
  69. data/lib/aspera/nagios.rb +24 -22
  70. data/lib/aspera/node.rb +38 -30
  71. data/lib/aspera/oauth.rb +217 -248
  72. data/lib/aspera/open_application.rb +9 -7
  73. data/lib/aspera/persistency_action_once.rb +15 -14
  74. data/lib/aspera/persistency_folder.rb +15 -18
  75. data/lib/aspera/preview/file_types.rb +266 -270
  76. data/lib/aspera/preview/generator.rb +94 -92
  77. data/lib/aspera/preview/image_error.png +0 -0
  78. data/lib/aspera/preview/options.rb +20 -17
  79. data/lib/aspera/preview/utils.rb +99 -102
  80. data/lib/aspera/preview/video_error.png +0 -0
  81. data/lib/aspera/{proxy_auto_config.erb.js → proxy_auto_config.js} +23 -31
  82. data/lib/aspera/proxy_auto_config.rb +114 -21
  83. data/lib/aspera/rest.rb +144 -142
  84. data/lib/aspera/rest_call_error.rb +3 -2
  85. data/lib/aspera/rest_error_analyzer.rb +31 -31
  86. data/lib/aspera/rest_errors_aspera.rb +18 -16
  87. data/lib/aspera/secret_hider.rb +68 -0
  88. data/lib/aspera/ssh.rb +20 -16
  89. data/lib/aspera/sync.rb +57 -54
  90. data/lib/aspera/temp_file_manager.rb +20 -14
  91. data/lib/aspera/timer_limiter.rb +10 -8
  92. data/lib/aspera/uri_reader.rb +14 -15
  93. data/lib/aspera/web_auth.rb +85 -80
  94. data.tar.gz.sig +0 -0
  95. metadata +169 -40
  96. metadata.gz.sig +2 -0
  97. data/bin/dascli +0 -13
  98. data/docs/Makefile +0 -63
  99. data/docs/README.erb.md +0 -4221
  100. data/docs/README.md +0 -13
  101. data/docs/diagrams.txt +0 -49
  102. data/docs/doc_tools.rb +0 -58
  103. data/lib/aspera/cli/plugins/shares2.rb +0 -114
  104. data/lib/aspera/fasp/default.rb +0 -17
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'aspera/cli/basic_auth_plugin'
2
4
  require 'aspera/nagios'
3
5
 
@@ -5,53 +7,57 @@ module Aspera
5
7
  module Cli
6
8
  module Plugins
7
9
  class Console < BasicAuthPlugin
10
+ DEFAULT_FILTER_AGE_SECONDS = 3 * 3600
11
+ private_constant :DEFAULT_FILTER_AGE_SECONDS
8
12
  def initialize(env)
9
13
  super(env)
10
- self.options.add_opt_date(:filter_from,"only after date")
11
- self.options.add_opt_date(:filter_to,"only before date")
12
- self.options.set_option(:filter_from,Manager.time_to_string(Time.now - 3*3600))
13
- self.options.set_option(:filter_to,Manager.time_to_string(Time.now))
14
- self.options.parse_options!
14
+ options.add_opt_date(:filter_from,'only after date')
15
+ options.add_opt_date(:filter_to,'only before date')
16
+ 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))
19
+ options.parse_options!
15
20
  end
16
21
 
17
- ACTIONS=[:transfer,:health]
22
+ ACTIONS = %i[transfer health].freeze
18
23
 
19
24
  def execute_action
20
- api_console=basic_auth_api('api')
21
- command=self.options.get_next_command(ACTIONS)
25
+ api_console = basic_auth_api('api')
26
+ command = options.get_next_command(ACTIONS)
22
27
  case command
23
28
  when :health
24
- nagios=Nagios.new
29
+ nagios = Nagios.new
25
30
  begin
26
31
  api_console.read('ssh_keys')
27
32
  nagios.add_ok('console api','accessible')
28
- rescue => e
33
+ rescue StandardError => e
29
34
  nagios.add_critical('console api',e.to_s)
30
35
  end
31
36
  return nagios.result
32
37
  when :transfer
33
- command=self.options.get_next_command([ :current, :smart ])
38
+ command = options.get_next_command(%i[current smart])
34
39
  case command
35
40
  when :smart
36
- command=self.options.get_next_command([:list,:submit])
41
+ command = options.get_next_command(%i[list submit])
37
42
  case command
38
43
  when :list
39
- return {:type=>:object_list,:data=>api_console.read('smart_transfers')[:data]}
44
+ return {type: :object_list,data: api_console.read('smart_transfers')[:data]}
40
45
  when :submit
41
- smart_id = self.options.get_next_argument("smart_id")
42
- params = self.options.get_next_argument("transfer parameters")
43
- return {:type=>:object_list,:data=>api_console.create('smart_transfers/'+smart_id,params)[:data]}
46
+ smart_id = options.get_next_argument('smart_id')
47
+ params = options.get_next_argument('transfer parameters')
48
+ return {type: :object_list,data: api_console.create('smart_transfers/' + smart_id,params)[:data]}
44
49
  end
45
50
  when :current
46
- command=self.options.get_next_command([ :list ])
51
+ command = options.get_next_command([:list])
47
52
  case command
48
53
  when :list
49
- return {:type=>:object_list,
50
- :data=>api_console.read('transfers',{
51
- 'from'=>self.options.get_option(:filter_from,:mandatory),
52
- 'to'=>self.options.get_option(:filter_to,:mandatory)
54
+ return {
55
+ type: :object_list,
56
+ 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)
53
59
  })[:data],
54
- :fields=>['id','contact','name','status']}
60
+ fields: %w[id contact name status]}
55
61
  end
56
62
  end
57
63
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'aspera/cli/plugin'
2
4
  require 'aspera/cli/plugins/node'
3
5
  require 'aspera/cos_node'
@@ -8,55 +10,44 @@ module Aspera
8
10
  class Cos < Plugin
9
11
  def initialize(env)
10
12
  super(env)
11
- @service_creds=nil
12
- self.options.add_opt_simple(:bucket,'IBM Cloud Object storage bucket')
13
- self.options.add_opt_simple(:endpoint,'storage endpoint url')
14
- self.options.add_opt_simple(:apikey,'storage API key')
15
- self.options.add_opt_simple(:crn,'ressource instance id')
16
- #self.options.add_opt_simple(:oauth,'Oauth url')
17
- self.options.add_opt_simple(:service_credentials,'IBM Cloud service credentials (Hash)')
18
- self.options.add_opt_simple(:region,'IBM Cloud Object storage region')
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,'Ressource 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)
22
+ options.parse_options!
19
23
  end
20
24
 
21
- ACTIONS=[:node]
25
+ ACTIONS = %i[node].freeze
22
26
 
23
27
  def execute_action
24
- command=self.options.get_next_command(ACTIONS)
28
+ command = options.get_next_command(ACTIONS)
25
29
  case command
26
30
  when :node
27
- bucket_name=self.options.get_option(:bucket,:mandatory)
31
+ bucket_name = options.get_option(:bucket,is_type: :mandatory)
28
32
  # get service credentials, Hash, e.g. @json:@file:...
29
- service_credentials=self.options.get_option(:service_credentials,:optional)
30
- storage_endpoint=self.options.get_option(:endpoint,:optional)
31
- raise "one of: endpoint or service_credentials is required" if service_credentials.nil? and storage_endpoint.nil?
32
- raise "endpoint and service_credentials are mutually exclusive" unless service_credentials.nil? or storage_endpoint.nil?
33
+ service_credentials = options.get_option(:service_credentials)
34
+ storage_endpoint = options.get_option(:endpoint)
35
+ raise CliBadArgument,'one of: endpoint or service_credentials is required' if service_credentials.nil? && storage_endpoint.nil?
36
+ raise CliBadArgument,'endpoint and service_credentials are mutually exclusive' unless service_credentials.nil? || storage_endpoint.nil?
33
37
  if service_credentials.nil?
34
- service_api_key = self.options.get_option(:apikey,:mandatory)
35
- instance_id = self.options.get_option(:crn,:mandatory)
38
+ service_api_key = options.get_option(:apikey,is_type: :mandatory)
39
+ instance_id = options.get_option(:crn,is_type: :mandatory)
36
40
  else
37
- # check necessary contents
38
- raise CliBadArgument,'service_credentials must be a Hash' unless service_credentials.is_a?(Hash)
39
- ['apikey','resource_instance_id','endpoints'].each do |field|
40
- raise CliBadArgument,"service_credentials must have a field: #{field}" unless service_credentials.has_key?(field)
41
- end
42
- Aspera::Log.dump('service_credentials',service_credentials)
43
- # get options
44
- bucket_region=self.options.get_option(:region,:mandatory)
45
- # get API key from service credentials
46
- service_api_key=service_credentials['apikey']
47
- instance_id=service_credentials['resource_instance_id']
48
- # read endpoints from service provided in service credentials
49
- endpoints=Aspera::Rest.new({:base_url=>service_credentials['endpoints']}).read('')[:data]
50
- Aspera::Log.dump('endpoints',endpoints)
51
- storage_endpoint=endpoints.dig('service-endpoints','regional',bucket_region,'public',bucket_region)
52
- raise "no such region: #{bucket_region}" if storage_endpoint.nil?
53
- storage_endpoint='https://'+storage_endpoint
41
+ params=CosNode.parameters_from_svc_creds(service_credentials,options.get_option(:region,is_type: :mandatory))
42
+ storage_endpoint = params[:storage_endpoint]
43
+ service_api_key = params[:service_api_key]
44
+ instance_id = params[:instance_id]
54
45
  end
55
- api_node=CosNode.new(bucket_name,storage_endpoint,instance_id,service_api_key)
46
+ api_node = CosNode.new(bucket_name,storage_endpoint,instance_id,service_api_key,options.get_option(:identity,is_type: :mandatory))
56
47
  #command=self.options.get_next_command(Node::ACTIONS)
57
48
  #command=self.options.get_next_command(Node::COMMON_ACTIONS)
58
- command=self.options.get_next_command([:upload,:download,:info,:access_key,:api_details])
59
- node_plugin=Node.new(@agents.merge(skip_basic_auth_options: true, node_api: api_node, add_request_param: api_node.add_ts))
49
+ command = options.get_next_command(%i[upload download info access_key api_details transfer])
50
+ node_plugin = Node.new(@agents.merge(skip_basic_auth_options: true, node_api: api_node, add_request_param: api_node.add_ts))
60
51
  return node_plugin.execute_action(command)
61
52
  end
62
53
  end