aspera-cli 4.2.1 → 4.5.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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1580 -946
  3. data/bin/ascli +1 -1
  4. data/bin/asession +3 -5
  5. data/docs/Makefile +8 -11
  6. data/docs/README.erb.md +1521 -829
  7. data/docs/doc_tools.rb +58 -0
  8. data/docs/test_env.conf +3 -1
  9. data/examples/faspex4.rb +28 -19
  10. data/examples/transfer.rb +2 -2
  11. data/lib/aspera/aoc.rb +157 -134
  12. data/lib/aspera/cli/listener/progress_multi.rb +5 -5
  13. data/lib/aspera/cli/main.rb +106 -48
  14. data/lib/aspera/cli/manager.rb +19 -20
  15. data/lib/aspera/cli/plugin.rb +22 -7
  16. data/lib/aspera/cli/plugins/aoc.rb +260 -208
  17. data/lib/aspera/cli/plugins/ats.rb +11 -10
  18. data/lib/aspera/cli/plugins/bss.rb +2 -2
  19. data/lib/aspera/cli/plugins/config.rb +360 -189
  20. data/lib/aspera/cli/plugins/faspex.rb +119 -56
  21. data/lib/aspera/cli/plugins/faspex5.rb +32 -17
  22. data/lib/aspera/cli/plugins/node.rb +72 -31
  23. data/lib/aspera/cli/plugins/orchestrator.rb +5 -3
  24. data/lib/aspera/cli/plugins/preview.rb +94 -68
  25. data/lib/aspera/cli/plugins/server.rb +16 -5
  26. data/lib/aspera/cli/plugins/shares.rb +17 -0
  27. data/lib/aspera/cli/transfer_agent.rb +64 -82
  28. data/lib/aspera/cli/version.rb +1 -1
  29. data/lib/aspera/command_line_builder.rb +48 -31
  30. data/lib/aspera/cos_node.rb +4 -3
  31. data/lib/aspera/environment.rb +4 -4
  32. data/lib/aspera/fasp/{manager.rb → agent_base.rb} +7 -6
  33. data/lib/aspera/fasp/{connect.rb → agent_connect.rb} +46 -39
  34. data/lib/aspera/fasp/{local.rb → agent_direct.rb} +42 -38
  35. data/lib/aspera/fasp/{http_gw.rb → agent_httpgw.rb} +50 -29
  36. data/lib/aspera/fasp/{node.rb → agent_node.rb} +43 -4
  37. data/lib/aspera/fasp/agent_trsdk.rb +106 -0
  38. data/lib/aspera/fasp/default.rb +17 -0
  39. data/lib/aspera/fasp/installation.rb +64 -48
  40. data/lib/aspera/fasp/parameters.rb +78 -91
  41. data/lib/aspera/fasp/parameters.yaml +531 -0
  42. data/lib/aspera/fasp/uri.rb +1 -1
  43. data/lib/aspera/faspex_gw.rb +12 -11
  44. data/lib/aspera/id_generator.rb +22 -0
  45. data/lib/aspera/keychain/encrypted_hash.rb +120 -0
  46. data/lib/aspera/keychain/macos_security.rb +94 -0
  47. data/lib/aspera/log.rb +45 -32
  48. data/lib/aspera/node.rb +9 -4
  49. data/lib/aspera/oauth.rb +116 -100
  50. data/lib/aspera/persistency_action_once.rb +11 -7
  51. data/lib/aspera/persistency_folder.rb +6 -26
  52. data/lib/aspera/rest.rb +66 -50
  53. data/lib/aspera/sync.rb +40 -35
  54. data/lib/aspera/timer_limiter.rb +22 -0
  55. metadata +86 -29
  56. data/docs/transfer_spec.html +0 -99
  57. data/lib/aspera/api_detector.rb +0 -60
  58. data/lib/aspera/fasp/aoc.rb +0 -24
  59. data/lib/aspera/secrets.rb +0 -20
data/lib/aspera/rest.rb CHANGED
@@ -35,8 +35,14 @@ module Aspera
35
35
  @@insecure=false
36
36
  @@user_agent='Ruby'
37
37
  @@download_partial_suffix='.http_partial'
38
+ # a lambda which takes the Net::HTTP as arg, use this to change parameters
39
+ @@session_cb=nil
38
40
 
39
41
  public
42
+ def self.session_cb=(v); @@session_cb=v;Log.log.debug("session_cb => #{@@session_cb}".red);end
43
+
44
+ def self.session_cb; @@session_cb;end
45
+
40
46
  def self.insecure=(v); @@insecure=v;Log.log.debug("insecure => #{@@insecure}".red);end
41
47
 
42
48
  def self.insecure; @@insecure;end
@@ -85,12 +91,9 @@ module Aspera
85
91
  # this honors http_proxy env var
86
92
  @http_session=Net::HTTP.new(uri.host, uri.port)
87
93
  @http_session.use_ssl = uri.scheme.eql?('https')
88
- Log.log.debug("insecure=#{@@insecure}")
89
94
  @http_session.verify_mode = OpenSSL::SSL::VERIFY_NONE if @@insecure
90
95
  @http_session.set_debug_output($stdout) if @@debug
91
- if @params.has_key?(:session_cb)
92
- @params[:session_cb].call(@http_session)
93
- end
96
+ @@session_cb.call(@http_session) unless @@session_cb.nil?
94
97
  # manually start session for keep alive (if supported by server, else, session is closed every time)
95
98
  @http_session.start
96
99
  end
@@ -107,7 +110,6 @@ module Aspera
107
110
  # :username [:basic]
108
111
  # :password [:basic]
109
112
  # :url_creds [:url]
110
- # :session_cb a lambda which takes @http_session as arg, use this to change parameters
111
113
  # :* [:oauth2] see Oauth class
112
114
  def initialize(a_rest_params)
113
115
  raise "ERROR: expecting Hash" unless a_rest_params.is_a?(Hash)
@@ -125,51 +127,18 @@ module Aspera
125
127
  end
126
128
 
127
129
  def oauth_token(options={})
128
- raise "ERROR: not Oauth" unless @oauth.is_a?(Oauth)
130
+ raise "ERROR: expecting Oauth, have #{@oauth.class}" unless @oauth.is_a?(Oauth)
129
131
  return @oauth.get_authorization(options)
130
132
  end
131
133
 
132
- # HTTP/S REST call
133
- # call_data has keys:
134
- # :auth
135
- # :operation
136
- # :subpath
137
- # :headers
138
- # :json_params
139
- # :url_params
140
- # :www_body_params
141
- # :text_body_params
142
- # :save_to_file (filepath)
143
- # :return_error (bool)
144
- def call(call_data)
145
- raise "Hash call parameter is required (#{call_data.class})" unless call_data.is_a?(Hash)
146
- Log.log.debug("accessing #{call_data[:subpath]}".red.bold.bg_green)
147
- call_data[:headers]||={}
148
- call_data[:headers]['User-Agent'] ||= @@user_agent
149
- # defaults from @params are overriden by call dataz
150
- call_data=@params.deep_merge(call_data)
151
- case call_data[:auth][:type]
152
- when :none
153
- # no auth
154
- when :basic
155
- Log.log.debug("using Basic auth")
156
- basic_auth_data=[call_data[:auth][:username],call_data[:auth][:password]]
157
- when :oauth2
158
- call_data[:headers]['Authorization']=oauth_token unless call_data[:headers].has_key?('Authorization')
159
- when :url
160
- call_data[:url_params]||={}
161
- call_data[:auth][:url_creds].each do |key, value|
162
- call_data[:url_params][key]=value
163
- end
164
- else raise "unsupported auth type: [#{call_data[:auth][:type]}]"
165
- end
134
+ def build_request(call_data)
166
135
  # TODO: shall we percent encode subpath (spaces) test with access key delete with space in id
167
136
  # URI.escape()
168
- uri=self.class.build_uri("#{@params[:base_url]}#{call_data[:subpath].nil? ? '' : '/'}#{call_data[:subpath]}",call_data[:url_params])
137
+ uri=self.class.build_uri("#{call_data[:base_url]}#{['','/'].include?(call_data[:subpath]) ? '' : '/'}#{call_data[:subpath]}",call_data[:url_params])
169
138
  Log.log.debug("URI=#{uri}")
170
139
  begin
171
140
  # instanciate request object based on string name
172
- req=Object::const_get('Net::HTTP::'+call_data[:operation].capitalize).new(uri.request_uri)
141
+ req=Object::const_get('Net::HTTP::'+call_data[:operation].capitalize).new(uri)#.request_uri
173
142
  rescue NameError => e
174
143
  raise "unsupported operation : #{call_data[:operation]}"
175
144
  end
@@ -196,20 +165,59 @@ module Aspera
196
165
  end
197
166
  end
198
167
  # :type = :basic
199
- req.basic_auth(*basic_auth_data) unless basic_auth_data.nil?
168
+ req.basic_auth(call_data[:auth][:username],call_data[:auth][:password]) if call_data[:auth][:type].eql?(:basic)
169
+ return req
170
+ end
200
171
 
172
+ # HTTP/S REST call
173
+ # call_data has keys:
174
+ # :auth
175
+ # :operation
176
+ # :subpath
177
+ # :headers
178
+ # :json_params
179
+ # :url_params
180
+ # :www_body_params
181
+ # :text_body_params
182
+ # :save_to_file (filepath)
183
+ # :return_error (bool)
184
+ # :redirect_max (int)
185
+ def call(call_data)
186
+ raise "Hash call parameter is required (#{call_data.class})" unless call_data.is_a?(Hash)
187
+ call_data[:subpath]='' if call_data[:subpath].nil?
188
+ Log.log.debug("accessing #{call_data[:subpath]}".red.bold.bg_green)
189
+ call_data[:headers]||={}
190
+ call_data[:headers]['User-Agent'] ||= @@user_agent
191
+ # defaults from @params are overriden by call data
192
+ call_data=@params.deep_merge(call_data)
193
+ case call_data[:auth][:type]
194
+ when :none
195
+ # no auth
196
+ when :basic
197
+ Log.log.debug("using Basic auth")
198
+ # done in build_req
199
+ when :oauth2
200
+ call_data[:headers]['Authorization']=oauth_token unless call_data[:headers].has_key?('Authorization')
201
+ when :url
202
+ call_data[:url_params]||={}
203
+ call_data[:auth][:url_creds].each do |key, value|
204
+ call_data[:url_params][key]=value
205
+ end
206
+ else raise "unsupported auth type: [#{call_data[:auth][:type]}]"
207
+ end
208
+ req=build_request(call_data)
201
209
  Log.log.debug("call_data = #{call_data}")
202
210
  result={:http=>nil}
203
211
  # start a block to be able to retry the actual HTTP request
204
212
  begin
205
213
  # we try the call, and will retry only if oauth, as we can, first with refresh, and then re-auth if refresh is bad
206
214
  oauth_tries ||= 2
207
- tries_remain_redirect||=4
215
+ tries_remain_redirect||=call_data[:redirect_max].nil? ? 0 : call_data[:redirect_max].to_i
208
216
  Log.log.debug("send request")
209
217
  # make http request (pipelined)
210
218
  http_session.request(req) do |response|
211
219
  result[:http] = response
212
- if call_data.has_key?(:save_to_file)
220
+ if call_data.has_key?(:save_to_file) and result[:http].code.to_s.start_with?('2')
213
221
  total_size=result[:http]['Content-Length'].to_i
214
222
  progress=ProgressBar.create(
215
223
  :format => '%a %B %p%% %r KB/sec %e',
@@ -238,7 +246,7 @@ module Aspera
238
246
  progress=nil
239
247
  end # save_to_file
240
248
  end
241
- # sometimes there is a ITF8 char (e.g. (c) )
249
+ # sometimes there is a UTF8 char (e.g. (c) )
242
250
  result[:http].body.force_encoding("UTF-8") if result[:http].body.is_a?(String)
243
251
  Log.log.debug("result: body=#{result[:http].body}")
244
252
  result_mime=(result[:http]['Content-Type']||'text/plain').split(';').first
@@ -270,9 +278,18 @@ module Aspera
270
278
  if tries_remain_redirect > 0
271
279
  tries_remain_redirect-=1
272
280
  Log.log.info("URL is moved: #{e.response['location']}")
273
- raise e
274
- # TODO: rebuild request with new location
275
- #retry
281
+ current_uri=URI.parse(call_data[:base_url])
282
+ redir_uri=URI.parse(e.response['location'])
283
+ call_data[:base_url]=e.response['location']
284
+ call_data[:subpath]=''
285
+ if current_uri.host.eql?(redir_uri.host) and current_uri.port.eql?(redir_uri.port)
286
+ req=build_request(call_data)
287
+ retry
288
+ else
289
+ # change host
290
+ Log.log.info("Redirect changes host: #{current_uri.host} -> #{redir_uri.host}")
291
+ return self.class.new(call_data).call(call_data)
292
+ end
276
293
  else
277
294
  raise "too many redirect"
278
295
  end
@@ -284,7 +301,6 @@ module Aspera
284
301
  end # begin request
285
302
  Log.log.debug("result=#{result}")
286
303
  return result
287
-
288
304
  end
289
305
 
290
306
  #
data/lib/aspera/sync.rb CHANGED
@@ -1,48 +1,53 @@
1
+ require 'aspera/command_line_builder'
2
+
1
3
  module Aspera
2
4
  # builds command line arg for async
3
5
  class Sync
4
- private
5
6
  INSTANCE_PARAMS=
6
7
  {
7
- 'alt_logdir' => { :type => :opt_with_arg, :accepted_types=>String},
8
- 'watchd' => { :type => :opt_with_arg, :accepted_types=>String},
9
- 'apply_local_docroot' => { :type => :opt_without_arg},
10
- 'quiet' => { :type => :opt_without_arg},
8
+ 'alt_logdir' => { :cltype => :opt_with_arg, :accepted_types=>:string},
9
+ 'watchd' => { :cltype => :opt_with_arg, :accepted_types=>:string},
10
+ 'apply_local_docroot' => { :cltype => :opt_without_arg},
11
+ 'quiet' => { :cltype => :opt_without_arg},
11
12
  }
12
13
  SESSION_PARAMS=
13
14
  {
14
- 'name' => { :type => :opt_with_arg, :accepted_types=>String},
15
- 'local_dir' => { :type => :opt_with_arg, :accepted_types=>String},
16
- 'remote_dir' => { :type => :opt_with_arg, :accepted_types=>String},
17
- 'local_db_dir' => { :type => :opt_with_arg, :accepted_types=>String},
18
- 'remote_db_dir' => { :type => :opt_with_arg, :accepted_types=>String},
19
- 'host' => { :type => :opt_with_arg, :accepted_types=>String},
20
- 'user' => { :type => :opt_with_arg, :accepted_types=>String},
21
- 'private_key_path' => { :type => :opt_with_arg, :accepted_types=>String},
22
- 'direction' => { :type => :opt_with_arg, :accepted_types=>String},
23
- 'checksum' => { :type => :opt_with_arg, :accepted_types=>String},
24
- 'tcp_port' => { :type => :opt_with_arg, :accepted_types=>Integer},
25
- 'rate_policy' => { :type => :opt_with_arg, :accepted_types=>String},
26
- 'target_rate' => { :type => :opt_with_arg, :accepted_types=>String},
27
- 'cooloff' => { :type => :opt_with_arg, :accepted_types=>Integer},
28
- 'pending_max' => { :type => :opt_with_arg, :accepted_types=>Integer},
29
- 'scan_intensity' => { :type => :opt_with_arg, :accepted_types=>String},
30
- 'cipher' => { :type => :opt_with_arg, :accepted_types=>String},
31
- 'transfer_threads' => { :type => :opt_with_arg, :accepted_types=>Integer},
32
- 'preserve_time' => { :type => :opt_without_arg},
33
- 'preserve_access_time' => { :type => :opt_without_arg},
34
- 'preserve_modification_time' => { :type => :opt_without_arg},
35
- 'preserve_uid' => { :type => :opt_without_arg},
36
- 'preserve_gid' => { :type => :opt_without_arg},
37
- 'create_dir' => { :type => :opt_without_arg},
38
- 'reset' => { :type => :opt_without_arg},
15
+ 'name' => { :cltype => :opt_with_arg, :accepted_types=>:string},
16
+ 'local_dir' => { :cltype => :opt_with_arg, :accepted_types=>:string},
17
+ 'remote_dir' => { :cltype => :opt_with_arg, :accepted_types=>:string},
18
+ 'local_db_dir' => { :cltype => :opt_with_arg, :accepted_types=>:string},
19
+ 'remote_db_dir' => { :cltype => :opt_with_arg, :accepted_types=>:string},
20
+ 'host' => { :cltype => :opt_with_arg, :accepted_types=>:string},
21
+ 'user' => { :cltype => :opt_with_arg, :accepted_types=>:string},
22
+ 'private_key_path' => { :cltype => :opt_with_arg, :accepted_types=>:string},
23
+ 'direction' => { :cltype => :opt_with_arg, :accepted_types=>:string},
24
+ 'checksum' => { :cltype => :opt_with_arg, :accepted_types=>:string},
25
+ 'tcp_port' => { :cltype => :opt_with_arg, :accepted_types=>:int},
26
+ 'rate_policy' => { :cltype => :opt_with_arg, :accepted_types=>:string},
27
+ 'target_rate' => { :cltype => :opt_with_arg, :accepted_types=>:string},
28
+ 'cooloff' => { :cltype => :opt_with_arg, :accepted_types=>:int},
29
+ 'pending_max' => { :cltype => :opt_with_arg, :accepted_types=>:int},
30
+ 'scan_intensity' => { :cltype => :opt_with_arg, :accepted_types=>:string},
31
+ 'cipher' => { :cltype => :opt_with_arg, :accepted_types=>:string},
32
+ 'transfer_threads' => { :cltype => :opt_with_arg, :accepted_types=>:int},
33
+ 'preserve_time' => { :cltype => :opt_without_arg},
34
+ 'preserve_access_time' => { :cltype => :opt_without_arg},
35
+ 'preserve_modification_time' => { :cltype => :opt_without_arg},
36
+ 'preserve_uid' => { :cltype => :opt_without_arg},
37
+ 'preserve_gid' => { :cltype => :opt_without_arg},
38
+ 'create_dir' => { :cltype => :opt_without_arg},
39
+ 'reset' => { :cltype => :opt_without_arg},
39
40
  # note: only one env var, but multiple sessions... may be a problem
40
- 'remote_password' => { :type => :envvar, :variable=>'ASPERA_SCP_PASS'},
41
- 'cookie' => { :type => :envvar, :variable=>'ASPERA_SCP_COOKIE'},
42
- 'token' => { :type => :envvar, :variable=>'ASPERA_SCP_TOKEN'},
43
- 'license' => { :type => :envvar, :variable=>'ASPERA_SCP_LICENSE'},
41
+ 'remote_password' => { :cltype => :envvar, :clvarname=>'ASPERA_SCP_PASS'},
42
+ 'cookie' => { :cltype => :envvar, :clvarname=>'ASPERA_SCP_COOKIE'},
43
+ 'token' => { :cltype => :envvar, :clvarname=>'ASPERA_SCP_TOKEN'},
44
+ 'license' => { :cltype => :envvar, :clvarname=>'ASPERA_SCP_LICENSE'},
44
45
  }
45
- public
46
+
47
+ Aspera::CommandLineBuilder.normalize_description(INSTANCE_PARAMS)
48
+ Aspera::CommandLineBuilder.normalize_description(SESSION_PARAMS)
49
+
50
+ private_constant :INSTANCE_PARAMS,:SESSION_PARAMS
46
51
 
47
52
  def initialize(sync_params)
48
53
  @sync_params=sync_params
@@ -0,0 +1,22 @@
1
+ module Aspera
2
+ # used to throttle logs
3
+ class TimerLimiter
4
+ # @param delay in seconds (float)
5
+ def initialize(delay)
6
+ @delay=delay
7
+ @last_time=nil
8
+ @count=0
9
+ end
10
+
11
+ def trigger?
12
+ old_time=@last_time
13
+ @last_time=Time.now.to_f
14
+ @count+=1
15
+ if old_time.nil? or (@last_time-old_time)>@delay
16
+ @count=0
17
+ return true
18
+ end
19
+ return false
20
+ end
21
+ end
22
+ end
metadata CHANGED
@@ -1,17 +1,31 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aspera-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.1
4
+ version: 4.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Laurent Martin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-01 00:00:00.000000000 Z
11
+ date: 2021-12-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: xml-simple
14
+ name: execjs
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: grpc
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
31
  - - "~>"
@@ -39,19 +53,19 @@ dependencies:
39
53
  - !ruby/object:Gem::Version
40
54
  version: '2.0'
41
55
  - !ruby/object:Gem::Dependency
42
- name: ruby-progressbar
56
+ name: mimemagic
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '1.0'
61
+ version: '0.3'
48
62
  type: :runtime
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '1.0'
68
+ version: '0.3'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: net-ssh
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -67,7 +81,21 @@ dependencies:
67
81
  - !ruby/object:Gem::Version
68
82
  version: '6.0'
69
83
  - !ruby/object:Gem::Dependency
70
- name: execjs
84
+ name: ruby-progressbar
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubyzip
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
101
  - - "~>"
@@ -81,47 +109,47 @@ dependencies:
81
109
  - !ruby/object:Gem::Version
82
110
  version: '2.0'
83
111
  - !ruby/object:Gem::Dependency
84
- name: terminal-table
112
+ name: security
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
115
  - - "~>"
88
116
  - !ruby/object:Gem::Version
89
- version: '1.8'
117
+ version: '0.0'
90
118
  type: :runtime
91
119
  prerelease: false
92
120
  version_requirements: !ruby/object:Gem::Requirement
93
121
  requirements:
94
122
  - - "~>"
95
123
  - !ruby/object:Gem::Version
96
- version: '1.8'
124
+ version: '0.0'
97
125
  - !ruby/object:Gem::Dependency
98
- name: tty-spinner
126
+ name: terminal-table
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
129
  - - "~>"
102
130
  - !ruby/object:Gem::Version
103
- version: '0.9'
131
+ version: '1.8'
104
132
  type: :runtime
105
133
  prerelease: false
106
134
  version_requirements: !ruby/object:Gem::Requirement
107
135
  requirements:
108
136
  - - "~>"
109
137
  - !ruby/object:Gem::Version
110
- version: '0.9'
138
+ version: '1.8'
111
139
  - !ruby/object:Gem::Dependency
112
- name: rubyzip
140
+ name: tty-spinner
113
141
  requirement: !ruby/object:Gem::Requirement
114
142
  requirements:
115
143
  - - "~>"
116
144
  - !ruby/object:Gem::Version
117
- version: '2.0'
145
+ version: '0.9'
118
146
  type: :runtime
119
147
  prerelease: false
120
148
  version_requirements: !ruby/object:Gem::Requirement
121
149
  requirements:
122
150
  - - "~>"
123
151
  - !ruby/object:Gem::Version
124
- version: '2.0'
152
+ version: '0.9'
125
153
  - !ruby/object:Gem::Dependency
126
154
  name: websocket
127
155
  requirement: !ruby/object:Gem::Requirement
@@ -150,6 +178,34 @@ dependencies:
150
178
  - - "~>"
151
179
  - !ruby/object:Gem::Version
152
180
  version: '0.3'
181
+ - !ruby/object:Gem::Dependency
182
+ name: webrick
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '1.7'
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '1.7'
195
+ - !ruby/object:Gem::Dependency
196
+ name: xml-simple
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '1.0'
202
+ type: :runtime
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: '1.0'
153
209
  - !ruby/object:Gem::Dependency
154
210
  name: bundler
155
211
  requirement: !ruby/object:Gem::Requirement
@@ -195,10 +251,7 @@ dependencies:
195
251
  description: Command line interface for IBM Aspera products
196
252
  email:
197
253
  - laurent.martin.aspera@fr.ibm.com
198
- executables:
199
- - ascli
200
- - asession
201
- - dascli
254
+ executables: []
202
255
  extensions: []
203
256
  extra_rdoc_files: []
204
257
  files:
@@ -210,14 +263,13 @@ files:
210
263
  - docs/README.erb.md
211
264
  - docs/README.md
212
265
  - docs/diagrams.txt
266
+ - docs/doc_tools.rb
213
267
  - docs/test_env.conf
214
- - docs/transfer_spec.html
215
268
  - examples/aoc.rb
216
269
  - examples/faspex4.rb
217
270
  - examples/proxy.pac
218
271
  - examples/transfer.rb
219
272
  - lib/aspera/aoc.rb
220
- - lib/aspera/api_detector.rb
221
273
  - lib/aspera/ascmd.rb
222
274
  - lib/aspera/ats_api.rb
223
275
  - lib/aspera/cli/basic_auth_plugin.rb
@@ -260,21 +312,26 @@ files:
260
312
  - lib/aspera/data/7
261
313
  - lib/aspera/data_repository.rb
262
314
  - lib/aspera/environment.rb
263
- - lib/aspera/fasp/aoc.rb
264
- - lib/aspera/fasp/connect.rb
315
+ - lib/aspera/fasp/agent_base.rb
316
+ - lib/aspera/fasp/agent_connect.rb
317
+ - lib/aspera/fasp/agent_direct.rb
318
+ - lib/aspera/fasp/agent_httpgw.rb
319
+ - lib/aspera/fasp/agent_node.rb
320
+ - lib/aspera/fasp/agent_trsdk.rb
321
+ - lib/aspera/fasp/default.rb
265
322
  - lib/aspera/fasp/error.rb
266
323
  - lib/aspera/fasp/error_info.rb
267
- - lib/aspera/fasp/http_gw.rb
268
324
  - lib/aspera/fasp/installation.rb
269
325
  - lib/aspera/fasp/listener.rb
270
- - lib/aspera/fasp/local.rb
271
- - lib/aspera/fasp/manager.rb
272
- - lib/aspera/fasp/node.rb
273
326
  - lib/aspera/fasp/parameters.rb
327
+ - lib/aspera/fasp/parameters.yaml
274
328
  - lib/aspera/fasp/resume_policy.rb
275
329
  - lib/aspera/fasp/uri.rb
276
330
  - lib/aspera/faspex_gw.rb
277
331
  - lib/aspera/hash_ext.rb
332
+ - lib/aspera/id_generator.rb
333
+ - lib/aspera/keychain/encrypted_hash.rb
334
+ - lib/aspera/keychain/macos_security.rb
278
335
  - lib/aspera/log.rb
279
336
  - lib/aspera/nagios.rb
280
337
  - lib/aspera/node.rb
@@ -294,10 +351,10 @@ files:
294
351
  - lib/aspera/rest_call_error.rb
295
352
  - lib/aspera/rest_error_analyzer.rb
296
353
  - lib/aspera/rest_errors_aspera.rb
297
- - lib/aspera/secrets.rb
298
354
  - lib/aspera/ssh.rb
299
355
  - lib/aspera/sync.rb
300
356
  - lib/aspera/temp_file_manager.rb
357
+ - lib/aspera/timer_limiter.rb
301
358
  - lib/aspera/uri_reader.rb
302
359
  - lib/aspera/web_auth.rb
303
360
  homepage: https://github.com/IBM/aspera-cli