1
21
22 package oauth2
23
24 import (
25 "fmt"
26 "strings"
27 "testing"
28 "time"
29
30 "github.com/stretchr/testify/assert"
31
32 "github.com/ory/fosite"
33 "github.com/ory/fosite/token/hmac"
34 )
35
36 var hmacshaStrategy = HMACSHAStrategy{
37 Enigma: &hmac.HMACStrategy{GlobalSecret: []byte("foobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar")},
38 AccessTokenLifespan: time.Hour * 24,
39 AuthorizeCodeLifespan: time.Hour * 24,
40 }
41
42 var hmacExpiredCase = fosite.Request{
43 Client: &fosite.DefaultClient{
44 Secret: []byte("foobarfoobarfoobarfoobar"),
45 },
46 Session: &fosite.DefaultSession{
47 ExpiresAt: map[fosite.TokenType]time.Time{
48 fosite.AccessToken: time.Now().UTC().Add(-time.Hour),
49 fosite.AuthorizeCode: time.Now().UTC().Add(-time.Hour),
50 fosite.RefreshToken: time.Now().UTC().Add(-time.Hour),
51 },
52 },
53 }
54
55 var hmacValidCase = fosite.Request{
56 Client: &fosite.DefaultClient{
57 Secret: []byte("foobarfoobarfoobarfoobar"),
58 },
59 Session: &fosite.DefaultSession{
60 ExpiresAt: map[fosite.TokenType]time.Time{
61 fosite.AccessToken: time.Now().UTC().Add(time.Hour),
62 fosite.AuthorizeCode: time.Now().UTC().Add(time.Hour),
63 fosite.RefreshToken: time.Now().UTC().Add(time.Hour),
64 },
65 },
66 }
67
68 var hmacValidZeroTimeRefreshCase = fosite.Request{
69 Client: &fosite.DefaultClient{
70 Secret: []byte("foobarfoobarfoobarfoobar"),
71 },
72 Session: &fosite.DefaultSession{
73 ExpiresAt: map[fosite.TokenType]time.Time{
74 fosite.AccessToken: time.Now().UTC().Add(time.Hour),
75 fosite.AuthorizeCode: time.Now().UTC().Add(time.Hour),
76 fosite.RefreshToken: {},
77 },
78 },
79 }
80
81 func TestHMACAccessToken(t *testing.T) {
82 for k, c := range []struct {
83 r fosite.Request
84 pass bool
85 }{
86 {
87 r: hmacValidCase,
88 pass: true,
89 },
90 {
91 r: hmacExpiredCase,
92 pass: false,
93 },
94 } {
95 t.Run(fmt.Sprintf("case=%d", k), func(t *testing.T) {
96 token, signature, err := hmacshaStrategy.GenerateAccessToken(nil, &c.r)
97 assert.NoError(t, err)
98 assert.Equal(t, strings.Split(token, ".")[1], signature)
99
100 err = hmacshaStrategy.ValidateAccessToken(nil, &c.r, token)
101 if c.pass {
102 assert.NoError(t, err)
103 validate := hmacshaStrategy.Enigma.Signature(token)
104 assert.Equal(t, signature, validate)
105 } else {
106 assert.Error(t, err)
107 }
108 })
109 }
110 }
111
112 func TestHMACRefreshToken(t *testing.T) {
113 for k, c := range []struct {
114 r fosite.Request
115 pass bool
116 }{
117 {
118 r: hmacValidCase,
119 pass: true,
120 },
121 {
122 r: hmacExpiredCase,
123 pass: false,
124 },
125 } {
126 t.Run(fmt.Sprintf("case=%d", k), func(t *testing.T) {
127 token, signature, err := hmacshaStrategy.GenerateRefreshToken(nil, &c.r)
128 assert.NoError(t, err)
129 assert.Equal(t, strings.Split(token, ".")[1], signature)
130
131 err = hmacshaStrategy.ValidateRefreshToken(nil, &c.r, token)
132 if c.pass {
133 assert.NoError(t, err)
134 validate := hmacshaStrategy.Enigma.Signature(token)
135 assert.Equal(t, signature, validate)
136 } else {
137 assert.Error(t, err)
138 }
139 })
140 }
141 }
142
143 func TestHMACAuthorizeCode(t *testing.T) {
144 for k, c := range []struct {
145 r fosite.Request
146 pass bool
147 }{
148 {
149 r: hmacValidCase,
150 pass: true,
151 },
152 {
153 r: hmacExpiredCase,
154 pass: false,
155 },
156 } {
157 t.Run(fmt.Sprintf("case=%d", k), func(t *testing.T) {
158 token, signature, err := hmacshaStrategy.GenerateAuthorizeCode(nil, &c.r)
159 assert.NoError(t, err)
160 assert.Equal(t, strings.Split(token, ".")[1], signature)
161
162 err = hmacshaStrategy.ValidateAuthorizeCode(nil, &c.r, token)
163 if c.pass {
164 assert.NoError(t, err)
165 validate := hmacshaStrategy.Enigma.Signature(token)
166 assert.Equal(t, signature, validate)
167 } else {
168 assert.Error(t, err)
169 }
170 })
171 }
172 }
173
View as plain text