aspera-cli 4.15.0 → 4.16.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/BUGS.md +29 -3
  4. data/CHANGELOG.md +292 -228
  5. data/CONTRIBUTING.md +69 -18
  6. data/README.md +1102 -952
  7. data/bin/ascli +13 -31
  8. data/bin/asession +3 -1
  9. data/examples/dascli +2 -2
  10. data/lib/aspera/aoc.rb +28 -33
  11. data/lib/aspera/ascmd.rb +3 -6
  12. data/lib/aspera/assert.rb +45 -0
  13. data/lib/aspera/cli/extended_value.rb +5 -5
  14. data/lib/aspera/cli/formatter.rb +26 -13
  15. data/lib/aspera/cli/hints.rb +4 -3
  16. data/lib/aspera/cli/main.rb +16 -3
  17. data/lib/aspera/cli/manager.rb +45 -36
  18. data/lib/aspera/cli/plugin.rb +20 -13
  19. data/lib/aspera/cli/plugins/aoc.rb +103 -73
  20. data/lib/aspera/cli/plugins/ats.rb +4 -3
  21. data/lib/aspera/cli/plugins/config.rb +114 -119
  22. data/lib/aspera/cli/plugins/cos.rb +2 -2
  23. data/lib/aspera/cli/plugins/faspex.rb +23 -19
  24. data/lib/aspera/cli/plugins/faspex5.rb +75 -43
  25. data/lib/aspera/cli/plugins/node.rb +28 -15
  26. data/lib/aspera/cli/plugins/orchestrator.rb +4 -2
  27. data/lib/aspera/cli/plugins/preview.rb +9 -7
  28. data/lib/aspera/cli/plugins/server.rb +6 -3
  29. data/lib/aspera/cli/plugins/shares.rb +30 -26
  30. data/lib/aspera/cli/sync_actions.rb +9 -9
  31. data/lib/aspera/cli/transfer_agent.rb +21 -14
  32. data/lib/aspera/cli/transfer_progress.rb +2 -3
  33. data/lib/aspera/cli/version.rb +1 -1
  34. data/lib/aspera/command_line_builder.rb +13 -11
  35. data/lib/aspera/cos_node.rb +3 -2
  36. data/lib/aspera/coverage.rb +22 -0
  37. data/lib/aspera/data_repository.rb +33 -2
  38. data/lib/aspera/environment.rb +4 -2
  39. data/lib/aspera/fasp/{agent_aspera.rb → agent_alpha.rb} +29 -39
  40. data/lib/aspera/fasp/agent_base.rb +17 -7
  41. data/lib/aspera/fasp/agent_direct.rb +88 -84
  42. data/lib/aspera/fasp/agent_httpgw.rb +4 -3
  43. data/lib/aspera/fasp/agent_node.rb +3 -2
  44. data/lib/aspera/fasp/agent_trsdk.rb +79 -37
  45. data/lib/aspera/fasp/installation.rb +51 -12
  46. data/lib/aspera/fasp/management.rb +11 -6
  47. data/lib/aspera/fasp/parameters.rb +53 -47
  48. data/lib/aspera/fasp/resume_policy.rb +7 -5
  49. data/lib/aspera/fasp/sync.rb +273 -0
  50. data/lib/aspera/fasp/transfer_spec.rb +10 -8
  51. data/lib/aspera/fasp/uri.rb +2 -2
  52. data/lib/aspera/faspex_gw.rb +11 -8
  53. data/lib/aspera/faspex_postproc.rb +6 -5
  54. data/lib/aspera/id_generator.rb +3 -1
  55. data/lib/aspera/json_rpc.rb +10 -8
  56. data/lib/aspera/keychain/encrypted_hash.rb +46 -11
  57. data/lib/aspera/keychain/macos_security.rb +15 -13
  58. data/lib/aspera/log.rb +4 -3
  59. data/lib/aspera/nagios.rb +7 -2
  60. data/lib/aspera/node.rb +17 -16
  61. data/lib/aspera/node_simulator.rb +214 -0
  62. data/lib/aspera/oauth.rb +22 -19
  63. data/lib/aspera/persistency_action_once.rb +13 -14
  64. data/lib/aspera/persistency_folder.rb +3 -2
  65. data/lib/aspera/preview/file_types.rb +53 -267
  66. data/lib/aspera/preview/generator.rb +7 -5
  67. data/lib/aspera/preview/terminal.rb +14 -5
  68. data/lib/aspera/preview/utils.rb +8 -7
  69. data/lib/aspera/proxy_auto_config.rb +6 -3
  70. data/lib/aspera/rest.rb +29 -13
  71. data/lib/aspera/rest_error_analyzer.rb +1 -0
  72. data/lib/aspera/rest_errors_aspera.rb +2 -0
  73. data/lib/aspera/secret_hider.rb +5 -2
  74. data/lib/aspera/ssh.rb +10 -8
  75. data/lib/aspera/temp_file_manager.rb +1 -1
  76. data/lib/aspera/web_server_simple.rb +2 -1
  77. data.tar.gz.sig +0 -0
  78. metadata +96 -45
  79. metadata.gz.sig +0 -0
  80. data/lib/aspera/sync.rb +0 -219
data/lib/aspera/rest.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'aspera/log'
4
+ require 'aspera/assert'
4
5
  require 'aspera/oauth'
5
6
  require 'aspera/rest_error_analyzer'
6
7
  require 'aspera/hash_ext'
@@ -58,10 +59,11 @@ module Aspera
58
59
  # build URI from URL and parameters and check it is http or https
59
60
  def build_uri(url, params=nil)
60
61
  uri = URI.parse(url)
61
- raise "REST endpoint shall be http/s not #{uri.scheme}" unless %w[http https].include?(uri.scheme)
62
+ assert(%w[http https].include?(uri.scheme)){"REST endpoint shall be http/s not #{uri.scheme}"}
62
63
  return uri if params.nil?
63
64
  Log.log.debug{Log.dump('params', params)}
64
- raise 'Internal Error: param must be Hash' unless params.is_a?(Hash)
65
+ assert_type(params, Hash)
66
+ return uri if params.empty?
65
67
  query = []
66
68
  params.each do |k, v|
67
69
  case v
@@ -103,17 +105,31 @@ module Aspera
103
105
  # little hack, handy because HTTP debug, proxy, etc... will be available
104
106
  # used implement web sockets after `start_http_session`
105
107
  def io_http_session(http_session)
106
- raise "wring type #{http_session.class}" unless http_session.is_a?(Net::HTTP)
108
+ assert_type(http_session, Net::HTTP)
107
109
  # Net::BufferedIO in net/protocol.rb
108
110
  result = http_session.instance_variable_get(:@socket)
109
- raise "no socket for #{http_session}" if result.nil?
111
+ assert(!result.nil?){"no socket for #{http_session}"}
110
112
  return result
111
113
  end
112
114
 
115
+ # @return [String] PEM certificates of remote server
116
+ def remote_certificates(url)
117
+ # initiate a session to retrieve remote certificate
118
+ http_session = Rest.start_http_session(url)
119
+ begin
120
+ # retrieve underlying openssl socket
121
+ return Rest.io_http_session(http_session).io.peer_cert_chain.reverse.map(&:to_pem).join("\n")
122
+ rescue
123
+ return http_session.peer_cert.to_pem
124
+ ensure
125
+ http_session.finish
126
+ end
127
+ end
128
+
113
129
  # set global parameters
114
130
  def set_parameters(**options)
115
131
  options.each do |key, value|
116
- raise "ERROR: unknown Rest option #{key}" unless @@global.key?(key)
132
+ assert(@@global.key?(key)){"unknown Rest option #{key}"}
117
133
  @@global[key] = value
118
134
  end
119
135
  end
@@ -140,7 +156,7 @@ module Aspera
140
156
 
141
157
  def oauth
142
158
  if @oauth.nil?
143
- raise 'ERROR: no OAuth defined' unless @params[:auth][:type].eql?(:oauth2)
159
+ assert(@params[:auth][:type].eql?(:oauth2)){'no OAuth defined'}
144
160
  @oauth = Oauth.new(@params[:auth])
145
161
  end
146
162
  return @oauth
@@ -148,8 +164,8 @@ module Aspera
148
164
 
149
165
  # @param a_rest_params [Hash] default call parameters (merged at call)
150
166
  def initialize(a_rest_params)
151
- raise 'ERROR: expecting Hash' unless a_rest_params.is_a?(Hash)
152
- raise 'ERROR: expecting base_url' unless a_rest_params[:base_url].is_a?(String)
167
+ assert_type(a_rest_params, Hash)
168
+ assert_type(a_rest_params[:base_url], String)
153
169
  @params = a_rest_params.clone
154
170
  Log.log.debug{Log.dump('REST params', @params)}
155
171
  # base url without trailing slashes (note: string may be frozen)
@@ -163,7 +179,7 @@ module Aspera
163
179
  end
164
180
 
165
181
  def oauth_token(force_refresh: false)
166
- raise "ERROR: expecting boolean, have #{force_refresh}" unless [true, false].include?(force_refresh)
182
+ assert_values(force_refresh, [true, false])
167
183
  return oauth.get_authorization(use_refresh_token: force_refresh)
168
184
  end
169
185
 
@@ -227,7 +243,7 @@ module Aspera
227
243
  # :url_query [:url] a hash
228
244
  # :* [:oauth2] see Oauth class
229
245
  def call(call_data)
230
- raise "Hash call parameter is required (#{call_data.class})" unless call_data.is_a?(Hash)
246
+ assert_type(call_data, Hash)
231
247
  call_data[:subpath] = '' if call_data[:subpath].nil?
232
248
  Log.log.debug{"accessing #{call_data[:subpath]}".red.bold.bg_green}
233
249
  call_data[:headers] ||= {}
@@ -247,7 +263,7 @@ module Aspera
247
263
  call_data[:auth][:url_query].each do |key, value|
248
264
  call_data[:url_params][key] = value
249
265
  end
250
- else raise "unsupported auth type: [#{call_data[:auth][:type]}]"
266
+ else error_unexpected_value(call_data[:auth][:type])
251
267
  end
252
268
  req = build_request(call_data)
253
269
  Log.log.debug{"call_data = #{call_data}"}
@@ -332,7 +348,7 @@ module Aspera
332
348
  # special case: relative redirect
333
349
  if URI.parse(new_url).host.nil?
334
350
  # we don't manage relative redirects with non-absolute path
335
- raise "Error: redirect location is relative: #{new_url}, but does not start with /." unless new_url.start_with?('/')
351
+ assert(new_url.start_with?('/')){"redirect location is relative: #{new_url}, but does not start with /."}
336
352
  new_url = current_uri.scheme + '://' + current_uri.host + new_url
337
353
  end
338
354
  Log.log.info{"URL is moved: #{new_url}"}
@@ -390,7 +406,7 @@ module Aspera
390
406
  # API style: {totalcount:, ...} cspell: disable-line
391
407
  # TODO: not generic enough ? move somewhere ? inheritance ?
392
408
  matching_items = matching_items[subpath] if matching_items.is_a?(Hash)
393
- raise "Internal error: expecting array, have #{matching_items.class}" unless matching_items.is_a?(Array)
409
+ assert_type(matching_items, Array)
394
410
  case matching_items.length
395
411
  when 1 then return matching_items.first
396
412
  when 0 then raise %Q{#{ENTITY_NOT_FOUND} #{subpath}: "#{search_name}"}
@@ -90,6 +90,7 @@ module Aspera
90
90
  # @param msg one error message to add to list
91
91
  def add_error(call_context, type, msg)
92
92
  call_context[:messages].push(msg)
93
+ Log.log.trace1{"Found error: #{type}: #{msg}"}
93
94
  log_file = instance.log_file
94
95
  # log error for further analysis (file must exist to activate)
95
96
  return if log_file.nil? || !File.exist?(log_file)
@@ -21,6 +21,8 @@ module Aspera
21
21
  RestErrorAnalyzer.instance.add_simple_handler(name: 'Type 6', path: ['message'])
22
22
  RestErrorAnalyzer.instance.add_handler('Type 7: errors[]') do |type, call_context|
23
23
  next unless call_context[:data].is_a?(Hash) && call_context[:data]['errors'].is_a?(Hash)
24
+ # special for Shares: false positive ? (update global transfer_settings)
25
+ next if call_context[:data].key?('min_connect_version')
24
26
  call_context[:data]['errors'].each do |k, v|
25
27
  RestErrorAnalyzer.add_error(call_context, type, "#{k}: #{v}")
26
28
  end
@@ -6,6 +6,8 @@ require 'logger'
6
6
  module Aspera
7
7
  # remove secret from logs and output
8
8
  class SecretHider
9
+ # configurable:
10
+ ADDITIONAL_KEYS_TO_HIDE = []
9
11
  # display string for hidden secrets
10
12
  HIDDEN_PASSWORD = '🔑'
11
13
  # env vars for ascp with secrets
@@ -14,7 +16,7 @@ module Aspera
14
16
  KEY_SECRETS = %w[password secret passphrase _key apikey crn token].freeze
15
17
  HTTP_SECRETS = %w[Authorization].freeze
16
18
  ALL_SECRETS = [ASCP_ENV_SECRETS, KEY_SECRETS, HTTP_SECRETS].flatten.freeze
17
- KEY_FALSE_POSITIVES = [/^access_key$/].freeze
19
+ KEY_FALSE_POSITIVES = [/^access_key$/, /^fallback_private_key$/].freeze
18
20
  # regex that define named captures :begin and :end
19
21
  REGEX_LOG_REPLACES = [
20
22
  # CLI manager get/set options
@@ -32,7 +34,7 @@ module Aspera
32
34
  # cred in http dump
33
35
  /(?<begin>(?:#{HTTP_SECRETS.join('|')}): )[^\\]+(?<end>\\)/i
34
36
  ].freeze
35
- private_constant :HIDDEN_PASSWORD, :ASCP_ENV_SECRETS, :KEY_SECRETS, :ALL_SECRETS, :REGEX_LOG_REPLACES
37
+ private_constant :HIDDEN_PASSWORD, :ASCP_ENV_SECRETS, :KEY_SECRETS, :HTTP_SECRETS, :ALL_SECRETS, :KEY_FALSE_POSITIVES, :REGEX_LOG_REPLACES
36
38
  @log_secrets = false
37
39
  class << self
38
40
  attr_accessor :log_secrets
@@ -56,6 +58,7 @@ module Aspera
56
58
  return false unless keyword.is_a?(String) && value.is_a?(String)
57
59
  # those are not secrets
58
60
  return false if KEY_FALSE_POSITIVES.any?{|f|f.match?(keyword)}
61
+ return true if ADDITIONAL_KEYS_TO_HIDE.include?(keyword)
59
62
  # check if keyword (name) contains an element that designate it as a secret
60
63
  ALL_SECRETS.any?{|kw|keyword.include?(kw)}
61
64
  end
data/lib/aspera/ssh.rb CHANGED
@@ -2,15 +2,17 @@
2
2
 
3
3
  require 'net/ssh'
4
4
 
5
- # HACK: deactivate ed25519 and ecdsa private keys from ssh identities, as it usually cause problems
6
- old_verbose = $VERBOSE
7
- $VERBOSE = nil
8
- begin
9
- module Net; module SSH; module Authentication; class Session; private; def default_keys; %w[~/.ssh/id_dsa ~/.ssh/id_rsa ~/.ssh2/id_dsa ~/.ssh2/id_rsa]; end; end; end; end; end # rubocop:disable Layout/AccessModifierIndentation, Layout/EmptyLinesAroundAccessModifier, Layout/LineLength, Style/Semicolon
10
- rescue StandardError
11
- # ignore errors
5
+ if ENV.fetch('ASCLI_ENABLE_ED25519', 'false').eql?('false')
6
+ # HACK: deactivate ed25519 and ecdsa private keys from ssh identities, as it usually cause problems
7
+ old_verbose = $VERBOSE
8
+ $VERBOSE = nil
9
+ begin
10
+ module Net; module SSH; module Authentication; class Session; private; def default_keys; %w[~/.ssh/id_dsa ~/.ssh/id_rsa ~/.ssh2/id_dsa ~/.ssh2/id_rsa]; end; end; end; end; end # rubocop:disable Layout/AccessModifierIndentation, Layout/EmptyLinesAroundAccessModifier, Layout/LineLength, Style/Semicolon
11
+ rescue StandardError
12
+ # ignore errors
13
+ end
14
+ $VERBOSE = old_verbose
12
15
  end
13
- $VERBOSE = old_verbose
14
16
 
15
17
  module Aspera
16
18
  # A simple wrapper around Net::SSH
@@ -42,7 +42,7 @@ module Aspera
42
42
  new_file
43
43
  end
44
44
 
45
- # same as above but in global temp folder
45
+ # same as above but in global temp folder, with user's name
46
46
  def new_file_path_global(base_name)
47
47
  username =
48
48
  begin
@@ -3,6 +3,7 @@
3
3
  require 'webrick'
4
4
  require 'webrick/https'
5
5
  require 'aspera/log'
6
+ require 'aspera/assert'
6
7
  require 'openssl'
7
8
 
8
9
  module Aspera
@@ -52,7 +53,7 @@ module Aspera
52
53
  if certificate.nil?
53
54
  webrick_options[:SSLCertName] = [['CN', WEBrick::Utils.getservername]]
54
55
  else
55
- raise 'certificate must be Hash' unless certificate.is_a?(Hash)
56
+ assert_type(certificate, Hash)
56
57
  certificate = certificate.symbolize_keys
57
58
  raise "unexpected key in certificate config: only: #{CERT_PARAMETERS.join(', ')}" if certificate.keys.any?{|k|!CERT_PARAMETERS.include?(k)}
58
59
  webrick_options[:SSLPrivateKey] = if certificate.key?(:key)
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aspera-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.15.0
4
+ version: 4.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Laurent Martin
@@ -37,8 +37,42 @@ cert_chain:
37
37
  eTf9kxhVM40wGQOECVNA8UsEEZHD48eF+csUYZtAJOF5oxTI8UyV9T/o6CgO0c9/
38
38
  Gzz+Qm5ULOUcPiJLjSpaiTrkiIVYiDGnqNSr6R1Hb1c=
39
39
  -----END CERTIFICATE-----
40
- date: 2023-11-17 00:00:00.000000000 Z
40
+ date: 2024-02-14 00:00:00.000000000 Z
41
41
  dependencies:
42
+ - !ruby/object:Gem::Dependency
43
+ name: base64
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: 0.2.0
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: 0.2.0
56
+ - !ruby/object:Gem::Dependency
57
+ name: bigdecimal
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '3.1'
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: 3.1.6
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - "~>"
71
+ - !ruby/object:Gem::Version
72
+ version: '3.1'
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 3.1.6
42
76
  - !ruby/object:Gem::Dependency
43
77
  name: blankslate
44
78
  requirement: !ruby/object:Gem::Requirement
@@ -53,6 +87,20 @@ dependencies:
53
87
  - - "~>"
54
88
  - !ruby/object:Gem::Version
55
89
  version: '3.1'
90
+ - !ruby/object:Gem::Dependency
91
+ name: csv
92
+ requirement: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.0'
97
+ type: :runtime
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.0'
56
104
  - !ruby/object:Gem::Dependency
57
105
  name: execjs
58
106
  requirement: !ruby/object:Gem::Requirement
@@ -81,6 +129,20 @@ dependencies:
81
129
  - - "~>"
82
130
  - !ruby/object:Gem::Version
83
131
  version: '2.0'
132
+ - !ruby/object:Gem::Dependency
133
+ name: mime-types
134
+ requirement: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '3.5'
139
+ type: :runtime
140
+ prerelease: false
141
+ version_requirements: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '3.5'
84
146
  - !ruby/object:Gem::Dependency
85
147
  name: net-ssh
86
148
  requirement: !ruby/object:Gem::Requirement
@@ -95,6 +157,20 @@ dependencies:
95
157
  - - "~>"
96
158
  - !ruby/object:Gem::Version
97
159
  version: '7.0'
160
+ - !ruby/object:Gem::Dependency
161
+ name: rainbow
162
+ requirement: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '3.0'
167
+ type: :runtime
168
+ prerelease: false
169
+ version_requirements: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '3.0'
98
174
  - !ruby/object:Gem::Dependency
99
175
  name: ruby-progressbar
100
176
  requirement: !ruby/object:Gem::Requirement
@@ -208,61 +284,33 @@ dependencies:
208
284
  - !ruby/object:Gem::Version
209
285
  version: '1.0'
210
286
  - !ruby/object:Gem::Dependency
211
- name: mimemagic
212
- requirement: !ruby/object:Gem::Requirement
213
- requirements:
214
- - - "~>"
215
- - !ruby/object:Gem::Version
216
- version: '0.3'
217
- type: :development
218
- prerelease: false
219
- version_requirements: !ruby/object:Gem::Requirement
220
- requirements:
221
- - - "~>"
222
- - !ruby/object:Gem::Version
223
- version: '0.3'
224
- - !ruby/object:Gem::Dependency
225
- name: rmagick
226
- requirement: !ruby/object:Gem::Requirement
227
- requirements:
228
- - - "~>"
229
- - !ruby/object:Gem::Version
230
- version: '5.3'
231
- type: :development
232
- prerelease: false
233
- version_requirements: !ruby/object:Gem::Requirement
234
- requirements:
235
- - - "~>"
236
- - !ruby/object:Gem::Version
237
- version: '5.3'
238
- - !ruby/object:Gem::Dependency
239
- name: bundler
287
+ name: rake
240
288
  requirement: !ruby/object:Gem::Requirement
241
289
  requirements:
242
290
  - - "~>"
243
291
  - !ruby/object:Gem::Version
244
- version: '2.0'
292
+ version: '13.0'
245
293
  type: :development
246
294
  prerelease: false
247
295
  version_requirements: !ruby/object:Gem::Requirement
248
296
  requirements:
249
297
  - - "~>"
250
298
  - !ruby/object:Gem::Version
251
- version: '2.0'
299
+ version: '13.0'
252
300
  - !ruby/object:Gem::Dependency
253
- name: rake
301
+ name: reek
254
302
  requirement: !ruby/object:Gem::Requirement
255
303
  requirements:
256
304
  - - "~>"
257
305
  - !ruby/object:Gem::Version
258
- version: '13.0'
306
+ version: 6.1.0
259
307
  type: :development
260
308
  prerelease: false
261
309
  version_requirements: !ruby/object:Gem::Requirement
262
310
  requirements:
263
311
  - - "~>"
264
312
  - !ruby/object:Gem::Version
265
- version: '13.0'
313
+ version: 6.1.0
266
314
  - !ruby/object:Gem::Dependency
267
315
  name: rspec
268
316
  requirement: !ruby/object:Gem::Requirement
@@ -339,28 +387,28 @@ dependencies:
339
387
  requirements:
340
388
  - - "~>"
341
389
  - !ruby/object:Gem::Version
342
- version: '0.18'
390
+ version: '0.22'
343
391
  type: :development
344
392
  prerelease: false
345
393
  version_requirements: !ruby/object:Gem::Requirement
346
394
  requirements:
347
395
  - - "~>"
348
396
  - !ruby/object:Gem::Version
349
- version: '0.18'
397
+ version: '0.22'
350
398
  - !ruby/object:Gem::Dependency
351
399
  name: solargraph
352
400
  requirement: !ruby/object:Gem::Requirement
353
401
  requirements:
354
402
  - - "~>"
355
403
  - !ruby/object:Gem::Version
356
- version: '0.44'
404
+ version: '0.50'
357
405
  type: :development
358
406
  prerelease: false
359
407
  version_requirements: !ruby/object:Gem::Requirement
360
408
  requirements:
361
409
  - - "~>"
362
410
  - !ruby/object:Gem::Version
363
- version: '0.44'
411
+ version: '0.50'
364
412
  description: Command line interface for IBM Aspera products
365
413
  email:
366
414
  - laurent.martin.aspera@fr.ibm.com
@@ -381,6 +429,7 @@ files:
381
429
  - examples/rubyc
382
430
  - lib/aspera/aoc.rb
383
431
  - lib/aspera/ascmd.rb
432
+ - lib/aspera/assert.rb
384
433
  - lib/aspera/ats_api.rb
385
434
  - lib/aspera/cli/basic_auth_plugin.rb
386
435
  - lib/aspera/cli/error.rb
@@ -412,6 +461,7 @@ files:
412
461
  - lib/aspera/colors.rb
413
462
  - lib/aspera/command_line_builder.rb
414
463
  - lib/aspera/cos_node.rb
464
+ - lib/aspera/coverage.rb
415
465
  - lib/aspera/data/1
416
466
  - lib/aspera/data/2
417
467
  - lib/aspera/data/3
@@ -420,7 +470,7 @@ files:
420
470
  - lib/aspera/data/6
421
471
  - lib/aspera/data_repository.rb
422
472
  - lib/aspera/environment.rb
423
- - lib/aspera/fasp/agent_aspera.rb
473
+ - lib/aspera/fasp/agent_alpha.rb
424
474
  - lib/aspera/fasp/agent_base.rb
425
475
  - lib/aspera/fasp/agent_connect.rb
426
476
  - lib/aspera/fasp/agent_direct.rb
@@ -436,6 +486,7 @@ files:
436
486
  - lib/aspera/fasp/parameters.yaml
437
487
  - lib/aspera/fasp/products.rb
438
488
  - lib/aspera/fasp/resume_policy.rb
489
+ - lib/aspera/fasp/sync.rb
439
490
  - lib/aspera/fasp/transfer_spec.rb
440
491
  - lib/aspera/fasp/uri.rb
441
492
  - lib/aspera/faspex_gw.rb
@@ -449,6 +500,7 @@ files:
449
500
  - lib/aspera/log.rb
450
501
  - lib/aspera/nagios.rb
451
502
  - lib/aspera/node.rb
503
+ - lib/aspera/node_simulator.rb
452
504
  - lib/aspera/oauth.rb
453
505
  - lib/aspera/open_application.rb
454
506
  - lib/aspera/persistency_action_once.rb
@@ -468,7 +520,6 @@ files:
468
520
  - lib/aspera/rest_errors_aspera.rb
469
521
  - lib/aspera/secret_hider.rb
470
522
  - lib/aspera/ssh.rb
471
- - lib/aspera/sync.rb
472
523
  - lib/aspera/temp_file_manager.rb
473
524
  - lib/aspera/timer_limiter.rb
474
525
  - lib/aspera/uri_reader.rb
@@ -480,8 +531,8 @@ licenses:
480
531
  metadata:
481
532
  allowed_push_host: https://rubygems.org
482
533
  homepage_uri: https://github.com/IBM/aspera-cli
483
- source_code_uri: https://github.com/IBM/aspera-cli
484
- changelog_uri: https://github.com/IBM/aspera-cli
534
+ source_code_uri: https://github.com/IBM/aspera-cli/tree/main/lib/aspera
535
+ changelog_uri: https://github.com/IBM/aspera-cli/CHANGELOG.md
485
536
  rubygems_uri: https://rubygems.org/gems/aspera-cli
486
537
  documentation_uri: https://www.rubydoc.info/gems/aspera-cli
487
538
  post_install_message:
@@ -500,7 +551,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
500
551
  version: '0'
501
552
  requirements:
502
553
  - Read the manual for any requirement
503
- rubygems_version: 3.4.10
554
+ rubygems_version: 3.4.19
504
555
  signing_key:
505
556
  specification_version: 4
506
557
  summary: 'Execute actions using command line on IBM Aspera Server products: Aspera
metadata.gz.sig CHANGED
Binary file