Skip to content

Commit 68b4e1e

Browse files
committed
refactor
1 parent 95abd62 commit 68b4e1e

File tree

9 files changed

+27
-46
lines changed

9 files changed

+27
-46
lines changed

.env

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
# 服务器设置
44
PORT=9000 # HTTP 监听端口. 默认 8080
5-
SECRET_KEY=some_str_for_jwt_token # 签发 JWT token 的密钥,密钥不可泄漏
5+
JWT_TOKEN=some_str_for_jwt_token # 签发 JWT token 的密钥,更换密钥则导致所有用户授权取消。密钥不可泄漏
66
SECRET=astaxie12798akljzmknm.ahkjkljl;k # 密钥,用于加密,一旦更换密钥,则解密加密过的密码将失效. 须是32位的[]byte
77
TLS_CERT= # TLS 的证书文件路径
88
TLS_KEY= # TLS 的 key 文件路径

internal/app/config/common.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ type common struct {
1515
MachineId int64 `json:"machine_id"` // 机器 ID, 用于分布式生成 ID,每个节点的 ID 都应该不一样,并且最大值为 1024
1616
Mode string `json:"mode"` // 运行模式, 开发模式还是生产模式
1717
Exiting bool `json:"exiting"` // 进程是否出于正在退出的状态,用户优雅的退出进程
18-
Secret string `json:"secret"` // 加密密钥
18+
Secret string `json:"secret"` // 加密密钥,用于加密密码
1919
}
2020

2121
var Common *common

internal/app/config/user.go internal/app/config/http.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,24 @@ type TLS struct {
1010
Key string `json:"key"` // Key 文件
1111
}
1212

13-
type user struct {
13+
type http struct {
1414
Domain string `json:"domain"` // 用户端 API 绑定的域名, 例如 https://example.com
1515
Port string `json:"port"` // 用户端 API 监听的端口
1616
Secret string `json:"secret"` // 用户端密钥,用于加密/解密 token
1717
TLS *TLS `json:"tls"`
1818
}
1919

20-
var User user
20+
var Http http
2121

2222
func init() {
23-
User.Port = dotenv.GetByDefault("PORT", "8080")
24-
User.Secret = dotenv.GetByDefault("SECRET_KEY", "user")
23+
Http.Port = dotenv.GetByDefault("PORT", "8080")
24+
Http.Secret = dotenv.GetByDefault("JWT_TOKEN", "some_str_for_jwt_token")
2525

2626
TlsCert := dotenv.GetByDefault("TLS_CERT", "")
2727
TlsKey := dotenv.GetByDefault("TLS_KEY", "")
2828

2929
if TlsCert != "" && TlsKey != "" {
30-
User.TLS = &TLS{
30+
Http.TLS = &TLS{
3131
Cert: TlsCert,
3232
Key: TlsKey,
3333
}

internal/app/middleware/authenticate.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22
package middleware
33

44
import (
5-
schema2 "github.com/axetroy/wsm/internal/app/schema"
65
"net/http"
76

7+
"github.com/axetroy/wsm/internal/app/config"
88
"github.com/axetroy/wsm/internal/app/exception"
9+
"github.com/axetroy/wsm/internal/app/schema"
910
"github.com/axetroy/wsm/internal/library/token"
1011
"github.com/gin-gonic/gin"
1112
)
@@ -20,11 +21,11 @@ func Authenticate(isAdmin bool) gin.HandlerFunc {
2021
var (
2122
err error
2223
tokenString string
23-
status = schema2.StatusFail
24+
status = schema.StatusFail
2425
)
2526
defer func() {
2627
if err != nil {
27-
c.JSON(http.StatusOK, schema2.Response{
28+
c.JSON(http.StatusOK, schema.Response{
2829
Status: status,
2930
Message: err.Error(),
3031
Data: nil,
@@ -49,7 +50,7 @@ func Authenticate(isAdmin bool) gin.HandlerFunc {
4950
}
5051
}
5152

52-
if claims, er := token.Parse(tokenString, isAdmin); er != nil {
53+
if claims, er := token.Parse(config.Http.Secret, tokenString); er != nil {
5354
err = er
5455
status = exception.InvalidToken.Code()
5556
return

internal/app/serve.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import (
1616
)
1717

1818
func Serve() error {
19-
port := config.User.Port
19+
port := config.Http.Port
2020

2121
s := &http.Server{
2222
Addr: ":" + port,
@@ -27,7 +27,7 @@ func Serve() error {
2727
}
2828

2929
go func() {
30-
if config.User.TLS != nil {
30+
if config.Http.TLS != nil {
3131
TLSConfig := &tls.Config{
3232
MinVersion: tls.VersionTLS11,
3333
CurvePreferences: []tls.CurveID{tls.CurveP521, tls.CurveP384, tls.CurveP256},
@@ -47,7 +47,7 @@ func Serve() error {
4747

4848
log.Printf("Listen on: %s\n", s.Addr)
4949

50-
if err := s.ListenAndServeTLS(config.User.TLS.Cert, config.User.TLS.Key); err != nil {
50+
if err := s.ListenAndServeTLS(config.Http.TLS.Cert, config.Http.TLS.Key); err != nil {
5151
log.Fatalln(err)
5252
}
5353
} else {

internal/app/user/login.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"errors"
66
"time"
77

8+
"github.com/axetroy/wsm/internal/app/config"
89
"github.com/axetroy/wsm/internal/app/db"
910
"github.com/axetroy/wsm/internal/app/exception"
1011
"github.com/axetroy/wsm/internal/app/schema"
@@ -93,7 +94,7 @@ func LoginWithUsername(c *controller.Context) (res schema.Response) {
9394
data.UpdatedAt = userInfo.UpdatedAt.Format(time.RFC3339Nano)
9495

9596
// generate token
96-
if t, er := token.Generate(userInfo.Id, false); er != nil {
97+
if t, er := token.Generate(config.Http.Secret, userInfo.Id); er != nil {
9798
err = er
9899
return
99100
} else {

internal/library/token/generate.go

+8-17
Original file line numberDiff line numberDiff line change
@@ -9,38 +9,29 @@ import (
99
)
1010

1111
// generate jwt token
12-
func Generate(userId string, isAdmin bool) (tokenString string, err error) {
13-
var (
14-
issuer string
15-
key string
16-
)
17-
18-
if isAdmin {
19-
issuer = "admin"
20-
key = adminSecreteKey
21-
} else {
22-
issuer = "user"
23-
key = userSecreteKey
24-
}
25-
12+
func Generate(secret, userId string) (tokenString string, err error) {
2613
// 生成token
2714
c := ClaimsInternal{
2815
util.Base64Encode(userId),
2916
jwt.StandardClaims{
3017
Audience: userId,
3118
Id: userId,
3219
ExpiresAt: time.Now().Add(time.Hour * time.Duration(6)).Unix(),
33-
Issuer: issuer,
20+
Issuer: "user",
3421
IssuedAt: time.Now().Unix(),
3522
NotBefore: time.Now().Unix(),
3623
},
3724
}
3825

3926
token := jwt.NewWithClaims(jwt.SigningMethodHS256, c)
4027

41-
tokenString, err = token.SignedString([]byte(key))
28+
tokenString, err = token.SignedString([]byte(secret))
29+
30+
if err != nil {
31+
return "", err
32+
}
4233

43-
tokenString = Prefix + " " + tokenString
34+
tokenString = JoinPrefixToken(tokenString)
4435

4536
return
4637
}

internal/library/token/parse.go

+2-9
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,11 @@ import (
1010
)
1111

1212
// parse jwt token
13-
func Parse(tokenString string, isAdmin bool) (claims Claims, err error) {
13+
func Parse(secret, tokenString string) (claims Claims, err error) {
1414
var (
1515
token *jwt.Token
16-
key string
1716
)
1817

19-
if isAdmin {
20-
key = adminSecreteKey
21-
} else {
22-
key = userSecreteKey
23-
}
24-
2518
if strings.HasPrefix(tokenString, Prefix+" ") == false {
2619
err = exception.InvalidAuth
2720
return
@@ -37,7 +30,7 @@ func Parse(tokenString string, isAdmin bool) (claims Claims, err error) {
3730
c := ClaimsInternal{}
3831

3932
if token, err = jwt.ParseWithClaims(tokenString, &c, func(token *jwt.Token) (interface{}, error) {
40-
return []byte(key), nil
33+
return []byte(secret), nil
4134
}); err != nil {
4235
if strings.HasPrefix(err.Error(), "token is expired by") {
4336
err = exception.TokenExpired

internal/library/token/token.go

-5
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,6 @@ const (
1010
AuthField = "Authorization"
1111
)
1212

13-
var (
14-
userSecreteKey string
15-
adminSecreteKey string
16-
)
17-
1813
type Claims struct {
1914
Uid string `json:"uid"`
2015
jwt.StandardClaims

0 commit comments

Comments
 (0)