aspera-cli 4.18.1 → 4.20.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 (85) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +33 -0
  4. data/CONTRIBUTING.md +17 -12
  5. data/README.md +396 -185
  6. data/bin/asession +26 -19
  7. data/examples/build_exec +74 -0
  8. data/examples/{rubyc → build_exec_rubyc} +18 -2
  9. data/examples/get_proto_file.rb +7 -0
  10. data/lib/aspera/agent/alpha.rb +8 -8
  11. data/lib/aspera/agent/base.rb +4 -18
  12. data/lib/aspera/agent/connect.rb +14 -13
  13. data/lib/aspera/agent/direct.rb +123 -120
  14. data/lib/aspera/agent/httpgw.rb +2 -3
  15. data/lib/aspera/agent/node.rb +10 -10
  16. data/lib/aspera/agent/trsdk.rb +17 -20
  17. data/lib/aspera/api/alee.rb +15 -0
  18. data/lib/aspera/api/aoc.rb +128 -99
  19. data/lib/aspera/api/ats.rb +1 -1
  20. data/lib/aspera/api/cos_node.rb +1 -1
  21. data/lib/aspera/api/httpgw.rb +104 -64
  22. data/lib/aspera/api/node.rb +33 -12
  23. data/lib/aspera/ascmd.rb +56 -48
  24. data/lib/aspera/ascp/installation.rb +142 -70
  25. data/lib/aspera/ascp/management.rb +7 -3
  26. data/lib/aspera/ascp/products.rb +13 -7
  27. data/lib/aspera/assert.rb +10 -5
  28. data/lib/aspera/cli/formatter.rb +42 -26
  29. data/lib/aspera/cli/hints.rb +2 -1
  30. data/lib/aspera/cli/info.rb +12 -10
  31. data/lib/aspera/cli/main.rb +16 -13
  32. data/lib/aspera/cli/manager.rb +15 -10
  33. data/lib/aspera/cli/plugin.rb +17 -31
  34. data/lib/aspera/cli/plugin_factory.rb +10 -1
  35. data/lib/aspera/cli/plugins/alee.rb +3 -3
  36. data/lib/aspera/cli/plugins/aoc.rb +222 -194
  37. data/lib/aspera/cli/plugins/ats.rb +16 -14
  38. data/lib/aspera/cli/plugins/config.rb +66 -53
  39. data/lib/aspera/cli/plugins/console.rb +3 -3
  40. data/lib/aspera/cli/plugins/faspex.rb +11 -21
  41. data/lib/aspera/cli/plugins/faspex5.rb +44 -42
  42. data/lib/aspera/cli/plugins/faspio.rb +2 -2
  43. data/lib/aspera/cli/plugins/httpgw.rb +1 -1
  44. data/lib/aspera/cli/plugins/node.rb +155 -96
  45. data/lib/aspera/cli/plugins/orchestrator.rb +14 -13
  46. data/lib/aspera/cli/plugins/preview.rb +8 -9
  47. data/lib/aspera/cli/plugins/server.rb +6 -10
  48. data/lib/aspera/cli/plugins/shares.rb +13 -9
  49. data/lib/aspera/cli/sync_actions.rb +72 -31
  50. data/lib/aspera/cli/transfer_agent.rb +13 -14
  51. data/lib/aspera/cli/transfer_progress.rb +36 -18
  52. data/lib/aspera/cli/version.rb +1 -1
  53. data/lib/aspera/command_line_builder.rb +3 -4
  54. data/lib/aspera/coverage.rb +13 -1
  55. data/lib/aspera/environment.rb +59 -10
  56. data/lib/aspera/faspex_gw.rb +3 -3
  57. data/lib/aspera/json_rpc.rb +1 -1
  58. data/lib/aspera/keychain/encrypted_hash.rb +2 -0
  59. data/lib/aspera/keychain/macos_security.rb +7 -12
  60. data/lib/aspera/log.rb +4 -4
  61. data/lib/aspera/node_simulator.rb +1 -1
  62. data/lib/aspera/oauth/base.rb +39 -45
  63. data/lib/aspera/oauth/factory.rb +11 -4
  64. data/lib/aspera/oauth/generic.rb +4 -8
  65. data/lib/aspera/oauth/jwt.rb +4 -4
  66. data/lib/aspera/oauth/url_json.rb +3 -2
  67. data/lib/aspera/oauth/web.rb +10 -6
  68. data/lib/aspera/persistency_action_once.rb +16 -8
  69. data/lib/aspera/preview/utils.rb +5 -16
  70. data/lib/aspera/rest.rb +100 -76
  71. data/lib/aspera/secret_hider.rb +3 -2
  72. data/lib/aspera/ssh.rb +1 -1
  73. data/lib/aspera/transfer/faux_file.rb +7 -5
  74. data/lib/aspera/transfer/parameters.rb +41 -35
  75. data/lib/aspera/transfer/spec.rb +16 -18
  76. data/lib/aspera/transfer/sync.rb +51 -50
  77. data/lib/aspera/transfer/uri.rb +1 -1
  78. data/lib/aspera/uri_reader.rb +1 -1
  79. data/lib/aspera/web_auth.rb +166 -18
  80. data/lib/aspera/web_server_simple.rb +27 -15
  81. data/lib/transfer_pb.rb +84 -0
  82. data/lib/transfer_services_pb.rb +82 -0
  83. data.tar.gz.sig +0 -0
  84. metadata +25 -6
  85. metadata.gz.sig +0 -0
@@ -12,18 +12,9 @@ require 'cgi'
12
12
 
13
13
  module Aspera
14
14
  module Api
15
- SAAS_DOMAIN_PROD = 'ibmaspera.com'
16
- class Alee < Aspera::Rest
17
- def initialize(entitlement_id, customer_id, api_domain: SAAS_DOMAIN_PROD, version: 'v1')
18
- super(
19
- base_url: "https://api.#{api_domain}/metering/#{version}",
20
- headers: {'X-Aspera-Entitlement-Authorization' => Rest.basic_token(entitlement_id, customer_id)}
21
- )
22
- end
23
- end
24
-
25
15
  class AoC < Aspera::Rest
26
16
  PRODUCT_NAME = 'Aspera on Cloud'
17
+ # use default workspace if it is set, else none
27
18
  DEFAULT_WORKSPACE = ''
28
19
  # Production domain of AoC
29
20
  SAAS_DOMAIN_PROD = 'ibmaspera.com' # cspell:disable-line
@@ -78,42 +69,50 @@ module Aspera
78
69
  end
79
70
 
80
71
  # split host of http://myorg.asperafiles.com in org and domain
81
- def url_parts(uri)
72
+ def split_org_domain(uri)
82
73
  raise "No host found in URL.Please check URL format: https://myorg.#{SAAS_DOMAIN_PROD}" if uri.host.nil?
83
74
  parts = uri.host.split('.', 2)
84
75
  Aspera.assert(parts.length == 2){"expecting a public FQDN for #{PRODUCT_NAME}"}
85
- return parts
76
+ parts[0] = nil if parts[0].eql?('api')
77
+ return %i{organization domain}.zip(parts).to_h
86
78
  end
87
79
 
88
80
  # @param url [String] URL of AoC public link
89
81
  # @return [Hash] information about public link, or nil if not a public link
90
82
  def link_info(url)
91
- final_uri = Rest.new(base_url: url, redirect_max: MAX_AOC_URL_REDIRECT).read('')[:http].uri
92
- raise 'AoC shall redirect to login page' if final_uri.query.nil?
93
- decoded_query = Rest.decode_query(final_uri.query)
83
+ final_uri = Rest.new(base_url: url, redirect_max: MAX_AOC_URL_REDIRECT).call(operation: 'GET')[:http].uri
84
+ Log.log.trace1{Log.dump(:final_uri, final_uri)}
85
+ org_domain = split_org_domain(final_uri)
86
+ if (m = final_uri.path.match(%r{/oauth2/([^/]+)/login$}))
87
+ org_domain[:organization] = m[1] if org_domain[:organization].nil?
88
+ else
89
+ Log.log.debug{"path=#{final_uri.path} does not end with /login"}
90
+ end
91
+ raise 'AoC shall redirect to login page with a query' if final_uri.query.nil?
92
+ query = Rest.query_to_h(final_uri.query)
93
+ Log.log.trace1{Log.dump(:query, query)}
94
94
  # is that a public link ?
95
- if decoded_query.key?('token')
95
+ if query.key?('token')
96
96
  Log.log.warn{"Unknown pub link path: #{final_uri.path}"} unless PUBLIC_LINK_PATHS.include?(final_uri.path)
97
97
  # ok we get it !
98
98
  return {
99
- instance_domain: url_parts(final_uri)[1],
99
+ instance_domain: org_domain[:domain],
100
100
  url: "https://#{final_uri.host}",
101
- token: decoded_query['token']
101
+ token: query['token']
102
102
  }
103
103
  end
104
- Log.log.debug{"path=#{final_uri.path} does not end with /login"} unless final_uri.path.end_with?('/login')
105
- if decoded_query['state']
104
+ if query['state']
106
105
  # can be a private link
107
- state_uri = URI.parse(decoded_query['state'])
108
- if state_uri.query && decoded_query['redirect_uri']
109
- decoded_state = Rest.decode_query(state_uri.query)
106
+ state_uri = URI.parse(query['state'])
107
+ if state_uri.query && query['redirect_uri']
108
+ decoded_state = Rest.query_to_h(state_uri.query)
110
109
  if decoded_state.key?('short_link_url')
111
110
  if (m = state_uri.path.match(%r{/files/workspaces/([0-9]+)/all/([0-9]+):([0-9]+)}))
112
- redirect_uri = URI.parse(decoded_query['redirect_uri'])
113
- parts = url_parts(redirect_uri)
111
+ redirect_uri = URI.parse(query['redirect_uri'])
112
+ org_domain = split_org_domain(redirect_uri)
114
113
  return {
115
- instance_domain: parts[1],
116
- organization: parts[0],
114
+ instance_domain: org_domain[:domain],
115
+ organization: org_domain[:organization],
117
116
  url: "https://#{redirect_uri.host}",
118
117
  private_link: {
119
118
  workspace_id: m[1],
@@ -125,10 +124,10 @@ module Aspera
125
124
  end
126
125
  end
127
126
  end
128
- parts = url_parts(URI.parse(url))
127
+ Log.log.debug{Log.dump(:org_domain, org_domain)}
129
128
  return {
130
- instance_domain: parts[1],
131
- organization: parts[0]
129
+ instance_domain: org_domain[:domain],
130
+ organization: org_domain[:organization]
132
131
  }
133
132
  end
134
133
  end
@@ -149,7 +148,8 @@ module Aspera
149
148
  @workspace_name = workspace
150
149
  @cache_user_info = nil
151
150
  @cache_url_token_info = nil
152
- @context_cache = nil
151
+ @workspace_info = nil
152
+ @home_info = nil
153
153
  auth_params = {
154
154
  type: :oauth2,
155
155
  client_id: client_id,
@@ -206,7 +206,7 @@ module Aspera
206
206
  return nil unless auth_params[:grant_method].eql?(:url_json)
207
207
  return @cache_url_token_info unless @cache_url_token_info.nil?
208
208
  # TODO: can there be several in list ?
209
- @cache_url_token_info = read('url_tokens')[:data].first
209
+ @cache_url_token_info = read('url_tokens').first
210
210
  return @cache_url_token_info
211
211
  end
212
212
 
@@ -225,7 +225,7 @@ module Aspera
225
225
  # get our user's default information
226
226
  @cache_user_info =
227
227
  begin
228
- read('self')[:data]
228
+ read('self')
229
229
  rescue StandardError => e
230
230
  raise e if exception
231
231
  Log.log.debug{"ignoring error: #{e}"}
@@ -235,11 +235,20 @@ module Aspera
235
235
  return @cache_user_info
236
236
  end
237
237
 
238
- # @param application [Symbol] :files or :packages
238
+ def workspace
239
+ raise 'internal error: AoC workspace context is not set' if @workspace_info.nil?
240
+ @workspace_info
241
+ end
242
+
243
+ def home
244
+ raise 'internal error: AoC home context is not set' if @home_info.nil?
245
+ @home_info
246
+ end
247
+
248
+ # Set the application context
249
+ # @param application [Symbol,NilClass] :files or :packages
239
250
  # @return [Hash] current context information: workspace, and home node/file if app is "Files"
240
- def context(application = nil)
241
- return @context_cache unless @context_cache.nil?
242
- Aspera.assert(!application.nil?){'application must be set once'}
251
+ def context=(application)
243
252
  Aspera.assert_values(application, %i[files packages])
244
253
  ws_id =
245
254
  if !public_link.nil?
@@ -249,9 +258,10 @@ module Aspera
249
258
  Log.log.debug('Using workspace of private link')
250
259
  private_link[:workspace_id]
251
260
  elsif @workspace_name.eql?(DEFAULT_WORKSPACE)
252
- Log.log.debug('Using default workspace'.green)
253
- raise 'User does not have default workspace, please specify workspace' if current_user_info['default_workspace_id'].nil?
254
- current_user_info['default_workspace_id']
261
+ if !current_user_info['default_workspace_id'].nil?
262
+ Log.log.debug('Using default workspace'.green)
263
+ current_user_info['default_workspace_id']
264
+ end
255
265
  elsif @workspace_name.nil?
256
266
  nil
257
267
  else
@@ -261,39 +271,49 @@ module Aspera
261
271
  if ws_id.nil?
262
272
  nil
263
273
  else
264
- read("workspaces/#{ws_id}")[:data]
274
+ read("workspaces/#{ws_id}")
265
275
  end
266
- @context_cache = if ws_info.nil?
267
- {
268
- workspace_id: nil,
269
- workspace_name: 'Shared folders'
270
- }
271
- else
272
- {
273
- workspace_id: ws_info['id'],
274
- workspace_name: ws_info['name']
275
- }
276
- end
277
- return @context_cache unless application.eql?(:files)
278
- if !public_link.nil?
279
- assert_public_link_types(['view_shared_file'])
280
- @context_cache[:home_node_id] = public_link['data']['node_id']
281
- @context_cache[:home_file_id] = public_link['data']['file_id']
282
- elsif !private_link.nil?
283
- @context_cache[:home_node_id] = private_link[:node_id]
284
- @context_cache[:home_file_id] = private_link[:file_id]
285
- elsif ws_info
286
- @context_cache[:home_node_id] = ws_info['home_node_id']
287
- @context_cache[:home_file_id] = ws_info['home_file_id']
288
- else
289
- # not part of any workspace, but has some folder shared
290
- user_info = current_user_info(exception: true) rescue {'read_only_home_node_id' => nil, 'read_only_home_file_id' => nil}
291
- @context_cache[:home_node_id] = user_info['read_only_home_node_id']
292
- @context_cache[:home_file_id] = user_info['read_only_home_file_id']
293
- end
294
- raise "Cannot get user's home node id, check your default workspace or specify one" if @context_cache[:home_node_id].to_s.empty?
295
- Log.log.debug{Log.dump(:context, @context_cache)}
296
- return @context_cache
276
+ @workspace_info =
277
+ if ws_info.nil?
278
+ {
279
+ id: nil,
280
+ name: 'Shared folders'
281
+ }
282
+ else
283
+ {
284
+ id: ws_info['id'],
285
+ name: ws_info['name']
286
+ }
287
+ end
288
+ Log.log.debug{Log.dump(:context, @workspace_info)}
289
+ return nil unless application.eql?(:files)
290
+ @home_info =
291
+ if !public_link.nil?
292
+ assert_public_link_types(['view_shared_file'])
293
+ {
294
+ node_id: public_link['data']['node_id'],
295
+ file_id: public_link['data']['file_id']
296
+ }
297
+ elsif !private_link.nil?
298
+ {
299
+ node_id: private_link[:node_id],
300
+ file_id: private_link[:file_id]
301
+ }
302
+ elsif ws_info
303
+ {
304
+ node_id: ws_info['home_node_id'],
305
+ file_id: ws_info['home_file_id']
306
+ }
307
+ else
308
+ # not part of any workspace, but has some folder shared
309
+ user_info = current_user_info(exception: true) rescue {'read_only_home_node_id' => nil, 'read_only_home_file_id' => nil}
310
+ {
311
+ node_id: user_info['read_only_home_node_id'],
312
+ file_id: user_info['read_only_home_file_id']
313
+ }
314
+ end
315
+ raise "Cannot get user's home node id, check your default workspace or specify one" if @home_info[:node_id].to_s.empty?
316
+ Log.log.debug{Log.dump(:context, @home_info)}
297
317
  end
298
318
 
299
319
  # @param node_id [String] identifier of node in AoC
@@ -304,9 +324,9 @@ module Aspera
304
324
  # @returns [Node] a node API for access key
305
325
  def node_api_from(node_id:, workspace_id: nil, workspace_name: nil, scope: Node::SCOPE_USER, package_info: nil)
306
326
  Aspera.assert_type(node_id, String)
307
- node_info = read("nodes/#{node_id}")[:data]
327
+ node_info = read("nodes/#{node_id}")
308
328
  if workspace_name.nil? && !workspace_id.nil?
309
- workspace_name = read("workspaces/#{workspace_id}")[:data]['name']
329
+ workspace_name = read("workspaces/#{workspace_id}")['name']
310
330
  end
311
331
  app_info = {
312
332
  api: self, # for callback
@@ -346,7 +366,7 @@ module Aspera
346
366
  pkg_data['recipients'].first.is_a?(Hash) &&
347
367
  pkg_data['recipients'].first.key?('type') &&
348
368
  pkg_data['recipients'].first['type'].eql?('dropbox')
349
- meta_schema = read("dropboxes/#{pkg_data['recipients'].first['id']}")[:data]['metadata_schema']
369
+ meta_schema = read("dropboxes/#{pkg_data['recipients'].first['id']}")['metadata_schema']
350
370
  if meta_schema.nil? || meta_schema.empty?
351
371
  Log.log.debug('no metadata in shared inbox')
352
372
  return
@@ -390,7 +410,7 @@ module Aspera
390
410
  # email: user, else dropbox
391
411
  entity_type = short_recipient_info.include?('@') ? 'contacts' : 'dropboxes'
392
412
  begin
393
- full_recipient_info = lookup_by_name(entity_type, short_recipient_info, {'current_workspace_id' => ws_id})
413
+ full_recipient_info = lookup_by_name(entity_type, short_recipient_info, query: {'current_workspace_id' => ws_id})
394
414
  rescue RuntimeError => e
395
415
  raise e unless e.message.start_with?(ENTITY_NOT_FOUND)
396
416
  # dropboxes cannot be created on the fly
@@ -399,7 +419,7 @@ module Aspera
399
419
  full_recipient_info = create('contacts', {
400
420
  'current_workspace_id' => ws_id,
401
421
  'email' => short_recipient_info
402
- }.merge(new_user_option))[:data]
422
+ }.merge(new_user_option))
403
423
  end
404
424
  short_recipient_info = if entity_type.eql?('dropboxes')
405
425
  {'id' => full_recipient_info['id'], 'type' => 'dropbox'}
@@ -439,7 +459,7 @@ module Aspera
439
459
  # create a package
440
460
  # @param package_data [Hash] package creation (with extensions...)
441
461
  # @param validate_meta [TrueClass,FalseClass] true to validate parameters locally
442
- # @param new_user_option [Hash] options if an unknown user is specified
462
+ # @param new_user_option [Hash,NilClass] options if an unknown user is specified
443
463
  # @return transfer spec, node api and package information
444
464
  def create_package_simple(package_data, validate_meta, new_user_option)
445
465
  update_package_metadata_for_api(package_data)
@@ -453,7 +473,7 @@ module Aspera
453
473
  validate_metadata(package_data) if validate_meta
454
474
 
455
475
  # create a new package container
456
- created_package = create('packages', package_data)[:data]
476
+ created_package = create('packages', package_data)
457
477
 
458
478
  package_node_api = node_api_from(
459
479
  node_id: created_package['node_id'],
@@ -463,7 +483,7 @@ module Aspera
463
483
  # tell AoC what to expect in package: 1 transfer (can also be done after transfer)
464
484
  # TODO: if multi session was used we should probably tell
465
485
  # also, currently no "multi-source" , i.e. only from client-side files, unless "node" agent is used
466
- update("packages/#{created_package['id']}", {'sent' => true, 'transfers_expected' => 1})[:data]
486
+ update("packages/#{created_package['id']}", {'sent' => true, 'transfers_expected' => 1})
467
487
 
468
488
  return {
469
489
  spec: package_node_api.transfer_spec_gen4(created_package['contents_file_id'], Transfer::Spec::DIRECTION_SEND),
@@ -476,7 +496,7 @@ module Aspera
476
496
  # callback in Node (transfer_spec_gen4)
477
497
  def add_ts_tags(transfer_spec:, app_info:)
478
498
  # translate transfer direction to upload/download
479
- transfer_type = Transfer::Spec.action(transfer_spec)
499
+ transfer_type = Transfer::Spec.direction_to_transfer_type(transfer_spec['direction'])
480
500
  # Analytics tags
481
501
  ################
482
502
  transfer_spec.deep_merge!({
@@ -524,14 +544,14 @@ module Aspera
524
544
  ID_AK_ADMIN = 'ASPERA_ACCESS_KEY_ADMIN'
525
545
  # Callback from Plugins::Node
526
546
  # add application specific tags to permissions creation
527
- # @param create_param [Hash] parameters for creating permissions
547
+ # @param perm_data [Hash] parameters for creating permissions
528
548
  # @param app_info [Hash] application information
529
- def permissions_set_create_params(create_param:, app_info:)
549
+ def permissions_set_create_params(perm_data:, app_info:)
530
550
  # workspace shared folder:
531
551
  # access_id = "#{ID_AK_ADMIN}_WS_#{app_info[:workspace_id]}"
532
- default_params = {
552
+ defaults = {
533
553
  # 'access_type' => 'user', # mandatory: user or group
534
- # 'access_id' => access_id, # id of user or group
554
+ # 'access_id' => access_id, # id of user or group or special
535
555
  'tags' => {
536
556
  Transfer::Spec::TAG_RESERVED => {
537
557
  'files' => {
@@ -543,6 +563,7 @@ module Aspera
543
563
  'shared_by_name' => current_user_info['name'],
544
564
  'shared_by_email' => current_user_info['email'],
545
565
  # 'shared_with_name' => access_id,
566
+ # 'share_as' => new_name_for_folder,
546
567
  'access_key' => app_info[:node_info]['access_key'],
547
568
  'node' => app_info[:node_info]['name']
548
569
  }
@@ -550,34 +571,42 @@ module Aspera
550
571
  }
551
572
  }
552
573
  }
553
- create_param.deep_merge!(default_params)
554
- if create_param.key?('with')
555
- contact_info = lookup_by_name(
556
- 'contacts',
557
- create_param['with'],
558
- {'current_workspace_id' => app_info[:workspace_id], 'context' => 'share_folder'})
559
- create_param.delete('with')
560
- create_param['access_type'] = contact_info['source_type']
561
- create_param['access_id'] = contact_info['source_id']
562
- create_param['tags'][Transfer::Spec::TAG_RESERVED]['files']['workspace']['shared_with_name'] = contact_info['email']
574
+ perm_data.deep_merge!(defaults)
575
+ tag_workspace = perm_data['tags'][Transfer::Spec::TAG_RESERVED]['files']['workspace']
576
+ case perm_data['with']
577
+ when NilClass
578
+ when ''
579
+ perm_data['access_type'] = 'user'
580
+ perm_data['access_id'] = "#{ID_AK_ADMIN}_WS_#{app_info[:workspace_id]}"
581
+ tag_workspace['shared_with_name'] = perm_data['access_id']
582
+ else
583
+ entity_info = lookup_by_name('contacts', perm_data['with'], query: {'current_workspace_id' => app_info[:workspace_id]})
584
+ perm_data['access_type'] = entity_info['source_type']
585
+ perm_data['access_id'] = entity_info['source_id']
586
+ tag_workspace['shared_with_name'] = entity_info['email']
587
+ end
588
+ perm_data.delete('with')
589
+ if perm_data.key?('as')
590
+ tag_workspace['share_as'] = perm_data['as']
591
+ perm_data.delete('as')
563
592
  end
564
593
  # optional
565
- app_info[:opt_link_name] = create_param.delete('link_name')
594
+ app_info[:opt_link_name] = perm_data.delete('link_name')
566
595
  end
567
596
 
568
597
  # Callback from Plugins::Node
569
598
  # send shared folder event to AoC
570
- # @param created_data [Hash] response from permission creation
599
+ # @param event_data [Hash] response from permission creation
571
600
  # @param app_info [Hash] hash with app info
572
601
  # @param types [Array] event types
573
- def permissions_send_event(created_data:, app_info:, types: PERMISSIONS_CREATED)
602
+ def permissions_send_event(event_data:, app_info:, types: PERMISSIONS_CREATED)
574
603
  Aspera.assert_type(types, Array)
575
604
  Aspera.assert(!types.empty?)
576
605
  event_creation = {
577
606
  'types' => types,
578
607
  'node_id' => app_info[:node_info]['id'],
579
608
  'workspace_id' => app_info[:workspace_id],
580
- 'data' => created_data
609
+ 'data' => event_data
581
610
  }
582
611
  # (optional). The name of the folder to be displayed to the destination user.
583
612
  # Use it if its value is different from the "share_as" field.
@@ -34,7 +34,7 @@ module Aspera
34
34
  if @all_servers_cache.nil?
35
35
  @all_servers_cache = []
36
36
  CLOUD_NAME.each_key do |name|
37
- read("servers/#{name.to_s.upcase}")[:data].each do |i|
37
+ read("servers/#{name.to_s.upcase}").each do |i|
38
38
  @all_servers_cache.push(i)
39
39
  end
40
40
  end
@@ -19,7 +19,7 @@ module Aspera
19
19
  Aspera.assert(service_credentials.key?(field)){"service_credentials must have a field: #{field}"}
20
20
  end
21
21
  # read endpoints from service provided in service credentials
22
- endpoints = Aspera::Rest.new(base_url: service_credentials['endpoints']).read('')[:data]
22
+ endpoints = Aspera::Rest.new(base_url: service_credentials['endpoints']).read('')
23
23
  Aspera::Log.dump('endpoints', endpoints)
24
24
  endpoint = endpoints.dig('service-endpoints', 'regional', bucket_region, 'public', bucket_region)
25
25
  raise "no such region: #{bucket_region}" if endpoint.nil?