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.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/BUGS.md +1 -1
  4. data/CHANGELOG.md +402 -374
  5. data/CONTRIBUTING.md +6 -10
  6. data/README.md +1018 -687
  7. data/lib/aspera/agent/base.rb +9 -5
  8. data/lib/aspera/agent/connect.rb +30 -28
  9. data/lib/aspera/agent/desktop.rb +29 -25
  10. data/lib/aspera/agent/direct.rb +137 -125
  11. data/lib/aspera/agent/httpgw.rb +22 -26
  12. data/lib/aspera/agent/node.rb +14 -11
  13. data/lib/aspera/agent/transferd.rb +6 -2
  14. data/lib/aspera/api/aoc.rb +15 -18
  15. data/lib/aspera/api/cos_node.rb +1 -1
  16. data/lib/aspera/api/httpgw.rb +15 -7
  17. data/lib/aspera/api/node.rb +6 -4
  18. data/lib/aspera/ascmd.rb +17 -9
  19. data/lib/aspera/ascp/installation.rb +21 -19
  20. data/lib/aspera/ascp/management.rb +1 -1
  21. data/lib/aspera/assert.rb +14 -5
  22. data/lib/aspera/cli/error.rb +2 -2
  23. data/lib/aspera/cli/extended_value.rb +38 -19
  24. data/lib/aspera/cli/formatter.rb +48 -48
  25. data/lib/aspera/cli/hints.rb +10 -2
  26. data/lib/aspera/cli/main.rb +190 -168
  27. data/lib/aspera/cli/manager.rb +16 -16
  28. data/lib/aspera/cli/plugin.rb +24 -21
  29. data/lib/aspera/cli/plugin_factory.rb +1 -1
  30. data/lib/aspera/cli/plugins/alee.rb +1 -1
  31. data/lib/aspera/cli/plugins/aoc.rb +173 -126
  32. data/lib/aspera/cli/plugins/ats.rb +19 -17
  33. data/lib/aspera/cli/plugins/config.rb +87 -98
  34. data/lib/aspera/cli/plugins/console.rb +5 -3
  35. data/lib/aspera/cli/plugins/faspex.rb +39 -35
  36. data/lib/aspera/cli/plugins/faspex5.rb +104 -80
  37. data/lib/aspera/cli/plugins/faspio.rb +13 -1
  38. data/lib/aspera/cli/plugins/httpgw.rb +13 -1
  39. data/lib/aspera/cli/plugins/node.rb +336 -205
  40. data/lib/aspera/cli/plugins/orchestrator.rb +34 -40
  41. data/lib/aspera/cli/plugins/preview.rb +3 -3
  42. data/lib/aspera/cli/plugins/server.rb +7 -6
  43. data/lib/aspera/cli/plugins/shares.rb +5 -5
  44. data/lib/aspera/cli/sync_actions.rb +19 -18
  45. data/lib/aspera/cli/transfer_agent.rb +11 -15
  46. data/lib/aspera/cli/transfer_progress.rb +2 -2
  47. data/lib/aspera/cli/version.rb +1 -1
  48. data/lib/aspera/command_line_builder.rb +116 -95
  49. data/lib/aspera/coverage.rb +4 -3
  50. data/lib/aspera/data_repository.rb +1 -0
  51. data/lib/aspera/environment.rb +7 -6
  52. data/lib/aspera/faspex_gw.rb +14 -14
  53. data/lib/aspera/faspex_postproc.rb +7 -6
  54. data/lib/aspera/hash_ext.rb +2 -2
  55. data/lib/aspera/json_rpc.rb +1 -1
  56. data/lib/aspera/keychain/encrypted_hash.rb +47 -34
  57. data/lib/aspera/keychain/factory.rb +41 -0
  58. data/lib/aspera/keychain/hashicorp_vault.rb +71 -0
  59. data/lib/aspera/keychain/macos_security.rb +19 -11
  60. data/lib/aspera/log.rb +29 -34
  61. data/lib/aspera/nagios.rb +6 -6
  62. data/lib/aspera/node_simulator.rb +8 -8
  63. data/lib/aspera/oauth/base.rb +10 -6
  64. data/lib/aspera/oauth/factory.rb +6 -6
  65. data/lib/aspera/oauth/url_json.rb +6 -6
  66. data/lib/aspera/persistency_action_once.rb +6 -4
  67. data/lib/aspera/persistency_folder.rb +2 -2
  68. data/lib/aspera/preview/file_types.rb +40 -33
  69. data/lib/aspera/preview/generator.rb +1 -1
  70. data/lib/aspera/preview/options.rb +16 -16
  71. data/lib/aspera/preview/terminal.rb +3 -3
  72. data/lib/aspera/preview/utils.rb +11 -13
  73. data/lib/aspera/products/connect.rb +2 -1
  74. data/lib/aspera/products/desktop.rb +1 -1
  75. data/lib/aspera/products/transferd.rb +1 -1
  76. data/lib/aspera/proxy_auto_config.rb +2 -2
  77. data/lib/aspera/rest.rb +70 -50
  78. data/lib/aspera/rest_error_analyzer.rb +1 -0
  79. data/lib/aspera/rest_errors_aspera.rb +1 -1
  80. data/lib/aspera/secret_hider.rb +5 -5
  81. data/lib/aspera/ssh.rb +5 -5
  82. data/lib/aspera/temp_file_manager.rb +1 -0
  83. data/lib/aspera/timer_limiter.rb +7 -5
  84. data/lib/aspera/transfer/async_conf.schema.yaml +716 -0
  85. data/lib/aspera/transfer/convert.rb +29 -0
  86. data/lib/aspera/transfer/error_info.rb +66 -66
  87. data/lib/aspera/transfer/parameters.rb +13 -68
  88. data/lib/aspera/transfer/spec.rb +5 -6
  89. data/lib/aspera/transfer/spec.schema.yaml +753 -0
  90. data/lib/aspera/transfer/spec_doc.rb +62 -0
  91. data/lib/aspera/transfer/sync.rb +37 -76
  92. data/lib/aspera/transfer/sync_instance.schema.yaml +20 -0
  93. data/lib/aspera/transfer/sync_session.schema.yaml +86 -0
  94. data/lib/aspera/transfer/uri.rb +6 -6
  95. data/lib/aspera/uri_reader.rb +1 -1
  96. data/lib/aspera/web_auth.rb +1 -1
  97. data/lib/aspera/web_server_simple.rb +53 -44
  98. data.tar.gz.sig +0 -0
  99. metadata +38 -7
  100. metadata.gz.sig +0 -0
  101. data/examples/build_package.sh +0 -28
  102. data/examples/dascli +0 -30
  103. data/examples/get_proto_file.rb +0 -8
  104. data/examples/proxy.pac +0 -60
  105. data/lib/aspera/transfer/spec.yaml +0 -718
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.21.2
4
+ version: 4.23.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Laurent Martin
@@ -37,7 +37,7 @@ cert_chain:
37
37
  eTf9kxhVM40wGQOECVNA8UsEEZHD48eF+csUYZtAJOF5oxTI8UyV9T/o6CgO0c9/
38
38
  Gzz+Qm5ULOUcPiJLjSpaiTrkiIVYiDGnqNSr6R1Hb1c=
39
39
  -----END CERTIFICATE-----
40
- date: 2025-04-11 00:00:00.000000000 Z
40
+ date: 2025-08-12 00:00:00.000000000 Z
41
41
  dependencies:
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: blankslate
@@ -193,6 +193,20 @@ dependencies:
193
193
  - - "~>"
194
194
  - !ruby/object:Gem::Version
195
195
  version: '0.9'
196
+ - !ruby/object:Gem::Dependency
197
+ name: vault
198
+ requirement: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - "~>"
201
+ - !ruby/object:Gem::Version
202
+ version: '0.18'
203
+ type: :runtime
204
+ prerelease: false
205
+ version_requirements: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - "~>"
208
+ - !ruby/object:Gem::Version
209
+ version: '0.18'
196
210
  - !ruby/object:Gem::Dependency
197
211
  name: webrick
198
212
  requirement: !ruby/object:Gem::Requirement
@@ -221,6 +235,20 @@ dependencies:
221
235
  - - "~>"
222
236
  - !ruby/object:Gem::Version
223
237
  version: '1.2'
238
+ - !ruby/object:Gem::Dependency
239
+ name: word_wrap
240
+ requirement: !ruby/object:Gem::Requirement
241
+ requirements:
242
+ - - "~>"
243
+ - !ruby/object:Gem::Version
244
+ version: '1.0'
245
+ type: :runtime
246
+ prerelease: false
247
+ version_requirements: !ruby/object:Gem::Requirement
248
+ requirements:
249
+ - - "~>"
250
+ - !ruby/object:Gem::Version
251
+ version: '1.0'
224
252
  - !ruby/object:Gem::Dependency
225
253
  name: xml-simple
226
254
  requirement: !ruby/object:Gem::Requirement
@@ -250,10 +278,6 @@ files:
250
278
  - README.md
251
279
  - bin/ascli
252
280
  - bin/asession
253
- - examples/build_package.sh
254
- - examples/dascli
255
- - examples/get_proto_file.rb
256
- - examples/proxy.pac
257
281
  - lib/aspera/agent/base.rb
258
282
  - lib/aspera/agent/connect.rb
259
283
  - lib/aspera/agent/desktop.rb
@@ -318,6 +342,8 @@ files:
318
342
  - lib/aspera/id_generator.rb
319
343
  - lib/aspera/json_rpc.rb
320
344
  - lib/aspera/keychain/encrypted_hash.rb
345
+ - lib/aspera/keychain/factory.rb
346
+ - lib/aspera/keychain/hashicorp_vault.rb
321
347
  - lib/aspera/keychain/macos_security.rb
322
348
  - lib/aspera/line_logger.rb
323
349
  - lib/aspera/log.rb
@@ -354,13 +380,18 @@ files:
354
380
  - lib/aspera/ssh.rb
355
381
  - lib/aspera/temp_file_manager.rb
356
382
  - lib/aspera/timer_limiter.rb
383
+ - lib/aspera/transfer/async_conf.schema.yaml
384
+ - lib/aspera/transfer/convert.rb
357
385
  - lib/aspera/transfer/error.rb
358
386
  - lib/aspera/transfer/error_info.rb
359
387
  - lib/aspera/transfer/faux_file.rb
360
388
  - lib/aspera/transfer/parameters.rb
361
389
  - lib/aspera/transfer/spec.rb
362
- - lib/aspera/transfer/spec.yaml
390
+ - lib/aspera/transfer/spec.schema.yaml
391
+ - lib/aspera/transfer/spec_doc.rb
363
392
  - lib/aspera/transfer/sync.rb
393
+ - lib/aspera/transfer/sync_instance.schema.yaml
394
+ - lib/aspera/transfer/sync_session.schema.yaml
364
395
  - lib/aspera/transfer/uri.rb
365
396
  - lib/aspera/uri_reader.rb
366
397
  - lib/aspera/web_auth.rb
metadata.gz.sig CHANGED
Binary file
@@ -1,28 +0,0 @@
1
- #!/bin/bash
2
- # Usage: ./build_package.sh <gem_name> <gem_version>
3
- # Example: ./build_package.sh aspera-cli 4.18.0
4
- set -e
5
- if [ "$#" -ne 2 ]; then
6
- echo "Usage: $0 <gem_name> <gem_version>"
7
- exit 1
8
- fi
9
- gem_name=$1
10
- gem_version=$2
11
- # on macOS, GNU tar is gtar
12
- GNU_TAR=tar
13
- if [ "$(uname)" == "Darwin" ]; then
14
- GNU_TAR=gtar
15
- fi
16
- # temp folder to install gems
17
- tmp_dir_install=.tmp_install
18
- # clean, if there were left overs
19
- rm -fr $tmp_dir_install
20
- # retrieve list of necessary gems
21
- echo "Getting gems $gem_name $gem_version"
22
- # install gems in a temporary folder
23
- gem install $gem_name:$gem_version --no-document --install-dir $tmp_dir_install
24
- archive=$gem_name-$gem_version-gems.tgz
25
- # .gem files are located in cache folder
26
- $GNU_TAR -zcf $archive --directory=$tmp_dir_install/cache/. .
27
- rm -fr $tmp_dir_install
28
- echo "Archive: $archive"
data/examples/dascli DELETED
@@ -1,30 +0,0 @@
1
- #!/usr/bin/env bash
2
- # set env var image to specify another docker image
3
- : "${image:=docker.io/martinlaurent/ascli}"
4
- # set env var version to specify another image version (default: latest version)
5
- : "${version:=latest}"
6
- # set env var imgtag to specify a specific image/version
7
- : "${imgtag=$image:$version}"
8
- # set env var `docker` to podman, to use podman
9
- : "${docker:=docker}"
10
- # set env var `docker_args` to add options to docker run (then, transform this var into array) # spellcheck disable=SC2086
11
- read -a add_dock_args <<< $docker_args
12
- # set env var ASCLI_HOME to set the config folder on host
13
- : "${ASCLI_HOME:=$HOME/.aspera/ascli}"
14
- # main config folder for ascli in container (same value as in `Dockerfile`)
15
- ascli_home_container=/home/cliuser/.aspera/ascli
16
- if test ! -d "$ASCLI_HOME";then
17
- echo "creating folder: $ASCLI_HOME"
18
- # create it if necessary to allow mounting the volume in container
19
- mkdir -p "$ASCLI_HOME"
20
- fi
21
- exec $docker run \
22
- --rm \
23
- --tty \
24
- --interactive \
25
- --user root \
26
- --env ASCLI_HOME="$ascli_home_container" \
27
- --volume "$ASCLI_HOME:$ascli_home_container:z" \
28
- "${add_dock_args[@]}" \
29
- "$imgtag" \
30
- "$@"
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require 'aspera/ascp/installation'
5
- require 'aspera/cli/transfer_progress'
6
- Aspera::RestParameters.instance.progress_bar = Aspera::Cli::TransferProgress.new
7
- # Retrieve `transfer.proto` from the web
8
- Aspera::Ascp::Installation.instance.install_sdk(folder: ARGV.first, backup: false, with_exe: false) {|name| name.end_with?('.proto') ? '/' : nil }
data/examples/proxy.pac DELETED
@@ -1,60 +0,0 @@
1
- /* demo proxy pac for `ascli` */
2
- function FindProxyForURL(url, host) {
3
- /* Normalize the URL for pattern matching */
4
- url = url.toLowerCase();
5
- host = host.toLowerCase();
6
-
7
- /* Don't proxy local host names */
8
- if (isPlainHostName(host)) {
9
- return 'DIRECT';
10
- }
11
-
12
- /* Don't proxy local domains */
13
- if (dnsDomainIs(host, ".example1.com") || (host == "example1.com")
14
- || dnsDomainIs(host, ".example2.com") || (host == "example2.com")
15
- || dnsDomainIs(host, ".example3.com") || (host == "example3.com")) {
16
- return 'DIRECT';
17
- }
18
-
19
- /* Don't proxy Windows Update */
20
- if ((host == "download.microsoft.com")
21
- || (host == "ntservicepack.microsoft.com")
22
- || (host == "cdm.microsoft.com") || (host == "wustat.windows.com")
23
- || (host == "windowsupdate.microsoft.com")
24
- || (dnsDomainIs(host, ".windowsupdate.microsoft.com"))
25
- || (host == "update.microsoft.com")
26
- || (dnsDomainIs(host, ".update.microsoft.com"))
27
- || (dnsDomainIs(host, ".windowsupdate.com"))) {
28
- return 'DIRECT';
29
- }
30
-
31
- if (isResolvable(host)) {
32
- var hostIP = dnsResolve(host);
33
-
34
- /* Don't proxy private addresses (RFC 3330) */
35
- if (isInNet(hostIP, '0.0.0.0', '255.0.0.0')
36
- || isInNet(hostIP, '10.0.0.0', '255.0.0.0')
37
- || isInNet(hostIP, '127.0.0.0', '255.0.0.0')
38
- || isInNet(hostIP, '169.254.0.0', '255.255.0.0')
39
- || isInNet(hostIP, '172.16.0.0', '255.240.0.0')
40
- || isInNet(hostIP, '192.0.2.0', '255.255.255.0')
41
- || isInNet(hostIP, '192.88.99.0', '255.255.255.0')
42
- || isInNet(hostIP, '192.168.0.0', '255.255.0.0')
43
- || isInNet(hostIP, '198.18.0.0', '255.254.0.0')
44
- || isInNet(hostIP, '224.0.0.0', '240.0.0.0')
45
- || isInNet(hostIP, '240.0.0.0', '240.0.0.0')) {
46
- return 'DIRECT';
47
- }
48
- }
49
-
50
- if (url.substring(0, 5) == 'http:' || url.substring(0, 6) == 'https:'
51
- || url.substring(0, 4) == 'ftp:') {
52
- return 'PROXY proxy.example.com:8080';
53
- }
54
-
55
- if (url.substring(0, 4) == 'ssh:') {
56
- return 'PROXY proxy.aspera.com:9092';
57
- }
58
-
59
- return 'DIRECT';
60
- }