aspera-cli 4.13.0 → 4.15.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.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +81 -7
  4. data/CONTRIBUTING.md +22 -6
  5. data/README.md +2038 -1080
  6. data/bin/ascli +18 -9
  7. data/bin/asession +12 -14
  8. data/examples/dascli +1 -1
  9. data/examples/proxy.pac +1 -1
  10. data/examples/rubyc +24 -0
  11. data/lib/aspera/aoc.rb +219 -159
  12. data/lib/aspera/ascmd.rb +25 -14
  13. data/lib/aspera/cli/basic_auth_plugin.rb +12 -9
  14. data/lib/aspera/cli/error.rb +17 -0
  15. data/lib/aspera/cli/extended_value.rb +47 -12
  16. data/lib/aspera/cli/formatter.rb +260 -179
  17. data/lib/aspera/cli/hints.rb +80 -0
  18. data/lib/aspera/cli/main.rb +104 -156
  19. data/lib/aspera/cli/manager.rb +259 -209
  20. data/lib/aspera/cli/plugin.rb +123 -63
  21. data/lib/aspera/cli/plugins/alee.rb +2 -3
  22. data/lib/aspera/cli/plugins/aoc.rb +341 -261
  23. data/lib/aspera/cli/plugins/ats.rb +22 -21
  24. data/lib/aspera/cli/plugins/bss.rb +5 -5
  25. data/lib/aspera/cli/plugins/config.rb +578 -627
  26. data/lib/aspera/cli/plugins/console.rb +44 -6
  27. data/lib/aspera/cli/plugins/cos.rb +15 -17
  28. data/lib/aspera/cli/plugins/faspex.rb +114 -100
  29. data/lib/aspera/cli/plugins/faspex5.rb +411 -264
  30. data/lib/aspera/cli/plugins/node.rb +354 -259
  31. data/lib/aspera/cli/plugins/orchestrator.rb +61 -29
  32. data/lib/aspera/cli/plugins/preview.rb +82 -90
  33. data/lib/aspera/cli/plugins/server.rb +79 -32
  34. data/lib/aspera/cli/plugins/shares.rb +55 -42
  35. data/lib/aspera/cli/sync_actions.rb +68 -0
  36. data/lib/aspera/cli/transfer_agent.rb +66 -73
  37. data/lib/aspera/cli/transfer_progress.rb +74 -0
  38. data/lib/aspera/cli/version.rb +1 -1
  39. data/lib/aspera/colors.rb +12 -8
  40. data/lib/aspera/command_line_builder.rb +14 -11
  41. data/lib/aspera/cos_node.rb +3 -2
  42. data/lib/aspera/data/6 +0 -0
  43. data/lib/aspera/environment.rb +24 -9
  44. data/lib/aspera/fasp/agent_aspera.rb +126 -0
  45. data/lib/aspera/fasp/agent_base.rb +31 -77
  46. data/lib/aspera/fasp/agent_connect.rb +25 -21
  47. data/lib/aspera/fasp/agent_direct.rb +89 -103
  48. data/lib/aspera/fasp/agent_httpgw.rb +231 -149
  49. data/lib/aspera/fasp/agent_node.rb +41 -34
  50. data/lib/aspera/fasp/agent_trsdk.rb +75 -32
  51. data/lib/aspera/fasp/error_info.rb +4 -2
  52. data/lib/aspera/fasp/faux_file.rb +52 -0
  53. data/lib/aspera/fasp/installation.rb +53 -195
  54. data/lib/aspera/fasp/management.rb +244 -0
  55. data/lib/aspera/fasp/parameters.rb +71 -37
  56. data/lib/aspera/fasp/parameters.yaml +76 -8
  57. data/lib/aspera/fasp/products.rb +162 -0
  58. data/lib/aspera/fasp/resume_policy.rb +3 -3
  59. data/lib/aspera/fasp/transfer_spec.rb +7 -6
  60. data/lib/aspera/fasp/uri.rb +26 -24
  61. data/lib/aspera/faspex_gw.rb +2 -2
  62. data/lib/aspera/faspex_postproc.rb +2 -2
  63. data/lib/aspera/hash_ext.rb +14 -4
  64. data/lib/aspera/json_rpc.rb +49 -0
  65. data/lib/aspera/keychain/macos_security.rb +13 -13
  66. data/lib/aspera/line_logger.rb +23 -0
  67. data/lib/aspera/log.rb +58 -16
  68. data/lib/aspera/node.rb +157 -92
  69. data/lib/aspera/oauth.rb +37 -19
  70. data/lib/aspera/open_application.rb +4 -4
  71. data/lib/aspera/persistency_action_once.rb +1 -1
  72. data/lib/aspera/persistency_folder.rb +2 -2
  73. data/lib/aspera/preview/file_types.rb +4 -2
  74. data/lib/aspera/preview/generator.rb +22 -35
  75. data/lib/aspera/preview/options.rb +2 -0
  76. data/lib/aspera/preview/terminal.rb +73 -16
  77. data/lib/aspera/preview/utils.rb +21 -28
  78. data/lib/aspera/proxy_auto_config.js +2 -2
  79. data/lib/aspera/rest.rb +136 -68
  80. data/lib/aspera/rest_call_error.rb +1 -1
  81. data/lib/aspera/rest_error_analyzer.rb +15 -14
  82. data/lib/aspera/rest_errors_aspera.rb +37 -34
  83. data/lib/aspera/secret_hider.rb +18 -15
  84. data/lib/aspera/ssh.rb +5 -2
  85. data/lib/aspera/sync.rb +127 -119
  86. data/lib/aspera/temp_file_manager.rb +10 -3
  87. data/lib/aspera/web_auth.rb +10 -7
  88. data/lib/aspera/web_server_simple.rb +9 -4
  89. data.tar.gz.sig +0 -0
  90. metadata +34 -17
  91. metadata.gz.sig +0 -0
  92. data/docs/test_env.conf +0 -186
  93. data/lib/aspera/cli/listener/line_dump.rb +0 -19
  94. data/lib/aspera/cli/listener/logger.rb +0 -22
  95. data/lib/aspera/cli/listener/progress.rb +0 -50
  96. data/lib/aspera/cli/listener/progress_multi.rb +0 -84
  97. data/lib/aspera/cli/plugins/sync.rb +0 -44
  98. data/lib/aspera/data/7 +0 -0
  99. data/lib/aspera/fasp/listener.rb +0 -13
data/bin/ascli CHANGED
@@ -1,29 +1,38 @@
1
- #!/usr/bin/env ruby -EUTF-8:UTF-8
1
+ #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- require 'rubygems'
5
- require 'securerandom'
6
- # compute gem root based on this script location
7
- GEM_ROOT = File.realpath(File.join(File.dirname(File.realpath(__FILE__)), '..'))
4
+ Encoding.default_internal = Encoding::UTF_8
5
+ Encoding.default_external = Encoding::UTF_8
8
6
  # coverage for tests
9
7
  if ENV.key?('ENABLE_COVERAGE')
10
8
  require 'simplecov'
11
- SimpleCov.root(GEM_ROOT)
9
+ require 'securerandom'
10
+ # compute gem source root based on this script location, assuming it is in bin/
11
+ # use dirname instead of gsub, in case folder separator is not /
12
+ development_root = File.dirname(File.dirname(File.realpath(__FILE__)))
13
+ SimpleCov.root(development_root)
12
14
  SimpleCov.enable_for_subprocesses if SimpleCov.respond_to?(:enable_for_subprocesses)
13
15
  # keep cache data for 1 day (must be longer that time to run the whole test suite)
14
16
  SimpleCov.merge_timeout(86400)
15
17
  SimpleCov.command_name(SecureRandom.uuid)
16
18
  SimpleCov.at_exit do
17
19
  original_file_descriptor = $stdout
18
- $stdout.reopen(File.join(GEM_ROOT, 'simplecov.log'))
20
+ $stdout.reopen(File.join(development_root, 'simplecov.log'))
19
21
  SimpleCov.result.format!
20
22
  $stdout.reopen(original_file_descriptor)
21
23
  end
22
24
  SimpleCov.start
23
25
  end
24
26
  # if in development, add path to gem
25
- $LOAD_PATH.unshift(File.join(GEM_ROOT, 'lib'))
26
- require 'aspera/cli/main'
27
+ #
28
+ begin
29
+ require 'aspera/cli/main'
30
+ rescue LoadError
31
+ # development environment
32
+ development_root = File.dirname(File.dirname(File.realpath(__FILE__)))
33
+ $LOAD_PATH.unshift(File.join(development_root, 'lib'))
34
+ require 'aspera/cli/main'
35
+ end
27
36
  require 'aspera/environment'
28
37
  Aspera::Environment.fix_home
29
38
  Aspera::Cli::Main.new(ARGV).process_command_line
data/bin/asession CHANGED
@@ -2,16 +2,16 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  # Laurent Martin/2017
5
- $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
5
+ $LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib")
6
6
  require 'aspera/fasp/agent_direct'
7
- require 'aspera/cli/listener/line_dump'
8
7
  require 'aspera/cli/extended_value'
9
8
  require 'aspera/log'
10
9
  require 'json'
11
- # extended transfer spec parameter to change log level
12
- TS_LOGLEVEL = 'EX_loglevel'
10
+ # extended transfer spec parameter (only used in asession)
11
+ # Change log level
12
+ TS_LOG_LEVEL = 'EX_loglevel'
13
13
  # by default go to /tmp/username.filelist
14
- TS_TMP_FILELIST_FOLDER = 'EX_file_list_folder'
14
+ TS_TMP_FILE_LIST_FOLDER = 'EX_file_list_folder'
15
15
 
16
16
  SAMPLE_DEMO = '"remote_host":"demo.asperasoft.com","remote_user":"asperaweb","ssh_port":33001,"remote_password":"demoaspera"'
17
17
  SAMPLE_DEMO2 = '"direction":"receive","destination_root":"./test.dir"'
@@ -34,7 +34,7 @@ def assert_usage(assertion, error_message)
34
34
  $stderr.puts(' {"type":"START","source":"/aspera-test-dir-tiny/200KB.2"}')
35
35
  $stderr.puts(' {"type":"START","source":"xx","destination":"yy"}')
36
36
  $stderr.puts(' {"type":"DONE"}')
37
- $stderr.puts(%Q(Note: debug information can be placed on STDERR, using the "#{TS_LOGLEVEL}" parameter in transfer spec (debug=0)))
37
+ $stderr.puts(%Q(Note: debug information can be placed on STDERR, using the "#{TS_LOG_LEVEL}" parameter in transfer spec (debug=0)))
38
38
  $stderr.puts('EXAMPLES')
39
39
  $stderr.puts(%Q( asession @json:'{#{SAMPLE_DEMO},#{SAMPLE_DEMO2},"paths":[{"source":"/aspera-test-dir-tiny/200KB.1"}]}'))
40
40
  $stderr.puts(%q( echo '{"remote_host":...}'|asession @json:@stdin))
@@ -60,19 +60,17 @@ end
60
60
  # ensure right type
61
61
  assert_usage(transfer_spec.is_a?(Hash), "the value must be a hash table#{parameter_source_err_msg}")
62
62
  # additional debug capability
63
- if transfer_spec.key?(TS_LOGLEVEL)
64
- Aspera::Log.instance.level = transfer_spec[TS_LOGLEVEL]
65
- transfer_spec.delete(TS_LOGLEVEL)
63
+ if transfer_spec.key?(TS_LOG_LEVEL)
64
+ Aspera::Log.instance.level = transfer_spec[TS_LOG_LEVEL]
65
+ transfer_spec.delete(TS_LOG_LEVEL)
66
66
  end
67
67
  # possibly override temp folder
68
- if transfer_spec.key?(TS_TMP_FILELIST_FOLDER)
69
- Aspera::Fasp::Parameters.file_list_folder = transfer_spec[TS_TMP_FILELIST_FOLDER]
70
- transfer_spec.delete(TS_TMP_FILELIST_FOLDER)
68
+ if transfer_spec.key?(TS_TMP_FILE_LIST_FOLDER)
69
+ Aspera::Fasp::Parameters.file_list_folder = transfer_spec[TS_TMP_FILE_LIST_FOLDER]
70
+ transfer_spec.delete(TS_TMP_FILE_LIST_FOLDER)
71
71
  end
72
72
  # get local agent (ascp), disable ascp output on stdout to not mix with JSON events
73
73
  client = Aspera::Fasp::AgentDirect.new({quiet: true})
74
- # display JSON instead of legacy Lines
75
- client.add_listener(Aspera::Cli::Listener::LineDump.new)
76
74
  # start transfer (asynchronous)
77
75
  job_id = client.start_transfer(transfer_spec)
78
76
  # async commands
data/examples/dascli CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bash
2
2
  # set env var image to specify another docker image
3
- : "${image:=martinlaurent/ascli}"
3
+ : "${image:=docker.io/martinlaurent/ascli}"
4
4
  # set env var version to specify another image version (default: latest version)
5
5
  : "${version:=latest}"
6
6
  # set env var imgtag to specify a specific image/version
data/examples/proxy.pac CHANGED
@@ -1,4 +1,4 @@
1
- /* demo proxy pac for ascli */
1
+ /* demo proxy pac for `ascli` */
2
2
  function FindProxyForURL(url, host) {
3
3
  /* Normalize the URL for pattern matching */
4
4
  url = url.toLowerCase();
data/examples/rubyc ADDED
@@ -0,0 +1,24 @@
1
+ #!/bin/bash
2
+ # https://github.com/you54f/ruby-packer
3
+ # https://github.com/YOU54F/ruby-packer/releases
4
+ set -e
5
+ FOLDER="$(dirname $0)/../tmp"
6
+ RUBYC="$FOLDER/rubyc"
7
+ if test ! -e "$RUBYC"; then
8
+ mkdir -p "$FOLDER"
9
+ case $(uname -sm|tr ' ' -) in
10
+ Darwin-arm64)
11
+ curl -L https://github.com/YOU54F/ruby-packer/releases/download/rel-20230812/rubyc-Darwin-arm64.tar.gz | tar -xz -C "$FOLDER"
12
+ mv "$FOLDER/rubyc-Darwin-arm64" "$RUBYC"
13
+ ;;
14
+ Linux-x86_64)
15
+ curl -L https://github.com/YOU54F/ruby-packer/releases/download/rel-20230812/rubyc-Linux-x86_64.tar.gz | tar -xz -C "$FOLDER"
16
+ mv "$FOLDER/rubyc-Linux-x86_64" "$RUBYC"
17
+ ;;
18
+ *)
19
+ echo "This architecture is not supported." >&2
20
+ exit 1
21
+ ;;
22
+ esac
23
+ fi
24
+ exec "$RUBYC" "$@"