aspera-cli 4.21.2 → 4.23.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
- checksums.yaml.gz.sig +0 -0
- data/BUGS.md +1 -1
- data/CHANGELOG.md +402 -374
- data/CONTRIBUTING.md +6 -10
- data/README.md +1018 -687
- data/lib/aspera/agent/base.rb +9 -5
- data/lib/aspera/agent/connect.rb +30 -28
- data/lib/aspera/agent/desktop.rb +29 -25
- data/lib/aspera/agent/direct.rb +137 -125
- data/lib/aspera/agent/httpgw.rb +22 -26
- data/lib/aspera/agent/node.rb +14 -11
- data/lib/aspera/agent/transferd.rb +6 -2
- data/lib/aspera/api/aoc.rb +15 -18
- data/lib/aspera/api/cos_node.rb +1 -1
- data/lib/aspera/api/httpgw.rb +15 -7
- data/lib/aspera/api/node.rb +6 -4
- data/lib/aspera/ascmd.rb +17 -9
- data/lib/aspera/ascp/installation.rb +21 -19
- data/lib/aspera/ascp/management.rb +1 -1
- data/lib/aspera/assert.rb +14 -5
- data/lib/aspera/cli/error.rb +2 -2
- data/lib/aspera/cli/extended_value.rb +38 -19
- data/lib/aspera/cli/formatter.rb +48 -48
- data/lib/aspera/cli/hints.rb +10 -2
- data/lib/aspera/cli/main.rb +190 -168
- data/lib/aspera/cli/manager.rb +16 -16
- data/lib/aspera/cli/plugin.rb +24 -21
- data/lib/aspera/cli/plugin_factory.rb +1 -1
- data/lib/aspera/cli/plugins/alee.rb +1 -1
- data/lib/aspera/cli/plugins/aoc.rb +173 -126
- data/lib/aspera/cli/plugins/ats.rb +19 -17
- data/lib/aspera/cli/plugins/config.rb +87 -98
- data/lib/aspera/cli/plugins/console.rb +5 -3
- data/lib/aspera/cli/plugins/faspex.rb +39 -35
- data/lib/aspera/cli/plugins/faspex5.rb +104 -80
- data/lib/aspera/cli/plugins/faspio.rb +13 -1
- data/lib/aspera/cli/plugins/httpgw.rb +13 -1
- data/lib/aspera/cli/plugins/node.rb +336 -205
- data/lib/aspera/cli/plugins/orchestrator.rb +34 -40
- data/lib/aspera/cli/plugins/preview.rb +3 -3
- data/lib/aspera/cli/plugins/server.rb +7 -6
- data/lib/aspera/cli/plugins/shares.rb +5 -5
- data/lib/aspera/cli/sync_actions.rb +19 -18
- data/lib/aspera/cli/transfer_agent.rb +11 -15
- data/lib/aspera/cli/transfer_progress.rb +2 -2
- data/lib/aspera/cli/version.rb +1 -1
- data/lib/aspera/command_line_builder.rb +116 -95
- data/lib/aspera/coverage.rb +4 -3
- data/lib/aspera/data_repository.rb +1 -0
- data/lib/aspera/environment.rb +7 -6
- data/lib/aspera/faspex_gw.rb +14 -14
- data/lib/aspera/faspex_postproc.rb +7 -6
- data/lib/aspera/hash_ext.rb +2 -2
- data/lib/aspera/json_rpc.rb +1 -1
- data/lib/aspera/keychain/encrypted_hash.rb +47 -34
- data/lib/aspera/keychain/factory.rb +41 -0
- data/lib/aspera/keychain/hashicorp_vault.rb +71 -0
- data/lib/aspera/keychain/macos_security.rb +19 -11
- data/lib/aspera/log.rb +29 -34
- data/lib/aspera/nagios.rb +6 -6
- data/lib/aspera/node_simulator.rb +8 -8
- data/lib/aspera/oauth/base.rb +10 -6
- data/lib/aspera/oauth/factory.rb +6 -6
- data/lib/aspera/oauth/url_json.rb +6 -6
- data/lib/aspera/persistency_action_once.rb +6 -4
- data/lib/aspera/persistency_folder.rb +2 -2
- data/lib/aspera/preview/file_types.rb +40 -33
- data/lib/aspera/preview/generator.rb +1 -1
- data/lib/aspera/preview/options.rb +16 -16
- data/lib/aspera/preview/terminal.rb +3 -3
- data/lib/aspera/preview/utils.rb +11 -13
- data/lib/aspera/products/connect.rb +2 -1
- data/lib/aspera/products/desktop.rb +1 -1
- data/lib/aspera/products/transferd.rb +1 -1
- data/lib/aspera/proxy_auto_config.rb +2 -2
- data/lib/aspera/rest.rb +70 -50
- data/lib/aspera/rest_error_analyzer.rb +1 -0
- data/lib/aspera/rest_errors_aspera.rb +1 -1
- data/lib/aspera/secret_hider.rb +5 -5
- data/lib/aspera/ssh.rb +5 -5
- data/lib/aspera/temp_file_manager.rb +1 -0
- data/lib/aspera/timer_limiter.rb +7 -5
- data/lib/aspera/transfer/async_conf.schema.yaml +716 -0
- data/lib/aspera/transfer/convert.rb +29 -0
- data/lib/aspera/transfer/error_info.rb +66 -66
- data/lib/aspera/transfer/parameters.rb +13 -68
- data/lib/aspera/transfer/spec.rb +5 -6
- data/lib/aspera/transfer/spec.schema.yaml +753 -0
- data/lib/aspera/transfer/spec_doc.rb +62 -0
- data/lib/aspera/transfer/sync.rb +37 -76
- data/lib/aspera/transfer/sync_instance.schema.yaml +20 -0
- data/lib/aspera/transfer/sync_session.schema.yaml +86 -0
- data/lib/aspera/transfer/uri.rb +6 -6
- data/lib/aspera/uri_reader.rb +1 -1
- data/lib/aspera/web_auth.rb +1 -1
- data/lib/aspera/web_server_simple.rb +53 -44
- data.tar.gz.sig +0 -0
- metadata +38 -7
- metadata.gz.sig +0 -0
- data/examples/build_package.sh +0 -28
- data/examples/dascli +0 -30
- data/examples/get_proto_file.rb +0 -8
- data/examples/proxy.pac +0 -60
- data/lib/aspera/transfer/spec.yaml +0 -718
data/lib/aspera/secret_hider.rb
CHANGED
@@ -15,8 +15,8 @@ module Aspera
|
|
15
15
|
# keys in hash that contain secrets
|
16
16
|
KEY_SECRETS = %w[password secret passphrase _key apikey crn token].freeze
|
17
17
|
HTTP_SECRETS = %w[Authorization].freeze
|
18
|
-
ALL_SECRETS =
|
19
|
-
ALL_SECRETS2 =
|
18
|
+
ALL_SECRETS = (ASCP_ENV_SECRETS + KEY_SECRETS + HTTP_SECRETS).freeze
|
19
|
+
ALL_SECRETS2 = (KEY_SECRETS + HTTP_SECRETS).freeze
|
20
20
|
KEY_FALSE_POSITIVES = [/^access_key$/, /^fallback_private_key$/].freeze
|
21
21
|
# regex that define named captures :begin and :end
|
22
22
|
REGEX_LOG_REPLACES = [
|
@@ -62,17 +62,17 @@ module Aspera
|
|
62
62
|
# only Strings can be secrets, not booleans, or hash, arrays
|
63
63
|
return false unless keyword.is_a?(String) && value.is_a?(String)
|
64
64
|
# those are not secrets
|
65
|
-
return false if KEY_FALSE_POSITIVES.any?{|f|f.match?(keyword)}
|
65
|
+
return false if KEY_FALSE_POSITIVES.any?{ |f| f.match?(keyword)}
|
66
66
|
return true if ADDITIONAL_KEYS_TO_HIDE.include?(keyword)
|
67
67
|
# check if keyword (name) contains an element that designate it as a secret
|
68
|
-
ALL_SECRETS.any?{|kw|keyword.include?(kw)}
|
68
|
+
ALL_SECRETS.any?{ |kw| keyword.include?(kw)}
|
69
69
|
end
|
70
70
|
|
71
71
|
# Hides recursively secrets in Hash or Array of Hash
|
72
72
|
def deep_remove_secret(obj)
|
73
73
|
case obj
|
74
74
|
when Array
|
75
|
-
obj.each{|i|deep_remove_secret(i)}
|
75
|
+
obj.each{ |i| deep_remove_secret(i)}
|
76
76
|
when Hash
|
77
77
|
obj.each do |k, v|
|
78
78
|
if secret?(k, v)
|
data/lib/aspera/ssh.rb
CHANGED
@@ -24,8 +24,8 @@ module Aspera
|
|
24
24
|
|
25
25
|
def disable_ecd_sha2_algorithms
|
26
26
|
Log.log.debug('Disabling SSH ecdsa')
|
27
|
-
Net::SSH::Transport::Algorithms::ALGORITHMS.each_value
|
28
|
-
Net::SSH::KnownHosts::SUPPORTED_TYPE.reject!
|
27
|
+
Net::SSH::Transport::Algorithms::ALGORITHMS.each_value{ |a| a.reject!{ |a| a =~ /^ecd(sa|h)-sha2/}}
|
28
|
+
Net::SSH::KnownHosts::SUPPORTED_TYPE.reject!{ |t| t =~ /^ecd(sa|h)-sha2/}
|
29
29
|
end
|
30
30
|
end
|
31
31
|
# ssh_options: same as Net::SSH.start
|
@@ -49,16 +49,16 @@ module Aspera
|
|
49
49
|
Net::SSH.start(@host, @username, @ssh_options) do |session|
|
50
50
|
ssh_channel = session.open_channel do |channel|
|
51
51
|
# prepare stdout processing
|
52
|
-
channel.on_data{|_chan, data|response.push(data)}
|
52
|
+
channel.on_data{ |_chan, data| response.push(data)}
|
53
53
|
# prepare stderr processing, stderr if type = 1
|
54
54
|
channel.on_extended_data do |_chan, _type, data|
|
55
55
|
error_message = "#{cmd}: [#{data.chomp}]"
|
56
56
|
# Happens when windows user hasn't logged in and created home account.
|
57
57
|
error_message += "\nHint: home not created in Windows?" if data.include?('Could not chdir to home directory')
|
58
|
-
|
58
|
+
Log.log.debug(error_message)
|
59
59
|
end
|
60
60
|
# send command to SSH channel (execute) cspell: disable-next-line
|
61
|
-
channel.send('cexe'.reverse, cmd){|_ch, _success|channel.send_data(input) unless input.nil?}
|
61
|
+
channel.send('cexe'.reverse, cmd){ |_ch, _success| channel.send_data(input) unless input.nil?}
|
62
62
|
end
|
63
63
|
# wait for channel to finish (command exit)
|
64
64
|
ssh_channel.wait
|
data/lib/aspera/timer_limiter.rb
CHANGED
@@ -1,20 +1,22 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Aspera
|
4
|
-
#
|
4
|
+
# trigger returns true only if the delay has passed since the last trigger
|
5
5
|
class TimerLimiter
|
6
6
|
# @param delay in seconds (float)
|
7
7
|
def initialize(delay)
|
8
8
|
@delay = delay
|
9
|
-
@
|
9
|
+
@last_trigger_time = nil
|
10
10
|
@count = 0
|
11
11
|
end
|
12
12
|
|
13
|
+
# Check if the trigger condition is met
|
14
|
+
# @return [Boolean] true if the trigger condition is met, false otherwise
|
13
15
|
def trigger?
|
14
|
-
|
15
|
-
@last_time = Time.now.to_f
|
16
|
+
current_time = Time.now.to_f
|
16
17
|
@count += 1
|
17
|
-
if
|
18
|
+
if @last_trigger_time.nil? || ((current_time - @last_trigger_time) > @delay)
|
19
|
+
@last_trigger_time = current_time
|
18
20
|
@count = 0
|
19
21
|
return true
|
20
22
|
end
|