aspera-cli 4.10.0 → 4.12.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 +19 -0
- data/CHANGELOG.md +528 -0
- data/CONTRIBUTING.md +143 -0
- data/README.md +977 -589
- data/bin/ascli +4 -4
- data/bin/asession +12 -12
- data/docs/test_env.conf +29 -19
- data/examples/aoc.rb +6 -6
- data/examples/dascli +18 -16
- data/examples/faspex4.rb +15 -15
- data/examples/node.rb +12 -12
- data/examples/proxy.pac +2 -2
- data/examples/server.rb +12 -12
- data/lib/aspera/aoc.rb +344 -272
- data/lib/aspera/ascmd.rb +56 -54
- data/lib/aspera/ats_api.rb +4 -4
- data/lib/aspera/cli/basic_auth_plugin.rb +15 -12
- data/lib/aspera/cli/extended_value.rb +9 -9
- data/lib/aspera/cli/{formater.rb → formatter.rb} +69 -69
- data/lib/aspera/cli/listener/line_dump.rb +1 -1
- data/lib/aspera/cli/listener/logger.rb +1 -1
- data/lib/aspera/cli/listener/progress.rb +5 -6
- data/lib/aspera/cli/listener/progress_multi.rb +16 -21
- data/lib/aspera/cli/main.rb +72 -73
- data/lib/aspera/cli/manager.rb +112 -112
- data/lib/aspera/cli/plugin.rb +68 -48
- data/lib/aspera/cli/plugins/alee.rb +4 -4
- data/lib/aspera/cli/plugins/aoc.rb +322 -720
- data/lib/aspera/cli/plugins/ats.rb +50 -52
- data/lib/aspera/cli/plugins/bss.rb +10 -10
- data/lib/aspera/cli/plugins/config.rb +514 -410
- data/lib/aspera/cli/plugins/console.rb +12 -12
- data/lib/aspera/cli/plugins/cos.rb +18 -20
- data/lib/aspera/cli/plugins/faspex.rb +134 -136
- data/lib/aspera/cli/plugins/faspex5.rb +235 -70
- data/lib/aspera/cli/plugins/node.rb +378 -309
- data/lib/aspera/cli/plugins/orchestrator.rb +52 -49
- data/lib/aspera/cli/plugins/preview.rb +129 -120
- data/lib/aspera/cli/plugins/server.rb +137 -83
- data/lib/aspera/cli/plugins/shares.rb +77 -52
- data/lib/aspera/cli/plugins/sync.rb +13 -33
- data/lib/aspera/cli/transfer_agent.rb +61 -61
- data/lib/aspera/cli/version.rb +2 -1
- data/lib/aspera/colors.rb +3 -3
- data/lib/aspera/command_line_builder.rb +78 -74
- data/lib/aspera/cos_node.rb +31 -29
- data/lib/aspera/data_repository.rb +1 -1
- data/lib/aspera/environment.rb +30 -28
- data/lib/aspera/fasp/agent_base.rb +17 -15
- data/lib/aspera/fasp/agent_connect.rb +34 -32
- data/lib/aspera/fasp/agent_direct.rb +70 -73
- data/lib/aspera/fasp/agent_httpgw.rb +79 -74
- data/lib/aspera/fasp/agent_node.rb +26 -26
- data/lib/aspera/fasp/agent_trsdk.rb +20 -20
- data/lib/aspera/fasp/error.rb +3 -2
- data/lib/aspera/fasp/error_info.rb +11 -8
- data/lib/aspera/fasp/installation.rb +80 -80
- data/lib/aspera/fasp/listener.rb +2 -2
- data/lib/aspera/fasp/parameters.rb +103 -92
- data/lib/aspera/fasp/parameters.yaml +313 -214
- data/lib/aspera/fasp/resume_policy.rb +10 -10
- data/lib/aspera/fasp/transfer_spec.rb +22 -2
- data/lib/aspera/fasp/uri.rb +7 -7
- data/lib/aspera/faspex_gw.rb +80 -159
- data/lib/aspera/faspex_postproc.rb +77 -0
- data/lib/aspera/hash_ext.rb +3 -3
- data/lib/aspera/id_generator.rb +5 -5
- data/lib/aspera/keychain/encrypted_hash.rb +23 -28
- data/lib/aspera/keychain/macos_security.rb +21 -20
- data/lib/aspera/log.rb +13 -13
- data/lib/aspera/nagios.rb +24 -23
- data/lib/aspera/node.rb +217 -38
- data/lib/aspera/oauth.rb +78 -74
- data/lib/aspera/open_application.rb +19 -11
- data/lib/aspera/persistency_action_once.rb +4 -4
- data/lib/aspera/persistency_folder.rb +13 -13
- data/lib/aspera/preview/file_types.rb +8 -8
- data/lib/aspera/preview/generator.rb +67 -67
- data/lib/aspera/preview/utils.rb +27 -27
- data/lib/aspera/proxy_auto_config.js +63 -63
- data/lib/aspera/proxy_auto_config.rb +19 -19
- data/lib/aspera/rest.rb +65 -67
- data/lib/aspera/rest_call_error.rb +2 -1
- data/lib/aspera/rest_error_analyzer.rb +22 -21
- data/lib/aspera/rest_errors_aspera.rb +16 -16
- data/lib/aspera/secret_hider.rb +17 -14
- data/lib/aspera/ssh.rb +15 -14
- data/lib/aspera/sync.rb +177 -62
- data/lib/aspera/temp_file_manager.rb +2 -2
- data/lib/aspera/uri_reader.rb +4 -4
- data/lib/aspera/web_auth.rb +13 -64
- data/lib/aspera/web_server_simple.rb +76 -0
- data.tar.gz.sig +0 -0
- metadata +11 -6
- metadata.gz.sig +0 -0
data/bin/ascli
CHANGED
@@ -3,9 +3,9 @@
|
|
3
3
|
|
4
4
|
require 'rubygems'
|
5
5
|
require 'securerandom'
|
6
|
-
GEM_ROOT=File.realpath(File.join(File.dirname(File.realpath(__FILE__)),'..'))
|
6
|
+
GEM_ROOT = File.realpath(File.join(File.dirname(File.realpath(__FILE__)), '..'))
|
7
7
|
# coverage for tests
|
8
|
-
if ENV.
|
8
|
+
if ENV.key?('ENABLE_COVERAGE')
|
9
9
|
require 'simplecov'
|
10
10
|
SimpleCov.root(GEM_ROOT)
|
11
11
|
SimpleCov.enable_for_subprocesses if SimpleCov.respond_to?(:enable_for_subprocesses)
|
@@ -14,13 +14,13 @@ if ENV.has_key?('ENABLE_COVERAGE')
|
|
14
14
|
SimpleCov.command_name(SecureRandom.uuid)
|
15
15
|
SimpleCov.at_exit do
|
16
16
|
original_file_descriptor = $stdout
|
17
|
-
$stdout.reopen(File.join(GEM_ROOT,'simplecov.log'))
|
17
|
+
$stdout.reopen(File.join(GEM_ROOT, 'simplecov.log'))
|
18
18
|
SimpleCov.result.format!
|
19
19
|
$stdout.reopen(original_file_descriptor)
|
20
20
|
end
|
21
21
|
SimpleCov.start
|
22
22
|
end
|
23
|
-
$LOAD_PATH.unshift(File.join(GEM_ROOT,'lib'))
|
23
|
+
$LOAD_PATH.unshift(File.join(GEM_ROOT, 'lib'))
|
24
24
|
require 'aspera/cli/main'
|
25
25
|
require 'aspera/environment'
|
26
26
|
Encoding.default_internal = Encoding::UTF_8
|
data/bin/asession
CHANGED
@@ -13,11 +13,11 @@ TS_LOGLEVEL = 'EX_loglevel'
|
|
13
13
|
# by default go to /tmp/username.filelist
|
14
14
|
TS_TMP_FILELIST_FOLDER = 'EX_file_list_folder'
|
15
15
|
|
16
|
-
SAMPLE_DEMO='"remote_host":"demo.asperasoft.com","remote_user":"asperaweb","ssh_port":33001,"remote_password":"demoaspera"'
|
17
|
-
SAMPLE_DEMO2='"direction":"receive","destination_root":"./test.dir"'
|
18
|
-
def assert_usage(assertion,
|
16
|
+
SAMPLE_DEMO = '"remote_host":"demo.asperasoft.com","remote_user":"asperaweb","ssh_port":33001,"remote_password":"demoaspera"'
|
17
|
+
SAMPLE_DEMO2 = '"direction":"receive","destination_root":"./test.dir"'
|
18
|
+
def assert_usage(assertion, error_message)
|
19
19
|
return if assertion
|
20
|
-
$stderr.puts('ERROR: '.red.blink +
|
20
|
+
$stderr.puts('ERROR: '.red.blink + error_message) if error_message
|
21
21
|
$stderr.puts('USAGE')
|
22
22
|
$stderr.puts(' asession')
|
23
23
|
$stderr.puts(' asession -h|--help')
|
@@ -48,24 +48,24 @@ if ARGV.empty?
|
|
48
48
|
parameter_source_err_msg = ' (JSON on stdin)'
|
49
49
|
end
|
50
50
|
# anyway expect only one argument: session information
|
51
|
-
assert_usage(ARGV.length.eql?(1),'exactly one argument is expected')
|
52
|
-
assert_usage(!['-h','--help'].include?(ARGV.first),nil)
|
51
|
+
assert_usage(ARGV.length.eql?(1), 'exactly one argument is expected')
|
52
|
+
assert_usage(!['-h', '--help'].include?(ARGV.first), nil)
|
53
53
|
# parse transfer spec
|
54
54
|
begin
|
55
55
|
transfer_spec_arg = ARGV.pop
|
56
56
|
transfer_spec = Aspera::Cli::ExtendedValue.instance.evaluate(transfer_spec_arg)
|
57
57
|
rescue
|
58
|
-
assert_usage(false,"Cannot extract transfer spec from: #{transfer_spec_arg}")
|
58
|
+
assert_usage(false, "Cannot extract transfer spec from: #{transfer_spec_arg}")
|
59
59
|
end
|
60
60
|
# ensure right type
|
61
|
-
assert_usage(transfer_spec.is_a?(Hash),"the value must be a hash table#{parameter_source_err_msg}")
|
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.
|
63
|
+
if transfer_spec.key?(TS_LOGLEVEL)
|
64
64
|
Aspera::Log.instance.level = transfer_spec[TS_LOGLEVEL]
|
65
65
|
transfer_spec.delete(TS_LOGLEVEL)
|
66
66
|
end
|
67
67
|
# possibly override temp folder
|
68
|
-
if transfer_spec.
|
68
|
+
if transfer_spec.key?(TS_TMP_FILELIST_FOLDER)
|
69
69
|
Aspera::Fasp::Parameters.file_list_folder = transfer_spec[TS_TMP_FILELIST_FOLDER]
|
70
70
|
transfer_spec.delete(TS_TMP_FILELIST_FOLDER)
|
71
71
|
end
|
@@ -77,10 +77,10 @@ client.add_listener(Aspera::Cli::Listener::LineDump.new)
|
|
77
77
|
job_id = client.start_transfer(transfer_spec)
|
78
78
|
# async commands
|
79
79
|
Thread.new do
|
80
|
-
begin
|
80
|
+
begin # rubocop:disable Style/RedundantBegin
|
81
81
|
loop do
|
82
82
|
data = JSON.parse($stdin.gets)
|
83
|
-
client.send_command(job_id,0,data)
|
83
|
+
client.send_command(job_id, 0, data)
|
84
84
|
end
|
85
85
|
rescue
|
86
86
|
Process.exit(1)
|
data/docs/test_env.conf
CHANGED
@@ -3,11 +3,11 @@ config:
|
|
3
3
|
version: 4.0.0
|
4
4
|
default:
|
5
5
|
config: cli_default
|
6
|
-
aoc:
|
6
|
+
aoc: tst_aoc_jwt
|
7
7
|
faspex: tst_faspex
|
8
|
-
faspex5:
|
8
|
+
faspex5: tst_faspex5_jwt
|
9
9
|
shares: tst_shares
|
10
|
-
node:
|
10
|
+
node: tst_node_simple
|
11
11
|
server: tst_server
|
12
12
|
orchestrator: tst_orch
|
13
13
|
console: tst_console
|
@@ -18,7 +18,6 @@ default:
|
|
18
18
|
cli_default:
|
19
19
|
interactive: your value here
|
20
20
|
smtp: your value here
|
21
|
-
secrets: your value here
|
22
21
|
local_user:
|
23
22
|
ssh_keys: your value here
|
24
23
|
smtp_config:
|
@@ -30,11 +29,17 @@ smtp_config:
|
|
30
29
|
from_name: your value here
|
31
30
|
username: your value here
|
32
31
|
password: your value here
|
33
|
-
|
32
|
+
tst_aoc_jwt:
|
34
33
|
url: your value here
|
35
34
|
username: your value here
|
36
35
|
auth: your value here
|
37
36
|
private_key: your value here
|
37
|
+
tst_aoc_web:
|
38
|
+
url: your value here
|
39
|
+
auth: your value here
|
40
|
+
redirect_uri: your value here
|
41
|
+
client_id: your value here
|
42
|
+
client_secret: your value here
|
38
43
|
tst_faspex:
|
39
44
|
url: your value here
|
40
45
|
username: your value here
|
@@ -43,10 +48,6 @@ tst_faspex:
|
|
43
48
|
tst_hstsfaspex_ssh:
|
44
49
|
url: your value here
|
45
50
|
username: your value here
|
46
|
-
tst_node_faspex:
|
47
|
-
url: your value here
|
48
|
-
username: your value here
|
49
|
-
password: your value here
|
50
51
|
tst_faspex5_boot:
|
51
52
|
url: your value here
|
52
53
|
auth: your value here
|
@@ -57,8 +58,7 @@ tst_faspex5_web:
|
|
57
58
|
auth: your value here
|
58
59
|
redirect_uri: your value here
|
59
60
|
client_id: your value here
|
60
|
-
|
61
|
-
tst_faspex5:
|
61
|
+
tst_faspex5_jwt:
|
62
62
|
url: your value here
|
63
63
|
auth: your value here
|
64
64
|
client_id: your value here
|
@@ -73,11 +73,23 @@ tst_shares_1:
|
|
73
73
|
url: your value here
|
74
74
|
username: your value here
|
75
75
|
password: your value here
|
76
|
-
|
76
|
+
tst_node_simple:
|
77
77
|
url: your value here
|
78
78
|
username: your value here
|
79
79
|
password: your value here
|
80
|
-
|
80
|
+
tst_node_ak:
|
81
|
+
url: your value here
|
82
|
+
username: your value here
|
83
|
+
password: your value here
|
84
|
+
tst_node_faspex:
|
85
|
+
url: your value here
|
86
|
+
username: your value here
|
87
|
+
password: your value here
|
88
|
+
tst_node_admak:
|
89
|
+
url: your value here
|
90
|
+
username: your value here
|
91
|
+
password: your value here
|
92
|
+
tst_node_preview:
|
81
93
|
url: your value here
|
82
94
|
username: your value here
|
83
95
|
password: your value here
|
@@ -108,10 +120,6 @@ tst_ak_preview:
|
|
108
120
|
username: your value here
|
109
121
|
password: your value here
|
110
122
|
mimemagic: your value here
|
111
|
-
tst_node_preview:
|
112
|
-
url: your value here
|
113
|
-
username: your value here
|
114
|
-
password: your value here
|
115
123
|
tst_cos:
|
116
124
|
apikey: your value here
|
117
125
|
crn: your value here
|
@@ -120,6 +128,8 @@ tst_cos:
|
|
120
128
|
sync:
|
121
129
|
local_path: your value here
|
122
130
|
remote_path: your value here
|
131
|
+
nowss:
|
132
|
+
ts: your value here
|
123
133
|
misc:
|
124
134
|
upload_folder: your value here
|
125
135
|
syncuser: your value here
|
@@ -129,6 +139,7 @@ misc:
|
|
129
139
|
faspex_dbx: your value here
|
130
140
|
faspex_wkg: your value here
|
131
141
|
faspex_src: your value here
|
142
|
+
faspex5_shinbox: your value here
|
132
143
|
faspex5_meta: your value here
|
133
144
|
shares_upload: your value here
|
134
145
|
console_smart_id: your value here
|
@@ -152,6 +163,7 @@ misc:
|
|
152
163
|
aoc_shbx_meta: your value here
|
153
164
|
aoc_ak_name: your value here
|
154
165
|
aoc_ak_secret: your value here
|
166
|
+
aoc_test_folder: your value here
|
155
167
|
icos_bucket_key: your value here
|
156
168
|
icos_bucket_secret: your value here
|
157
169
|
icos_bucket_name: your value here
|
@@ -165,5 +177,3 @@ misc:
|
|
165
177
|
aoc_user_email: your value here
|
166
178
|
aoc_workspace2: your value here
|
167
179
|
http_gw_fqdn_port: your value here
|
168
|
-
tst_secrets:
|
169
|
-
eudemo-sedemo: your value here
|
data/examples/aoc.rb
CHANGED
@@ -7,9 +7,9 @@ require 'aspera/log'
|
|
7
7
|
Aspera::Log.instance.level = :debug
|
8
8
|
|
9
9
|
if !ARGV.length.eql?(3)
|
10
|
-
Aspera::Log.log.error
|
11
|
-
Aspera::Log.log.error
|
12
|
-
Aspera::Log.log.error
|
10
|
+
Aspera::Log.log.error{"wrong number of args: #{ARGV.length}"}
|
11
|
+
Aspera::Log.log.error{"Usage: #{$PROGRAM_NAME} <aoc URL> <aoc username> <aoc private key content>"}
|
12
|
+
Aspera::Log.log.error{"Example: #{$PROGRAM_NAME} https://myorg.ibmaspera.com john@example.com $(cat /home/john/my_key.pem)"}
|
13
13
|
Process.exit(1)
|
14
14
|
end
|
15
15
|
|
@@ -17,7 +17,7 @@ aoc_url = ARGV[0]
|
|
17
17
|
aoc_user = ARGV[1]
|
18
18
|
aoc_key_value = ARGV[2]
|
19
19
|
|
20
|
-
|
20
|
+
aoc_api = Aspera::AoC.new(
|
21
21
|
url: aoc_url,
|
22
22
|
auth: :jwt,
|
23
23
|
private_key: aoc_key_value,
|
@@ -25,6 +25,6 @@ aocapi = Aspera::AoC.new(
|
|
25
25
|
scope: 'user:all',
|
26
26
|
subpath: 'api/v1')
|
27
27
|
|
28
|
-
self_user_data =
|
28
|
+
self_user_data = aoc_api.read('self')
|
29
29
|
|
30
|
-
Aspera::Log.dump('self',self_user_data)
|
30
|
+
Aspera::Log.dump('self', self_user_data)
|
data/examples/dascli
CHANGED
@@ -1,20 +1,20 @@
|
|
1
1
|
#!/usr/bin/env bash
|
2
2
|
# set env var image to specify another docker image
|
3
|
-
|
4
|
-
# set env var
|
5
|
-
: ${
|
6
|
-
#
|
7
|
-
: ${version
|
8
|
-
|
9
|
-
: ${
|
10
|
-
# transform var into array
|
11
|
-
add_dock_args
|
12
|
-
#
|
3
|
+
: "${image:=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 (transform 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`)
|
13
15
|
ascli_home_container=/home/cliuser/.aspera/ascli
|
14
|
-
|
15
|
-
: $
|
16
|
-
if test ! -d $ASCLI_HOME;then
|
17
|
-
echo "creating foder: $ASCLI_HOME"
|
16
|
+
if test ! -d "$ASCLI_HOME";then
|
17
|
+
echo "creating folder: $ASCLI_HOME"
|
18
18
|
# create it if necessary to allow mounting the volume in container
|
19
19
|
mkdir -p "$ASCLI_HOME"
|
20
20
|
fi
|
@@ -22,7 +22,9 @@ exec $docker run \
|
|
22
22
|
--rm \
|
23
23
|
--tty \
|
24
24
|
--interactive \
|
25
|
+
--user root \
|
26
|
+
--env ASCLI_HOME="$ascli_home_container" \
|
25
27
|
--volume "$ASCLI_HOME:$ascli_home_container" \
|
26
28
|
"${add_dock_args[@]}" \
|
27
|
-
$imgtag \
|
28
|
-
|
29
|
+
"$imgtag" \
|
30
|
+
"$@"
|
data/examples/faspex4.rb
CHANGED
@@ -20,9 +20,9 @@ Aspera::Log.instance.level = :debug
|
|
20
20
|
Aspera::Fasp::Installation.instance.folder = tmpdir
|
21
21
|
|
22
22
|
if !ARGV.length.eql?(3)
|
23
|
-
Aspera::Log.log.error
|
24
|
-
Aspera::Log.log.error
|
25
|
-
Aspera::Log.log.error
|
23
|
+
Aspera::Log.log.error{"Wrong number of args: #{ARGV.length}"}
|
24
|
+
Aspera::Log.log.error{"Usage: #{$PROGRAM_NAME} <faspex URL> <faspex username> <faspex password>"}
|
25
|
+
Aspera::Log.log.error{"Example: #{$PROGRAM_NAME} https://faspex.com/aspera/faspex john p@sSw0rd"}
|
26
26
|
Process.exit(1)
|
27
27
|
end
|
28
28
|
|
@@ -52,7 +52,7 @@ api_v3.read('me')
|
|
52
52
|
#---------------
|
53
53
|
|
54
54
|
# create a sample file to send
|
55
|
-
file_to_send = File.join(tmpdir,'myfile.bin')
|
55
|
+
file_to_send = File.join(tmpdir, 'myfile.bin')
|
56
56
|
File.write(file_to_send, 'sample data')
|
57
57
|
# package creation parameters
|
58
58
|
package_create_params = {'delivery' => {
|
@@ -60,7 +60,7 @@ package_create_params = {'delivery' => {
|
|
60
60
|
'recipients' => ['aspera.user1@gmail.com'],
|
61
61
|
'sources' => [{'paths' => [file_to_send]}]
|
62
62
|
}}
|
63
|
-
pkg_created = api_v3.create('send',package_create_params)[:data]
|
63
|
+
pkg_created = api_v3.create('send', package_create_params)[:data]
|
64
64
|
# get transfer specification (normally: only one)
|
65
65
|
transfer_spec = pkg_created['xfer_sessions'].first
|
66
66
|
# set paths of files to send
|
@@ -69,12 +69,12 @@ transfer_spec['paths'] = [{'source' => file_to_send}]
|
|
69
69
|
transfer_client = Aspera::Fasp::AgentDirect.new({quiet: true})
|
70
70
|
# start transfer (asynchronous)
|
71
71
|
job_id = transfer_client.start_transfer(transfer_spec)
|
72
|
-
Aspera::Log.dump('job_id',job_id)
|
72
|
+
Aspera::Log.dump('job_id', job_id)
|
73
73
|
# wait for all transfer completion (for the example)
|
74
74
|
result = transfer_client.wait_for_transfers_completion
|
75
75
|
# notify of any transfer error
|
76
76
|
result.reject{|i|i.eql?(:success)}.each do |e|
|
77
|
-
Aspera::Log.log.error
|
77
|
+
Aspera::Log.log.error{"A transfer error occurred: #{e.message}"}
|
78
78
|
end
|
79
79
|
|
80
80
|
# 3: Faspex 4 API v4
|
@@ -82,13 +82,13 @@ end
|
|
82
82
|
api_v4 = Aspera::Rest.new({
|
83
83
|
base_url: faspex_url + '/api',
|
84
84
|
auth: {
|
85
|
-
type:
|
86
|
-
base_url:
|
87
|
-
auth:
|
88
|
-
|
89
|
-
generic:
|
90
|
-
scope:
|
85
|
+
type: :oauth2,
|
86
|
+
base_url: faspex_url + '/auth/oauth2',
|
87
|
+
auth: {type: :basic, username: faspex_user, password: faspex_pass},
|
88
|
+
grant_method: :generic,
|
89
|
+
generic: {grant_type: 'password'},
|
90
|
+
scope: 'admin'
|
91
91
|
}})
|
92
92
|
|
93
|
-
# Use it. Note that Faspex 4 API v4 is totally different from Faspex 4 v3 APIs, see ref
|
94
|
-
Aspera::Log.dump('users',api_v4.read('users')[:data])
|
93
|
+
# Use it. Note that Faspex 4 API v4 is totally different from Faspex 4 v3 APIs, see ref in header
|
94
|
+
Aspera::Log.dump('users', api_v4.read('users')[:data])
|
data/examples/node.rb
CHANGED
@@ -15,7 +15,7 @@ require 'tmpdir'
|
|
15
15
|
|
16
16
|
tmpdir = ENV['tmp'] || Dir.tmpdir || '.'
|
17
17
|
|
18
|
-
raise 'Usage: PASSWORD=<password> $0 https://<address>:<port> <node user>' unless ARGV.length.eql?(2) && ENV.
|
18
|
+
raise 'Usage: PASSWORD=<password> $0 https://<address>:<port> <node user>' unless ARGV.length.eql?(2) && ENV.key?('PASSWORD')
|
19
19
|
|
20
20
|
# example : https://node_asperaweb@eudemo.asperademo.com:9092
|
21
21
|
node_uri = URI.parse(ARGV.shift)
|
@@ -23,7 +23,7 @@ node_user = ARGV.shift
|
|
23
23
|
node_pass = ENV['PASSWORD']
|
24
24
|
|
25
25
|
##############################################################
|
26
|
-
# generic
|
26
|
+
# generic initialization : configuration of FaspManager
|
27
27
|
|
28
28
|
# set trace level for sample, set to :debug to see complete list of debug information
|
29
29
|
Aspera::Log.instance.level = :debug
|
@@ -34,10 +34,10 @@ Aspera::RestErrorsAspera.register_handlers
|
|
34
34
|
# some required files are generated here (keys, certs)
|
35
35
|
Aspera::Fasp::Installation.instance.folder = tmpdir
|
36
36
|
# set path to your copy of ascp binary (else, let the system find)
|
37
|
-
Aspera::Fasp::Installation.instance.ascp_path = ENV['ascp'] if ENV.
|
37
|
+
Aspera::Fasp::Installation.instance.ascp_path = ENV['ascp'] if ENV.key?('ascp')
|
38
38
|
# another way is to detect installed products and use one of them
|
39
|
-
#Aspera::Fasp::Installation.instance.installed_products.each{|p|puts("found: #{p[:name]}")}
|
40
|
-
#Aspera::Fasp::Installation.instance.use_ascp_from_product('Aspera Connect')
|
39
|
+
# Aspera::Fasp::Installation.instance.installed_products.each{|p|puts("found: #{p[:name]}")}
|
40
|
+
# Aspera::Fasp::Installation.instance.use_ascp_from_product('Aspera Connect')
|
41
41
|
# or install:
|
42
42
|
#
|
43
43
|
|
@@ -45,10 +45,10 @@ Aspera::Fasp::Installation.instance.ascp_path = ENV['ascp'] if ENV.has_key?('asc
|
|
45
45
|
transfer_agent = Aspera::Fasp::AgentDirect.new
|
46
46
|
|
47
47
|
# Note that it would also be possible to start transfers using other agents
|
48
|
-
#require 'aspera/fasp/connect'
|
49
|
-
#transfer_agent=Aspera::Fasp::Connect.new
|
50
|
-
#require 'aspera/fasp/node'
|
51
|
-
#transfer_agent=Aspera::Fasp::Node.new(Aspera::Rest.new(...))
|
48
|
+
# require 'aspera/fasp/connect'
|
49
|
+
# transfer_agent=Aspera::Fasp::Connect.new
|
50
|
+
# require 'aspera/fasp/node'
|
51
|
+
# transfer_agent=Aspera::Fasp::Node.new(Aspera::Rest.new(...))
|
52
52
|
|
53
53
|
##############################################################
|
54
54
|
# Optional : register an event listener
|
@@ -57,7 +57,7 @@ transfer_agent = Aspera::Fasp::AgentDirect.new
|
|
57
57
|
class MyListener < Aspera::Fasp::Listener
|
58
58
|
# this is the callback called during transfers, here we only display the received information
|
59
59
|
# but it could be used to get detailed error information, check "type" field is "ERROR"
|
60
|
-
def event_enhanced(data)
|
60
|
+
def event_enhanced(data); $stdout.puts(JSON.generate(data)); $stdout.flush; end # rubocop:disable Style/Semicolon
|
61
61
|
end
|
62
62
|
|
63
63
|
# register the sample listener to display events
|
@@ -78,9 +78,9 @@ node_api = Aspera::Rest.new({
|
|
78
78
|
sources = ["#{tmpdir}/sample_file.txt"]
|
79
79
|
destination = '/Upload'
|
80
80
|
# create sample file(s)
|
81
|
-
sources.each{|p|File.write(p,'Hello World!')}
|
81
|
+
sources.each{|p|File.write(p, 'Hello World!')}
|
82
82
|
# request transfer authorization to node for a single transfer (This is a node api v3 call)
|
83
|
-
send_result = node_api.create('files/upload_setup',{ transfer_requests: [{ transfer_request: { paths: [{ destination: destination }] } }] })[:data]
|
83
|
+
send_result = node_api.create('files/upload_setup', { transfer_requests: [{ transfer_request: { paths: [{ destination: destination }] } }] })[:data]
|
84
84
|
# we normally have only one transfer spec in list, so just get the first transfer_spec
|
85
85
|
transfer_spec = send_result['transfer_specs'].first['transfer_spec']
|
86
86
|
# add list of files to upload
|
data/examples/proxy.pac
CHANGED
@@ -4,7 +4,7 @@ function FindProxyForURL(url, host) {
|
|
4
4
|
url = url.toLowerCase();
|
5
5
|
host = host.toLowerCase();
|
6
6
|
|
7
|
-
/* Don't proxy local
|
7
|
+
/* Don't proxy local host names */
|
8
8
|
if (isPlainHostName(host)) {
|
9
9
|
return 'DIRECT';
|
10
10
|
}
|
@@ -31,7 +31,7 @@ function FindProxyForURL(url, host) {
|
|
31
31
|
if (isResolvable(host)) {
|
32
32
|
var hostIP = dnsResolve(host);
|
33
33
|
|
34
|
-
/* Don't proxy
|
34
|
+
/* Don't proxy private addresses (RFC 3330) */
|
35
35
|
if (isInNet(hostIP, '0.0.0.0', '255.0.0.0')
|
36
36
|
|| isInNet(hostIP, '10.0.0.0', '255.0.0.0')
|
37
37
|
|| isInNet(hostIP, '127.0.0.0', '255.0.0.0')
|
data/examples/server.rb
CHANGED
@@ -15,7 +15,7 @@ require 'tmpdir'
|
|
15
15
|
|
16
16
|
tmpdir = ENV['tmp'] || Dir.tmpdir || '.'
|
17
17
|
|
18
|
-
raise 'Usage: PASSWORD=<password> $0 ssh://<address>:<port> <transfer user>' unless ARGV.length.eql?(2) && ENV.
|
18
|
+
raise 'Usage: PASSWORD=<password> $0 ssh://<address>:<port> <transfer user>' unless ARGV.length.eql?(2) && ENV.key?('PASSWORD')
|
19
19
|
|
20
20
|
# example : ssh://asperaweb@eudemo.asperademo.com:33001
|
21
21
|
server_uri = URI.parse(ARGV.shift)
|
@@ -23,7 +23,7 @@ server_user = ARGV.shift
|
|
23
23
|
server_pass = ENV['PASSWORD']
|
24
24
|
|
25
25
|
##############################################################
|
26
|
-
# generic
|
26
|
+
# generic initialization : configuration of FaspManager
|
27
27
|
|
28
28
|
# set trace level for sample, set to :debug to see complete list of debug information
|
29
29
|
Aspera::Log.instance.level = :debug
|
@@ -34,10 +34,10 @@ Aspera::RestErrorsAspera.register_handlers
|
|
34
34
|
# some required files are generated here (keys, certs)
|
35
35
|
Aspera::Fasp::Installation.instance.folder = tmpdir
|
36
36
|
# set path to your copy of ascp binary (else, let the system find)
|
37
|
-
Aspera::Fasp::Installation.instance.ascp_path = ENV['ascp'] if ENV.
|
37
|
+
Aspera::Fasp::Installation.instance.ascp_path = ENV['ascp'] if ENV.key?('ascp')
|
38
38
|
# another way is to detect installed products and use one of them
|
39
|
-
#Aspera::Fasp::Installation.instance.installed_products.each{|p|puts("found: #{p[:name]}")}
|
40
|
-
#Aspera::Fasp::Installation.instance.use_ascp_from_product('Aspera Connect')
|
39
|
+
# Aspera::Fasp::Installation.instance.installed_products.each{|p|puts("found: #{p[:name]}")}
|
40
|
+
# Aspera::Fasp::Installation.instance.use_ascp_from_product('Aspera Connect')
|
41
41
|
# or install:
|
42
42
|
#
|
43
43
|
|
@@ -45,10 +45,10 @@ Aspera::Fasp::Installation.instance.ascp_path = ENV['ascp'] if ENV.has_key?('asc
|
|
45
45
|
transfer_agent = Aspera::Fasp::AgentDirect.new
|
46
46
|
|
47
47
|
# Note that it would also be possible to start transfers using other agents
|
48
|
-
#require 'aspera/fasp/connect'
|
49
|
-
#transfer_agent=Aspera::Fasp::Connect.new
|
50
|
-
#require 'aspera/fasp/node'
|
51
|
-
#transfer_agent=Aspera::Fasp::Node.new(Aspera::Rest.new(...))
|
48
|
+
# require 'aspera/fasp/connect'
|
49
|
+
# transfer_agent=Aspera::Fasp::Connect.new
|
50
|
+
# require 'aspera/fasp/node'
|
51
|
+
# transfer_agent=Aspera::Fasp::Node.new(Aspera::Rest.new(...))
|
52
52
|
|
53
53
|
##############################################################
|
54
54
|
# Optional : register an event listener
|
@@ -57,7 +57,7 @@ transfer_agent = Aspera::Fasp::AgentDirect.new
|
|
57
57
|
class MyListener < Aspera::Fasp::Listener
|
58
58
|
# this is the callback called during transfers, here we only display the received information
|
59
59
|
# but it could be used to get detailed error information, check "type" field is "ERROR"
|
60
|
-
def event_enhanced(data)
|
60
|
+
def event_enhanced(data); $stdout.puts(JSON.generate(data)); $stdout.flush; end # rubocop:disable Style/Semicolon
|
61
61
|
end
|
62
62
|
|
63
63
|
# register the sample listener to display events
|
@@ -66,7 +66,7 @@ transfer_agent.add_listener(MyListener.new)
|
|
66
66
|
##############################################################
|
67
67
|
# first example: download by SSH credentials
|
68
68
|
|
69
|
-
# manually build
|
69
|
+
# manually build transfer spec
|
70
70
|
transfer_spec = {
|
71
71
|
'remote_host' => server_uri.host,
|
72
72
|
'ssh_port' => server_uri.port,
|
@@ -82,7 +82,7 @@ transfer_spec = {
|
|
82
82
|
transfer_agent.start_transfer(transfer_spec)
|
83
83
|
|
84
84
|
# optional: helper method: wait for completion of transfers
|
85
|
-
# here we started a single transfer session (no
|
85
|
+
# here we started a single transfer session (no multi session parameter)
|
86
86
|
# get array of status, one for each session (so, a single value array)
|
87
87
|
# each status is either :success or "error message"
|
88
88
|
transfer_result = transfer_agent.wait_for_transfers_completion
|