Skip to content

Commit 7c480ea

Browse files
committed
Add generated token package
1 parent 6b1aa20 commit 7c480ea

File tree

8 files changed

+143
-16
lines changed

8 files changed

+143
-16
lines changed

generates/.gitkeep

Whitespace-only changes.

generates/access.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package generates
2+
3+
import (
4+
"bytes"
5+
"strconv"
6+
"strings"
7+
8+
"github.com/LyricTian/go.uuid"
9+
"gopkg.in/LyricTian/lib.v2"
10+
"gopkg.in/oauth2.v2"
11+
)
12+
13+
// NewAccessGenerate 创建访问令牌生成实例
14+
func NewAccessGenerate() *AccessGenerate {
15+
return &AccessGenerate{}
16+
}
17+
18+
// AccessGenerate 访问令牌生成
19+
type AccessGenerate struct {
20+
}
21+
22+
// Token 生成令牌
23+
func (ag *AccessGenerate) Token(data *oauth2.GenerateBasic, isGenRefresh bool) (access, refresh string, err error) {
24+
buf := bytes.NewBufferString(data.Client.GetID())
25+
buf.WriteString(data.UserID)
26+
buf.WriteString(strconv.FormatInt(data.CreateAt.UnixNano(), 10))
27+
access, err = lib.NewEncryption(uuid.NewV3(uuid.NewV4(), buf.String()).Bytes()).MD5()
28+
if err != nil {
29+
return
30+
}
31+
access = strings.ToUpper(access)
32+
if isGenRefresh {
33+
refresh, err = lib.NewEncryption(uuid.NewV5(uuid.NewV4(), buf.String()).Bytes()).Sha1()
34+
if err != nil {
35+
return
36+
}
37+
refresh = strings.ToUpper(refresh)
38+
}
39+
40+
return
41+
}

generates/access_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package generates
2+
3+
import (
4+
"testing"
5+
"time"
6+
7+
. "github.com/smartystreets/goconvey/convey"
8+
"gopkg.in/oauth2.v2"
9+
"gopkg.in/oauth2.v2/models"
10+
)
11+
12+
func TestAccess(t *testing.T) {
13+
Convey("Test Access Generate", t, func() {
14+
data := &oauth2.GenerateBasic{
15+
Client: &models.Client{
16+
ClientID: "123456",
17+
Secret: "123456",
18+
},
19+
UserID: "000000",
20+
CreateAt: time.Now(),
21+
}
22+
gen := NewAccessGenerate()
23+
access, refresh, err := gen.Token(data, true)
24+
So(err, ShouldBeNil)
25+
Println("\nAccess:", access)
26+
Println("Refresh:", refresh)
27+
})
28+
}

generates/authorize.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package generates
2+
3+
import (
4+
"bytes"
5+
"strings"
6+
7+
"github.com/LyricTian/go.uuid"
8+
"gopkg.in/LyricTian/lib.v2"
9+
"gopkg.in/oauth2.v2"
10+
)
11+
12+
// NewAuthorizeGenerate 创建授权令牌生成实例
13+
func NewAuthorizeGenerate() *AuthorizeGenerate {
14+
return &AuthorizeGenerate{}
15+
}
16+
17+
// AuthorizeGenerate 授权令牌生成
18+
type AuthorizeGenerate struct{}
19+
20+
// Token 生成令牌
21+
func (ag *AuthorizeGenerate) Token(data *oauth2.GenerateBasic) (code string, err error) {
22+
buf := bytes.NewBuffer(uuid.NewV1().Bytes())
23+
buf.WriteString(data.UserID)
24+
buf.WriteString(data.Client.GetID())
25+
code, err = lib.NewEncryption(buf.Bytes()).MD5()
26+
if err != nil {
27+
return
28+
}
29+
code = strings.ToUpper(code)
30+
return
31+
}

generates/authorize_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package generates
2+
3+
import (
4+
"testing"
5+
"time"
6+
7+
. "github.com/smartystreets/goconvey/convey"
8+
"gopkg.in/oauth2.v2"
9+
"gopkg.in/oauth2.v2/models"
10+
)
11+
12+
func TestAuthorize(t *testing.T) {
13+
Convey("Test Authorize Generate", t, func() {
14+
data := &oauth2.GenerateBasic{
15+
Client: &models.Client{
16+
ClientID: "123456",
17+
Secret: "123456",
18+
},
19+
UserID: "000000",
20+
CreateAt: time.Now(),
21+
}
22+
gen := NewAuthorizeGenerate()
23+
code, err := gen.Token(data)
24+
So(err, ShouldBeNil)
25+
Println("\nCode:", code)
26+
})
27+
}

manage/manager.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,15 @@ func NewManager() *Manager {
1919
injector: inject.New(),
2020
}
2121
// 设定参数默认值
22-
2322
// 设定授权码的有效期为10分钟
2423
m.SetRTConfig(oauth2.Code, &Config{TokenExp: time.Minute * 10})
2524
// 设定简化模式授权令牌的有效期为1小时
2625
m.SetRTConfig(oauth2.Token, &Config{TokenExp: time.Hour * 1})
2726

28-
// 设定授权码模式令牌的有效期为2小时,g令牌的有效期为3天
29-
m.SetGTConfig(oauth2.PasswordCredentials, &Config{TokenExp: time.Hour * 2, RefreshExp: time.Hour * 24 * 3})
27+
// 设定授权码模式令牌的有效期为2小时,更新令牌的有效期为3天
28+
m.SetGTConfig(oauth2.AuthorizationCodeCredentials, &Config{TokenExp: time.Hour * 2, RefreshExp: time.Hour * 24 * 3})
29+
// 设定密码模式令牌的有效期为2小时,更新令牌的有效期为7天
30+
m.SetGTConfig(oauth2.PasswordCredentials, &Config{TokenExp: time.Hour * 2, RefreshExp: time.Hour * 24 * 7})
3031
// 设定客户端模式令牌的有效期为1小时
3132
m.SetGTConfig(oauth2.ClientCredentials, &Config{TokenExp: time.Hour * 2})
3233
return m
@@ -93,7 +94,7 @@ func (m *Manager) MapClientStorage(stor oauth2.ClientStorage) {
9394
m.injector.Map(stor)
9495
}
9596

96-
// MustClientStorage 注入客户端信息存储接口
97+
// MustClientStorage 强制注入客户端信息存储接口
9798
func (m *Manager) MustClientStorage(stor oauth2.ClientStorage, err error) {
9899
if err != nil {
99100
panic(err)
@@ -112,7 +113,7 @@ func (m *Manager) MapTokenStorage(stor oauth2.TokenStorage) {
112113
m.injector.Map(stor)
113114
}
114115

115-
// MustTokenStorage 注入令牌信息存储接口
116+
// MustTokenStorage 强制注入令牌信息存储接口
116117
func (m *Manager) MustTokenStorage(stor oauth2.TokenStorage, err error) {
117118
if err != nil {
118119
panic(err)
@@ -257,7 +258,6 @@ func (m *Manager) RefreshAccessToken(refresh, scope string) (token string, err e
257258
err = terr
258259
return
259260
}
260-
ti.SetAuthType(oauth2.RefreshCredentials.String())
261261
ti.SetAccess(tv)
262262
ti.SetAccessCreateAt(td.CreateAt)
263263
if scope != "" {

model.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ type (
1212
GetSecret() string
1313
// 客户端域名URL
1414
GetDomain() string
15-
// 预留数据
16-
GetRetainData() interface{}
15+
// Other data
16+
GetOtherData() interface{}
1717
}
1818

1919
// TokenInfo 令牌信息模型接口
@@ -39,17 +39,17 @@ type (
3939
// 设置令牌授权类型
4040
SetAuthType(string)
4141

42-
// 访问令牌
42+
// 访问令牌(或授权令牌)
4343
GetAccess() string
44-
// 设置访问令牌
44+
// 设置访问令牌(或授权令牌)
4545
SetAccess(string)
46-
// 访问令牌创建时间
46+
// 访问令牌(或授权令牌)创建时间
4747
GetAccessCreateAt() time.Time
48-
// 设置访问令牌创建时间
48+
// 设置访问令牌(或授权令牌)创建时间
4949
SetAccessCreateAt(time.Time)
50-
// 访问令牌有效期
50+
// 访问令牌(或授权令牌)有效期
5151
GetAccessExpiresIn() time.Duration
52-
// 设置访问令牌有效期
52+
// 设置访问令牌(或授权令牌)有效期
5353
SetAccessExpiresIn(time.Duration)
5454

5555
// 更新令牌

models/client.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ func (c *Client) GetDomain() string {
2222
return c.Domain
2323
}
2424

25-
// GetRetainData 预留数据
26-
func (c *Client) GetRetainData() interface{} {
25+
// GetOtherData Other data
26+
func (c *Client) GetOtherData() interface{} {
2727
return nil
2828
}

0 commit comments

Comments
 (0)