tanker-core 2.30.1.alpha.1 → 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 +4 -4
- data/lib/tanker/admin/app.rb +6 -6
- data/lib/tanker/admin/app_update_options.rb +26 -0
- data/lib/tanker/admin/client.rb +79 -0
- data/lib/tanker/admin.rb +2 -56
- data/lib/tanker/c_tanker/c_http.rb +2 -0
- data/lib/tanker/c_tanker.rb +11 -1
- data/lib/tanker/core/encryption.rb +2 -2
- data/lib/tanker/core/session.rb +3 -3
- data/lib/tanker/core/version.rb +1 -1
- data/vendor/tanker/darwin-aarch64/libctanker.dylib +0 -0
- data/vendor/tanker/darwin-x86_64/libctanker.dylib +0 -0
- data/vendor/tanker/linux-x86_64/libctanker.so +0 -0
- metadata +5 -6
- data/lib/tanker/admin/c_admin/c_app_descriptor.rb +0 -27
- data/lib/tanker/admin/c_admin/c_app_update_options.rb +0 -42
- data/lib/tanker/admin/c_admin.rb +0 -32
- data/lib/tanker/c_tanker/init.rb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 176eda680bd6e4a05f0e56fbfb64a7a159a979a69a005e96e9426d4127d13153
|
4
|
+
data.tar.gz: 98f787f9ba98a4967ea87e3f6de15b31a58320b500ddaa445c490b6106482fc6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a77ea22e2dc88803b03cd5650083a208002efed8cd7b372a9a0c6c368830778eb5493ce1152a95e98afe0bf9fa60f708c9a24e56e6d979fb8670c688b5d7682
|
7
|
+
data.tar.gz: 8af984409782e7319dbe6e180bb43bbe770a954dfdaecb5ed31a16fc3e0ea4d94f2e2a8a40fab61a8f5c651d8f93beb7c60984efa39b033a4db780c83c351857
|
data/lib/tanker/admin/app.rb
CHANGED
@@ -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 :
|
7
|
+
attr_reader :admin, :id, :auth_token, :secret
|
8
8
|
|
9
|
-
def initialize(
|
10
|
-
@
|
9
|
+
def initialize(admin:, id:, auth_token:, secret:)
|
10
|
+
@admin = admin
|
11
11
|
@id = id
|
12
12
|
@auth_token = auth_token
|
13
|
-
@
|
13
|
+
@secret = secret
|
14
14
|
end
|
15
15
|
|
16
16
|
def get_email_verification_code(email)
|
17
|
-
|
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
|
-
|
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
|
-
|
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'
|
data/lib/tanker/c_tanker.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'ffi'
|
4
|
-
require_relative 'c_tanker/init'
|
5
4
|
require_relative 'core/options'
|
6
5
|
require_relative 'sharing_options'
|
7
6
|
require_relative 'encryption_options'
|
@@ -13,8 +12,19 @@ require_relative 'c_tanker/c_verification_method'
|
|
13
12
|
require_relative 'c_tanker/c_log_record'
|
14
13
|
require_relative 'c_tanker/c_device_info'
|
15
14
|
|
15
|
+
module FFI::Library
|
16
|
+
# Marking a function blocking releases the global Ruby lock.
|
17
|
+
# This is required for every function that could invoke a callback (including log handler) in another thread
|
18
|
+
def blocking_attach_function(func, args, returns = nil)
|
19
|
+
attach_function func, args, returns, blocking: true
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
16
23
|
module Tanker
|
17
24
|
module CTanker
|
25
|
+
extend FFI::Library
|
26
|
+
ffi_lib get_path('ctanker')
|
27
|
+
|
18
28
|
typedef :pointer, :session_pointer
|
19
29
|
typedef :pointer, :enc_sess_pointer
|
20
30
|
typedef :pointer, :stream_pointer
|
@@ -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
|
33
|
+
outbuf.read_string clear_size
|
34
34
|
end
|
35
35
|
|
36
36
|
def decrypt_utf8(data)
|
data/lib/tanker/core/session.rb
CHANGED
@@ -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
|
79
|
+
def oidc_test_nonce=(nonce)
|
80
80
|
CTanker.tanker_set_oidc_test_nonce(@ctanker, nonce).get
|
81
81
|
end
|
82
82
|
|
data/lib/tanker/core/version.rb
CHANGED
Binary file
|
Binary file
|
Binary file
|
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.
|
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-
|
11
|
+
date: 2022-05-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -136,9 +136,8 @@ files:
|
|
136
136
|
- lib/tanker-core.rb
|
137
137
|
- lib/tanker/admin.rb
|
138
138
|
- lib/tanker/admin/app.rb
|
139
|
-
- lib/tanker/admin/
|
140
|
-
- lib/tanker/admin/
|
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
142
|
- lib/tanker/c_tanker/c_datastore.rb
|
144
143
|
- lib/tanker/c_tanker/c_device_info.rb
|
@@ -150,7 +149,6 @@ files:
|
|
150
149
|
- lib/tanker/c_tanker/c_tanker_error.rb
|
151
150
|
- lib/tanker/c_tanker/c_verification.rb
|
152
151
|
- lib/tanker/c_tanker/c_verification_method.rb
|
153
|
-
- lib/tanker/c_tanker/init.rb
|
154
152
|
- lib/tanker/core.rb
|
155
153
|
- lib/tanker/core/attach_result.rb
|
156
154
|
- lib/tanker/core/encryption.rb
|
@@ -179,6 +177,7 @@ licenses:
|
|
179
177
|
metadata:
|
180
178
|
homepage_uri: https://tanker.io
|
181
179
|
source_code_uri: https://github.com/TankerHQ/sdk-ruby
|
180
|
+
rubygems_mfa_required: 'true'
|
182
181
|
post_install_message:
|
183
182
|
rdoc_options: []
|
184
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
|
data/lib/tanker/admin/c_admin.rb
DELETED
@@ -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/c_tanker/init.rb
DELETED
@@ -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
|