tanker-core 2.30.1.alpha.1 → 2.31.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f965af6640e6603ed8c76ceb3b9af8c02a70ac767e7c4db364df13fca40caf08
4
- data.tar.gz: 2cad737772cb42913f419eb7e619082acef770b3477b65dcc7f35293bffcc41d
3
+ metadata.gz: 984ea83fa186f3da311b1ad3c3ccef985e3aa34c7ad27c2080655531fb921a6f
4
+ data.tar.gz: 3c3c035d1ddf1d57a440f0f5bd337b6490b0944c3854944fd2e8a8ca38689541
5
5
  SHA512:
6
- metadata.gz: 20b15f5fba9ea29c1f94b23be2a8d629e9b965730f9587aa377bdcc81c1631492a5c9821fea634be2938122a05e820dfadec5af0e4097e8152d2359e7989d247
7
- data.tar.gz: 7b168937a393fc0a2d300f06454533cb738048b09aba2e04e41a4b5280cce4362f114e6c92b164f9deb637efee4f14118ae4735051ec5e455c1b908a29c5900d
6
+ metadata.gz: 79c338fbd6262e0dec28f13adc1ed34df6249e70c416e9f4f911567bbd0fdacb3ef7ba751393cd52ff56b1f52d3f15d377c1fc52ea185b8c4974cabbd1ec0b39
7
+ data.tar.gz: 7ae7ab3973281f8555f551b9c3f63bb08b0492f121f9021e05bf242bb38cd1f27b0cbba31d1b4000a17d338382141acbb6ccafc4e34634d651fe8153a260b938
@@ -4,6 +4,8 @@ require 'ffi'
4
4
 
5
5
  module Tanker
6
6
  module CTanker
7
+ extend FFI::Library
8
+
7
9
  class CHttpRequest < FFI::Struct
8
10
  layout :method, :string,
9
11
  :url, :string,
@@ -1,10 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'ffi'
3
4
  require 'ffi/platform'
4
5
 
5
- module Tanker::CTanker
6
- def self.get_path(name)
7
- File.expand_path "../../../vendor/tanker/#{FFI::Platform::OS}-#{FFI::Platform::ARCH}/"\
8
- "#{FFI::Platform::LIBPREFIX}#{name}.#{FFI::Platform::LIBSUFFIX}", __dir__
6
+ module FFI::Library
7
+ # Marking a function blocking releases the global Ruby lock.
8
+ # This is required for every function that could invoke a callback (including log handler) in another thread
9
+ def blocking_attach_function(func, args, returns = nil)
10
+ attach_function func, args, returns, blocking: true
11
+ end
12
+ end
13
+
14
+ module Tanker
15
+ module CTanker
16
+ def self.get_path(name)
17
+ File.expand_path "../../../vendor/tanker/#{FFI::Platform::OS}-#{FFI::Platform::ARCH}/"\
18
+ "#{FFI::Platform::LIBPREFIX}#{name}.#{FFI::Platform::LIBSUFFIX}", __dir__
19
+ end
20
+
21
+ extend FFI::Library
22
+ ffi_lib get_path('ctanker')
9
23
  end
10
24
  end
@@ -1,12 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'ffi'
4
- require_relative 'c_tanker/init'
4
+ require_relative 'c_tanker/c_lib'
5
5
  require_relative 'core/options'
6
6
  require_relative 'sharing_options'
7
7
  require_relative 'encryption_options'
8
8
  require_relative 'verification_options'
9
- require_relative 'c_tanker/c_lib'
10
9
  require_relative 'c_tanker/c_future'
11
10
  require_relative 'c_tanker/c_verification'
12
11
  require_relative 'c_tanker/c_verification_method'
@@ -28,9 +28,9 @@ module Tanker
28
28
  decrypted_size = CTanker.tanker_decrypted_size(inbuf, data.bytesize).get.address
29
29
  outbuf = FFI::MemoryPointer.new(:char, decrypted_size)
30
30
 
31
- CTanker.tanker_decrypt(@ctanker, outbuf, inbuf, data.bytesize).get
31
+ clear_size = CTanker.tanker_decrypt(@ctanker, outbuf, inbuf, data.bytesize).get.address
32
32
 
33
- outbuf.read_string decrypted_size
33
+ outbuf.read_string clear_size
34
34
  end
35
35
 
36
36
  def decrypt_utf8(data)
@@ -92,9 +92,12 @@ module Tanker
92
92
  class Client
93
93
  attr_reader :tanker_http_options
94
94
 
95
- def initialize(sdk_type, sdk_version)
95
+ def initialize(sdk_type, sdk_version, faraday_adapter)
96
96
  @sdk_type = sdk_type
97
97
  @sdk_version = sdk_version
98
+ @conn = Faraday.new do |conn|
99
+ conn.adapter faraday_adapter || Faraday.default_adapter
100
+ end
98
101
 
99
102
  # This could be a proc, but for some reason, ffi gives the wrong type
100
103
  # for crequest if we don't specify it explicitly here
@@ -120,7 +123,9 @@ module Tanker
120
123
  'X-Tanker-SdkType' => @sdk_type,
121
124
  'X-Tanker-SdkVersion' => @sdk_version,
122
125
  'Authorization' => request.authorization,
123
- 'X-Tanker-Instanceid' => request.instance_id
126
+ 'X-Tanker-Instanceid' => request.instance_id,
127
+ # net-http really wants a Content-Type
128
+ 'Content-Type' => 'application/data'
124
129
  }.compact)
125
130
 
126
131
  request.complete_if_not_canceled do
@@ -31,7 +31,7 @@ module Tanker
31
31
  # Do not spam the console of our users.
32
32
  self.class.set_log_handler { |_| } unless self.class.test_and_set_log_handler == 1 # rubocop:disable Lint/EmptyBlock
33
33
 
34
- @http_client = Http::Client.new options.sdk_type, VERSION
34
+ @http_client = Http::Client.new options.sdk_type, VERSION, options.faraday_adapter
35
35
  options[:http_options] = @http_client.tanker_http_options
36
36
 
37
37
  @ctanker = CTanker.tanker_create(options).get
@@ -22,8 +22,9 @@ module Tanker
22
22
  SDK_VERSION = CTanker.new_cstring Core::VERSION
23
23
 
24
24
  attr_reader :sdk_type
25
+ attr_reader :faraday_adapter
25
26
 
26
- def initialize(app_id:, url: nil, sdk_type: SDK_TYPE, persistent_path: nil, cache_path: nil)
27
+ def initialize(app_id:, url: nil, sdk_type: SDK_TYPE, persistent_path: nil, cache_path: nil, faraday_adapter: nil) # rubocop:disable Metrics/ParameterLists
27
28
  super()
28
29
 
29
30
  # NOTE: Instance variables are required to keep the CStrings alive
@@ -33,6 +34,7 @@ module Tanker
33
34
  @c_cache_path = CTanker.new_cstring cache_path
34
35
  @sdk_type = sdk_type
35
36
  @c_sdk_type = CTanker.new_cstring sdk_type
37
+ @faraday_adapter = faraday_adapter
36
38
 
37
39
  self[:version] = 4
38
40
  self[:app_id] = @c_app_id
@@ -41,7 +41,7 @@ module Tanker
41
41
 
42
42
  method_base_addr = method_list_ptr.read_pointer
43
43
  method_list = count.times.map do |i|
44
- method_ptr = method_base_addr + i * CTanker::CVerificationMethod.size
44
+ method_ptr = method_base_addr + (i * CTanker::CVerificationMethod.size)
45
45
  CTanker::CVerificationMethod.new(method_ptr).to_verification_method
46
46
  end
47
47
  CTanker.tanker_free_verification_method_list method_list_ptr
@@ -58,7 +58,7 @@ module Tanker
58
58
 
59
59
  method_base_addr = device_list_ptr.read_pointer
60
60
  device_info_list = count.times.map do |i|
61
- method_ptr = method_base_addr + i * CTanker::CDeviceInfo.size
61
+ method_ptr = method_base_addr + (i * CTanker::CDeviceInfo.size)
62
62
  CTanker::CDeviceInfo.new(method_ptr)
63
63
  end
64
64
  CTanker.tanker_free_device_list device_list_ptr
@@ -76,7 +76,7 @@ module Tanker
76
76
  CTanker.tanker_create_oidc_nonce(@ctanker).get_string
77
77
  end
78
78
 
79
- def _oidc_test_nonce=(nonce)
79
+ def oidc_test_nonce=(nonce)
80
80
  CTanker.tanker_set_oidc_test_nonce(@ctanker, nonce).get
81
81
  end
82
82
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Tanker
4
4
  class Core
5
- VERSION = '2.30.1.alpha.1'
5
+ VERSION = '2.31.0'
6
6
 
7
7
  def self.native_version
8
8
  CTanker.tanker_version_string
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tanker-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.30.1.alpha.1
4
+ version: 2.31.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tanker team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-28 00:00:00.000000000 Z
11
+ date: 2022-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -134,11 +134,6 @@ files:
134
134
  - LICENSE
135
135
  - README.rst
136
136
  - lib/tanker-core.rb
137
- - lib/tanker/admin.rb
138
- - lib/tanker/admin/app.rb
139
- - lib/tanker/admin/c_admin.rb
140
- - lib/tanker/admin/c_admin/c_app_descriptor.rb
141
- - lib/tanker/admin/c_admin/c_app_update_options.rb
142
137
  - lib/tanker/c_tanker.rb
143
138
  - lib/tanker/c_tanker/c_datastore.rb
144
139
  - lib/tanker/c_tanker/c_device_info.rb
@@ -150,7 +145,6 @@ files:
150
145
  - lib/tanker/c_tanker/c_tanker_error.rb
151
146
  - lib/tanker/c_tanker/c_verification.rb
152
147
  - lib/tanker/c_tanker/c_verification_method.rb
153
- - lib/tanker/c_tanker/init.rb
154
148
  - lib/tanker/core.rb
155
149
  - lib/tanker/core/attach_result.rb
156
150
  - lib/tanker/core/encryption.rb
@@ -179,6 +173,7 @@ licenses:
179
173
  metadata:
180
174
  homepage_uri: https://tanker.io
181
175
  source_code_uri: https://github.com/TankerHQ/sdk-ruby
176
+ rubygems_mfa_required: 'true'
182
177
  post_install_message:
183
178
  rdoc_options: []
184
179
  require_paths:
@@ -190,9 +185,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
190
185
  version: 2.6.0
191
186
  required_rubygems_version: !ruby/object:Gem::Requirement
192
187
  requirements:
193
- - - ">"
188
+ - - ">="
194
189
  - !ruby/object:Gem::Version
195
- version: 1.3.1
190
+ version: '0'
196
191
  requirements: []
197
192
  rubygems_version: 3.3.7
198
193
  signing_key:
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Tanker
4
- class Admin
5
- # Information from the Admin SDK concerning a Tanker application
6
- class App
7
- attr_reader :url, :id, :auth_token, :private_key
8
-
9
- def initialize(trustchain_url:, id:, auth_token:, private_key:)
10
- @trustchain_url = trustchain_url
11
- @id = id
12
- @auth_token = auth_token
13
- @private_key = private_key
14
- end
15
-
16
- def get_email_verification_code(email)
17
- CAdmin.tanker_get_email_verification_code(@trustchain_url, @id, @auth_token, email).get_string
18
- end
19
-
20
- def get_sms_verification_code(phone_number)
21
- CAdmin.tanker_get_sms_verification_code(@trustchain_url, @id, @auth_token, phone_number).get_string
22
- end
23
- end
24
- end
25
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'ffi'
4
-
5
- module Tanker
6
- class Admin
7
- class CAdmin::CAppDescriptor < FFI::ManagedStruct
8
- layout :name, :string,
9
- :id, :string,
10
- :auth_token, :string,
11
- :private_key, :string,
12
- :public_key, :string
13
-
14
- def get_email_verification_code(email)
15
- CTanker.tanker_get_email_verification_code(email).get
16
- end
17
-
18
- def get_sms_verification_code(phone_number)
19
- CTanker.tanker_get_sms_verification_code(phone_number).get
20
- end
21
-
22
- def self.release(ptr)
23
- CAdmin.tanker_admin_app_descriptor_free ptr
24
- end
25
- end
26
- end
27
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'ffi'
4
- require 'tanker/c_tanker/c_string'
5
-
6
- module Tanker
7
- class Admin
8
- class AppUpdateOptions < FFI::Struct
9
- def initialize(oidc_client_id: nil, oidc_client_provider: nil,
10
- preverified_verification: nil, user_enrollment: nil)
11
- super()
12
- self[:version] = 4
13
- unless oidc_client_id.nil?
14
- @oidc_client_id = CTanker.new_cstring oidc_client_id
15
- self[:oidc_client_id] = @oidc_client_id
16
- end
17
- unless oidc_client_provider.nil?
18
- @oidc_client_provider = CTanker.new_cstring oidc_client_provider
19
- self[:oidc_client_provider] = @oidc_client_provider
20
- end
21
- unless preverified_verification.nil?
22
- boolptr = FFI::MemoryPointer.new(:bool, 1)
23
- boolptr.put(:bool, 0, preverified_verification)
24
- @preverified_verification = boolptr
25
- self[:preverified_verification] = @preverified_verification
26
- end
27
- unless user_enrollment.nil? # rubocop:disable Style/GuardClause no different than the other parameters
28
- boolptr = FFI::MemoryPointer.new(:bool, 1)
29
- boolptr.put(:bool, 0, user_enrollment)
30
- @user_enrollment = boolptr
31
- self[:user_enrollment] = @user_enrollment
32
- end
33
- end
34
-
35
- layout :version, :uint8,
36
- :oidc_client_id, :pointer,
37
- :oidc_client_provider, :pointer,
38
- :preverified_verification, :pointer,
39
- :user_enrollment, :pointer
40
- end
41
- end
42
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'ffi'
4
- require 'tanker/c_tanker/c_future'
5
- require 'tanker/c_tanker/c_lib'
6
- require_relative 'c_admin/c_app_update_options'
7
-
8
- module Tanker
9
- class Admin
10
- module CAdmin
11
- extend FFI::Library
12
-
13
- ffi_lib Tanker::CTanker.get_path('tanker_admin-c')
14
- typedef :pointer, :admin_pointer
15
-
16
- # NOTE: We use those CFutures with the tanker_future_* functions exposed by CTanker,
17
- # this is safe because we only do simple synchronous blocking calls, without using tanker_future_then.
18
-
19
- attach_function :tanker_admin_connect, [:string, :string, :string], CTanker::CFuture
20
- attach_function :tanker_admin_create_app, [:admin_pointer, :string], CTanker::CFuture
21
- attach_function :tanker_admin_delete_app, [:admin_pointer, :string], CTanker::CFuture
22
- attach_function :tanker_admin_destroy, [:admin_pointer], CTanker::CFuture
23
- attach_function :tanker_admin_app_descriptor_free, [:pointer], :void
24
- attach_function :tanker_admin_app_update, [:admin_pointer, :string,
25
- Tanker::Admin::AppUpdateOptions], CTanker::CFuture
26
- attach_function :tanker_get_email_verification_code, [:string, :string, :string, :string], CTanker::CFuture
27
- attach_function :tanker_get_sms_verification_code, [:string, :string, :string, :string], CTanker::CFuture
28
- end
29
-
30
- private_constant :CAdmin
31
- end
32
- end
data/lib/tanker/admin.rb DELETED
@@ -1,59 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'ffi'
4
- require_relative 'admin/c_admin'
5
- require_relative 'admin/c_admin/c_app_descriptor'
6
- require_relative 'admin/c_admin/c_app_update_options'
7
- require_relative 'admin/app'
8
-
9
- module Tanker
10
- class Admin
11
- def initialize(app_management_token:, app_management_url:, api_url:, environment_name:, trustchain_url:)
12
- @app_management_token = app_management_token
13
- @app_management_url = app_management_url
14
- @api_url = api_url
15
- @environment_name = environment_name
16
- @trustchain_url = trustchain_url
17
- end
18
-
19
- # Authenticate to the Tanker admin server API
20
- # This must be called before doing any other operation
21
- def connect
22
- @cadmin = CAdmin.tanker_admin_connect(@app_management_url, @app_management_token, @environment_name).get
23
- cadmin_addr = @cadmin.address
24
- ObjectSpace.define_finalizer(@cadmin) do |_|
25
- CAdmin.tanker_admin_destroy(FFI::Pointer.new(:void, cadmin_addr)).get
26
- end
27
- end
28
-
29
- def create_app(name)
30
- assert_connected
31
- descriptor_ptr = CAdmin.tanker_admin_create_app(@cadmin, name).get
32
- descriptor = CAdmin::CAppDescriptor.new(descriptor_ptr)
33
- App.new(
34
- trustchain_url: @trustchain_url,
35
- id: descriptor[:id],
36
- auth_token: descriptor[:auth_token],
37
- private_key: descriptor[:private_key]
38
- )
39
- end
40
-
41
- def delete_app(app_id)
42
- assert_connected
43
- CAdmin.tanker_admin_delete_app(@cadmin, app_id).get
44
- end
45
-
46
- def app_update(app_id, app_update_options)
47
- assert_connected
48
- CAdmin.tanker_admin_app_update(@cadmin, app_id, app_update_options).get
49
- end
50
-
51
- private
52
-
53
- def assert_connected
54
- raise 'You need to connect() before using the admin API!' if @cadmin.nil?
55
- end
56
- end
57
-
58
- private_constant :Admin
59
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'ffi'
4
-
5
- module FFI::Library
6
- # Marking a function blocking releases the global Ruby lock.
7
- # This is required for every function that could invoke a callback (including log handler) in another thread
8
- def blocking_attach_function(func, args, returns = nil)
9
- attach_function func, args, returns, blocking: true
10
- end
11
- end
12
-
13
- module Tanker
14
- module CTanker
15
- extend FFI::Library
16
- ffi_lib get_path('ctanker')
17
- end
18
-
19
- private_constant :CTanker
20
- end