aspera-cli 4.4.0 → 4.7.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 (97) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2095 -1503
  3. data/bin/ascli +2 -1
  4. data/bin/asession +4 -5
  5. data/docs/test_env.conf +3 -0
  6. data/examples/aoc.rb +4 -3
  7. data/examples/faspex4.rb +25 -25
  8. data/examples/proxy.pac +1 -1
  9. data/examples/transfer.rb +17 -17
  10. data/lib/aspera/aoc.rb +238 -185
  11. data/lib/aspera/ascmd.rb +93 -83
  12. data/lib/aspera/ats_api.rb +11 -10
  13. data/lib/aspera/cli/basic_auth_plugin.rb +13 -14
  14. data/lib/aspera/cli/extended_value.rb +42 -33
  15. data/lib/aspera/cli/formater.rb +142 -108
  16. data/lib/aspera/cli/info.rb +17 -0
  17. data/lib/aspera/cli/listener/line_dump.rb +3 -2
  18. data/lib/aspera/cli/listener/logger.rb +2 -1
  19. data/lib/aspera/cli/listener/progress.rb +16 -18
  20. data/lib/aspera/cli/listener/progress_multi.rb +18 -21
  21. data/lib/aspera/cli/main.rb +173 -149
  22. data/lib/aspera/cli/manager.rb +163 -168
  23. data/lib/aspera/cli/plugin.rb +43 -31
  24. data/lib/aspera/cli/plugins/alee.rb +6 -6
  25. data/lib/aspera/cli/plugins/aoc.rb +405 -370
  26. data/lib/aspera/cli/plugins/ats.rb +86 -79
  27. data/lib/aspera/cli/plugins/bss.rb +14 -16
  28. data/lib/aspera/cli/plugins/config.rb +580 -362
  29. data/lib/aspera/cli/plugins/console.rb +23 -19
  30. data/lib/aspera/cli/plugins/cos.rb +18 -18
  31. data/lib/aspera/cli/plugins/faspex.rb +201 -158
  32. data/lib/aspera/cli/plugins/faspex5.rb +80 -57
  33. data/lib/aspera/cli/plugins/node.rb +183 -166
  34. data/lib/aspera/cli/plugins/orchestrator.rb +71 -67
  35. data/lib/aspera/cli/plugins/preview.rb +92 -96
  36. data/lib/aspera/cli/plugins/server.rb +79 -75
  37. data/lib/aspera/cli/plugins/shares.rb +35 -19
  38. data/lib/aspera/cli/plugins/sync.rb +20 -22
  39. data/lib/aspera/cli/transfer_agent.rb +76 -113
  40. data/lib/aspera/cli/version.rb +2 -1
  41. data/lib/aspera/colors.rb +35 -27
  42. data/lib/aspera/command_line_builder.rb +48 -34
  43. data/lib/aspera/cos_node.rb +29 -21
  44. data/lib/aspera/data_repository.rb +3 -2
  45. data/lib/aspera/environment.rb +50 -45
  46. data/lib/aspera/fasp/{manager.rb → agent_base.rb} +28 -25
  47. data/lib/aspera/fasp/{connect.rb → agent_connect.rb} +52 -43
  48. data/lib/aspera/fasp/{local.rb → agent_direct.rb} +58 -72
  49. data/lib/aspera/fasp/{http_gw.rb → agent_httpgw.rb} +37 -43
  50. data/lib/aspera/fasp/{node.rb → agent_node.rb} +35 -16
  51. data/lib/aspera/fasp/agent_trsdk.rb +104 -0
  52. data/lib/aspera/fasp/error.rb +2 -1
  53. data/lib/aspera/fasp/error_info.rb +68 -52
  54. data/lib/aspera/fasp/installation.rb +152 -124
  55. data/lib/aspera/fasp/listener.rb +1 -0
  56. data/lib/aspera/fasp/parameters.rb +87 -92
  57. data/lib/aspera/fasp/parameters.yaml +305 -249
  58. data/lib/aspera/fasp/resume_policy.rb +11 -14
  59. data/lib/aspera/fasp/transfer_spec.rb +26 -0
  60. data/lib/aspera/fasp/uri.rb +22 -21
  61. data/lib/aspera/faspex_gw.rb +55 -89
  62. data/lib/aspera/hash_ext.rb +4 -3
  63. data/lib/aspera/id_generator.rb +8 -7
  64. data/lib/aspera/keychain/encrypted_hash.rb +121 -0
  65. data/lib/aspera/keychain/macos_security.rb +90 -0
  66. data/lib/aspera/log.rb +55 -37
  67. data/lib/aspera/nagios.rb +13 -12
  68. data/lib/aspera/node.rb +30 -25
  69. data/lib/aspera/oauth.rb +175 -226
  70. data/lib/aspera/open_application.rb +4 -3
  71. data/lib/aspera/persistency_action_once.rb +6 -6
  72. data/lib/aspera/persistency_folder.rb +5 -9
  73. data/lib/aspera/preview/file_types.rb +6 -5
  74. data/lib/aspera/preview/generator.rb +25 -24
  75. data/lib/aspera/preview/options.rb +16 -14
  76. data/lib/aspera/preview/utils.rb +98 -98
  77. data/lib/aspera/{proxy_auto_config.erb.js → proxy_auto_config.js} +23 -31
  78. data/lib/aspera/proxy_auto_config.rb +111 -20
  79. data/lib/aspera/rest.rb +154 -135
  80. data/lib/aspera/rest_call_error.rb +2 -2
  81. data/lib/aspera/rest_error_analyzer.rb +23 -25
  82. data/lib/aspera/rest_errors_aspera.rb +15 -14
  83. data/lib/aspera/ssh.rb +12 -10
  84. data/lib/aspera/sync.rb +42 -41
  85. data/lib/aspera/temp_file_manager.rb +18 -14
  86. data/lib/aspera/timer_limiter.rb +2 -1
  87. data/lib/aspera/uri_reader.rb +7 -5
  88. data/lib/aspera/web_auth.rb +79 -76
  89. metadata +116 -29
  90. data/docs/Makefile +0 -66
  91. data/docs/README.erb.md +0 -3973
  92. data/docs/README.md +0 -13
  93. data/docs/diagrams.txt +0 -49
  94. data/docs/doc_tools.rb +0 -58
  95. data/lib/aspera/api_detector.rb +0 -60
  96. data/lib/aspera/cli/plugins/shares2.rb +0 -114
  97. data/lib/aspera/secrets.rb +0 -20
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+ require 'English'
1
3
  require 'singleton'
2
4
  require 'aspera/log'
3
5
  require 'aspera/environment'
@@ -6,11 +8,12 @@ require 'xmlsimple'
6
8
  require 'zlib'
7
9
  require 'base64'
8
10
  require 'fileutils'
11
+ require 'openssl'
9
12
 
10
13
  module Aspera
11
14
  module Fasp
12
15
  # Singleton that tells where to find ascp and other local resources (keys..) , using the "path(symb)" method.
13
- # It is used by object : Fasp::Local to find necessary resources
16
+ # It is used by object : AgentDirect to find necessary resources
14
17
  # By default it takes the first Aspera product found specified in product_locations
15
18
  # but the user can specify ascp location by calling:
16
19
  # Installation.instance.use_ascp_from_product(product_name)
@@ -18,26 +21,56 @@ module Aspera
18
21
  # Installation.instance.ascp_path=""
19
22
  class Installation
20
23
  include Singleton
24
+ # known product names
21
25
  PRODUCT_CONNECT='Aspera Connect'
22
26
  PRODUCT_CLI_V1='Aspera CLI'
23
27
  PRODUCT_DRIVE='Aspera Drive'
24
28
  PRODUCT_ENTSRV='Enterprise Server'
25
- MAX_REDIRECT_SDK=2
26
- private_constant :MAX_REDIRECT_SDK
29
+ # protobuf generated files from sdk
30
+ EXT_RUBY_PROTOBUF='_pb.rb'
31
+ RB_SDK_FOLDER='lib'
32
+ ONE_YEAR_SECONDS=365 * 24 * 60 * 60
33
+ DEFAULT_ASPERA_CONF=<<~END_OF_CONFIG_FILE
34
+ <?xml version='1.0' encoding='UTF-8'?>
35
+ <CONF version="2">
36
+ <default>
37
+ <file_system>
38
+ <resume_suffix>.aspera-ckpt</resume_suffix>
39
+ <partial_file_suffix>.partial</partial_file_suffix>
40
+ </file_system>
41
+ </default>
42
+ </CONF>
43
+ END_OF_CONFIG_FILE
44
+ private_constant :PRODUCT_CONNECT,:PRODUCT_CLI_V1,:PRODUCT_DRIVE,:PRODUCT_ENTSRV,:EXT_RUBY_PROTOBUF,:RB_SDK_FOLDER,:ONE_YEAR_SECONDS,:DEFAULT_ASPERA_CONF
27
45
  # set ascp executable path
28
46
  def ascp_path=(v)
29
47
  @path_to_ascp=v
30
48
  end
31
49
 
32
- # filename for ascp with optional extension (Windows)
33
- def ascp_filename
34
- return 'ascp'+Environment.exe_extension
50
+ def ascp_path
51
+ path(:ascp)
52
+ end
53
+
54
+ def sdk_ruby_folder
55
+ ruby_pb_folder=File.join(sdk_folder,RB_SDK_FOLDER)
56
+ FileUtils.mkdir_p(ruby_pb_folder) unless Dir.exist?(ruby_pb_folder)
57
+ return ruby_pb_folder
35
58
  end
36
59
 
37
60
  # location of SDK files
38
- def folder=(v)
39
- @sdk_folder=v
40
- folder_path
61
+ def sdk_folder=(v)
62
+ @sdk_dir=v
63
+ sdk_folder
64
+ end
65
+
66
+ # backward compatibility in sample program
67
+ alias folder= sdk_folder=
68
+
69
+ # @return the path to folder where SDK is installed
70
+ def sdk_folder
71
+ raise 'SDK path was ot initialized' if @sdk_dir.nil?
72
+ FileUtils.mkdir_p(@sdk_dir) unless Dir.exist?(@sdk_dir)
73
+ @sdk_dir
41
74
  end
42
75
 
43
76
  # find ascp in named product (use value : FIRST_FOUND='FIRST' to just use first one)
@@ -60,9 +93,9 @@ module Aspera
60
93
  scan_locations=product_locations.clone
61
94
  # add SDK as first search path
62
95
  scan_locations.unshift({
63
- :expected =>'SDK',
64
- :app_root =>folder_path,
65
- :sub_bin =>''
96
+ expected: 'SDK',
97
+ app_root: sdk_folder,
98
+ sub_bin: ''
66
99
  })
67
100
  # search installed products: with ascp
68
101
  @found_products=scan_locations.select! do |item|
@@ -100,46 +133,39 @@ module Aspera
100
133
  file=@path_to_ascp
101
134
  # note that there might be a .exe at the end
102
135
  file=file.gsub('ascp','ascp4') if k.eql?(:ascp4)
136
+ when :transferd
137
+ file=transferd_filepath
103
138
  when :ssh_bypass_key_dsa
104
- file=File.join(folder_path,'aspera_bypass_dsa.pem')
139
+ file=File.join(sdk_folder,'aspera_bypass_dsa.pem')
105
140
  File.write(file,get_key('dsa',1)) unless File.exist?(file)
106
141
  File.chmod(0400,file)
107
142
  when :ssh_bypass_key_rsa
108
- file=File.join(folder_path,'aspera_bypass_rsa.pem')
143
+ file=File.join(sdk_folder,'aspera_bypass_rsa.pem')
109
144
  File.write(file,get_key('rsa',2)) unless File.exist?(file)
110
145
  File.chmod(0400,file)
111
146
  when :aspera_license
112
- file=File.join(folder_path,'aspera-license')
113
- File.write(file,Base64.strict_encode64("#{Zlib::Inflate.inflate(DataRepository.instance.get_bin(6))}==SIGNATURE==\n#{Base64.strict_encode64(DataRepository.instance.get_bin(7))}")) unless File.exist?(file)
147
+ file=File.join(sdk_folder,'aspera-license')
148
+ File.write(file,Base64.strict_encode64("#{Zlib::Inflate.inflate(DataRepository.instance.data(6))}==SIGNATURE==\n#{Base64.strict_encode64(DataRepository.instance.data(7))}")) unless File.exist?(file)
114
149
  File.chmod(0400,file)
115
150
  when :aspera_conf
116
- file=File.join(folder_path,'aspera.conf')
117
- File.write(file,%Q{<?xml version='1.0' encoding='UTF-8'?>
118
- <CONF version="2">
119
- <default>
120
- <file_system>
121
- <resume_suffix>.aspera-ckpt</resume_suffix>
122
- <partial_file_suffix>.partial</partial_file_suffix>
123
- </file_system>
124
- </default>
125
- </CONF>
126
- }) unless File.exist?(file)
151
+ file=File.join(sdk_folder,'aspera.conf')
152
+ File.write(file,DEFAULT_ASPERA_CONF) unless File.exist?(file)
127
153
  File.chmod(0400,file)
128
154
  when :fallback_cert,:fallback_key
129
- file_key=File.join(folder_path,'aspera_fallback_key.pem')
130
- file_cert=File.join(folder_path,'aspera_fallback_cert.pem')
131
- if !File.exist?(file_key) or !File.exist?(file_cert)
155
+ file_key=File.join(sdk_folder,'aspera_fallback_key.pem')
156
+ file_cert=File.join(sdk_folder,'aspera_fallback_cert.pem')
157
+ if !File.exist?(file_key) || !File.exist?(file_cert)
132
158
  require 'openssl'
133
159
  # create new self signed certificate for http fallback
134
160
  private_key = OpenSSL::PKey::RSA.new(1024)
135
161
  cert = OpenSSL::X509::Certificate.new
136
- cert.subject = cert.issuer = OpenSSL::X509::Name.parse("/C=US/ST=California/L=Emeryville/O=Aspera Inc./OU=Corporate/CN=Aspera Inc./emailAddress=info@asperasoft.com")
162
+ cert.subject = cert.issuer = OpenSSL::X509::Name.parse('/C=US/ST=California/L=Emeryville/O=Aspera Inc./OU=Corporate/CN=Aspera Inc./emailAddress=info@asperasoft.com')
137
163
  cert.not_before = Time.now
138
- cert.not_after = Time.now + 365 * 24 * 60 * 60
164
+ cert.not_after = Time.now + ONE_YEAR_SECONDS
139
165
  cert.public_key = private_key.public_key
140
166
  cert.serial = 0x0
141
167
  cert.version = 2
142
- cert.sign(private_key, OpenSSL::Digest::SHA1.new)
168
+ cert.sign(private_key, OpenSSL::Digest.new('SHA1'))
143
169
  File.write(file_key,private_key.to_pem)
144
170
  File.write(file_cert,cert.to_pem)
145
171
  File.chmod(0400,file_key)
@@ -161,7 +187,7 @@ module Aspera
161
187
  uri_file=File.join(folder,"http#{ext}.uri")
162
188
  Log.log.debug("checking connect port file: #{uri_file}")
163
189
  if File.exist?(uri_file)
164
- return File.open(uri_file){|f|f.gets}.strip
190
+ return File.open(uri_file, &:gets).strip
165
191
  end
166
192
  end
167
193
  raise "no connect uri file found in #{folder}"
@@ -175,23 +201,29 @@ module Aspera
175
201
 
176
202
  # default bypass key phrase
177
203
  def bypass_pass
178
- return "%08x-%04x-%04x-%04x-%04x%08x" % DataRepository.instance.get_bin(3).unpack("NnnnnN")
204
+ return format('%08x-%04x-%04x-%04x-%04x%08x',*DataRepository.instance.data(3).unpack('NnnnnN'))
179
205
  end
180
206
 
181
207
  def bypass_keys
182
208
  return [:ssh_bypass_key_dsa,:ssh_bypass_key_rsa].map{|i|Installation.instance.path(i)}
183
209
  end
184
210
 
211
+ # use in plugin `config`
212
+ def get_ascp_version(exe_path)
213
+ return get_exe_version(exe_path,'-A')
214
+ end
215
+
185
216
  # Check that specified path is ascp and get version
186
- def get_ascp_version(ascp_path)
187
- raise "File basename of #{ascp_path} must be #{ascp_filename}" unless File.basename(ascp_path).eql?(ascp_filename)
188
- ascp_version='n/a'
189
- raise "error in sdk: no ascp included" if ascp_path.nil?
190
- cmd_out=%x{"#{ascp_path}" -A}
191
- raise "An error occured when testing #{ascp_filename}: #{cmd_out}" unless $? == 0
217
+ def get_exe_version(exe_path,vers_arg)
218
+ raise 'ERROR: nil arg' if exe_path.nil?
219
+ return nil unless File.exist?(exe_path)
220
+ exe_version=nil
221
+ cmd_out=%x("#{exe_path}" #{vers_arg})
222
+ raise "An error occured when testing #{ascp_filename}: #{cmd_out}" unless $CHILD_STATUS == 0
192
223
  # get version from ascp, only after full extract, as windows requires DLLs (SSL/TLS/etc...)
193
- m=cmd_out.match(/ascp version (.*)/)
194
- ascp_version=m[1] unless m.nil?
224
+ m=cmd_out.match(/ version ([0-9.]+)/)
225
+ exe_version=m[1] unless m.nil?
226
+ return exe_version
195
227
  end
196
228
 
197
229
  # download aspera SDK or use local file
@@ -205,54 +237,48 @@ module Aspera
205
237
  raise 'use format: file:///<path>' unless sdk_url.start_with?('file:///')
206
238
  sdk_zip_path=sdk_url.gsub(%r{^file:///},'')
207
239
  else
208
- redirect_remain=MAX_REDIRECT_SDK
209
- begin
210
- Aspera::Rest.new(base_url: sdk_url).call(operation: 'GET',save_to_file: sdk_zip_path)
211
- rescue Aspera::RestCallError => e
212
- if e.response.is_a?(Net::HTTPRedirection)
213
- if redirect_remain > 0
214
- redirect_remain-=1
215
- sdk_url=e.response['location']
216
- retry
217
- else
218
- raise "Too many redirect"
219
- end
220
- else
221
- raise e
222
- end
223
- end
240
+ Aspera::Rest.new(base_url: sdk_url, redirect_max: 3).call(operation: 'GET',save_to_file: sdk_zip_path)
224
241
  end
225
- # SDK is organized by architecture
226
- filter="/#{Environment.architecture}/"
227
- ascp_path=nil
228
- sdk_path=folder_path
229
242
  # rename old install
230
- if File.exist?(File.join(sdk_path,ascp_filename))
231
- Log.log.warn("Previous install exists, renaming.")
232
- File.rename(sdk_path,"#{sdk_path}.#{Time.now.strftime("%Y%m%d%H%M%S")}")
243
+ if !Dir.empty?(sdk_folder)
244
+ Log.log.warn('Previous install exists, renaming folder.')
245
+ File.rename(sdk_folder,"#{sdk_folder}.#{Time.now.strftime('%Y%m%d%H%M%S')}")
246
+ # TODO: delete old archives ?
233
247
  end
234
- # first ensure license file is here so that ascp invokation for version works
235
- self.path(:aspera_license)
236
- self.path(:aspera_conf)
248
+ # SDK is organized by architecture
249
+ arch_filter="#{Environment.architecture}/"
250
+ # extract files from archive
237
251
  Zip::File.open(sdk_zip_path) do |zip_file|
238
252
  zip_file.each do |entry|
239
- # get only specified arch, but not folder, only files
240
- if entry.name.include?(filter) and !entry.name.end_with?('/')
241
- archive_file=File.join(sdk_path,File.basename(entry.name))
242
- File.open(archive_file, 'wb') do |output_stream|
243
- IO.copy_stream(entry.get_input_stream, output_stream)
244
- end
245
- if File.basename(entry.name).eql?(ascp_filename)
246
- FileUtils.chmod(0755,archive_file)
247
- ascp_path=archive_file
248
- end
253
+ # skip folder entries
254
+ next if entry.name.end_with?('/')
255
+ dest_folder=nil
256
+ # binaries
257
+ dest_folder=sdk_folder if entry.name.include?(arch_filter)
258
+ # ruby adapters
259
+ dest_folder=sdk_ruby_folder if entry.name.end_with?(EXT_RUBY_PROTOBUF)
260
+ next if dest_folder.nil?
261
+ File.open(File.join(dest_folder,File.basename(entry.name)), 'wb') do |output_stream|
262
+ IO.copy_stream(entry.get_input_stream, output_stream)
249
263
  end
250
264
  end
251
265
  end
252
266
  File.unlink(sdk_zip_path) rescue nil # Windows may give error
253
- ascp_version=get_ascp_version(ascp_path)
254
- File.write(File.join(folder_path,PRODUCT_INFO),"<product><name>IBM Aspera SDK</name><version>#{ascp_version}</version></product>")
255
- return ascp_version
267
+ # ensure license file are generated so that ascp invokation for version works
268
+ path(:aspera_license)
269
+ path(:aspera_conf)
270
+ ascp_path=File.join(sdk_folder,ascp_filename)
271
+ raise "No #{ascp_filename} found in SDK archive" unless File.exist?(ascp_path)
272
+ FileUtils.chmod(0755,ascp_path)
273
+ FileUtils.chmod(0755,ascp_path.gsub('ascp','ascp4'))
274
+ ascp_version=get_ascp_version(File.join(sdk_folder,ascp_filename))
275
+ trd_path=transferd_filepath
276
+ Log.log.warn("No #{trd_path} in SDK archive") unless File.exist?(trd_path)
277
+ FileUtils.chmod(0755,trd_path) if File.exist?(trd_path)
278
+ transferd_version=get_exe_version(trd_path,'version')
279
+ sdk_version = transferd_version||ascp_version
280
+ File.write(File.join(sdk_folder,PRODUCT_INFO),"<product><name>IBM Aspera SDK</name><version>#{sdk_version}</version></product>")
281
+ return sdk_version
256
282
  end
257
283
 
258
284
  private
@@ -269,7 +295,7 @@ module Aspera
269
295
 
270
296
  def initialize
271
297
  @path_to_ascp=nil
272
- @sdk_folder=nil
298
+ @sdk_dir=nil
273
299
  @found_products=nil
274
300
  end
275
301
 
@@ -281,11 +307,13 @@ module Aspera
281
307
  return found.first
282
308
  end
283
309
 
284
- # @return the path to folder where SDK is installed
285
- def folder_path
286
- raise "Undefined path to SDK" if @sdk_folder.nil?
287
- FileUtils.mkdir_p(@sdk_folder) unless Dir.exist?(@sdk_folder)
288
- @sdk_folder
310
+ # filename for ascp with optional extension (Windows)
311
+ def ascp_filename
312
+ return 'ascp'+Environment.exe_extension
313
+ end
314
+
315
+ def transferd_filepath
316
+ return File.join(sdk_folder,'asperatransferd'+Environment.exe_extension)
289
317
  end
290
318
 
291
319
  # @return product folders depending on OS fields
@@ -297,49 +325,49 @@ module Aspera
297
325
  def product_locations
298
326
  case Aspera::Environment.os
299
327
  when Aspera::Environment::OS_WINDOWS; return [{
300
- :expected =>PRODUCT_CONNECT,
301
- :app_root =>File.join(ENV['LOCALAPPDATA'],'Programs','Aspera','Aspera Connect'),
302
- :log_root =>File.join(ENV['LOCALAPPDATA'],'Aspera','Aspera Connect','var','log'),
303
- :run_root =>File.join(ENV['LOCALAPPDATA'],'Aspera','Aspera Connect')
328
+ expected: PRODUCT_CONNECT,
329
+ app_root: File.join(ENV['LOCALAPPDATA'],'Programs','Aspera','Aspera Connect'),
330
+ log_root: File.join(ENV['LOCALAPPDATA'],'Aspera','Aspera Connect','var','log'),
331
+ run_root: File.join(ENV['LOCALAPPDATA'],'Aspera','Aspera Connect')
304
332
  },{
305
- :expected =>PRODUCT_CLI_V1,
306
- :app_root =>File.join('C:','Program Files','Aspera','cli'),
307
- :log_root =>File.join('C:','Program Files','Aspera','cli','var','log'),
333
+ expected: PRODUCT_CLI_V1,
334
+ app_root: File.join('C:','Program Files','Aspera','cli'),
335
+ log_root: File.join('C:','Program Files','Aspera','cli','var','log')
308
336
  },{
309
- :expected =>PRODUCT_ENTSRV,
310
- :app_root =>File.join('C:','Program Files','Aspera','Enterprise Server'),
311
- :log_root =>File.join('C:','Program Files','Aspera','Enterprise Server','var','log'),
337
+ expected: PRODUCT_ENTSRV,
338
+ app_root: File.join('C:','Program Files','Aspera','Enterprise Server'),
339
+ log_root: File.join('C:','Program Files','Aspera','Enterprise Server','var','log')
312
340
  }]
313
341
  when Aspera::Environment::OS_X; return [{
314
- :expected =>PRODUCT_CONNECT,
315
- :app_root =>File.join(Dir.home,'Applications','Aspera Connect.app'),
316
- :log_root =>File.join(Dir.home,'Library','Logs','Aspera_Connect'),
317
- :run_root =>File.join(Dir.home,'Library','Application Support','Aspera','Aspera Connect'),
318
- :sub_bin =>File.join('Contents','Resources'),
342
+ expected: PRODUCT_CONNECT,
343
+ app_root: File.join(Dir.home,'Applications','Aspera Connect.app'),
344
+ log_root: File.join(Dir.home,'Library','Logs','Aspera_Connect'),
345
+ run_root: File.join(Dir.home,'Library','Application Support','Aspera','Aspera Connect'),
346
+ sub_bin: File.join('Contents','Resources')
319
347
  },{
320
- :expected =>PRODUCT_CLI_V1,
321
- :app_root =>File.join(Dir.home,'Applications','Aspera CLI'),
322
- :log_root =>File.join(Dir.home,'Library','Logs','Aspera')
348
+ expected: PRODUCT_CLI_V1,
349
+ app_root: File.join(Dir.home,'Applications','Aspera CLI'),
350
+ log_root: File.join(Dir.home,'Library','Logs','Aspera')
323
351
  },{
324
- :expected =>PRODUCT_ENTSRV,
325
- :app_root =>File.join('','Library','Aspera'),
326
- :log_root =>File.join(Dir.home,'Library','Logs','Aspera'),
352
+ expected: PRODUCT_ENTSRV,
353
+ app_root: File.join('','Library','Aspera'),
354
+ log_root: File.join(Dir.home,'Library','Logs','Aspera')
327
355
  },{
328
- :expected =>PRODUCT_DRIVE,
329
- :app_root =>File.join('','Applications','Aspera Drive.app'),
330
- :log_root =>File.join(Dir.home,'Library','Logs','Aspera_Drive'),
331
- :sub_bin =>File.join('Contents','Resources'),
356
+ expected: PRODUCT_DRIVE,
357
+ app_root: File.join('','Applications','Aspera Drive.app'),
358
+ log_root: File.join(Dir.home,'Library','Logs','Aspera_Drive'),
359
+ sub_bin: File.join('Contents','Resources')
332
360
  }]
333
- else; return [{ # other: Linux and Unix family
334
- :expected =>PRODUCT_CONNECT,
335
- :app_root =>File.join(Dir.home,'.aspera','connect'),
336
- :run_root =>File.join(Dir.home,'.aspera','connect')
361
+ else; return [{ # other: Linux and Unix family
362
+ expected: PRODUCT_CONNECT,
363
+ app_root: File.join(Dir.home,'.aspera','connect'),
364
+ run_root: File.join(Dir.home,'.aspera','connect')
337
365
  },{
338
- :expected =>PRODUCT_CLI_V1,
339
- :app_root =>File.join(Dir.home,'.aspera','cli'),
366
+ expected: PRODUCT_CLI_V1,
367
+ app_root: File.join(Dir.home,'.aspera','cli')
340
368
  },{
341
- :expected =>PRODUCT_ENTSRV,
342
- :app_root =>File.join('','opt','aspera'),
369
+ expected: PRODUCT_ENTSRV,
370
+ app_root: File.join('','opt','aspera')
343
371
  }]
344
372
  end
345
373
  end
@@ -349,10 +377,10 @@ module Aspera
349
377
  # @param id in repository 1 for dsa, 2 for rsa
350
378
  def get_key(type,id)
351
379
  hf=['begin','end'].map{|t|"-----#{t} #{type} private key-----".upcase}
352
- bin=Base64.strict_encode64(DataRepository.instance.get_bin(id))
353
- hf.insert(1,bin).join("\n")
380
+ bin=Base64.strict_encode64(DataRepository.instance.data(id))
381
+ # validate valie and generate key in connonical format
382
+ OpenSSL::PKey.const_get(type.upcase).send(:new,hf.insert(1,bin).join("\n")).to_pem
354
383
  end
355
-
356
384
  end # Installation
357
385
  end
358
386
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Aspera
2
3
  module Fasp
3
4
  # imlement this class to get transfer events