aspera-cli 4.1.0 → 4.3.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 (42) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +455 -229
  3. data/docs/Makefile +4 -4
  4. data/docs/README.erb.md +457 -126
  5. data/docs/test_env.conf +19 -2
  6. data/examples/aoc.rb +14 -3
  7. data/examples/faspex4.rb +89 -0
  8. data/lib/aspera/aoc.rb +38 -40
  9. data/lib/aspera/cli/main.rb +65 -33
  10. data/lib/aspera/cli/plugins/aoc.rb +54 -65
  11. data/lib/aspera/cli/plugins/ats.rb +2 -2
  12. data/lib/aspera/cli/plugins/config.rb +158 -137
  13. data/lib/aspera/cli/plugins/faspex.rb +111 -64
  14. data/lib/aspera/cli/plugins/faspex5.rb +35 -48
  15. data/lib/aspera/cli/plugins/node.rb +3 -2
  16. data/lib/aspera/cli/plugins/preview.rb +88 -55
  17. data/lib/aspera/cli/transfer_agent.rb +98 -62
  18. data/lib/aspera/cli/version.rb +1 -1
  19. data/lib/aspera/command_line_builder.rb +48 -31
  20. data/lib/aspera/cos_node.rb +34 -28
  21. data/lib/aspera/environment.rb +2 -2
  22. data/lib/aspera/fasp/aoc.rb +1 -1
  23. data/lib/aspera/fasp/installation.rb +68 -45
  24. data/lib/aspera/fasp/local.rb +89 -45
  25. data/lib/aspera/fasp/manager.rb +3 -0
  26. data/lib/aspera/fasp/node.rb +23 -1
  27. data/lib/aspera/fasp/parameters.rb +57 -86
  28. data/lib/aspera/fasp/parameters.yaml +531 -0
  29. data/lib/aspera/fasp/resume_policy.rb +13 -12
  30. data/lib/aspera/fasp/uri.rb +1 -1
  31. data/lib/aspera/id_generator.rb +22 -0
  32. data/lib/aspera/node.rb +14 -3
  33. data/lib/aspera/oauth.rb +135 -129
  34. data/lib/aspera/persistency_action_once.rb +11 -7
  35. data/lib/aspera/persistency_folder.rb +6 -26
  36. data/lib/aspera/rest.rb +3 -12
  37. data/lib/aspera/secrets.rb +20 -0
  38. data/lib/aspera/sync.rb +40 -35
  39. data/lib/aspera/timer_limiter.rb +22 -0
  40. data/lib/aspera/web_auth.rb +105 -0
  41. metadata +22 -3
  42. data/docs/transfer_spec.html +0 -99
data/lib/aspera/sync.rb CHANGED
@@ -1,48 +1,53 @@
1
+ require 'aspera/command_line_builder'
2
+
1
3
  module Aspera
2
4
  # builds command line arg for async
3
5
  class Sync
4
- private
5
6
  INSTANCE_PARAMS=
6
7
  {
7
- 'alt_logdir' => { :type => :opt_with_arg, :accepted_types=>String},
8
- 'watchd' => { :type => :opt_with_arg, :accepted_types=>String},
9
- 'apply_local_docroot' => { :type => :opt_without_arg},
10
- 'quiet' => { :type => :opt_without_arg},
8
+ 'alt_logdir' => { :cltype => :opt_with_arg, :accepted_types=>:string},
9
+ 'watchd' => { :cltype => :opt_with_arg, :accepted_types=>:string},
10
+ 'apply_local_docroot' => { :cltype => :opt_without_arg},
11
+ 'quiet' => { :cltype => :opt_without_arg},
11
12
  }
12
13
  SESSION_PARAMS=
13
14
  {
14
- 'name' => { :type => :opt_with_arg, :accepted_types=>String},
15
- 'local_dir' => { :type => :opt_with_arg, :accepted_types=>String},
16
- 'remote_dir' => { :type => :opt_with_arg, :accepted_types=>String},
17
- 'local_db_dir' => { :type => :opt_with_arg, :accepted_types=>String},
18
- 'remote_db_dir' => { :type => :opt_with_arg, :accepted_types=>String},
19
- 'host' => { :type => :opt_with_arg, :accepted_types=>String},
20
- 'user' => { :type => :opt_with_arg, :accepted_types=>String},
21
- 'private_key_path' => { :type => :opt_with_arg, :accepted_types=>String},
22
- 'direction' => { :type => :opt_with_arg, :accepted_types=>String},
23
- 'checksum' => { :type => :opt_with_arg, :accepted_types=>String},
24
- 'tcp_port' => { :type => :opt_with_arg, :accepted_types=>Integer},
25
- 'rate_policy' => { :type => :opt_with_arg, :accepted_types=>String},
26
- 'target_rate' => { :type => :opt_with_arg, :accepted_types=>String},
27
- 'cooloff' => { :type => :opt_with_arg, :accepted_types=>Integer},
28
- 'pending_max' => { :type => :opt_with_arg, :accepted_types=>Integer},
29
- 'scan_intensity' => { :type => :opt_with_arg, :accepted_types=>String},
30
- 'cipher' => { :type => :opt_with_arg, :accepted_types=>String},
31
- 'transfer_threads' => { :type => :opt_with_arg, :accepted_types=>Integer},
32
- 'preserve_time' => { :type => :opt_without_arg},
33
- 'preserve_access_time' => { :type => :opt_without_arg},
34
- 'preserve_modification_time' => { :type => :opt_without_arg},
35
- 'preserve_uid' => { :type => :opt_without_arg},
36
- 'preserve_gid' => { :type => :opt_without_arg},
37
- 'create_dir' => { :type => :opt_without_arg},
38
- 'reset' => { :type => :opt_without_arg},
15
+ 'name' => { :cltype => :opt_with_arg, :accepted_types=>:string},
16
+ 'local_dir' => { :cltype => :opt_with_arg, :accepted_types=>:string},
17
+ 'remote_dir' => { :cltype => :opt_with_arg, :accepted_types=>:string},
18
+ 'local_db_dir' => { :cltype => :opt_with_arg, :accepted_types=>:string},
19
+ 'remote_db_dir' => { :cltype => :opt_with_arg, :accepted_types=>:string},
20
+ 'host' => { :cltype => :opt_with_arg, :accepted_types=>:string},
21
+ 'user' => { :cltype => :opt_with_arg, :accepted_types=>:string},
22
+ 'private_key_path' => { :cltype => :opt_with_arg, :accepted_types=>:string},
23
+ 'direction' => { :cltype => :opt_with_arg, :accepted_types=>:string},
24
+ 'checksum' => { :cltype => :opt_with_arg, :accepted_types=>:string},
25
+ 'tcp_port' => { :cltype => :opt_with_arg, :accepted_types=>:int},
26
+ 'rate_policy' => { :cltype => :opt_with_arg, :accepted_types=>:string},
27
+ 'target_rate' => { :cltype => :opt_with_arg, :accepted_types=>:string},
28
+ 'cooloff' => { :cltype => :opt_with_arg, :accepted_types=>:int},
29
+ 'pending_max' => { :cltype => :opt_with_arg, :accepted_types=>:int},
30
+ 'scan_intensity' => { :cltype => :opt_with_arg, :accepted_types=>:string},
31
+ 'cipher' => { :cltype => :opt_with_arg, :accepted_types=>:string},
32
+ 'transfer_threads' => { :cltype => :opt_with_arg, :accepted_types=>:int},
33
+ 'preserve_time' => { :cltype => :opt_without_arg},
34
+ 'preserve_access_time' => { :cltype => :opt_without_arg},
35
+ 'preserve_modification_time' => { :cltype => :opt_without_arg},
36
+ 'preserve_uid' => { :cltype => :opt_without_arg},
37
+ 'preserve_gid' => { :cltype => :opt_without_arg},
38
+ 'create_dir' => { :cltype => :opt_without_arg},
39
+ 'reset' => { :cltype => :opt_without_arg},
39
40
  # note: only one env var, but multiple sessions... may be a problem
40
- 'remote_password' => { :type => :envvar, :variable=>'ASPERA_SCP_PASS'},
41
- 'cookie' => { :type => :envvar, :variable=>'ASPERA_SCP_COOKIE'},
42
- 'token' => { :type => :envvar, :variable=>'ASPERA_SCP_TOKEN'},
43
- 'license' => { :type => :envvar, :variable=>'ASPERA_SCP_LICENSE'},
41
+ 'remote_password' => { :cltype => :envvar, :clvarname=>'ASPERA_SCP_PASS'},
42
+ 'cookie' => { :cltype => :envvar, :clvarname=>'ASPERA_SCP_COOKIE'},
43
+ 'token' => { :cltype => :envvar, :clvarname=>'ASPERA_SCP_TOKEN'},
44
+ 'license' => { :cltype => :envvar, :clvarname=>'ASPERA_SCP_LICENSE'},
44
45
  }
45
- public
46
+
47
+ Aspera::CommandLineBuilder.normalize_description(INSTANCE_PARAMS)
48
+ Aspera::CommandLineBuilder.normalize_description(SESSION_PARAMS)
49
+
50
+ private_constant :INSTANCE_PARAMS,:SESSION_PARAMS
46
51
 
47
52
  def initialize(sync_params)
48
53
  @sync_params=sync_params
@@ -0,0 +1,22 @@
1
+ module Aspera
2
+ # used to throttle logs
3
+ class TimerLimiter
4
+ # @param delay in seconds (float)
5
+ def initialize(delay)
6
+ @delay=delay
7
+ @last_time=nil
8
+ @count=0
9
+ end
10
+
11
+ def trigger?
12
+ old_time=@last_time
13
+ @last_time=Time.now.to_f
14
+ @count+=1
15
+ if old_time.nil? or (@last_time-old_time)>@delay
16
+ @count=0
17
+ return true
18
+ end
19
+ return false
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,105 @@
1
+ require 'webrick'
2
+ require 'webrick/https'
3
+ require 'thread'
4
+
5
+ module Aspera
6
+ class WebAuth
7
+ # server for auth page
8
+ class FxGwServlet < WEBrick::HTTPServlet::AbstractServlet
9
+ def initialize(server,info) # additional args get here
10
+ @shared=info
11
+ end
12
+
13
+ def do_GET (request, response)
14
+ if ! request.path.eql?(@shared[:expected_path])
15
+ response.status=400
16
+ return
17
+ end
18
+ @shared[:mutex].synchronize do
19
+ @shared[:query]=request.query
20
+ @shared[:cond].signal
21
+ end
22
+ response.status=200
23
+ response.content_type = 'text/html'
24
+ response.body='<html><head><title>Ok</title></head><body><h1>Thank you !</h1><p>You can close this window.</p></body></html>'
25
+ end
26
+ end # FxGwServlet
27
+
28
+ # generates and adds self signed cert to provided webrick options
29
+ def fill_self_signed_cert(options)
30
+ key = OpenSSL::PKey::RSA.new(4096)
31
+ cert = OpenSSL::X509::Certificate.new
32
+ cert.subject = cert.issuer = OpenSSL::X509::Name.parse('/C=FR/O=Test/OU=Test/CN=Test')
33
+ cert.not_before = Time.now
34
+ cert.not_after = Time.now + 365 * 24 * 60 * 60
35
+ cert.public_key = key.public_key
36
+ cert.serial = 0x0
37
+ cert.version = 2
38
+ ef = OpenSSL::X509::ExtensionFactory.new
39
+ ef.issuer_certificate = cert
40
+ ef.subject_certificate = cert
41
+ cert.extensions = [
42
+ ef.create_extension('basicConstraints','CA:TRUE', true),
43
+ ef.create_extension('subjectKeyIdentifier', 'hash'),
44
+ # ef.create_extension('keyUsage', 'cRLSign,keyCertSign', true),
45
+ ]
46
+ cert.add_extension(ef.create_extension('authorityKeyIdentifier','keyid:always,issuer:always'))
47
+ cert.sign(key, OpenSSL::Digest::SHA256.new)
48
+ options[:SSLPrivateKey] = key
49
+ options[:SSLCertificate] = cert
50
+ end
51
+
52
+ def initialize(endpoint_url)
53
+ uri=URI.parse(endpoint_url)
54
+ webrick_options = {
55
+ :app => WebAuth,
56
+ :Port => uri.port,
57
+ :Logger => Log.log
58
+ }
59
+ uri_path=uri.path.empty? ? '/' : uri.path
60
+ case uri.scheme
61
+ when 'http'
62
+ Log.log.debug('HTTP mode')
63
+ when 'https'
64
+ webrick_options[:SSLEnable]=true
65
+ webrick_options[:SSLVerifyClient]=OpenSSL::SSL::VERIFY_NONE
66
+ case 0
67
+ when 0
68
+ # generate self signed cert
69
+ fill_self_signed_cert(webrick_options)
70
+ when 1
71
+ # short
72
+ webrick_options[:SSLCertName] = [ [ 'CN',WEBrick::Utils::getservername ] ]
73
+ Log.log.error(">>>#{webrick_options[:SSLCertName]}")
74
+ when 2
75
+ # good cert
76
+ webrick_options[:SSLPrivateKey] =OpenSSL::PKey::RSA.new(File.read('/Users/laurent/workspace/Tools/certificate/myserver.key'))
77
+ webrick_options[:SSLCertificate] = OpenSSL::X509::Certificate.new(File.read('/Users/laurent/workspace/Tools/certificate/myserver.crt'))
78
+ end
79
+ end
80
+ # parameters for servlet
81
+ @shared_info={
82
+ expected_path: uri_path,
83
+ mutex: Mutex.new,
84
+ cond: ConditionVariable.new
85
+ }
86
+ @server = WEBrick::HTTPServer.new(webrick_options)
87
+ @server.mount(uri_path, FxGwServlet, @shared_info) # additional args provided to constructor
88
+ Thread.new { @server.start }
89
+ end
90
+
91
+ # wait for request on web server
92
+ # @return Hash the query
93
+ def get_request
94
+ Log.log.debug('get_request')
95
+ # called only once
96
+ raise "error, called twice ?" if @server.nil?
97
+ @shared_info[:mutex].synchronize do
98
+ @shared_info[:cond].wait(@shared_info[:mutex])
99
+ end
100
+ @server.shutdown
101
+ @server=nil
102
+ return @shared_info[:query]
103
+ end
104
+ end
105
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aspera-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.0
4
+ version: 4.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Laurent Martin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-23 00:00:00.000000000 Z
11
+ date: 2021-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xml-simple
@@ -150,6 +150,20 @@ dependencies:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0.3'
153
+ - !ruby/object:Gem::Dependency
154
+ name: webrick
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '1.7'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '1.7'
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: bundler
155
169
  requirement: !ruby/object:Gem::Requirement
@@ -211,8 +225,8 @@ files:
211
225
  - docs/README.md
212
226
  - docs/diagrams.txt
213
227
  - docs/test_env.conf
214
- - docs/transfer_spec.html
215
228
  - examples/aoc.rb
229
+ - examples/faspex4.rb
216
230
  - examples/proxy.pac
217
231
  - examples/transfer.rb
218
232
  - lib/aspera/aoc.rb
@@ -270,10 +284,12 @@ files:
270
284
  - lib/aspera/fasp/manager.rb
271
285
  - lib/aspera/fasp/node.rb
272
286
  - lib/aspera/fasp/parameters.rb
287
+ - lib/aspera/fasp/parameters.yaml
273
288
  - lib/aspera/fasp/resume_policy.rb
274
289
  - lib/aspera/fasp/uri.rb
275
290
  - lib/aspera/faspex_gw.rb
276
291
  - lib/aspera/hash_ext.rb
292
+ - lib/aspera/id_generator.rb
277
293
  - lib/aspera/log.rb
278
294
  - lib/aspera/nagios.rb
279
295
  - lib/aspera/node.rb
@@ -293,10 +309,13 @@ files:
293
309
  - lib/aspera/rest_call_error.rb
294
310
  - lib/aspera/rest_error_analyzer.rb
295
311
  - lib/aspera/rest_errors_aspera.rb
312
+ - lib/aspera/secrets.rb
296
313
  - lib/aspera/ssh.rb
297
314
  - lib/aspera/sync.rb
298
315
  - lib/aspera/temp_file_manager.rb
316
+ - lib/aspera/timer_limiter.rb
299
317
  - lib/aspera/uri_reader.rb
318
+ - lib/aspera/web_auth.rb
300
319
  homepage: https://github.com/IBM/aspera-cli
301
320
  licenses:
302
321
  - Apache-2.0
@@ -1,99 +0,0 @@
1
- <html>
2
- <head>
3
- <title>Transfer Specification</title>
4
- <style type="text/css">
5
- table {border-collapse: collapse;}
6
- table, th, td {border: 1px solid black;}
7
- .yes {color:white;background-color:green;font-weight:bold;}
8
- .no {color:white;background-color:red;font-weight:bold;}
9
- </style>
10
- </head>
11
- <body>
12
- <p>
13
- Columns:
14
- <ul>
15
- <li>F=Fasp Manager(local FASP execution)</li>
16
- <li>N=remote node(node API)</li>
17
- <li>C=Connect Client(web plugin)</li>
18
- </ul>
19
- </p>
20
- <p>
21
- Req/Def : Required or default value (- means emty)
22
- </p>
23
- <p>
24
- Fields with EX_ prefix are specific extensions to local mode.
25
- </p>
26
- <p>
27
- arg: related ascp argument or env var suffix (PASS for ASPERA_SCP_PASS)
28
- </p>
29
- <p>
30
- UNDER CONSTRUCTION<br/>
31
- <a href="https://developer.ibm.com/apis/catalog/?search=aspera">Aspera API Documentation</a>&rarr;Node API&rarr;/opt/transfers<br/>
32
- </p>
33
-
34
- <table>
35
- <tr><th>Field</th><th>Req/Def</th><th>Type</th><th>F</th><th>N</th><th>C</th><th>arg</th><th>Description</th></tr>
36
- <tr><td>direction</td><td>Required</td><td>string</td><td class="yes">Y</td><td class="yes">Y</td><td class="yes">Y</td><td>--mode</td><td>Direction: "send" or "receive"</td></tr>
37
- <tr><td>remote_host</td><td>Required</td><td>string</td><td class="yes">Y</td><td class="yes">Y</td><td class="yes">Y</td><td>--host</td><td>IP or fully qualified domain name of the remote server</td></tr>
38
- <tr><td>remote_user</td><td>Required</td><td>string</td></td><td class="yes">Y</td><td class="yes">Y</td><td class="yes">Y</td><td>--user</td><td>Remote user. Default value is "xfer" on node or connect.</td></tr>
39
- <tr><td>destination_root</td><td>Required</td><td>string</td><td class="yes">Y</td><td class="yes">Y</td><td class="yes">Y</td><td>last arg</td><td>Destination root directory.</td></tr>
40
- <tr><td>title</td><td>-</td><td>string</td><td class="no">N</td><td class="yes">Y</td><td class="yes">Y</td><td>-</td><td>Title of the transfer</td></tr>
41
- <tr><td>tags</td><td>-</td><td>hash</td><td class="yes">Y</td><td class="yes">Y</td><td class="yes">Y</td><td>--tags<br>--tags64</td><td>Metadata for transfer</td></tr>
42
- <tr><td>token</td><td>-</td><td>string</td><td class="yes">Y</td><td class="yes">Y</td><td class="yes">Y</td><td>TOKEN<br/>-W</td><td>Authorization token: Bearer, Basic or ATM</td></tr>
43
- <tr><td>cookie</td><td>-</td><td>string</td><td class="yes">Y</td><td class="yes">Y</td><td class="yes">Y</td><td>COOKIE</td><td>Metadata for transfer (older,string)</td></tr>
44
- <tr><td>remote_access_key</td><td>TODO</td><td>string</td><td></td><td></td><td></td><td>?</td><td>Node only?</td></tr>
45
- <tr><td>source_root</td><td>-</td><td>string</td><td></td><td></td><td></td><td>--source-prefix<br/>--source-prefix64</td><td>Source root directory.(TODO: verify option)</td></tr>
46
- <tr><td>fasp_port</td><td>33001</td><td>integer</td></td><td class="yes">Y</td><td class="yes">Y</td><td class="yes">Y</td><td>-O</td><td>Specifies fasp (UDP) port.</td></tr>
47
- <tr><td>ssh_port</td><td>22 or 33001</td><td>integer</td></td><td class="yes">Y</td><td class="yes">Y</td><td class="yes">Y</td><td>-P</td><td>Specifies ssh (TCP) port.</td></tr>
48
- <tr><td>rate_policy</td><td>server config</td><td>string</td><td class="yes">Y</td><td class="yes">Y</td><td class="yes">Y</td><td>--policy</td><td>Valid literals include "low","fair","high" and "fixed".</td></tr>
49
- <tr><td>symlink_policy</td><td>follow</td><td>string</td><td class="yes">Y</td><td class="yes">Y</td><td class="yes">Y</td><td>--symbolic-links</td><td>copy, follow, copy+force, skip. Default is follow. Handle source side symbolic links by following the link (follow), copying the link itself (copy), skipping (skip), or forcibly copying the link itself (copy+force).</td></tr>
50
- <tr><td>target_rate_kbps</td><td>-</td><td>integer</td><td class="yes">Y</td><td class="yes">Y</td><td class="yes">Y</td><td>-l</td><td>Specifies desired speed for the transfer.</td></tr>
51
- <tr><td>min_rate_kbps</td><td>0</td><td>integer</td><td class="yes">Y</td><td class="yes">Y</td><td class="yes">Y</td><td>-m</td><td>Set the minimum transfer rate in kilobits per second.</td></tr>
52
- <tr><td>cipher</td><td>none</td><td>string</td><td class="yes">Y</td><td class="yes">Y</td><td class="yes">Y</td><td>-c</td><td>in transit encryption type.<br/>none, aes-128, aes-256</td></tr>
53
- <tr><td>content_protection</td><td>encrypt<br/>decrypt</td><td>string</td><td></td><td></td><td></td><td>--file-crypt=</td><td>encryption at rest</td></tr>
54
- <tr><td>content_protection_password</td><td>-</td><td>string</td><td></td><td></td><td></td><td>PASS</td><td>Specifies a string password.</td></tr>
55
- <tr><td>overwrite</td><td>diff</td><td>string</td><td class="yes">Y</td><td class="yes">Y</td><td class="yes">Y</td><td>--overwrite</td><td>Overwrite destination files with the source files of the same name.<br/>never, always, diff, older, or diff+older</td></tr>
56
- <tr><td>retry_duration</td><td></td><td>string</td><td></td><td></td><td></td><td>TODO</td><td>Specifies how long to wait before retrying transfer. (e.g. "5min")</td></tr>
57
- <tr><td>http_fallback</td><td></td><td>bool (node), integer</td><td></td><td></td><td></td><td>-y<br/>TODO</td><td>When true(1), attempts to perform an HTTP transfer if a fasp transfer cannot be performed.</td></tr>
58
- <tr><td>create_dir</td><td></td><td>boolean</td><td class="yes">Y</td><td class="yes">Y</td><td class="yes">Y</td><td>-d</td><td>Specifies whether to create new directories.</td></tr>
59
- <tr><td>precalculate_job_size</td><td>srv. def.</td><td>boolean</td><td class="yes">Y</td><td class="yes">Y</td><td class="yes">Y</td><td>--precalculate-job-size</td><td>Specifies whether to precalculate the job size.</td></tr>
60
- <tr><td>delete_source</td><td></td><td>boolean</td><td></td><td class="yes">Y</td><td></td><td>?</td><td>?</td></tr>
61
- <tr><td>remove_after_transfer</td><td></td><td>boolean</td><td></td><td class="yes">Y</td><td></td><td>?</td><td>Specifies whether to remove file after transfer.</td></tr>
62
- <tr><td>remove_empty_directories</td><td></td><td>boolean</td><td></td><td class="yes">Y</td><td></td><td>?</td><td>Specifies whether to remove empty directories.</td></tr>
63
- <tr><td>multi_session</td><td>1</td><td>integer</td><td class="no">N</td><td class="yes">Y</td><td class="no">N</td><td>-C</td><td>Specifies how many parts the transfer is in.</td></tr>
64
- <tr><td>multi_session_threshold</td><td>null</td><td>integer</td><td class="no">N</td><td class="yes">Y</td><td class="no">N</td><td>-</td><td>in bytes</td></tr>
65
- <tr><td>exclude_newer_than</td><td></td><td>integer</td><td class="yes">Y</td><td></td><td></td><td>--exclude-newer-than</td><td>-</td></tr>
66
- <tr><td>exclude_older_than</td><td></td><td>integer</td><td class="yes">Y</td><td></td><td></td><td>--exclude-older-than</td><td>-</td></tr>
67
- <tr><td>preserve_acls</td><td></td><td>string</td><td class="yes">Y</td><td></td><td></td><td>--preserve-acls</td><td>-</td></tr>
68
- <tr><td>dgram_size</td><td></td><td>integer</td><td class="yes">Y</td><td></td><td></td><td>-Z</td><td>in bytes</td></tr>
69
- <tr><td>compression</td><td></td><td>integer</td><td></td><td></td><td></td><td></td><td>ascp4 only, 0 / 1?</td></tr>
70
- <tr><td>read_threads</td><td></td><td>integer</td><td></td><td></td><td></td><td>-</td><td>ascp4 only</td></tr>
71
- <tr><td>write_threads</td><td></td><td>integer</td><td></td><td></td><td></td><td>-</td><td>ascp4 only</td></tr>
72
- <tr><td>use_ascp4</td><td>false</td><td>boolean</td><td></td><td class="yes">Y</td><td></td><td>-</td><td>specify version of protocol</td></tr>
73
- <tr><td>paths</td><td>source files (dest)</td><td>array</td><td></td><td></td><td></td><td>positional<br/>--file-list<br/>--file-pair-list</td><td>Contains a path to the source (required) and a path to the destination.</td></tr>
74
- <tr><td>http_fallback_port</td><td></td><td>integer</td><td class="yes">Y</td><td></td><td></td><td>-t</td><td>Specifies http port.</td></tr>
75
- <tr><td>https_fallback_port</td><td></td><td>integer</td><td></td><td></td><td></td><td>todo</td><td>Specifies https port.</td></tr>
76
- <tr><td>cipher_allowed</td><td></td><td>string</td><td></td><td></td><td></td><td>-</td><td>returned by node API. Valid literals include "aes-128" and "none".</td></tr>
77
- <tr><td>target_rate_cap_kbps</td><td></td><td></td><td class="no">N</td><td class="no">?</td><td class="yes">?</td><td>-</td><td>Returned by upload/download_setup node api.</td></tr>
78
- <tr><td>rate_policy_allowed</td><td></td><td></td><td></td><td></td><td></td><td>-</td><td>returned by node API. Specifies most aggressive rate policy that is allowed. Valid literals include "low", "fair","high" and "fixed".</td></tr>
79
- <tr><td>ssh_private_key</td><td>-</td><td>string</td><td class="yes">Y</td><td class="no">N</td><td class="no">N</td><td>KEY</td><td>Private key used for SSH authentication, Shall look like: `-----BEGIN RSA PRIVATE KEY-----\nMII`<br/>Note the JSON encoding `\` + `n` for newlines.</td></tr>
80
- <tr><td>remote_password</td><td>-</td><td>string</td><td class="yes">Y</td><td class="yes">Y</td><td class="yes">Y</td><td>PASS</td><td>SSH session password</td></tr>
81
- <tr><td>resume_policy</td><td>faspmgr:<br/>none<br/>other:<br/>sparse_csum</td><td>string</td><td class="yes">Y</td><td class="yes">Y</td><td class="yes">Y</td><td>-k</td><td>none,attrs,sparse_csum,full_csum</td></tr>
82
- <tr><td>authentication</td><td>-</td><td class="no">N</td><td class="no">N</td><td class="yes">Y</td><td>-</td><td>token: Aspera web keys are provided to allow transparent web based session initiation. on connect: password is not asked. Else, password is asked, and keys are not provided.</td></tr>
83
- <tr><td>EX_ssh_key_paths</td><td>-</td><td>array</td><td class="yes">Y</td><td class="no">N</td><td class="no">N</td><td>-i</td><td>Use public key authentication and specify the private key file</td></tr>
84
- <tr><td>EX_at_rest_password</td><td>-</td><td>string</td><td class="yes">Y</td><td class="no">N</td><td class="no">N</td><td>FILEPASS</td><td>Passphrase used for at rest encryption or decryption</td></tr>
85
- <tr><td>EX_proxy_password</td><td>-</td><td>string</td><td class="yes">Y</td><td class="no">N</td><td class="no">N</td><td>PROXY_PASS</td><td>TODO</td></tr>
86
- <tr><td>EX_fasp_proxy_url</td><td>-</td><td>string</td><td class="yes">Y</td><td class="no">N</td><td class="no">N</td><td>--proxy</td><td>Specify the address of the Aspera high-speed proxy server</td></tr>
87
- <tr><td>EX_http_proxy_url</td><td>-</td><td>string</td><td class="yes">Y</td><td class="no">N</td><td class="no">N</td><td>-x</td><td>Specify the proxy server address used by HTTP Fallback</td></tr>
88
- <tr><td>EX_ascp_args</td><td>-</td><td>array</td><td class="yes">Y</td><td class="no">N</td><td class="no">N</td><td>same</td><td>Add command line arguments to ascp</td></tr>
89
- <tr><td>EX_http_transfer_jpeg</td><td>0</td><td>integer</td><td class="yes">Y</td><td class="no">N</td><td class="no">N</td><td>-j</td><td>HTTP transfers as JPEG file</td></tr>
90
- <tr><td>EX_license_text</td><td>-</td><td>string</td><td class="yes">Y</td><td class="no">N</td><td class="no">N</td><td>LICENSE</td><td>license file text</td></tr>
91
- <tr><td>EX_file_list</td><td>-</td><td>string</td><td class="yes">Y</td><td class="no">N</td><td class="no">N</td><td>--file-list</td><td>source file list</td></tr>
92
- <tr><td>EX_file_pair_list</td><td>-</td><td>string</td><td class="yes">Y</td><td class="no">N</td><td class="no">N</td><td>--file-pair-list</td><td>source file pair list</td></tr>
93
- <tr><td>EX_multi_session_part</td><td>-</td><td>string</td><td class="yes">Y</td><td class="no">N</td><td class="no">N</td><td>-C</td><td>part for multisession</td></tr>
94
- <tr><td>EX_no_read</td><td>-</td><td>-</td><td class="yes">Y</td><td class="no">N</td><td class="no">N</td><td>--no-read</td><td>no read source</td></tr>
95
- <tr><td>EX_no_write</td><td>-</td><td>-</td><td class="yes">Y</td><td class="no">N</td><td class="no">N</td><td>--no-write</td><td>no write estination</td></tr>
96
- </table>
97
- </body>
98
- </html>
99
-