aspera-cli 4.11.0 → 4.12.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 (67) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/BUGS.md +0 -1
  4. data/CHANGELOG.md +71 -52
  5. data/CONTRIBUTING.md +31 -6
  6. data/README.md +404 -259
  7. data/bin/asession +2 -2
  8. data/docs/test_env.conf +1 -0
  9. data/examples/aoc.rb +2 -2
  10. data/examples/dascli +11 -11
  11. data/examples/faspex4.rb +7 -7
  12. data/examples/node.rb +1 -1
  13. data/examples/proxy.pac +2 -2
  14. data/examples/server.rb +3 -3
  15. data/lib/aspera/aoc.rb +105 -40
  16. data/lib/aspera/cli/extended_value.rb +4 -4
  17. data/lib/aspera/cli/{formater.rb → formatter.rb} +7 -7
  18. data/lib/aspera/cli/listener/progress.rb +1 -1
  19. data/lib/aspera/cli/listener/progress_multi.rb +2 -2
  20. data/lib/aspera/cli/main.rb +18 -18
  21. data/lib/aspera/cli/manager.rb +5 -5
  22. data/lib/aspera/cli/plugin.rb +23 -20
  23. data/lib/aspera/cli/plugins/aoc.rb +75 -112
  24. data/lib/aspera/cli/plugins/ats.rb +6 -6
  25. data/lib/aspera/cli/plugins/config.rb +84 -83
  26. data/lib/aspera/cli/plugins/cos.rb +1 -1
  27. data/lib/aspera/cli/plugins/faspex.rb +38 -38
  28. data/lib/aspera/cli/plugins/faspex5.rb +187 -43
  29. data/lib/aspera/cli/plugins/node.rb +30 -37
  30. data/lib/aspera/cli/plugins/orchestrator.rb +7 -4
  31. data/lib/aspera/cli/plugins/preview.rb +10 -9
  32. data/lib/aspera/cli/plugins/server.rb +1 -1
  33. data/lib/aspera/cli/plugins/shares.rb +67 -43
  34. data/lib/aspera/cli/transfer_agent.rb +16 -16
  35. data/lib/aspera/cli/version.rb +2 -1
  36. data/lib/aspera/command_line_builder.rb +70 -66
  37. data/lib/aspera/cos_node.rb +9 -9
  38. data/lib/aspera/fasp/agent_base.rb +3 -1
  39. data/lib/aspera/fasp/agent_connect.rb +23 -23
  40. data/lib/aspera/fasp/agent_direct.rb +13 -14
  41. data/lib/aspera/fasp/agent_httpgw.rb +20 -19
  42. data/lib/aspera/fasp/agent_node.rb +13 -15
  43. data/lib/aspera/fasp/agent_trsdk.rb +1 -1
  44. data/lib/aspera/fasp/installation.rb +5 -5
  45. data/lib/aspera/fasp/listener.rb +1 -1
  46. data/lib/aspera/fasp/parameters.rb +49 -41
  47. data/lib/aspera/fasp/parameters.yaml +311 -212
  48. data/lib/aspera/fasp/resume_policy.rb +2 -2
  49. data/lib/aspera/fasp/transfer_spec.rb +0 -13
  50. data/lib/aspera/faspex_gw.rb +80 -161
  51. data/lib/aspera/faspex_postproc.rb +77 -0
  52. data/lib/aspera/log.rb +7 -7
  53. data/lib/aspera/nagios.rb +6 -6
  54. data/lib/aspera/node.rb +24 -19
  55. data/lib/aspera/oauth.rb +50 -47
  56. data/lib/aspera/proxy_auto_config.js +22 -22
  57. data/lib/aspera/proxy_auto_config.rb +3 -3
  58. data/lib/aspera/rest.rb +12 -10
  59. data/lib/aspera/rest_error_analyzer.rb +5 -5
  60. data/lib/aspera/secret_hider.rb +4 -3
  61. data/lib/aspera/ssh.rb +4 -4
  62. data/lib/aspera/sync.rb +37 -36
  63. data/lib/aspera/web_auth.rb +7 -59
  64. data/lib/aspera/web_server_simple.rb +76 -0
  65. data.tar.gz.sig +0 -0
  66. metadata +6 -4
  67. metadata.gz.sig +0 -0
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'webrick'
4
- require 'webrick/https'
3
+ require 'aspera/web_server_simple'
5
4
  require 'stringio'
6
5
 
7
6
  module Aspera
@@ -29,82 +28,31 @@ module Aspera
29
28
  end
30
29
  end # WebAuthServlet
31
30
 
32
- # generates and adds self signed cert to provided webrick options
33
- # def fill_self_signed_cert(cert,key)
34
- # cert.subject = cert.issuer = OpenSSL::X509::Name.parse('/C=FR/O=Test/OU=Test/CN=Test')
35
- # cert.not_before = Time.now
36
- # cert.not_after = Time.now + 365 * 24 * 60 * 60
37
- # cert.public_key = key.public_key
38
- # cert.serial = 0x0
39
- # cert.version = 2
40
- # ef = OpenSSL::X509::ExtensionFactory.new
41
- # ef.issuer_certificate = cert
42
- # ef.subject_certificate = cert
43
- # cert.extensions = [
44
- # ef.create_extension('basicConstraints','CA:TRUE', true),
45
- # ef.create_extension('subjectKeyIdentifier', 'hash'),
46
- # # ef.create_extension('keyUsage', 'cRLSign,keyCertSign', true),
47
- # ]
48
- # cert.add_extension(ef.create_extension('authorityKeyIdentifier','keyid:always,issuer:always'))
49
- # cert.sign(key, OpenSSL::Digest::SHA256.new)
50
- # end
51
-
52
31
  # start a local web server, then start a browser that will callback the local server upon authentication
53
- class WebAuth
32
+ class WebAuth < WebServerSimple
54
33
  attr_reader :expected_path, :mutex, :cond
55
34
  attr_writer :query
56
35
 
57
36
  # @param endpoint_url [String] e.g. 'https://127.0.0.1:12345'
58
37
  def initialize(endpoint_url)
59
38
  uri = URI.parse(endpoint_url)
39
+ super(uri)
60
40
  # parameters for servlet
61
- @query = nil
62
41
  @mutex = Mutex.new
63
42
  @cond = ConditionVariable.new
64
43
  @expected_path = uri.path.empty? ? '/' : uri.path
65
- # see https://www.rubydoc.info/stdlib/webrick/WEBrick/Config
66
- webrick_options = {
67
- BindAddress: uri.host,
68
- Port: uri.port,
69
- Logger: Log.log,
70
- AccessLog: [[self, WEBrick::AccessLog::COMMON_LOG_FORMAT]] # replace default access log to call local method "<<" below
71
- }
72
- case uri.scheme
73
- when 'http'
74
- Log.log.debug('HTTP mode')
75
- when 'https'
76
- webrick_options[:SSLEnable] = true
77
- # a- automatic certificate generation
78
- webrick_options[:SSLCertName] = [['CN', WEBrick::Utils.getservername]]
79
- # b- generate self signed cert
80
- # webrick_options[:SSLPrivateKey] = OpenSSL::PKey::RSA.new(4096)
81
- # webrick_options[:SSLCertificate] = OpenSSL::X509::Certificate.new
82
- # self.class.fill_self_signed_cert(webrick_options[:SSLCertificate],webrick_options[:SSLPrivateKey])
83
- ## c- good cert
84
- # webrick_options[:SSLPrivateKey] = OpenSSL::PKey::RSA.new(File.read('.../myserver.key'))
85
- # webrick_options[:SSLCertificate] = OpenSSL::X509::Certificate.new(File.read('.../myserver.crt'))
86
- end
87
- # self signed certificate generates characters on STDERR, see create_self_signed_cert in webrick/ssl.rb
88
- Log.capture_stderr { @server = WEBrick::HTTPServer.new(webrick_options) }
89
- @server.mount(@expected_path, WebAuthServlet, self) # additional args provided to constructor
90
- Thread.new { @server.start }
91
- end
92
-
93
- # log web server access ( option AccessLog )
94
- def <<(access_log)
95
- Log.log.debug{"webrick log #{access_log.chomp}"}
44
+ @query = nil
45
+ mount(@expected_path, WebAuthServlet, self) # additional args provided to constructor
46
+ Thread.new { start }
96
47
  end
97
48
 
98
49
  # wait for request on web server
99
50
  # @return Hash the query
100
51
  def received_request
101
- # shall be called only once
102
- raise 'error, received_request called twice ?' if @server.nil?
103
52
  # wait for signal from thread
104
53
  @mutex.synchronize{@cond.wait(@mutex)}
105
54
  # tell server thread to stop
106
- @server.shutdown
107
- @server = nil
55
+ shutdown
108
56
  return @query
109
57
  end
110
58
  end
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'webrick'
4
+ require 'webrick/https'
5
+ require 'aspera/log'
6
+ require 'openssl'
7
+
8
+ module Aspera
9
+ class WebServerSimple < WEBrick::HTTPServer
10
+ CERT_PARAMETERS = %i[key cert chain].freeze
11
+ # generates and adds self signed cert to provided webrick options
12
+ def self.fill_self_signed_cert(cert, key)
13
+ cert.subject = cert.issuer = OpenSSL::X509::Name.parse('/C=FR/O=Test/OU=Test/CN=Test')
14
+ cert.not_before = Time.now
15
+ cert.not_after = Time.now + 365 * 24 * 60 * 60
16
+ cert.public_key = key.public_key
17
+ cert.serial = 0x0
18
+ cert.version = 2
19
+ ef = OpenSSL::X509::ExtensionFactory.new
20
+ ef.issuer_certificate = cert
21
+ ef.subject_certificate = cert
22
+ cert.extensions = [
23
+ ef.create_extension('basicConstraints', 'CA:TRUE', true),
24
+ ef.create_extension('subjectKeyIdentifier', 'hash')
25
+ # ef.create_extension('keyUsage', 'cRLSign,keyCertSign', true),
26
+ ]
27
+ cert.add_extension(ef.create_extension('authorityKeyIdentifier', 'keyid:always,issuer:always'))
28
+ cert.sign(key, OpenSSL::Digest.new('SHA256'))
29
+ end
30
+
31
+ # @param uri [URI]
32
+ def initialize(uri, certificate: nil)
33
+ # see https://www.rubydoc.info/stdlib/webrick/WEBrick/Config
34
+ webrick_options = {
35
+ BindAddress: uri.host,
36
+ Port: uri.port,
37
+ Logger: Log.log,
38
+ AccessLog: [[self, WEBrick::AccessLog::COMMON_LOG_FORMAT]] # replace default access log to call local method "<<" below
39
+ }
40
+ case uri.scheme
41
+ when 'http'
42
+ Log.log.debug('HTTP mode')
43
+ when 'https'
44
+ webrick_options[:SSLEnable] = true
45
+ if certificate.nil?
46
+ webrick_options[:SSLCertName] = [['CN', WEBrick::Utils.getservername]]
47
+ else
48
+ raise 'certificate must be Hash' unless certificate.is_a?(Hash)
49
+ certificate = certificate.symbolize_keys
50
+ raise "unexpected key in certificate config: only: #{CERT_PARAMETERS.join(', ')}" if certificate.keys.any?{|k|!CERT_PARAMETERS.include?(k)}
51
+ webrick_options[:SSLPrivateKey] = if certificate.key?(:key)
52
+ OpenSSL::PKey::RSA.new(File.read(certificate[:key]))
53
+ else
54
+ OpenSSL::PKey::RSA.new(4096)
55
+ end
56
+ if certificate.key?(:cert)
57
+ webrick_options[:SSLCertificate] = OpenSSL::X509::Certificate.new(File.read(certificate[:cert]))
58
+ else
59
+ webrick_options[:SSLCertificate] = OpenSSL::X509::Certificate.new
60
+ self.class.fill_self_signed_cert(webrick_options[:SSLCertificate], webrick_options[:SSLPrivateKey])
61
+ end
62
+ if certificate.key?(:chain)
63
+ webrick_options[:SSLExtraChainCert] = [OpenSSL::X509::Certificate.new(File.read(certificate[:chain]))]
64
+ end
65
+ end
66
+ end
67
+ # self signed certificate generates characters on STDERR, see create_self_signed_cert in webrick/ssl.rb
68
+ Log.capture_stderr { super(webrick_options) }
69
+ end
70
+
71
+ # log web server access ( option AccessLog )
72
+ def <<(access_log)
73
+ Log.log.debug{"webrick log #{access_log.chomp}"}
74
+ end
75
+ end
76
+ end
data.tar.gz.sig CHANGED
Binary file
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.11.0
4
+ version: 4.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Laurent Martin
@@ -35,7 +35,7 @@ cert_chain:
35
35
  ZjkOWbUc1aLIsfaQFHWyNfisY9X2RgkFHjX0p5493wnoA7aWh52MUhc145npFh8z
36
36
  v4P9xwkT02Shkert4B4iwNvVjoAUGk+J4090svZCroAyXBjon5LV7MJ4fyw=
37
37
  -----END CERTIFICATE-----
38
- date: 2023-01-26 00:00:00.000000000 Z
38
+ date: 2023-03-20 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: execjs
@@ -378,7 +378,7 @@ files:
378
378
  - lib/aspera/ats_api.rb
379
379
  - lib/aspera/cli/basic_auth_plugin.rb
380
380
  - lib/aspera/cli/extended_value.rb
381
- - lib/aspera/cli/formater.rb
381
+ - lib/aspera/cli/formatter.rb
382
382
  - lib/aspera/cli/info.rb
383
383
  - lib/aspera/cli/listener/line_dump.rb
384
384
  - lib/aspera/cli/listener/logger.rb
@@ -432,6 +432,7 @@ files:
432
432
  - lib/aspera/fasp/transfer_spec.rb
433
433
  - lib/aspera/fasp/uri.rb
434
434
  - lib/aspera/faspex_gw.rb
435
+ - lib/aspera/faspex_postproc.rb
435
436
  - lib/aspera/hash_ext.rb
436
437
  - lib/aspera/id_generator.rb
437
438
  - lib/aspera/keychain/encrypted_hash.rb
@@ -462,6 +463,7 @@ files:
462
463
  - lib/aspera/timer_limiter.rb
463
464
  - lib/aspera/uri_reader.rb
464
465
  - lib/aspera/web_auth.rb
466
+ - lib/aspera/web_server_simple.rb
465
467
  homepage: https://github.com/IBM/aspera-cli
466
468
  licenses:
467
469
  - Apache-2.0
@@ -488,7 +490,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
488
490
  version: '0'
489
491
  requirements:
490
492
  - Read the manual for any requirement
491
- rubygems_version: 3.4.1
493
+ rubygems_version: 3.4.6
492
494
  signing_key:
493
495
  specification_version: 4
494
496
  summary: 'Execute actions using command line on IBM Aspera Server products: Aspera
metadata.gz.sig CHANGED
Binary file