aspera-cli 4.14.0 → 4.16.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/BUGS.md +29 -3
- data/CHANGELOG.md +300 -185
- data/CONTRIBUTING.md +74 -23
- data/README.md +2346 -1619
- data/bin/ascli +16 -25
- data/bin/asession +15 -15
- data/examples/dascli +2 -2
- data/examples/proxy.pac +1 -1
- data/lib/aspera/aoc.rb +216 -150
- data/lib/aspera/ascmd.rb +25 -18
- data/lib/aspera/assert.rb +45 -0
- data/lib/aspera/cli/basic_auth_plugin.rb +9 -6
- data/lib/aspera/cli/error.rb +17 -0
- data/lib/aspera/cli/extended_value.rb +51 -16
- data/lib/aspera/cli/formatter.rb +276 -174
- data/lib/aspera/cli/hints.rb +81 -0
- data/lib/aspera/cli/main.rb +114 -147
- data/lib/aspera/cli/manager.rb +181 -136
- data/lib/aspera/cli/plugin.rb +82 -64
- data/lib/aspera/cli/plugins/alee.rb +0 -1
- data/lib/aspera/cli/plugins/aoc.rb +327 -331
- data/lib/aspera/cli/plugins/ats.rb +12 -8
- data/lib/aspera/cli/plugins/bss.rb +2 -2
- data/lib/aspera/cli/plugins/config.rb +575 -439
- data/lib/aspera/cli/plugins/console.rb +40 -0
- data/lib/aspera/cli/plugins/cos.rb +4 -5
- data/lib/aspera/cli/plugins/faspex.rb +111 -92
- data/lib/aspera/cli/plugins/faspex5.rb +245 -182
- data/lib/aspera/cli/plugins/node.rb +239 -160
- data/lib/aspera/cli/plugins/orchestrator.rb +56 -19
- data/lib/aspera/cli/plugins/preview.rb +54 -38
- data/lib/aspera/cli/plugins/server.rb +63 -20
- data/lib/aspera/cli/plugins/shares.rb +64 -38
- data/lib/aspera/cli/sync_actions.rb +68 -0
- data/lib/aspera/cli/transfer_agent.rb +64 -67
- data/lib/aspera/cli/transfer_progress.rb +73 -0
- data/lib/aspera/cli/version.rb +1 -1
- data/lib/aspera/colors.rb +3 -1
- data/lib/aspera/command_line_builder.rb +27 -22
- data/lib/aspera/cos_node.rb +6 -4
- data/lib/aspera/coverage.rb +22 -0
- data/lib/aspera/data_repository.rb +33 -2
- data/lib/aspera/environment.rb +21 -8
- data/lib/aspera/fasp/agent_alpha.rb +116 -0
- data/lib/aspera/fasp/agent_base.rb +40 -76
- data/lib/aspera/fasp/agent_connect.rb +21 -22
- data/lib/aspera/fasp/agent_direct.rb +169 -179
- data/lib/aspera/fasp/agent_httpgw.rb +200 -195
- data/lib/aspera/fasp/agent_node.rb +43 -35
- data/lib/aspera/fasp/agent_trsdk.rb +124 -41
- data/lib/aspera/fasp/error_info.rb +2 -2
- data/lib/aspera/fasp/faux_file.rb +52 -0
- data/lib/aspera/fasp/installation.rb +89 -191
- data/lib/aspera/fasp/management.rb +249 -0
- data/lib/aspera/fasp/parameters.rb +86 -47
- data/lib/aspera/fasp/parameters.yaml +75 -8
- data/lib/aspera/fasp/products.rb +162 -0
- data/lib/aspera/fasp/resume_policy.rb +7 -5
- data/lib/aspera/fasp/sync.rb +273 -0
- data/lib/aspera/fasp/transfer_spec.rb +10 -8
- data/lib/aspera/fasp/uri.rb +6 -6
- data/lib/aspera/faspex_gw.rb +11 -8
- data/lib/aspera/faspex_postproc.rb +8 -7
- data/lib/aspera/hash_ext.rb +2 -2
- data/lib/aspera/id_generator.rb +3 -1
- data/lib/aspera/json_rpc.rb +51 -0
- data/lib/aspera/keychain/encrypted_hash.rb +46 -11
- data/lib/aspera/keychain/macos_security.rb +15 -13
- data/lib/aspera/line_logger.rb +23 -0
- data/lib/aspera/log.rb +61 -19
- data/lib/aspera/nagios.rb +7 -2
- data/lib/aspera/node.rb +105 -21
- data/lib/aspera/node_simulator.rb +214 -0
- data/lib/aspera/oauth.rb +57 -36
- data/lib/aspera/open_application.rb +4 -4
- data/lib/aspera/persistency_action_once.rb +13 -14
- data/lib/aspera/persistency_folder.rb +5 -4
- data/lib/aspera/preview/file_types.rb +56 -268
- data/lib/aspera/preview/generator.rb +28 -39
- data/lib/aspera/preview/options.rb +2 -0
- data/lib/aspera/preview/terminal.rb +36 -16
- data/lib/aspera/preview/utils.rb +23 -29
- data/lib/aspera/proxy_auto_config.rb +6 -3
- data/lib/aspera/rest.rb +127 -80
- data/lib/aspera/rest_call_error.rb +1 -1
- data/lib/aspera/rest_error_analyzer.rb +16 -14
- data/lib/aspera/rest_errors_aspera.rb +39 -34
- data/lib/aspera/secret_hider.rb +18 -17
- data/lib/aspera/ssh.rb +10 -5
- data/lib/aspera/temp_file_manager.rb +11 -4
- data/lib/aspera/web_auth.rb +10 -7
- data/lib/aspera/web_server_simple.rb +11 -5
- data.tar.gz.sig +0 -0
- metadata +108 -39
- metadata.gz.sig +0 -0
- data/lib/aspera/cli/listener/line_dump.rb +0 -19
- data/lib/aspera/cli/listener/logger.rb +0 -22
- data/lib/aspera/cli/listener/progress.rb +0 -50
- data/lib/aspera/cli/listener/progress_multi.rb +0 -84
- data/lib/aspera/cli/plugins/sync.rb +0 -44
- data/lib/aspera/fasp/listener.rb +0 -13
- data/lib/aspera/sync.rb +0 -213
@@ -12,48 +12,53 @@ module Aspera
|
|
12
12
|
Log.log.debug('registering Aspera REST error handlers')
|
13
13
|
# Faspex 4: both user_message and internal_message, and code 200
|
14
14
|
# example: missing meta data on package creation
|
15
|
-
RestErrorAnalyzer.instance.add_simple_handler('Type 1: error:user_message',
|
16
|
-
RestErrorAnalyzer.instance.add_simple_handler('Type 2: error:description',
|
17
|
-
RestErrorAnalyzer.instance.add_simple_handler('Type 3: error:internal_message',
|
15
|
+
RestErrorAnalyzer.instance.add_simple_handler(name: 'Type 1: error:user_message', path: %w[error user_message], always: true)
|
16
|
+
RestErrorAnalyzer.instance.add_simple_handler(name: 'Type 2: error:description', path: %w[error description])
|
17
|
+
RestErrorAnalyzer.instance.add_simple_handler(name: 'Type 3: error:internal_message', path: %w[error internal_message])
|
18
18
|
# AoC Automation
|
19
|
-
RestErrorAnalyzer.instance.add_simple_handler('AoC Automation', 'error')
|
20
|
-
RestErrorAnalyzer.instance.add_simple_handler('Type 5', 'error_description')
|
21
|
-
RestErrorAnalyzer.instance.add_simple_handler('Type 6', 'message')
|
22
|
-
RestErrorAnalyzer.instance.add_handler('Type 7: errors[]') do |
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
19
|
+
RestErrorAnalyzer.instance.add_simple_handler(name: 'AoC Automation', path: ['error'])
|
20
|
+
RestErrorAnalyzer.instance.add_simple_handler(name: 'Type 5', path: ['error_description'])
|
21
|
+
RestErrorAnalyzer.instance.add_simple_handler(name: 'Type 6', path: ['message'])
|
22
|
+
RestErrorAnalyzer.instance.add_handler('Type 7: errors[]') do |type, call_context|
|
23
|
+
next unless call_context[:data].is_a?(Hash) && call_context[:data]['errors'].is_a?(Hash)
|
24
|
+
# special for Shares: false positive ? (update global transfer_settings)
|
25
|
+
next if call_context[:data].key?('min_connect_version')
|
26
|
+
call_context[:data]['errors'].each do |k, v|
|
27
|
+
RestErrorAnalyzer.add_error(call_context, type, "#{k}: #{v}")
|
27
28
|
end
|
28
29
|
end
|
29
30
|
# call to upload_setup and download_setup of node api
|
30
31
|
RestErrorAnalyzer.instance.add_handler('T8:node: *_setup') do |type, call_context|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
RestErrorAnalyzer.add_error(call_context, type, "#{r_err['code']}: #{r_err['reason']}: #{r_err['user_message']}")
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
32
|
+
next unless call_context[:data].is_a?(Hash)
|
33
|
+
d_t_s = call_context[:data]['transfer_specs']
|
34
|
+
next unless d_t_s.is_a?(Array)
|
35
|
+
d_t_s.each do |res|
|
36
|
+
r_err = res.dig(*%w[transfer_spec error])
|
37
|
+
next unless r_err.is_a?(Hash)
|
38
|
+
RestErrorAnalyzer.add_error(call_context, type, "#{r_err['code']}: #{r_err['reason']}: #{r_err['user_message']}")
|
42
39
|
end
|
43
40
|
end
|
44
|
-
RestErrorAnalyzer.instance.add_simple_handler('T9:IBM cloud IAM', 'errorMessage')
|
45
|
-
RestErrorAnalyzer.instance.add_simple_handler('T10:faspex v4', 'user_message')
|
41
|
+
RestErrorAnalyzer.instance.add_simple_handler(name: 'T9:IBM cloud IAM', path: ['errorMessage'])
|
42
|
+
RestErrorAnalyzer.instance.add_simple_handler(name: 'T10:faspex v4', path: ['user_message'])
|
46
43
|
RestErrorAnalyzer.instance.add_handler('bss graphql') do |type, call_context|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
44
|
+
next unless call_context[:data].is_a?(Hash)
|
45
|
+
d_t_s = call_context[:data]['errors']
|
46
|
+
next unless d_t_s.is_a?(Array)
|
47
|
+
d_t_s.each do |res|
|
48
|
+
r_err = res['message']
|
49
|
+
next unless r_err.is_a?(String)
|
50
|
+
RestErrorAnalyzer.add_error(call_context, type, r_err)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
RestErrorAnalyzer.instance.add_handler('Orchestrator') do |type, call_context|
|
54
|
+
next if call_context[:response].code.start_with?('2')
|
55
|
+
data = call_context[:data]
|
56
|
+
next unless data.is_a?(Hash)
|
57
|
+
work_order = data['work_order']
|
58
|
+
next unless work_order.is_a?(Hash)
|
59
|
+
RestErrorAnalyzer.add_error(call_context, type, work_order['statusDetails'])
|
60
|
+
data['missing_parameters']&.each do |param|
|
61
|
+
RestErrorAnalyzer.add_error(call_context, type, "missing parameter: #{param}")
|
57
62
|
end
|
58
63
|
end
|
59
64
|
end # register_handlers
|
data/lib/aspera/secret_hider.rb
CHANGED
@@ -1,34 +1,40 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# cspell:ignore FILEPASS
|
3
4
|
require 'logger'
|
4
5
|
|
5
6
|
module Aspera
|
6
7
|
# remove secret from logs and output
|
7
8
|
class SecretHider
|
9
|
+
# configurable:
|
10
|
+
ADDITIONAL_KEYS_TO_HIDE = []
|
8
11
|
# display string for hidden secrets
|
9
12
|
HIDDEN_PASSWORD = '🔑'
|
10
13
|
# env vars for ascp with secrets
|
11
14
|
ASCP_ENV_SECRETS = %w[ASPERA_SCP_PASS ASPERA_SCP_KEY ASPERA_SCP_FILEPASS ASPERA_PROXY_PASS ASPERA_SCP_TOKEN].freeze
|
12
15
|
# keys in hash that contain secrets
|
13
16
|
KEY_SECRETS = %w[password secret passphrase _key apikey crn token].freeze
|
14
|
-
|
15
|
-
|
17
|
+
HTTP_SECRETS = %w[Authorization].freeze
|
18
|
+
ALL_SECRETS = [ASCP_ENV_SECRETS, KEY_SECRETS, HTTP_SECRETS].flatten.freeze
|
19
|
+
KEY_FALSE_POSITIVES = [/^access_key$/, /^fallback_private_key$/].freeze
|
16
20
|
# regex that define named captures :begin and :end
|
17
21
|
REGEX_LOG_REPLACES = [
|
18
22
|
# CLI manager get/set options
|
19
|
-
/(?<begin>[sg]et (
|
23
|
+
/(?<begin>[sg]et (?:#{KEY_SECRETS.join('|')})=).*(?<end>)/,
|
20
24
|
# env var ascp exec
|
21
|
-
/(?<begin> (
|
22
|
-
# rendered JSON
|
23
|
-
/(?<begin>["'
|
25
|
+
/(?<begin> (?:#{ASCP_ENV_SECRETS.join('|')})=)(\\.|[^ ])*(?<end> )/,
|
26
|
+
# rendered JSON or Ruby
|
27
|
+
/(?<begin>(?:(?<quote>["'])|:)[^"':=]*(?:#{ALL_SECRETS.join('|')})[^"':=]*\k<quote>?(?:=>|:) *")[^"]+(?<end>")/,
|
24
28
|
# option "secret"
|
25
29
|
/(?<begin>"[^"]*(secret)[^"]*"=>{)[^}]+(?<end>})/,
|
26
30
|
# option "secrets"
|
27
31
|
/(?<begin>(secrets)={)[^}]+(?<end>})/,
|
28
32
|
# private key values
|
29
|
-
/(?<begin>--+BEGIN
|
33
|
+
/(?<begin>--+BEGIN [^-]+ KEY--+)[[:ascii:]]+?(?<end>--+?END [^-]+ KEY--+)/,
|
34
|
+
# cred in http dump
|
35
|
+
/(?<begin>(?:#{HTTP_SECRETS.join('|')}): )[^\\]+(?<end>\\)/i
|
30
36
|
].freeze
|
31
|
-
private_constant :HIDDEN_PASSWORD, :ASCP_ENV_SECRETS, :KEY_SECRETS, :ALL_SECRETS, :REGEX_LOG_REPLACES
|
37
|
+
private_constant :HIDDEN_PASSWORD, :ASCP_ENV_SECRETS, :KEY_SECRETS, :HTTP_SECRETS, :ALL_SECRETS, :KEY_FALSE_POSITIVES, :REGEX_LOG_REPLACES
|
32
38
|
@log_secrets = false
|
33
39
|
class << self
|
34
40
|
attr_accessor :log_secrets
|
@@ -51,21 +57,16 @@ module Aspera
|
|
51
57
|
# only Strings can be secrets, not booleans, or hash, arrays
|
52
58
|
return false unless keyword.is_a?(String) && value.is_a?(String)
|
53
59
|
# those are not secrets
|
54
|
-
return false if
|
60
|
+
return false if KEY_FALSE_POSITIVES.any?{|f|f.match?(keyword)}
|
61
|
+
return true if ADDITIONAL_KEYS_TO_HIDE.include?(keyword)
|
55
62
|
# check if keyword (name) contains an element that designate it as a secret
|
56
63
|
ALL_SECRETS.any?{|kw|keyword.include?(kw)}
|
57
64
|
end
|
58
65
|
|
59
|
-
def deep_remove_secret(obj
|
66
|
+
def deep_remove_secret(obj)
|
60
67
|
case obj
|
61
68
|
when Array
|
62
|
-
|
63
|
-
obj.each do |i|
|
64
|
-
i['value'] = HIDDEN_PASSWORD if secret?(i['parameter'], i['value'])
|
65
|
-
end
|
66
|
-
else
|
67
|
-
obj.each{|i|deep_remove_secret(i)}
|
68
|
-
end
|
69
|
+
obj.each{|i|deep_remove_secret(i)}
|
69
70
|
when Hash
|
70
71
|
obj.each do |k, v|
|
71
72
|
if secret?(k, v)
|
data/lib/aspera/ssh.rb
CHANGED
@@ -2,11 +2,16 @@
|
|
2
2
|
|
3
3
|
require 'net/ssh'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
if ENV.fetch('ASCLI_ENABLE_ED25519', 'false').eql?('false')
|
6
|
+
# HACK: deactivate ed25519 and ecdsa private keys from ssh identities, as it usually cause problems
|
7
|
+
old_verbose = $VERBOSE
|
8
|
+
$VERBOSE = nil
|
9
|
+
begin
|
10
|
+
module Net; module SSH; module Authentication; class Session; private; def default_keys; %w[~/.ssh/id_dsa ~/.ssh/id_rsa ~/.ssh2/id_dsa ~/.ssh2/id_rsa]; end; end; end; end; end # rubocop:disable Layout/AccessModifierIndentation, Layout/EmptyLinesAroundAccessModifier, Layout/LineLength, Style/Semicolon
|
11
|
+
rescue StandardError
|
12
|
+
# ignore errors
|
13
|
+
end
|
14
|
+
$VERBOSE = old_verbose
|
10
15
|
end
|
11
16
|
|
12
17
|
module Aspera
|
@@ -14,14 +14,21 @@ module Aspera
|
|
14
14
|
FILE_LIST_AGE_MAX_SEC = SEC_IN_DAY * 5
|
15
15
|
private_constant :SEC_IN_DAY, :FILE_LIST_AGE_MAX_SEC
|
16
16
|
include Singleton
|
17
|
+
attr_accessor :cleanup_on_exit
|
18
|
+
|
17
19
|
def initialize
|
18
20
|
@created_files = []
|
21
|
+
@cleanup_on_exit = true
|
22
|
+
end
|
23
|
+
|
24
|
+
def delete_file(filepath)
|
25
|
+
File.delete(filepath) if @cleanup_on_exit
|
19
26
|
end
|
20
27
|
|
21
28
|
# call this on process exit
|
22
29
|
def cleanup
|
23
30
|
@created_files.each do |filepath|
|
24
|
-
|
31
|
+
delete_file(filepath) if File.file?(filepath)
|
25
32
|
end
|
26
33
|
@created_files = []
|
27
34
|
end
|
@@ -29,13 +36,13 @@ module Aspera
|
|
29
36
|
# ensure that provided folder exists, or create it, generate a unique filename
|
30
37
|
# @return path to that unique file
|
31
38
|
def new_file_path_in_folder(temp_folder, add_base = '')
|
32
|
-
FileUtils.mkdir_p(temp_folder)
|
39
|
+
FileUtils.mkdir_p(temp_folder)
|
33
40
|
new_file = File.join(temp_folder, add_base + SecureRandom.uuid)
|
34
41
|
@created_files.push(new_file)
|
35
42
|
new_file
|
36
43
|
end
|
37
44
|
|
38
|
-
# same as above but in global temp folder
|
45
|
+
# same as above but in global temp folder, with user's name
|
39
46
|
def new_file_path_global(base_name)
|
40
47
|
username =
|
41
48
|
begin
|
@@ -54,7 +61,7 @@ module Aspera
|
|
54
61
|
# check age of file, delete too old
|
55
62
|
if File.file?(file_path) && (age_sec > FILE_LIST_AGE_MAX_SEC)
|
56
63
|
Log.log.debug{"garbage collecting #{name}"}
|
57
|
-
|
64
|
+
delete_file(file_path)
|
58
65
|
end
|
59
66
|
end
|
60
67
|
end
|
data/lib/aspera/web_auth.rb
CHANGED
@@ -6,20 +6,22 @@ require 'stringio'
|
|
6
6
|
module Aspera
|
7
7
|
# servlet called on callback: it records the callback request
|
8
8
|
class WebAuthServlet < WEBrick::HTTPServlet::AbstractServlet
|
9
|
-
|
9
|
+
# @param server [WEBrick::HTTPServer]
|
10
|
+
# @param web_auth [WebAuth]
|
11
|
+
def initialize(server, web_auth)
|
10
12
|
Log.log.debug('WebAuthServlet initialize')
|
11
13
|
super(server)
|
12
|
-
@
|
14
|
+
@web_auth = web_auth
|
13
15
|
end
|
14
16
|
|
15
17
|
def service(request, response)
|
16
18
|
Log.log.debug{"received request from browser #{request.request_method} #{request.path}"}
|
17
19
|
raise WEBrick::HTTPStatus::MethodNotAllowed, "unexpected method: #{request.request_method}" unless request.request_method.eql?('GET')
|
18
|
-
raise WEBrick::HTTPStatus::NotFound, "unexpected path: #{request.path}" unless request.path.eql?(@
|
20
|
+
raise WEBrick::HTTPStatus::NotFound, "unexpected path: #{request.path}" unless request.path.eql?(@web_auth.expected_path)
|
19
21
|
# acquire lock and signal change
|
20
|
-
@
|
21
|
-
@
|
22
|
-
@
|
22
|
+
@web_auth.mutex.synchronize do
|
23
|
+
@web_auth.query = request.query
|
24
|
+
@web_auth.cond.signal
|
23
25
|
end
|
24
26
|
response.status = 200
|
25
27
|
response.content_type = 'text/html'
|
@@ -42,7 +44,8 @@ module Aspera
|
|
42
44
|
@cond = ConditionVariable.new
|
43
45
|
@expected_path = uri.path.empty? ? '/' : uri.path
|
44
46
|
@query = nil
|
45
|
-
|
47
|
+
# last argument (self) is provided to constructor of servlet
|
48
|
+
mount(@expected_path, WebAuthServlet, self)
|
46
49
|
Thread.new { start }
|
47
50
|
end
|
48
51
|
|
@@ -3,17 +3,23 @@
|
|
3
3
|
require 'webrick'
|
4
4
|
require 'webrick/https'
|
5
5
|
require 'aspera/log'
|
6
|
+
require 'aspera/assert'
|
6
7
|
require 'openssl'
|
7
8
|
|
8
9
|
module Aspera
|
9
10
|
class WebServerSimple < WEBrick::HTTPServer
|
10
11
|
CERT_PARAMETERS = %i[key cert chain].freeze
|
12
|
+
GENERIC_ISSUER = '/C=FR/O=Test/OU=Test/CN=Test'
|
13
|
+
ONE_YEAR_SECONDS = 365 * 24 * 60 * 60
|
14
|
+
|
15
|
+
private_constant :CERT_PARAMETERS, :GENERIC_ISSUER, :ONE_YEAR_SECONDS
|
16
|
+
|
11
17
|
class << self
|
12
18
|
# generates and adds self signed cert to provided webrick options
|
13
|
-
def fill_self_signed_cert(cert, key)
|
14
|
-
cert.subject = cert.issuer = OpenSSL::X509::Name.parse(
|
19
|
+
def fill_self_signed_cert(cert, key, digest = 'SHA256')
|
20
|
+
cert.subject = cert.issuer = OpenSSL::X509::Name.parse(GENERIC_ISSUER)
|
15
21
|
cert.not_before = Time.now
|
16
|
-
cert.not_after = Time.now +
|
22
|
+
cert.not_after = Time.now + ONE_YEAR_SECONDS
|
17
23
|
cert.public_key = key.public_key
|
18
24
|
cert.serial = 0x0
|
19
25
|
cert.version = 2
|
@@ -26,7 +32,7 @@ module Aspera
|
|
26
32
|
# ef.create_extension('keyUsage', 'cRLSign,keyCertSign', true),
|
27
33
|
]
|
28
34
|
cert.add_extension(ef.create_extension('authorityKeyIdentifier', 'keyid:always,issuer:always'))
|
29
|
-
cert.sign(key, OpenSSL::Digest.new(
|
35
|
+
cert.sign(key, OpenSSL::Digest.new(digest))
|
30
36
|
end
|
31
37
|
end
|
32
38
|
|
@@ -47,7 +53,7 @@ module Aspera
|
|
47
53
|
if certificate.nil?
|
48
54
|
webrick_options[:SSLCertName] = [['CN', WEBrick::Utils.getservername]]
|
49
55
|
else
|
50
|
-
|
56
|
+
assert_type(certificate, Hash)
|
51
57
|
certificate = certificate.symbolize_keys
|
52
58
|
raise "unexpected key in certificate config: only: #{CERT_PARAMETERS.join(', ')}" if certificate.keys.any?{|k|!CERT_PARAMETERS.include?(k)}
|
53
59
|
webrick_options[:SSLPrivateKey] = if certificate.key?(:key)
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aspera-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.16.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Laurent Martin
|
@@ -37,8 +37,70 @@ cert_chain:
|
|
37
37
|
eTf9kxhVM40wGQOECVNA8UsEEZHD48eF+csUYZtAJOF5oxTI8UyV9T/o6CgO0c9/
|
38
38
|
Gzz+Qm5ULOUcPiJLjSpaiTrkiIVYiDGnqNSr6R1Hb1c=
|
39
39
|
-----END CERTIFICATE-----
|
40
|
-
date:
|
40
|
+
date: 2024-02-14 00:00:00.000000000 Z
|
41
41
|
dependencies:
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: base64
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 0.2.0
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 0.2.0
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: bigdecimal
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '3.1'
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 3.1.6
|
66
|
+
type: :runtime
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - "~>"
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '3.1'
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 3.1.6
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: blankslate
|
78
|
+
requirement: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.1'
|
83
|
+
type: :runtime
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.1'
|
90
|
+
- !ruby/object:Gem::Dependency
|
91
|
+
name: csv
|
92
|
+
requirement: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3.0'
|
97
|
+
type: :runtime
|
98
|
+
prerelease: false
|
99
|
+
version_requirements: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '3.0'
|
42
104
|
- !ruby/object:Gem::Dependency
|
43
105
|
name: execjs
|
44
106
|
requirement: !ruby/object:Gem::Requirement
|
@@ -68,19 +130,19 @@ dependencies:
|
|
68
130
|
- !ruby/object:Gem::Version
|
69
131
|
version: '2.0'
|
70
132
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
133
|
+
name: mime-types
|
72
134
|
requirement: !ruby/object:Gem::Requirement
|
73
135
|
requirements:
|
74
136
|
- - "~>"
|
75
137
|
- !ruby/object:Gem::Version
|
76
|
-
version: '
|
138
|
+
version: '3.5'
|
77
139
|
type: :runtime
|
78
140
|
prerelease: false
|
79
141
|
version_requirements: !ruby/object:Gem::Requirement
|
80
142
|
requirements:
|
81
143
|
- - "~>"
|
82
144
|
- !ruby/object:Gem::Version
|
83
|
-
version: '
|
145
|
+
version: '3.5'
|
84
146
|
- !ruby/object:Gem::Dependency
|
85
147
|
name: net-ssh
|
86
148
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,6 +157,20 @@ dependencies:
|
|
95
157
|
- - "~>"
|
96
158
|
- !ruby/object:Gem::Version
|
97
159
|
version: '7.0'
|
160
|
+
- !ruby/object:Gem::Dependency
|
161
|
+
name: rainbow
|
162
|
+
requirement: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '3.0'
|
167
|
+
type: :runtime
|
168
|
+
prerelease: false
|
169
|
+
version_requirements: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '3.0'
|
98
174
|
- !ruby/object:Gem::Dependency
|
99
175
|
name: ruby-progressbar
|
100
176
|
requirement: !ruby/object:Gem::Requirement
|
@@ -208,47 +284,33 @@ dependencies:
|
|
208
284
|
- !ruby/object:Gem::Version
|
209
285
|
version: '1.0'
|
210
286
|
- !ruby/object:Gem::Dependency
|
211
|
-
name:
|
212
|
-
requirement: !ruby/object:Gem::Requirement
|
213
|
-
requirements:
|
214
|
-
- - "~>"
|
215
|
-
- !ruby/object:Gem::Version
|
216
|
-
version: '0.3'
|
217
|
-
type: :development
|
218
|
-
prerelease: false
|
219
|
-
version_requirements: !ruby/object:Gem::Requirement
|
220
|
-
requirements:
|
221
|
-
- - "~>"
|
222
|
-
- !ruby/object:Gem::Version
|
223
|
-
version: '0.3'
|
224
|
-
- !ruby/object:Gem::Dependency
|
225
|
-
name: bundler
|
287
|
+
name: rake
|
226
288
|
requirement: !ruby/object:Gem::Requirement
|
227
289
|
requirements:
|
228
290
|
- - "~>"
|
229
291
|
- !ruby/object:Gem::Version
|
230
|
-
version: '
|
292
|
+
version: '13.0'
|
231
293
|
type: :development
|
232
294
|
prerelease: false
|
233
295
|
version_requirements: !ruby/object:Gem::Requirement
|
234
296
|
requirements:
|
235
297
|
- - "~>"
|
236
298
|
- !ruby/object:Gem::Version
|
237
|
-
version: '
|
299
|
+
version: '13.0'
|
238
300
|
- !ruby/object:Gem::Dependency
|
239
|
-
name:
|
301
|
+
name: reek
|
240
302
|
requirement: !ruby/object:Gem::Requirement
|
241
303
|
requirements:
|
242
304
|
- - "~>"
|
243
305
|
- !ruby/object:Gem::Version
|
244
|
-
version:
|
306
|
+
version: 6.1.0
|
245
307
|
type: :development
|
246
308
|
prerelease: false
|
247
309
|
version_requirements: !ruby/object:Gem::Requirement
|
248
310
|
requirements:
|
249
311
|
- - "~>"
|
250
312
|
- !ruby/object:Gem::Version
|
251
|
-
version:
|
313
|
+
version: 6.1.0
|
252
314
|
- !ruby/object:Gem::Dependency
|
253
315
|
name: rspec
|
254
316
|
requirement: !ruby/object:Gem::Requirement
|
@@ -325,28 +387,28 @@ dependencies:
|
|
325
387
|
requirements:
|
326
388
|
- - "~>"
|
327
389
|
- !ruby/object:Gem::Version
|
328
|
-
version: '0.
|
390
|
+
version: '0.22'
|
329
391
|
type: :development
|
330
392
|
prerelease: false
|
331
393
|
version_requirements: !ruby/object:Gem::Requirement
|
332
394
|
requirements:
|
333
395
|
- - "~>"
|
334
396
|
- !ruby/object:Gem::Version
|
335
|
-
version: '0.
|
397
|
+
version: '0.22'
|
336
398
|
- !ruby/object:Gem::Dependency
|
337
399
|
name: solargraph
|
338
400
|
requirement: !ruby/object:Gem::Requirement
|
339
401
|
requirements:
|
340
402
|
- - "~>"
|
341
403
|
- !ruby/object:Gem::Version
|
342
|
-
version: '0.
|
404
|
+
version: '0.50'
|
343
405
|
type: :development
|
344
406
|
prerelease: false
|
345
407
|
version_requirements: !ruby/object:Gem::Requirement
|
346
408
|
requirements:
|
347
409
|
- - "~>"
|
348
410
|
- !ruby/object:Gem::Version
|
349
|
-
version: '0.
|
411
|
+
version: '0.50'
|
350
412
|
description: Command line interface for IBM Aspera products
|
351
413
|
email:
|
352
414
|
- laurent.martin.aspera@fr.ibm.com
|
@@ -367,15 +429,14 @@ files:
|
|
367
429
|
- examples/rubyc
|
368
430
|
- lib/aspera/aoc.rb
|
369
431
|
- lib/aspera/ascmd.rb
|
432
|
+
- lib/aspera/assert.rb
|
370
433
|
- lib/aspera/ats_api.rb
|
371
434
|
- lib/aspera/cli/basic_auth_plugin.rb
|
435
|
+
- lib/aspera/cli/error.rb
|
372
436
|
- lib/aspera/cli/extended_value.rb
|
373
437
|
- lib/aspera/cli/formatter.rb
|
438
|
+
- lib/aspera/cli/hints.rb
|
374
439
|
- lib/aspera/cli/info.rb
|
375
|
-
- lib/aspera/cli/listener/line_dump.rb
|
376
|
-
- lib/aspera/cli/listener/logger.rb
|
377
|
-
- lib/aspera/cli/listener/progress.rb
|
378
|
-
- lib/aspera/cli/listener/progress_multi.rb
|
379
440
|
- lib/aspera/cli/main.rb
|
380
441
|
- lib/aspera/cli/manager.rb
|
381
442
|
- lib/aspera/cli/plugin.rb
|
@@ -393,12 +454,14 @@ files:
|
|
393
454
|
- lib/aspera/cli/plugins/preview.rb
|
394
455
|
- lib/aspera/cli/plugins/server.rb
|
395
456
|
- lib/aspera/cli/plugins/shares.rb
|
396
|
-
- lib/aspera/cli/
|
457
|
+
- lib/aspera/cli/sync_actions.rb
|
397
458
|
- lib/aspera/cli/transfer_agent.rb
|
459
|
+
- lib/aspera/cli/transfer_progress.rb
|
398
460
|
- lib/aspera/cli/version.rb
|
399
461
|
- lib/aspera/colors.rb
|
400
462
|
- lib/aspera/command_line_builder.rb
|
401
463
|
- lib/aspera/cos_node.rb
|
464
|
+
- lib/aspera/coverage.rb
|
402
465
|
- lib/aspera/data/1
|
403
466
|
- lib/aspera/data/2
|
404
467
|
- lib/aspera/data/3
|
@@ -407,6 +470,7 @@ files:
|
|
407
470
|
- lib/aspera/data/6
|
408
471
|
- lib/aspera/data_repository.rb
|
409
472
|
- lib/aspera/environment.rb
|
473
|
+
- lib/aspera/fasp/agent_alpha.rb
|
410
474
|
- lib/aspera/fasp/agent_base.rb
|
411
475
|
- lib/aspera/fasp/agent_connect.rb
|
412
476
|
- lib/aspera/fasp/agent_direct.rb
|
@@ -415,22 +479,28 @@ files:
|
|
415
479
|
- lib/aspera/fasp/agent_trsdk.rb
|
416
480
|
- lib/aspera/fasp/error.rb
|
417
481
|
- lib/aspera/fasp/error_info.rb
|
482
|
+
- lib/aspera/fasp/faux_file.rb
|
418
483
|
- lib/aspera/fasp/installation.rb
|
419
|
-
- lib/aspera/fasp/
|
484
|
+
- lib/aspera/fasp/management.rb
|
420
485
|
- lib/aspera/fasp/parameters.rb
|
421
486
|
- lib/aspera/fasp/parameters.yaml
|
487
|
+
- lib/aspera/fasp/products.rb
|
422
488
|
- lib/aspera/fasp/resume_policy.rb
|
489
|
+
- lib/aspera/fasp/sync.rb
|
423
490
|
- lib/aspera/fasp/transfer_spec.rb
|
424
491
|
- lib/aspera/fasp/uri.rb
|
425
492
|
- lib/aspera/faspex_gw.rb
|
426
493
|
- lib/aspera/faspex_postproc.rb
|
427
494
|
- lib/aspera/hash_ext.rb
|
428
495
|
- lib/aspera/id_generator.rb
|
496
|
+
- lib/aspera/json_rpc.rb
|
429
497
|
- lib/aspera/keychain/encrypted_hash.rb
|
430
498
|
- lib/aspera/keychain/macos_security.rb
|
499
|
+
- lib/aspera/line_logger.rb
|
431
500
|
- lib/aspera/log.rb
|
432
501
|
- lib/aspera/nagios.rb
|
433
502
|
- lib/aspera/node.rb
|
503
|
+
- lib/aspera/node_simulator.rb
|
434
504
|
- lib/aspera/oauth.rb
|
435
505
|
- lib/aspera/open_application.rb
|
436
506
|
- lib/aspera/persistency_action_once.rb
|
@@ -450,7 +520,6 @@ files:
|
|
450
520
|
- lib/aspera/rest_errors_aspera.rb
|
451
521
|
- lib/aspera/secret_hider.rb
|
452
522
|
- lib/aspera/ssh.rb
|
453
|
-
- lib/aspera/sync.rb
|
454
523
|
- lib/aspera/temp_file_manager.rb
|
455
524
|
- lib/aspera/timer_limiter.rb
|
456
525
|
- lib/aspera/uri_reader.rb
|
@@ -462,8 +531,8 @@ licenses:
|
|
462
531
|
metadata:
|
463
532
|
allowed_push_host: https://rubygems.org
|
464
533
|
homepage_uri: https://github.com/IBM/aspera-cli
|
465
|
-
source_code_uri: https://github.com/IBM/aspera-cli
|
466
|
-
changelog_uri: https://github.com/IBM/aspera-cli
|
534
|
+
source_code_uri: https://github.com/IBM/aspera-cli/tree/main/lib/aspera
|
535
|
+
changelog_uri: https://github.com/IBM/aspera-cli/CHANGELOG.md
|
467
536
|
rubygems_uri: https://rubygems.org/gems/aspera-cli
|
468
537
|
documentation_uri: https://www.rubydoc.info/gems/aspera-cli
|
469
538
|
post_install_message:
|
@@ -482,7 +551,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
482
551
|
version: '0'
|
483
552
|
requirements:
|
484
553
|
- Read the manual for any requirement
|
485
|
-
rubygems_version: 3.4.
|
554
|
+
rubygems_version: 3.4.19
|
486
555
|
signing_key:
|
487
556
|
specification_version: 4
|
488
557
|
summary: 'Execute actions using command line on IBM Aspera Server products: Aspera
|
metadata.gz.sig
CHANGED
Binary file
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'aspera/fasp/listener'
|
4
|
-
require 'json'
|
5
|
-
|
6
|
-
module Aspera
|
7
|
-
module Cli
|
8
|
-
module Listener
|
9
|
-
# listener for FASP transfers (debug)
|
10
|
-
# FASP event listener display management events as JSON
|
11
|
-
class LineDump < Aspera::Fasp::Listener
|
12
|
-
def event_enhanced(data)
|
13
|
-
$stdout.puts(JSON.generate(data))
|
14
|
-
$stdout.flush
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|