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.
- 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
|