aspera-cli 4.2.1 → 4.5.0

Sign up to get free protection for your applications and to get access to all the features.
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