tanker-core 2.30.0.beta.3 → 2.30.1.alpha.2

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: c7b411d3983ff6575a25966916a8e83783ab8f35672d51932603af9b25a02f7f
4
- data.tar.gz: fd5a4a7e4139d149ea5cd5bca2714fe18403cba73099e2e07a6ef69ffa558207
3
+ metadata.gz: 176eda680bd6e4a05f0e56fbfb64a7a159a979a69a005e96e9426d4127d13153
4
+ data.tar.gz: 98f787f9ba98a4967ea87e3f6de15b31a58320b500ddaa445c490b6106482fc6
5
5
  SHA512:
6
- metadata.gz: 440ca92e94778f4f4d5cff0c39721555242b9cd902f72a704cfe5b0748cdf08fef5e6667c07396fc9a7bfdf2fb4cec8e3e0bd2d1db14224bdb25b86a7b5e699d
7
- data.tar.gz: c2b930a8993b6563f58254a3cb47c6f445e7b1fbfa575c0a922628ba980b83867e62cfa95f9c7ad45b56e3529e7b5b7bb6be71a1e3a7a8c741b6c82742b9d023
6
+ metadata.gz: 9a77ea22e2dc88803b03cd5650083a208002efed8cd7b372a9a0c6c368830778eb5493ce1152a95e98afe0bf9fa60f708c9a24e56e6d979fb8670c688b5d7682
7
+ data.tar.gz: 8af984409782e7319dbe6e180bb43bbe770a954dfdaecb5ed31a16fc3e0ea4d94f2e2a8a40fab61a8f5c651d8f93beb7c60984efa39b033a4db780c83c351857
@@ -4,21 +4,21 @@ module Tanker
4
4
  class Admin
5
5
  # Information from the Admin SDK concerning a Tanker application
6
6
  class App
7
- attr_reader :url, :id, :auth_token, :private_key
7
+ attr_reader :admin, :id, :auth_token, :secret
8
8
 
9
- def initialize(trustchain_url:, id:, auth_token:, private_key:)
10
- @trustchain_url = trustchain_url
9
+ def initialize(admin:, id:, auth_token:, secret:)
10
+ @admin = admin
11
11
  @id = id
12
12
  @auth_token = auth_token
13
- @private_key = private_key
13
+ @secret = secret
14
14
  end
15
15
 
16
16
  def get_email_verification_code(email)
17
- CAdmin.tanker_get_email_verification_code(@trustchain_url, @id, @auth_token, email).get_string
17
+ @admin.get_email_verification_code(@id, @auth_token, email)
18
18
  end
19
19
 
20
20
  def get_sms_verification_code(phone_number)
21
- CAdmin.tanker_get_sms_verification_code(@trustchain_url, @id, @auth_token, phone_number).get_string
21
+ @admin.get_sms_verification_code(@id, @auth_token, phone_number)
22
22
  end
23
23
  end
24
24
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tanker
4
+ class Admin
5
+ class AppUpdateOptions
6
+ attr_accessor :oidc_client_id, :oidc_client_provider, :preverified_verification, :user_enrollment
7
+
8
+ def initialize(oidc_client_id: nil, oidc_client_provider: nil,
9
+ preverified_verification: nil, user_enrollment: nil)
10
+ @oidc_client_id = oidc_client_id
11
+ @oidc_client_provider = oidc_client_provider
12
+ @preverified_verification = preverified_verification
13
+ @user_enrollment = user_enrollment
14
+ end
15
+
16
+ def as_json(_options = {})
17
+ {
18
+ oidc_client_id: @oidc_client_id,
19
+ oidc_provider: @oidc_client_provider,
20
+ preverified_verification_enabled: @preverified_verification,
21
+ enroll_users_enabled: @user_enrollment
22
+ }
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'faraday'
4
+ require 'faraday_middleware'
5
+
6
+ require_relative 'app'
7
+ require_relative 'app_update_options'
8
+
9
+ module Tanker
10
+ class Admin
11
+ class Client
12
+ def self.init_conn(conn)
13
+ conn.request :json
14
+ conn.response :raise_error
15
+ ## in case of verbosity need
16
+ # require 'logger'
17
+ # conn.response :logger, ::Logger.new(STDOUT), bodies: true
18
+ conn.response :json
19
+ conn.adapter :net_http
20
+ conn
21
+ end
22
+
23
+ def initialize(app_management_token:, app_management_url:, api_url:, environment_name:, trustchain_url:)
24
+ @app_management_token = app_management_token
25
+ @app_management_url = app_management_url
26
+ @api_url = api_url
27
+ @environment_name = environment_name
28
+ @trustchain_url = trustchain_url
29
+ @conn = Faraday.new(url: "#{@app_management_url}/v1/apps") do |conn|
30
+ conn.request :authorization, 'Bearer', @app_management_token
31
+ self.class.init_conn(conn)
32
+ end
33
+ end
34
+
35
+ def create_app(name)
36
+ response = @conn.post do |req|
37
+ req.body = { name: name, environment_name: @environment_name }
38
+ req.headers['Accept'] = 'application/json'
39
+ end
40
+ App.new(
41
+ admin: self,
42
+ id: response.body['app']['id'],
43
+ auth_token: response.body['app']['auth_token'],
44
+ secret: response.body['app']['secret']
45
+ )
46
+ end
47
+
48
+ def delete_app(app_id)
49
+ capp_id = Faraday::Utils.escape(app_id)
50
+ @conn.delete(capp_id)
51
+ end
52
+
53
+ def app_update(app_id, app_update_options)
54
+ capp_id = Faraday::Utils.escape(app_id)
55
+ response = @conn.patch(capp_id) do |req|
56
+ req.body = app_update_options.as_json
57
+ end
58
+ response.body
59
+ end
60
+
61
+ def get_email_verification_code(app_id, auth_token, email)
62
+ conn = Faraday.new(url: @api_url) do |f|
63
+ self.class.init_conn(f)
64
+ end
65
+ response = conn.post('/verification/email/code', { email: email, app_id: app_id, auth_token: auth_token })
66
+ response.body['verification_code']
67
+ end
68
+
69
+ def get_sms_verification_code(app_id, auth_token, phone_number)
70
+ conn = Faraday.new(url: @api_url) do |f|
71
+ self.class.init_conn(f)
72
+ end
73
+ response = conn.post('/verification/sms/code',
74
+ { phone_number: phone_number, app_id: app_id, auth_token: auth_token })
75
+ response.body['verification_code']
76
+ end
77
+ end
78
+ end
79
+ end
data/lib/tanker/admin.rb CHANGED
@@ -1,59 +1,5 @@
1
1
  # frozen_string_literal: true
2
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'
3
+ require_relative 'admin/client'
7
4
  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
5
+ require_relative 'admin/app_update_options'
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'ffi'
4
- require 'tanker/core/verification'
5
- require 'tanker/c_tanker/c_string'
6
4
 
7
5
  module Tanker
8
6
  module CTanker
@@ -15,11 +13,5 @@ module Tanker
15
13
  :put_cache_values, :pointer,
16
14
  :find_cache_values, :pointer
17
15
  end
18
-
19
- class CHttpOptions < FFI::Struct
20
- layout :send_request, :pointer,
21
- :cancel_request, :pointer,
22
- :data, :pointer
23
- end
24
16
  end
25
17
  end
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ffi'
4
+
5
+ module Tanker
6
+ module CTanker
7
+ extend FFI::Library
8
+
9
+ class CHttpRequest < FFI::Struct
10
+ layout :method, :string,
11
+ :url, :string,
12
+ :instance_id, :string,
13
+ :authorization, :string,
14
+ :body, :pointer,
15
+ :body_size, :int32
16
+ end
17
+
18
+ class CHttpResponse < FFI::Struct
19
+ def self.new_ok(status_code:, content_type:, body:)
20
+ new nil, status_code, content_type, body
21
+ end
22
+
23
+ def self.new_error(msg)
24
+ new msg, nil, nil, nil
25
+ end
26
+
27
+ def initialize(error_msg, status_code, content_type, body)
28
+ super()
29
+
30
+ if error_msg
31
+ @error_msg = CTanker.new_cstring(error_msg)
32
+ self[:error_msg] = @error_msg
33
+ else
34
+ @content_type = CTanker.new_cstring content_type
35
+ @body = FFI::MemoryPointer.from_string(body)
36
+
37
+ self[:error_msg] = nil
38
+ self[:content_type] = @content_type
39
+ self[:body] = @body
40
+ self[:body_size] = body.bytesize
41
+ self[:status_code] = status_code
42
+ end
43
+ end
44
+
45
+ layout :error_msg, :pointer,
46
+ :content_type, :pointer,
47
+ :body, :pointer,
48
+ :body_size, :int64,
49
+ :status_code, :int32
50
+ end
51
+
52
+ typedef :pointer, :http_request_handle
53
+
54
+ callback :http_send_request, [CHttpRequest, :pointer], :http_request_handle
55
+ callback :http_cancel_request, [CHttpRequest, :http_request_handle, :pointer], :void
56
+
57
+ class CHttpOptions < FFI::Struct
58
+ layout :send_request, :http_send_request,
59
+ :cancel_request, :http_cancel_request,
60
+ :data, :pointer
61
+
62
+ def initialize(send_request, cancel_request)
63
+ super()
64
+
65
+ self[:send_request] = send_request
66
+ self[:cancel_request] = cancel_request
67
+ self[:data] = nil
68
+ end
69
+ end
70
+ end
71
+ end
@@ -99,6 +99,8 @@ module Tanker
99
99
 
100
100
  blocking_attach_function :tanker_set_log_handler, [:log_handler_callback], :void
101
101
 
102
+ blocking_attach_function :tanker_http_handle_response, [CHttpRequest, CHttpResponse], :void
103
+
102
104
  blocking_attach_function :tanker_prehash_password, [:string], CFuture
103
105
 
104
106
  blocking_attach_function :tanker_free_buffer, [:pointer], :void
@@ -0,0 +1,155 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'faraday'
4
+
5
+ module Tanker
6
+ module Http
7
+ class HttpRequest
8
+ @@mutex = Mutex.new # rubocop:disable Style/ClassVars I have no idea why you don't like class vars
9
+ @@current_request_id = 0 # rubocop:disable Style/ClassVars
10
+ # Hash(id => request)
11
+ @@running_requests = {} # rubocop:disable Style/ClassVars
12
+
13
+ attr_reader :id
14
+ attr_reader :method
15
+ attr_reader :url
16
+ attr_reader :instance_id
17
+ attr_reader :authorization
18
+ attr_reader :body
19
+ attr_reader :crequest
20
+
21
+ def self.method_str_to_symbol(method)
22
+ case method
23
+ when 'GET' then :get
24
+ when 'POST' then :post
25
+ when 'PATCH' then :patch
26
+ when 'PUT' then :put
27
+ when 'DELETE' then :delete
28
+ else raise "unknown HTTP method #{method}"
29
+ end
30
+ end
31
+
32
+ def initialize(crequest:)
33
+ @@mutex.synchronize do
34
+ @@current_request_id += 1 # rubocop:disable Style/ClassVars
35
+ @id = @@current_request_id
36
+ @@running_requests[@id] = self
37
+ end
38
+
39
+ @method = self.class.method_str_to_symbol crequest[:method]
40
+ @url = crequest[:url]
41
+ @instance_id = crequest[:instance_id]
42
+ @authorization = crequest[:authorization]
43
+ @body = crequest[:body].read_string_length(crequest[:body_size])
44
+
45
+ # Keep the crequest because we need its address to answer to Tanker
46
+ @crequest = crequest
47
+ end
48
+
49
+ # Since Ruby's HTTP libraries are not asynchronous, they do not support cancelation either.
50
+ # When a request is canceled, we let it run until the end, and then we discard its result.
51
+ def self.cancel(id)
52
+ @@mutex.synchronize do
53
+ @@running_requests.delete id
54
+ end
55
+ end
56
+
57
+ def complete_if_not_canceled(&block)
58
+ @@mutex.synchronize do
59
+ unless @@running_requests.delete @id
60
+ # Request has been canceled, don't call Tanker back
61
+ return
62
+ end
63
+
64
+ block.call
65
+ end
66
+ end
67
+ end
68
+
69
+ module ThreadPool
70
+ THREAD_POOL_SIZE = 4
71
+
72
+ def self.thread_loop
73
+ loop do
74
+ work = @queue.pop
75
+ work.call
76
+ end
77
+ end
78
+
79
+ def self.push(proc)
80
+ @queue << proc
81
+ end
82
+
83
+ # Queue is a concurrent queue in Ruby
84
+ @queue = Queue.new
85
+ @http_thread_pool = THREAD_POOL_SIZE.times do
86
+ Thread.new do
87
+ thread_loop
88
+ end
89
+ end
90
+ end
91
+
92
+ class Client
93
+ attr_reader :tanker_http_options
94
+
95
+ def initialize(sdk_type, sdk_version)
96
+ @sdk_type = sdk_type
97
+ @sdk_version = sdk_version
98
+
99
+ # This could be a proc, but for some reason, ffi gives the wrong type
100
+ # for crequest if we don't specify it explicitly here
101
+ @c_send_request = FFI::Function.new(:pointer, [CTanker::CHttpRequest.by_ref, :pointer]) do |crequest, cdata|
102
+ next send_request crequest, cdata
103
+ rescue Exception => e # rubocop:disable Lint/RescueException I do want to rescue all exceptions
104
+ cresponse = CTanker::CHttpResponse.new_error e.message
105
+ CTanker.tanker_http_handle_response(crequest, cresponse)
106
+ end
107
+ @c_cancel_request = proc do |crequest, request_id, cdata|
108
+ cancel_request crequest, request_id, cdata
109
+ rescue Exception => e # rubocop:disable Lint/RescueException I do want to rescue all exceptions
110
+ # This is not recoverable and won't be logged by FFI, let's do our best and log it here just before we crash
111
+ puts "fatal error when canceling HTTP request:\n#{e.full_message}"
112
+ raise
113
+ end
114
+
115
+ @tanker_http_options = CTanker::CHttpOptions.new @c_send_request, @c_cancel_request
116
+ end
117
+
118
+ def process_request(request)
119
+ fresponse = Faraday.run_request(request.method, request.url, request.body, {
120
+ 'X-Tanker-SdkType' => @sdk_type,
121
+ 'X-Tanker-SdkVersion' => @sdk_version,
122
+ 'Authorization' => request.authorization,
123
+ 'X-Tanker-Instanceid' => request.instance_id
124
+ }.compact)
125
+
126
+ request.complete_if_not_canceled do
127
+ cresponse = CTanker::CHttpResponse.new_ok status_code: fresponse.status,
128
+ content_type: fresponse.headers['content-type'],
129
+ body: fresponse.body
130
+ CTanker.tanker_http_handle_response(request.crequest, cresponse)
131
+ end
132
+ rescue Exception => e # rubocop:disable Lint/RescueException I do want to rescue all exceptions
133
+ # NOTE: when debugging, you might want to uncomment this to print a full backtrace
134
+ # puts "HTTP request error:\n#{e.full_message}"
135
+ cresponse = CTanker::CHttpResponse.new_error e.message
136
+ CTanker.tanker_http_handle_response(request.crequest, cresponse)
137
+ end
138
+
139
+ def send_request(crequest, _cdata)
140
+ request = HttpRequest.new crequest: crequest
141
+ ThreadPool.push(proc do
142
+ process_request request
143
+ end)
144
+ FFI::Pointer.new :void, request.id
145
+ end
146
+
147
+ def cancel_request(_crequest, prequest_id, _cdata)
148
+ request_id = prequest_id.to_i
149
+ HttpRequest.cancel(request_id)
150
+ end
151
+ end
152
+ end
153
+
154
+ private_constant :Http
155
+ end
@@ -31,6 +31,9 @@ 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
35
+ options[:http_options] = @http_client.tanker_http_options
36
+
34
37
  @ctanker = CTanker.tanker_create(options).get
35
38
  @freed = false
36
39
  ctanker_addr = @ctanker.address
@@ -2,7 +2,8 @@
2
2
 
3
3
  require 'ffi'
4
4
  require 'tanker/c_tanker/c_string'
5
- require 'tanker/c_tanker/c_backends'
5
+ require 'tanker/c_tanker/c_datastore'
6
+ require 'tanker/c_tanker/c_http'
6
7
 
7
8
  module Tanker
8
9
  # Options that can be given when opening a Tanker session
@@ -20,22 +21,25 @@ module Tanker
20
21
  SDK_TYPE = 'client-ruby'
21
22
  SDK_VERSION = CTanker.new_cstring Core::VERSION
22
23
 
24
+ attr_reader :sdk_type
25
+
23
26
  def initialize(app_id:, url: nil, sdk_type: SDK_TYPE, persistent_path: nil, cache_path: nil)
24
27
  super()
25
28
 
26
29
  # NOTE: Instance variables are required to keep the CStrings alive
27
- @app_id = CTanker.new_cstring app_id
28
- @url = CTanker.new_cstring url
29
- @persistent_path = CTanker.new_cstring persistent_path
30
- @cache_path = CTanker.new_cstring cache_path
31
- @sdk_type = CTanker.new_cstring sdk_type
30
+ @c_app_id = CTanker.new_cstring app_id
31
+ @c_url = CTanker.new_cstring url
32
+ @c_persistent_path = CTanker.new_cstring persistent_path
33
+ @c_cache_path = CTanker.new_cstring cache_path
34
+ @sdk_type = sdk_type
35
+ @c_sdk_type = CTanker.new_cstring sdk_type
32
36
 
33
37
  self[:version] = 4
34
- self[:app_id] = @app_id
35
- self[:url] = @url
36
- self[:persistent_path] = @persistent_path
37
- self[:cache_path] = @cache_path
38
- self[:sdk_type] = @sdk_type
38
+ self[:app_id] = @c_app_id
39
+ self[:url] = @c_url
40
+ self[:persistent_path] = @c_persistent_path
41
+ self[:cache_path] = @c_cache_path
42
+ self[:sdk_type] = @c_sdk_type
39
43
  self[:sdk_version] = SDK_VERSION
40
44
  end
41
45
  end
@@ -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
@@ -166,7 +166,7 @@ module Tanker
166
166
  buffer.put_bytes(0, rbbuf)
167
167
  CTanker.tanker_stream_read_operation_finish(operation, rbbuf.size)
168
168
  end
169
- rescue StandardError => e
169
+ rescue Exception => e # rubocop:disable Lint/RescueException I do want to rescue all exceptions
170
170
  @mutex.synchronize do
171
171
  return if @closed
172
172
 
@@ -227,7 +227,7 @@ module Tanker
227
227
 
228
228
  @write.write(ffibuf.read_string(nb_read))
229
229
  end
230
- rescue StandardError => e
230
+ rescue Exception => e # rubocop:disable Lint/RescueException I do want to rescue all exceptions
231
231
  @error = @substream.error || e
232
232
  ensure
233
233
  @write.close
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Tanker
4
4
  class Core
5
- VERSION = '2.30.0.beta.3'
5
+ VERSION = '2.30.1.alpha.2'
6
6
 
7
7
  def self.native_version
8
8
  CTanker.tanker_version_string
data/lib/tanker/core.rb CHANGED
@@ -5,6 +5,7 @@ require 'set'
5
5
  require_relative 'core/version'
6
6
  require_relative 'c_tanker'
7
7
  require_relative 'error'
8
+ require_relative 'core/http'
8
9
  require_relative 'core/session'
9
10
  require_relative 'core/verification'
10
11
  require_relative 'core/encryption'
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.0.beta.3
4
+ version: 2.30.1.alpha.2
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-05-02 00:00:00.000000000 Z
11
+ date: 2022-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -136,13 +136,13 @@ files:
136
136
  - lib/tanker-core.rb
137
137
  - lib/tanker/admin.rb
138
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
139
+ - lib/tanker/admin/app_update_options.rb
140
+ - lib/tanker/admin/client.rb
142
141
  - lib/tanker/c_tanker.rb
143
- - lib/tanker/c_tanker/c_backends.rb
142
+ - lib/tanker/c_tanker/c_datastore.rb
144
143
  - lib/tanker/c_tanker/c_device_info.rb
145
144
  - lib/tanker/c_tanker/c_future.rb
145
+ - lib/tanker/c_tanker/c_http.rb
146
146
  - lib/tanker/c_tanker/c_lib.rb
147
147
  - lib/tanker/c_tanker/c_log_record.rb
148
148
  - lib/tanker/c_tanker/c_string.rb
@@ -154,6 +154,7 @@ files:
154
154
  - lib/tanker/core/encryption.rb
155
155
  - lib/tanker/core/encryption_session.rb
156
156
  - lib/tanker/core/group.rb
157
+ - lib/tanker/core/http.rb
157
158
  - lib/tanker/core/init.rb
158
159
  - lib/tanker/core/log_record.rb
159
160
  - lib/tanker/core/options.rb
@@ -176,6 +177,7 @@ licenses:
176
177
  metadata:
177
178
  homepage_uri: https://tanker.io
178
179
  source_code_uri: https://github.com/TankerHQ/sdk-ruby
180
+ rubygems_mfa_required: 'true'
179
181
  post_install_message:
180
182
  rdoc_options: []
181
183
  require_paths:
@@ -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