-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsdk.go
More file actions
141 lines (112 loc) · 3.18 KB
/
sdk.go
File metadata and controls
141 lines (112 loc) · 3.18 KB
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
package corbado
import (
"fmt"
"net/http"
"github.com/pkg/errors"
"github.com/corbado/corbado-go/v2/internal/assert"
"github.com/corbado/corbado-go/v2/internal/services/identifier"
"github.com/corbado/corbado-go/v2/internal/services/session"
"github.com/corbado/corbado-go/v2/internal/services/user"
"github.com/corbado/corbado-go/v2/pkg/generated/api"
"github.com/corbado/corbado-go/v2/pkg/servererror"
"github.com/corbado/corbado-go/v2/pkg/validationerror"
)
const Version = "2.2.2"
type SDK interface {
Sessions() session.Session
Users() user.User
Identifiers() identifier.Identifier
}
type Impl struct {
client *api.ClientWithResponses
HTTPClient *http.Client
sessions session.Session
users user.User
identifiers identifier.Identifier
}
var _ SDK = &Impl{}
// NewSDK returns new SDK
func NewSDK(config *Config) (*Impl, error) {
if err := assert.NotNil(config); err != nil {
return nil, err
}
if err := config.validate(); err != nil {
return nil, err
}
client, err := newClient(config)
if err != nil {
return nil, err
}
// instantiate all APIs eagerly because it's cheap to do so and we don't have to deal with thread safety this way
sessionConfig := &session.Config{
ProjectID: config.ProjectID,
JWTIssuer: config.FrontendAPI,
JwksURI: fmt.Sprintf("%s/.well-known/jwks", config.FrontendAPI),
JWKSRefreshInterval: config.JWKSRefreshInterval,
JWKSRefreshRateLimit: config.JWKSRefreshRateLimit,
JWKSRefreshTimeout: config.JWKSRefreshTimeout,
}
sessions, err := session.New(client, sessionConfig)
if err != nil {
return nil, err
}
users, err := user.New(client)
if err != nil {
return nil, err
}
identifiers, err := identifier.New(client)
if err != nil {
return nil, err
}
httpClient := config.HTTPClient
if httpClient == nil {
httpClient = &http.Client{}
}
return &Impl{
client: client,
sessions: sessions,
users: users,
HTTPClient: httpClient,
identifiers: identifiers,
}, nil
}
// Sessions returns sessions client
func (i *Impl) Sessions() session.Session {
return i.sessions
}
// Users returns users client
func (i *Impl) Users() user.User {
return i.users
}
// Identifiers returns identifiers client
func (i *Impl) Identifiers() identifier.Identifier {
return i.identifiers
}
// IsServerError checks if given error is a ServerError
func IsServerError(err error) bool {
var serverErr *servererror.ServerError
return errors.As(err, &serverErr)
}
// AsServerError casts given error into a ServerError, if possible
func AsServerError(err error) *servererror.ServerError {
var serverErr *servererror.ServerError
ok := errors.As(err, &serverErr)
if !ok {
return nil
}
return serverErr
}
// IsValidationError checks if given error is a ValidationError
func IsValidationError(err error) bool {
var validationErr *validationerror.ValidationError
return errors.As(err, &validationErr)
}
// AsValidationError casts given error into a ValidationError, if possible
func AsValidationError(err error) *validationerror.ValidationError {
var validationErr *validationerror.ValidationError
ok := errors.As(err, &validationErr)
if !ok {
return nil
}
return validationErr
}