aspera-cli 4.4.0 → 4.7.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 (97) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2095 -1503
  3. data/bin/ascli +2 -1
  4. data/bin/asession +4 -5
  5. data/docs/test_env.conf +3 -0
  6. data/examples/aoc.rb +4 -3
  7. data/examples/faspex4.rb +25 -25
  8. data/examples/proxy.pac +1 -1
  9. data/examples/transfer.rb +17 -17
  10. data/lib/aspera/aoc.rb +238 -185
  11. data/lib/aspera/ascmd.rb +93 -83
  12. data/lib/aspera/ats_api.rb +11 -10
  13. data/lib/aspera/cli/basic_auth_plugin.rb +13 -14
  14. data/lib/aspera/cli/extended_value.rb +42 -33
  15. data/lib/aspera/cli/formater.rb +142 -108
  16. data/lib/aspera/cli/info.rb +17 -0
  17. data/lib/aspera/cli/listener/line_dump.rb +3 -2
  18. data/lib/aspera/cli/listener/logger.rb +2 -1
  19. data/lib/aspera/cli/listener/progress.rb +16 -18
  20. data/lib/aspera/cli/listener/progress_multi.rb +18 -21
  21. data/lib/aspera/cli/main.rb +173 -149
  22. data/lib/aspera/cli/manager.rb +163 -168
  23. data/lib/aspera/cli/plugin.rb +43 -31
  24. data/lib/aspera/cli/plugins/alee.rb +6 -6
  25. data/lib/aspera/cli/plugins/aoc.rb +405 -370
  26. data/lib/aspera/cli/plugins/ats.rb +86 -79
  27. data/lib/aspera/cli/plugins/bss.rb +14 -16
  28. data/lib/aspera/cli/plugins/config.rb +580 -362
  29. data/lib/aspera/cli/plugins/console.rb +23 -19
  30. data/lib/aspera/cli/plugins/cos.rb +18 -18
  31. data/lib/aspera/cli/plugins/faspex.rb +201 -158
  32. data/lib/aspera/cli/plugins/faspex5.rb +80 -57
  33. data/lib/aspera/cli/plugins/node.rb +183 -166
  34. data/lib/aspera/cli/plugins/orchestrator.rb +71 -67
  35. data/lib/aspera/cli/plugins/preview.rb +92 -96
  36. data/lib/aspera/cli/plugins/server.rb +79 -75
  37. data/lib/aspera/cli/plugins/shares.rb +35 -19
  38. data/lib/aspera/cli/plugins/sync.rb +20 -22
  39. data/lib/aspera/cli/transfer_agent.rb +76 -113
  40. data/lib/aspera/cli/version.rb +2 -1
  41. data/lib/aspera/colors.rb +35 -27
  42. data/lib/aspera/command_line_builder.rb +48 -34
  43. data/lib/aspera/cos_node.rb +29 -21
  44. data/lib/aspera/data_repository.rb +3 -2
  45. data/lib/aspera/environment.rb +50 -45
  46. data/lib/aspera/fasp/{manager.rb → agent_base.rb} +28 -25
  47. data/lib/aspera/fasp/{connect.rb → agent_connect.rb} +52 -43
  48. data/lib/aspera/fasp/{local.rb → agent_direct.rb} +58 -72
  49. data/lib/aspera/fasp/{http_gw.rb → agent_httpgw.rb} +37 -43
  50. data/lib/aspera/fasp/{node.rb → agent_node.rb} +35 -16
  51. data/lib/aspera/fasp/agent_trsdk.rb +104 -0
  52. data/lib/aspera/fasp/error.rb +2 -1
  53. data/lib/aspera/fasp/error_info.rb +68 -52
  54. data/lib/aspera/fasp/installation.rb +152 -124
  55. data/lib/aspera/fasp/listener.rb +1 -0
  56. data/lib/aspera/fasp/parameters.rb +87 -92
  57. data/lib/aspera/fasp/parameters.yaml +305 -249
  58. data/lib/aspera/fasp/resume_policy.rb +11 -14
  59. data/lib/aspera/fasp/transfer_spec.rb +26 -0
  60. data/lib/aspera/fasp/uri.rb +22 -21
  61. data/lib/aspera/faspex_gw.rb +55 -89
  62. data/lib/aspera/hash_ext.rb +4 -3
  63. data/lib/aspera/id_generator.rb +8 -7
  64. data/lib/aspera/keychain/encrypted_hash.rb +121 -0
  65. data/lib/aspera/keychain/macos_security.rb +90 -0
  66. data/lib/aspera/log.rb +55 -37
  67. data/lib/aspera/nagios.rb +13 -12
  68. data/lib/aspera/node.rb +30 -25
  69. data/lib/aspera/oauth.rb +175 -226
  70. data/lib/aspera/open_application.rb +4 -3
  71. data/lib/aspera/persistency_action_once.rb +6 -6
  72. data/lib/aspera/persistency_folder.rb +5 -9
  73. data/lib/aspera/preview/file_types.rb +6 -5
  74. data/lib/aspera/preview/generator.rb +25 -24
  75. data/lib/aspera/preview/options.rb +16 -14
  76. data/lib/aspera/preview/utils.rb +98 -98
  77. data/lib/aspera/{proxy_auto_config.erb.js → proxy_auto_config.js} +23 -31
  78. data/lib/aspera/proxy_auto_config.rb +111 -20
  79. data/lib/aspera/rest.rb +154 -135
  80. data/lib/aspera/rest_call_error.rb +2 -2
  81. data/lib/aspera/rest_error_analyzer.rb +23 -25
  82. data/lib/aspera/rest_errors_aspera.rb +15 -14
  83. data/lib/aspera/ssh.rb +12 -10
  84. data/lib/aspera/sync.rb +42 -41
  85. data/lib/aspera/temp_file_manager.rb +18 -14
  86. data/lib/aspera/timer_limiter.rb +2 -1
  87. data/lib/aspera/uri_reader.rb +7 -5
  88. data/lib/aspera/web_auth.rb +79 -76
  89. metadata +116 -29
  90. data/docs/Makefile +0 -66
  91. data/docs/README.erb.md +0 -3973
  92. data/docs/README.md +0 -13
  93. data/docs/diagrams.txt +0 -49
  94. data/docs/doc_tools.rb +0 -58
  95. data/lib/aspera/api_detector.rb +0 -60
  96. data/lib/aspera/cli/plugins/shares2.rb +0 -114
  97. data/lib/aspera/secrets.rb +0 -20
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'aspera/cli/basic_auth_plugin'
2
3
  require 'aspera/nagios'
3
4
 
@@ -5,53 +6,56 @@ module Aspera
5
6
  module Cli
6
7
  module Plugins
7
8
  class Console < BasicAuthPlugin
9
+ DEFAULT_FILTER_AGE_SECONDS=3*3600
10
+ private_constant :DEFAULT_FILTER_AGE_SECONDS
8
11
  def initialize(env)
9
12
  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!
13
+ options.add_opt_date(:filter_from,'only after date')
14
+ options.add_opt_date(:filter_to,'only before date')
15
+ time_now=Time.now
16
+ options.set_option(:filter_from,Manager.time_to_string(time_now - DEFAULT_FILTER_AGE_SECONDS))
17
+ options.set_option(:filter_to,Manager.time_to_string(time_now))
18
+ options.parse_options!
15
19
  end
16
20
 
17
21
  ACTIONS=[:transfer,:health]
18
22
 
19
23
  def execute_action
20
24
  api_console=basic_auth_api('api')
21
- command=self.options.get_next_command(ACTIONS)
25
+ command=options.get_next_command(ACTIONS)
22
26
  case command
23
27
  when :health
24
28
  nagios=Nagios.new
25
29
  begin
26
30
  api_console.read('ssh_keys')
27
31
  nagios.add_ok('console api','accessible')
28
- rescue => e
32
+ rescue StandardError => e
29
33
  nagios.add_critical('console api',e.to_s)
30
34
  end
31
35
  return nagios.result
32
36
  when :transfer
33
- command=self.options.get_next_command([ :current, :smart ])
37
+ command=options.get_next_command([:current, :smart])
34
38
  case command
35
39
  when :smart
36
- command=self.options.get_next_command([:list,:submit])
40
+ command=options.get_next_command([:list,:submit])
37
41
  case command
38
42
  when :list
39
- return {:type=>:object_list,:data=>api_console.read('smart_transfers')[:data]}
43
+ return {type: :object_list,data: api_console.read('smart_transfers')[:data]}
40
44
  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]}
45
+ smart_id = options.get_next_argument('smart_id')
46
+ params = options.get_next_argument('transfer parameters')
47
+ return {type: :object_list,data: api_console.create('smart_transfers/'+smart_id,params)[:data]}
44
48
  end
45
49
  when :current
46
- command=self.options.get_next_command([ :list ])
50
+ command=options.get_next_command([:list])
47
51
  case command
48
52
  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)
53
+ return {type: :object_list,
54
+ data: api_console.read('transfers',{
55
+ 'from'=>options.get_option(:filter_from,:mandatory),
56
+ 'to'=>options.get_option(:filter_to,:mandatory)
53
57
  })[:data],
54
- :fields=>['id','contact','name','status']}
58
+ fields: ['id','contact','name','status']}
55
59
  end
56
60
  end
57
61
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'aspera/cli/plugin'
2
3
  require 'aspera/cli/plugins/node'
3
4
  require 'aspera/cos_node'
@@ -9,30 +10,29 @@ module Aspera
9
10
  def initialize(env)
10
11
  super(env)
11
12
  @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
+ options.add_opt_simple(:bucket,'IBM Cloud Object Storage bucket name')
14
+ options.add_opt_simple(:endpoint,'storage endpoint url')
15
+ options.add_opt_simple(:apikey,'storage API key')
16
+ options.add_opt_simple(:crn,'ressource instance id')
17
+ options.add_opt_simple(:service_credentials,'IBM Cloud service credentials (Hash)')
18
+ options.add_opt_simple(:region,'IBM Cloud Object storage region')
19
19
  end
20
20
 
21
21
  ACTIONS=[:node]
22
22
 
23
23
  def execute_action
24
- command=self.options.get_next_command(ACTIONS)
24
+ command=options.get_next_command(ACTIONS)
25
25
  case command
26
26
  when :node
27
- bucket_name=self.options.get_option(:bucket,:mandatory)
27
+ bucket_name=options.get_option(:bucket,:mandatory)
28
28
  # 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?
29
+ service_credentials=options.get_option(:service_credentials,:optional)
30
+ storage_endpoint=options.get_option(:endpoint,:optional)
31
+ raise 'one of: endpoint or service_credentials is required' if service_credentials.nil? && storage_endpoint.nil?
32
+ raise 'endpoint and service_credentials are mutually exclusive' unless service_credentials.nil? || storage_endpoint.nil?
33
33
  if service_credentials.nil?
34
- service_api_key = self.options.get_option(:apikey,:mandatory)
35
- instance_id = self.options.get_option(:crn,:mandatory)
34
+ service_api_key = options.get_option(:apikey,:mandatory)
35
+ instance_id = options.get_option(:crn,:mandatory)
36
36
  else
37
37
  # check necessary contents
38
38
  raise CliBadArgument,'service_credentials must be a Hash' unless service_credentials.is_a?(Hash)
@@ -41,12 +41,12 @@ module Aspera
41
41
  end
42
42
  Aspera::Log.dump('service_credentials',service_credentials)
43
43
  # get options
44
- bucket_region=self.options.get_option(:region,:mandatory)
44
+ bucket_region=options.get_option(:region,:mandatory)
45
45
  # get API key from service credentials
46
46
  service_api_key=service_credentials['apikey']
47
47
  instance_id=service_credentials['resource_instance_id']
48
48
  # read endpoints from service provided in service credentials
49
- endpoints=Aspera::Rest.new({:base_url=>service_credentials['endpoints']}).read('')[:data]
49
+ endpoints=Aspera::Rest.new({base_url: service_credentials['endpoints']}).read('')[:data]
50
50
  Aspera::Log.dump('endpoints',endpoints)
51
51
  storage_endpoint=endpoints.dig('service-endpoints','regional',bucket_region,'public',bucket_region)
52
52
  raise "no such region: #{bucket_region}" if storage_endpoint.nil?
@@ -55,7 +55,7 @@ module Aspera
55
55
  api_node=CosNode.new(bucket_name,storage_endpoint,instance_id,service_api_key)
56
56
  #command=self.options.get_next_command(Node::ACTIONS)
57
57
  #command=self.options.get_next_command(Node::COMMON_ACTIONS)
58
- command=self.options.get_next_command([:upload,:download,:info,:access_key,:api_details])
58
+ command=options.get_next_command([:upload,:download,:info,:access_key,:api_details])
59
59
  node_plugin=Node.new(@agents.merge(skip_basic_auth_options: true, node_api: api_node, add_request_param: api_node.add_ts))
60
60
  return node_plugin.execute_action(command)
61
61
  end