-
Notifications
You must be signed in to change notification settings - Fork 5
/
digital_identity_client.go
88 lines (69 loc) · 3.35 KB
/
digital_identity_client.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package yoti
import (
"crypto/rsa"
"os"
"github.com/getyoti/yoti-go-sdk/v3/cryptoutil"
"github.com/getyoti/yoti-go-sdk/v3/digitalidentity"
"github.com/getyoti/yoti-go-sdk/v3/requests"
)
const DefaultURL = "https://api.yoti.com/share"
// DigitalIdentityClient represents a client that can communicate with yoti and return information about Yoti users.
type DigitalIdentityClient struct {
// SdkID represents the SDK ID and NOT the App ID. This can be found in the integration section of your
// application hub at https://hub.yoti.com/
SdkID string
// Key should be the security key given to you by yoti (see: security keys section of
// https://hub.yoti.com) for more information about how to load your key from a file see:
// https://github.com/getyoti/yoti-go-sdk/blob/master/README.md
Key *rsa.PrivateKey
apiURL string
HTTPClient requests.HttpClient // Mockable HTTP Client Interface
}
// NewDigitalIdentityClient constructs a Client object
func NewDigitalIdentityClient(sdkID string, key []byte) (*DigitalIdentityClient, error) {
decodedKey, err := cryptoutil.ParseRSAKey(key)
if err != nil {
return nil, err
}
return &DigitalIdentityClient{
SdkID: sdkID,
Key: decodedKey,
}, err
}
// OverrideAPIURL overrides the default API URL for this Yoti Client
func (client *DigitalIdentityClient) OverrideAPIURL(apiURL string) {
client.apiURL = apiURL
}
func (client *DigitalIdentityClient) getAPIURL() string {
if client.apiURL != "" {
return client.apiURL
}
if value, exists := os.LookupEnv("YOTI_API_URL"); exists && value != "" {
return value
}
return DefaultURL
}
// GetSdkID gets the Client SDK ID attached to this client instance
func (client *DigitalIdentityClient) GetSdkID() string {
return client.SdkID
}
// CreateShareSession creates a sharing session to initiate a sharing process based on a policy
func (client *DigitalIdentityClient) CreateShareSession(shareSessionRequest *digitalidentity.ShareSessionRequest) (shareSession *digitalidentity.ShareSession, err error) {
return digitalidentity.CreateShareSession(client.HTTPClient, shareSessionRequest, client.GetSdkID(), client.getAPIURL(), client.Key)
}
// GetShareSession retrieves the sharing session.
func (client *DigitalIdentityClient) GetShareSession(sessionID string) (*digitalidentity.ShareSession, error) {
return digitalidentity.GetShareSession(client.HTTPClient, sessionID, client.GetSdkID(), client.getAPIURL(), client.Key)
}
// CreateShareQrCode generates a sharing session QR code to initiate a sharing process based on session ID
func (client *DigitalIdentityClient) CreateShareQrCode(sessionID string) (share *digitalidentity.QrCode, err error) {
return digitalidentity.CreateShareQrCode(client.HTTPClient, sessionID, client.GetSdkID(), client.getAPIURL(), client.Key)
}
// Get session QR code based on generated Qr ID
func (client *DigitalIdentityClient) GetQrCode(qrCodeId string) (share digitalidentity.ShareSessionQrCode, err error) {
return digitalidentity.GetShareSessionQrCode(client.HTTPClient, qrCodeId, client.GetSdkID(), client.getAPIURL(), client.Key)
}
// GetShareReceipt fetches the receipt of the share given a receipt id.
func (client *DigitalIdentityClient) GetShareReceipt(receiptId string) (share digitalidentity.SharedReceiptResponse, err error) {
return digitalidentity.GetShareReceipt(client.HTTPClient, receiptId, client.GetSdkID(), client.getAPIURL(), client.Key)
}