Skip to content
This repository was archived by the owner on Jul 16, 2024. It is now read-only.

Commit 07a770d

Browse files
author
nichujie
committed
feat: service layer
1 parent f9c3b90 commit 07a770d

File tree

9 files changed

+210
-153
lines changed

9 files changed

+210
-153
lines changed

Diff for: .air.toml

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
root = "."
22
testdata_dir = "testdata"
3-
tmp_dir = "tmp"
3+
tmp_dir = "build/tmp"
44

55
[build]
6-
args_bin = []
7-
bin = "./tmp/main"
8-
cmd = "go build -o ./tmp/main ."
6+
args_bin = ["-c", "exit"]
7+
bin = "/bin/sh"
8+
cmd = "make pre-dev"
99
delay = 0
10-
exclude_dir = ["assets", "tmp", "vendor", "testdata"]
10+
exclude_dir = ["docs", "build"]
1111
exclude_file = []
1212
exclude_regex = ["_test.go"]
1313
exclude_unchanged = false
@@ -32,7 +32,7 @@ tmp_dir = "tmp"
3232

3333
[log]
3434
main_only = false
35-
time = false
35+
time = true
3636

3737
[misc]
3838
clean_on_exit = false

Diff for: app/handler/v1/auth.go

+9-22
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package v1
33
import (
44
"time"
55

6+
"github.com/joint-online-judge/go-horse/app/service"
7+
68
"github.com/gofiber/fiber/v2"
79
"github.com/joint-online-judge/go-horse/app/model"
810
"github.com/joint-online-judge/go-horse/app/query"
@@ -42,7 +44,7 @@ func (s *Api) Login(
4244
if err != nil {
4345
return nil, err
4446
}
45-
return schema.NewAuthTokens(user, "", true)
47+
return service.Auth(c).NewAuthTokens(user, "", true)
4648
}
4749

4850
// Logout
@@ -78,8 +80,8 @@ func (s *Api) Refresh(
7880
c *fiber.Ctx,
7981
request schema.RefreshRequestObject,
8082
) (any, error) {
81-
user := schema.JWTUser(c)
82-
return schema.NewAuthTokens(*user, "", false)
83+
user := service.Auth(c).JWTUser()
84+
return service.Auth(c).NewAuthTokens(*user, "", false)
8385
}
8486

8587
// Register
@@ -105,27 +107,12 @@ func (s *Api) Register(
105107
"email not provided",
106108
)
107109
}
108-
hashedPassword, err := schema.HashPassword(*userCreate.Password)
109-
if err != nil {
110-
return nil, err
111-
}
112-
ip := c.IP()
113-
userModel := model.User{
114-
Username: *userCreate.Username,
115-
Email: *userCreate.Email,
116-
StudentID: "",
117-
RealName: "",
118-
IsActive: false,
119-
HashedPassword: hashedPassword,
120-
RegisterIP: ip,
121-
LoginIP: ip,
122-
}
123-
user, err := query.CreateObj[schema.User](&userModel)
110+
user, err := service.Auth(c).RegisterNewUser(userCreate)
124111
if err != nil {
125112
return nil, err
126113
}
127114
logrus.Infof("user: %T + 1, %v", user, user)
128-
return schema.NewAuthTokens(user, "", true)
115+
return service.Auth(c).CreateAuthTokens(user, "", true)
129116
}
130117

131118
// Get Token
@@ -134,6 +121,6 @@ func (s *Api) GetToken(
134121
c *fiber.Ctx,
135122
request schema.GetTokenRequestObject,
136123
) (any, error) {
137-
user := schema.JWTUser(c)
138-
return schema.NewAuthTokens(*user, "", true)
124+
user := service.Auth(c).JWTUser()
125+
return service.Auth(c).NewAuthTokens(*user, "", true)
139126
}

Diff for: app/handler/v1/domain.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"github.com/joint-online-judge/go-horse/app/model"
66
"github.com/joint-online-judge/go-horse/app/query"
77
"github.com/joint-online-judge/go-horse/app/schema"
8+
"github.com/joint-online-judge/go-horse/app/service"
89
"github.com/joint-online-judge/go-horse/pkg/convert"
910
"github.com/sirupsen/logrus"
1011
)
@@ -30,7 +31,7 @@ func (s *Api) CreateDomain(
3031
) (any, error) {
3132
// TODO: verify input values
3233
domain := request.Body
33-
user := schema.JWTUser(c)
34+
user := service.Auth(c).JWTUser()
3435
return query.CreateDomain(domain, user)
3536
}
3637

@@ -240,7 +241,7 @@ func (s *Api) AddDomainUser(
240241
if err != nil {
241242
return nil, err
242243
}
243-
user, err := query.GetUser(c, request.Body.User)
244+
user, err := service.User(c).GetUser(request.Body.User)
244245
if err != nil {
245246
return nil, err
246247
}

Diff for: app/handler/v1/misc.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package v1
33
import (
44
"fmt"
55

6+
"github.com/joint-online-judge/go-horse/app/service"
7+
68
"github.com/gofiber/fiber/v2"
79
"github.com/joint-online-judge/go-horse/app/schema"
810
"github.com/joint-online-judge/go-horse/pkg/config"
@@ -14,7 +16,7 @@ func (s *Api) JwtDecoded(
1416
c *fiber.Ctx,
1517
request schema.JwtDecodedRequestObject,
1618
) (any, error) {
17-
return schema.JWT(c), nil
19+
return service.Auth(c).JWT(), nil
1820
}
1921

2022
// Test Error Report

Diff for: app/query/user.go

-23
This file was deleted.

Diff for: app/schema/auth.go

-98
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,7 @@
22
package schema
33

44
import (
5-
"time"
6-
7-
"github.com/gofiber/fiber/v2"
85
"github.com/golang-jwt/jwt/v4"
9-
"github.com/google/uuid"
10-
"github.com/joint-online-judge/go-horse/pkg/config"
116
)
127

138
type JWTCommon struct {
@@ -27,99 +22,6 @@ type JWTClaims struct {
2722
IsActive bool `json:"isActive"`
2823
}
2924

30-
func JWT(c *fiber.Ctx) *JWTClaims {
31-
return c.Locals("jwt").(*JWTClaims)
32-
}
33-
34-
func JWTUser(c *fiber.Ctx) *User {
35-
claims := c.Locals("jwt").(*JWTClaims)
36-
user := User{
37-
Gravatar: &claims.Gravatar,
38-
ID: uuid.MustParse(claims.ID),
39-
IsActive: &claims.IsActive,
40-
Role: &claims.Role,
41-
Username: claims.Username,
42-
}
43-
return &user
44-
}
45-
46-
func NewAccessToken(
47-
user User,
48-
oauth_name, category string,
49-
fresh bool,
50-
) (string, error) {
51-
token := jwt.NewWithClaims(jwt.SigningMethodHS256, JWTClaims{
52-
JWTCommon: JWTCommon{
53-
Type: "access",
54-
OauthName: oauth_name,
55-
RegisteredClaims: jwt.RegisteredClaims{
56-
ExpiresAt: jwt.NewNumericDate(
57-
time.Now().
58-
Add(time.Duration(config.Conf.JwtExpireSeconds) * time.Second),
59-
),
60-
IssuedAt: jwt.NewNumericDate(time.Now()),
61-
NotBefore: jwt.NewNumericDate(time.Now()),
62-
Issuer: uuid.New().String(),
63-
ID: user.ID.String(),
64-
Subject: user.ID.String(),
65-
// Audience: []string{"somebody_else"},
66-
},
67-
},
68-
Fresh: fresh,
69-
Csrf: "test", // FIXME: do we need it as we can use csrf middleware?
70-
Category: category,
71-
Username: user.Username,
72-
Gravatar: *user.Gravatar,
73-
Role: *user.Role,
74-
IsActive: *user.IsActive,
75-
})
76-
return token.SignedString([]byte(config.Conf.JwtSecret))
77-
}
78-
79-
func NewRefreshToken(user User, oauth_name string) (string, error) {
80-
token := jwt.NewWithClaims(jwt.SigningMethodHS256, JWTCommon{
81-
Type: "refresh",
82-
OauthName: oauth_name,
83-
RegisteredClaims: jwt.RegisteredClaims{
84-
ExpiresAt: jwt.NewNumericDate(
85-
time.Now().
86-
Add(time.Duration(config.Conf.JwtExpireSeconds) * time.Second),
87-
),
88-
IssuedAt: jwt.NewNumericDate(time.Now()),
89-
NotBefore: jwt.NewNumericDate(time.Now()),
90-
Issuer: uuid.New().String(),
91-
ID: user.ID.String(),
92-
Subject: user.ID.String(),
93-
// Audience: []string{"somebody_else"},
94-
},
95-
})
96-
return token.SignedString([]byte(config.Conf.JwtSecret))
97-
}
98-
99-
func NewAuthTokens(
100-
user User,
101-
oauth_name string,
102-
fresh bool,
103-
) (*AuthTokens, error) {
104-
category := ""
105-
if oauth_name != "" {
106-
category = "oauth"
107-
}
108-
accessToken, err := NewAccessToken(user, oauth_name, category, fresh)
109-
if err != nil {
110-
return nil, err
111-
}
112-
refreshToken, err := NewRefreshToken(user, oauth_name)
113-
if err != nil {
114-
return nil, err
115-
}
116-
return &AuthTokens{
117-
AccessToken: accessToken,
118-
RefreshToken: refreshToken,
119-
TokenType: "bearer",
120-
}, err
121-
}
122-
12325
// AuthTokens defines model for AuthTokens.
12426
type AuthTokens struct {
12527
AccessToken string `json:"accessToken"`

0 commit comments

Comments
 (0)