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.
- checksums.yaml +4 -4
- data/README.md +1580 -946
- data/bin/ascli +1 -1
- data/bin/asession +3 -5
- data/docs/Makefile +8 -11
- data/docs/README.erb.md +1521 -829
- data/docs/doc_tools.rb +58 -0
- data/docs/test_env.conf +3 -1
- data/examples/faspex4.rb +28 -19
- data/examples/transfer.rb +2 -2
- data/lib/aspera/aoc.rb +157 -134
- data/lib/aspera/cli/listener/progress_multi.rb +5 -5
- data/lib/aspera/cli/main.rb +106 -48
- data/lib/aspera/cli/manager.rb +19 -20
- data/lib/aspera/cli/plugin.rb +22 -7
- data/lib/aspera/cli/plugins/aoc.rb +260 -208
- data/lib/aspera/cli/plugins/ats.rb +11 -10
- data/lib/aspera/cli/plugins/bss.rb +2 -2
- data/lib/aspera/cli/plugins/config.rb +360 -189
- data/lib/aspera/cli/plugins/faspex.rb +119 -56
- data/lib/aspera/cli/plugins/faspex5.rb +32 -17
- data/lib/aspera/cli/plugins/node.rb +72 -31
- data/lib/aspera/cli/plugins/orchestrator.rb +5 -3
- data/lib/aspera/cli/plugins/preview.rb +94 -68
- data/lib/aspera/cli/plugins/server.rb +16 -5
- data/lib/aspera/cli/plugins/shares.rb +17 -0
- data/lib/aspera/cli/transfer_agent.rb +64 -82
- data/lib/aspera/cli/version.rb +1 -1
- data/lib/aspera/command_line_builder.rb +48 -31
- data/lib/aspera/cos_node.rb +4 -3
- data/lib/aspera/environment.rb +4 -4
- data/lib/aspera/fasp/{manager.rb → agent_base.rb} +7 -6
- data/lib/aspera/fasp/{connect.rb → agent_connect.rb} +46 -39
- data/lib/aspera/fasp/{local.rb → agent_direct.rb} +42 -38
- data/lib/aspera/fasp/{http_gw.rb → agent_httpgw.rb} +50 -29
- data/lib/aspera/fasp/{node.rb → agent_node.rb} +43 -4
- data/lib/aspera/fasp/agent_trsdk.rb +106 -0
- data/lib/aspera/fasp/default.rb +17 -0
- data/lib/aspera/fasp/installation.rb +64 -48
- data/lib/aspera/fasp/parameters.rb +78 -91
- data/lib/aspera/fasp/parameters.yaml +531 -0
- data/lib/aspera/fasp/uri.rb +1 -1
- data/lib/aspera/faspex_gw.rb +12 -11
- data/lib/aspera/id_generator.rb +22 -0
- data/lib/aspera/keychain/encrypted_hash.rb +120 -0
- data/lib/aspera/keychain/macos_security.rb +94 -0
- data/lib/aspera/log.rb +45 -32
- data/lib/aspera/node.rb +9 -4
- data/lib/aspera/oauth.rb +116 -100
- data/lib/aspera/persistency_action_once.rb +11 -7
- data/lib/aspera/persistency_folder.rb +6 -26
- data/lib/aspera/rest.rb +66 -50
- data/lib/aspera/sync.rb +40 -35
- data/lib/aspera/timer_limiter.rb +22 -0
- metadata +86 -29
- data/docs/transfer_spec.html +0 -99
- data/lib/aspera/api_detector.rb +0 -60
- data/lib/aspera/fasp/aoc.rb +0 -24
- 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
|
-
|
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:
|
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
|
-
|
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("#{
|
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
|
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(
|
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||=
|
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
|
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
|
-
|
274
|
-
|
275
|
-
|
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' => { :
|
8
|
-
'watchd' => { :
|
9
|
-
'apply_local_docroot' => { :
|
10
|
-
'quiet' => { :
|
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' => { :
|
15
|
-
'local_dir' => { :
|
16
|
-
'remote_dir' => { :
|
17
|
-
'local_db_dir' => { :
|
18
|
-
'remote_db_dir' => { :
|
19
|
-
'host' => { :
|
20
|
-
'user' => { :
|
21
|
-
'private_key_path' => { :
|
22
|
-
'direction' => { :
|
23
|
-
'checksum' => { :
|
24
|
-
'tcp_port' => { :
|
25
|
-
'rate_policy' => { :
|
26
|
-
'target_rate' => { :
|
27
|
-
'cooloff' => { :
|
28
|
-
'pending_max' => { :
|
29
|
-
'scan_intensity' => { :
|
30
|
-
'cipher' => { :
|
31
|
-
'transfer_threads' => { :
|
32
|
-
'preserve_time' => { :
|
33
|
-
'preserve_access_time' => { :
|
34
|
-
'preserve_modification_time' => { :
|
35
|
-
'preserve_uid' => { :
|
36
|
-
'preserve_gid' => { :
|
37
|
-
'create_dir' => { :
|
38
|
-
'reset' => { :
|
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' => { :
|
41
|
-
'cookie' => { :
|
42
|
-
'token' => { :
|
43
|
-
'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
|
-
|
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.
|
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-
|
11
|
+
date: 2021-12-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
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:
|
56
|
+
name: mimemagic
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - "~>"
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
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: '
|
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:
|
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:
|
112
|
+
name: security
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
86
114
|
requirements:
|
87
115
|
- - "~>"
|
88
116
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
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: '
|
124
|
+
version: '0.0'
|
97
125
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
126
|
+
name: terminal-table
|
99
127
|
requirement: !ruby/object:Gem::Requirement
|
100
128
|
requirements:
|
101
129
|
- - "~>"
|
102
130
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
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: '
|
138
|
+
version: '1.8'
|
111
139
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
140
|
+
name: tty-spinner
|
113
141
|
requirement: !ruby/object:Gem::Requirement
|
114
142
|
requirements:
|
115
143
|
- - "~>"
|
116
144
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
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: '
|
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/
|
264
|
-
- lib/aspera/fasp/
|
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
|