Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 72bcf52

Browse files
Add the authorization code storage support
1 parent da15acc commit 72bcf52

File tree

2 files changed

+78
-25
lines changed

2 files changed

+78
-25
lines changed

‎token.go

Lines changed: 52 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -47,19 +47,23 @@ func (rs *TokenStore) Create(info oauth2.TokenInfo) (err error) {
4747
return
4848
}
4949
pipe := rs.cli.Pipeline()
50-
basicID := uuid.NewV4().String()
51-
aexp := info.GetAccessExpiresIn()
52-
rexp := aexp
53-
54-
if refresh := info.GetRefresh(); refresh != "" {
55-
rexp = info.GetRefreshCreateAt().Add(info.GetRefreshExpiresIn()).Sub(ct)
56-
if aexp.Seconds() > rexp.Seconds() {
57-
aexp = rexp
50+
if code := info.GetCode(); code != "" {
51+
pipe.Set(code, jv, info.GetCodeExpiresIn())
52+
} else {
53+
basicID := uuid.NewV4().String()
54+
aexp := info.GetAccessExpiresIn()
55+
rexp := aexp
56+
57+
if refresh := info.GetRefresh(); refresh != "" {
58+
rexp = info.GetRefreshCreateAt().Add(info.GetRefreshExpiresIn()).Sub(ct)
59+
if aexp.Seconds() > rexp.Seconds() {
60+
aexp = rexp
61+
}
62+
pipe.Set(refresh, basicID, rexp)
5863
}
59-
pipe.Set(refresh, basicID, rexp)
64+
pipe.Set(info.GetAccess(), basicID, aexp)
65+
pipe.Set(basicID, jv, rexp)
6066
}
61-
pipe.Set(info.GetAccess(), basicID, aexp)
62-
pipe.Set(basicID, jv, rexp)
6367

6468
if _, verr := pipe.Exec(); verr != nil {
6569
err = verr
@@ -76,6 +80,12 @@ func (rs *TokenStore) remove(key string) (err error) {
7680
return
7781
}
7882

83+
// RemoveByCode Use the authorization code to delete the token information
84+
func (rs *TokenStore) RemoveByCode(code string) (err error) {
85+
err = rs.remove(code)
86+
return
87+
}
88+
7989
// RemoveByAccess Use the access token to delete the token information
8090
func (rs *TokenStore) RemoveByAccess(access string) (err error) {
8191
err = rs.remove(access)
@@ -88,17 +98,8 @@ func (rs *TokenStore) RemoveByRefresh(refresh string) (err error) {
8898
return
8999
}
90100

91-
// get
92-
func (rs *TokenStore) get(token string) (ti oauth2.TokenInfo, err error) {
93-
tv, verr := rs.cli.Get(token).Result()
94-
if verr != nil {
95-
if verr == redis.Nil {
96-
return
97-
}
98-
err = verr
99-
return
100-
}
101-
result := rs.cli.Get(tv)
101+
func (rs *TokenStore) getData(key string) (ti oauth2.TokenInfo, err error) {
102+
result := rs.cli.Get(key)
102103
if verr := result.Err(); verr != nil {
103104
if verr == redis.Nil {
104105
return
@@ -119,14 +120,41 @@ func (rs *TokenStore) get(token string) (ti oauth2.TokenInfo, err error) {
119120
return
120121
}
121122

123+
func (rs *TokenStore) getBasicID(token string) (basicID string, err error) {
124+
tv, verr := rs.cli.Get(token).Result()
125+
if verr != nil {
126+
if verr == redis.Nil {
127+
return
128+
}
129+
err = verr
130+
return
131+
}
132+
basicID = tv
133+
return
134+
}
135+
136+
// GetByCode Use the authorization code for token information data
137+
func (rs *TokenStore) GetByCode(code string) (ti oauth2.TokenInfo, err error) {
138+
ti, err = rs.getData(code)
139+
return
140+
}
141+
122142
// GetByAccess Use the access token for token information data
123143
func (rs *TokenStore) GetByAccess(access string) (ti oauth2.TokenInfo, err error) {
124-
ti, err = rs.get(access)
144+
basicID, err := rs.getBasicID(access)
145+
if err != nil || basicID == "" {
146+
return
147+
}
148+
ti, err = rs.getData(basicID)
125149
return
126150
}
127151

128152
// GetByRefresh Use the refresh token for token information data
129153
func (rs *TokenStore) GetByRefresh(refresh string) (ti oauth2.TokenInfo, err error) {
130-
ti, err = rs.get(refresh)
154+
basicID, err := rs.getBasicID(refresh)
155+
if err != nil || basicID == "" {
156+
return
157+
}
158+
ti, err = rs.getData(basicID)
131159
return
132160
}

‎token_test.go

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,31 @@ func TestTokenStore(t *testing.T) {
1818
store, err := redis.NewTokenStore(cfg)
1919
So(err, ShouldBeNil)
2020

21+
Convey("Test authorization code store", func() {
22+
info := &models.Token{
23+
ClientID: "1",
24+
UserID: "1_1",
25+
RedirectURI: "http://localhost/",
26+
Scope: "all",
27+
Code: "11_11_11",
28+
CodeCreateAt: time.Now(),
29+
CodeExpiresIn: time.Second * 5,
30+
}
31+
err := store.Create(info)
32+
So(err, ShouldBeNil)
33+
34+
cinfo, err := store.GetByCode(info.Code)
35+
So(err, ShouldBeNil)
36+
So(cinfo.GetUserID(), ShouldEqual, info.UserID)
37+
38+
err = store.RemoveByCode(info.Code)
39+
So(err, ShouldBeNil)
40+
41+
cinfo, err = store.GetByCode(info.Code)
42+
So(err, ShouldBeNil)
43+
So(cinfo, ShouldBeNil)
44+
})
45+
2146
Convey("Test access token store", func() {
2247
info := &models.Token{
2348
ClientID: "1",
@@ -54,7 +79,7 @@ func TestTokenStore(t *testing.T) {
5479
AccessExpiresIn: time.Second * 5,
5580
Refresh: "1_2_2",
5681
RefreshCreateAt: time.Now(),
57-
RefreshExpiresIn: time.Minute * 1,
82+
RefreshExpiresIn: time.Second * 15,
5883
}
5984
err := store.Create(info)
6085
So(err, ShouldBeNil)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /