aspera-cli 4.13.0 → 4.15.0

Sign up to get free protection for your applications and to get access to all the features.
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" "$@"