/
identifier.go
102 lines (87 loc) · 2.75 KB
/
identifier.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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package mock
import (
"context"
"errors"
"net/url"
"flamingo.me/flamingo/v3/core/auth"
"flamingo.me/flamingo/v3/core/auth/oauth"
"flamingo.me/flamingo/v3/framework/web"
)
type (
// IdentifyMethod callback for Mock Identifier
IdentifyMethod func(*Identifier, context.Context, *web.Request) (auth.Identity, error)
// AuthenticateMethod callback for Mock Identifier
AuthenticateMethod func(*Identifier, context.Context, *web.Request) web.Result
// CallbackMethod callback for Mock Identifier
CallbackMethod func(*Identifier, context.Context, *web.Request, func(*web.Request) *url.URL) web.Result
// LogoutMethod callback for Mock Identifier
LogoutMethod func(*Identifier, context.Context, *web.Request)
// Identifier mocks request identification
Identifier struct {
broker string
authenticateMethod AuthenticateMethod
callbackMethod CallbackMethod
logoutMethod LogoutMethod
identifyMethod IdentifyMethod
}
)
var (
_ auth.RequestIdentifier = new(Identifier)
_ auth.Identity = new(Identity)
_ oauth.OpenIDIdentity = new(OIDCIdentity)
)
// Broker getter
func (m *Identifier) Broker() string {
return m.broker
}
// SetBroker identity for the identifier
func (m *Identifier) SetBroker(broker string) {
m.broker = broker
}
// Identify an incoming request
func (m *Identifier) Identify(ctx context.Context, r *web.Request) (auth.Identity, error) {
if m.identifyMethod != nil {
return m.identifyMethod(m, ctx, r)
}
return nil, errors.New("can not identify")
}
// SetIdentifyMethod for mock identifier
func (m *Identifier) SetIdentifyMethod(method IdentifyMethod) *Identifier {
m.identifyMethod = method
return m
}
// Authenticate an incoming request
func (m *Identifier) Authenticate(ctx context.Context, request *web.Request) web.Result {
if m.authenticateMethod != nil {
return m.authenticateMethod(m, ctx, request)
}
return nil
}
// SetAuthenticateMethod for mock identifier
func (m *Identifier) SetAuthenticateMethod(method AuthenticateMethod) *Identifier {
m.authenticateMethod = method
return m
}
// Callback an incoming request
func (m *Identifier) Callback(ctx context.Context, request *web.Request, returnTo func(*web.Request) *url.URL) web.Result {
if m.callbackMethod != nil {
return m.callbackMethod(m, ctx, request, returnTo)
}
return nil
}
// SetCallbackMethod for mock identifier
func (m *Identifier) SetCallbackMethod(method CallbackMethod) *Identifier {
m.callbackMethod = method
return m
}
// Logout an incoming request
func (m *Identifier) Logout(ctx context.Context, request *web.Request) {
if m.logoutMethod != nil {
m.logoutMethod(m, ctx, request)
}
}
// SetLogoutMethod for mock identifier
func (m *Identifier) SetLogoutMethod(method LogoutMethod) *Identifier {
m.logoutMethod = method
return m
}