-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathmock_proxy.go
More file actions
90 lines (81 loc) · 2.23 KB
/
mock_proxy.go
File metadata and controls
90 lines (81 loc) · 2.23 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
package oidfed
import (
"crypto/ecdsa"
"crypto/elliptic"
"crypto/md5"
"crypto/rand"
"fmt"
"time"
"github.com/lestrrat-go/jwx/v3/jwa"
"github.com/go-oidfed/lib/jwx"
"github.com/go-oidfed/lib/unixtime"
)
type mockProxy struct {
EntityID string
authorities []string
jwks jwx.JWKS
*jwx.EntityStatementSigner
rpMetadata *OpenIDRelyingPartyMetadata
opMetadata *OpenIDProviderMetadata
}
func newMockProxy(
entityID string,
rp *OpenIDRelyingPartyMetadata, op *OpenIDProviderMetadata,
) *mockProxy {
sk, err := ecdsa.GenerateKey(elliptic.P521(), rand.Reader)
if err != nil {
panic(err)
}
op.Issuer = entityID
jwks, err := jwx.KeyToJWKS(sk.Public(), jwa.ES512())
if err != nil {
panic(err)
}
p := &mockProxy{
EntityID: entityID,
rpMetadata: rp,
opMetadata: op,
EntityStatementSigner: jwx.NewEntityStatementSigner(
jwx.NewSingleKeyVersatileSigner(sk, jwa.ES512()),
),
jwks: jwks,
}
mockEntityConfiguration(p.EntityID, p)
return p
}
func (proxy mockProxy) EntityConfigurationJWT() ([]byte, error) {
return proxy.EntityStatementSigner.JWT(proxy.EntityStatementPayload())
}
func (proxy mockProxy) EntityStatementPayload() EntityStatementPayload {
now := time.Now()
orgID := fmt.Sprintf("%x", md5.Sum([]byte(proxy.EntityID)))
organizationName := fmt.Sprintf("Organization: %s", orgID[:8])
proxy.rpMetadata.OrganizationName = organizationName
proxy.opMetadata.OrganizationName = organizationName
payload := EntityStatementPayload{
Issuer: proxy.EntityID,
Subject: proxy.EntityID,
IssuedAt: unixtime.Unixtime{Time: now},
ExpiresAt: unixtime.Unixtime{Time: now.Add(time.Second * time.Duration(mockStmtLifetime))},
JWKS: proxy.jwks,
Audience: "",
AuthorityHints: proxy.authorities,
Metadata: &Metadata{
FederationEntity: &FederationEntityMetadata{
OrganizationName: organizationName,
},
RelyingParty: proxy.rpMetadata,
OpenIDProvider: proxy.opMetadata,
},
}
return payload
}
func (proxy mockProxy) GetSubordinateInfo() mockSubordinateInfo {
return mockSubordinateInfo{
entityID: proxy.EntityID,
jwks: proxy.jwks,
}
}
func (proxy *mockProxy) AddAuthority(authorityID string) {
proxy.authorities = append(proxy.authorities, authorityID)
}