Skip to content

Commit 7c2edd9

Browse files
committed
chore: finish token service and half way auth middleware
1 parent cd0b600 commit 7c2edd9

File tree

3 files changed

+36
-17
lines changed

3 files changed

+36
-17
lines changed

server/internal/repository/user_repository.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
)
77

88
type IUserRepository interface {
9-
GetAll(limit int, page int, sort string) ([]*model.User, error)
9+
GetAll(limit int, page int, sort string) (*model.UsersConnection, error)
1010
FindByEmail(email string) (*model.User, error)
1111
Create(input model.CreateUserPayload) (*model.User, error)
1212
Update(input model.UpdateUserPayload) (*model.User, error)
@@ -23,17 +23,17 @@ func NewUserRepository(db *gorm.DB) *UserRepository {
2323
}
2424
}
2525

26-
func (r *UserRepository) GetAll(limit int, page int, sort string) (*model.UserConnection, error) {
26+
func (r *UserRepository) GetAll(limit int, page int, sort string) (*model.UsersConnection, error) {
2727
var users []*model.User
2828
query := paginate(limit, page, sort)
2929
err := r.db.Scopes(query).Find(&users).Error
3030
pageInfo := &model.PageInfo{limit, page, sort}
3131

3232
if err != nil {
33-
return &model.UserConnection{nil, pageInfo}, err
33+
return &model.UsersConnection{PageInfo: pageInfo}, err
3434
}
3535

36-
return &model.UserConnection{users, pageInfo}, nil
36+
return &model.UsersConnection{Edges: users, PageInfo: pageInfo}, nil
3737
}
3838

3939
func (r *UserRepository) FindByEmail(email string) (*model.User, error) {

server/internal/service/token_service.go

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package service
22

33
import (
4-
jwt "github.com/golang-jwt/jwt/v5"
5-
"github.com/phamphihungbk/go-graphql/internal/model"
4+
"fmt"
5+
"github.com/golang-jwt/jwt/v5"
6+
"github.com/phamphihungbk/go-graphql-api/internal/model"
67
"time"
78
)
89

@@ -14,8 +15,8 @@ const (
1415
)
1516

1617
type ITokenService interface {
17-
generate() (Token, error)
18-
validate() error
18+
create(user *model.User) (string, error)
19+
validate(tokenString string) (jwt.MapClaims, error)
1920
}
2021

2122
type TokenService struct {
@@ -25,12 +26,12 @@ func NewTokenService() *TokenService {
2526
return &TokenService{}
2627
}
2728

28-
func (s *TokenService) generate(user *model.User) string {
29+
func (s *TokenService) create(user *model.User) (string, error) {
2930
issuedTime := time.Now().Unix()
3031
expiredTime := issuedTime + ExpiredInterval
3132

3233
token := jwt.NewWithClaims(
33-
jwt.SigningMethodES256,
34+
jwt.SigningMethodHS256,
3435
jwt.MapClaims{
3536
"iss": Issuer,
3637
"sub": user.ID,
@@ -45,6 +46,20 @@ func (s *TokenService) generate(user *model.User) string {
4546
return token.SignedString(PrivateKey)
4647
}
4748

48-
func (s *TokenService) validate() error {
49-
return nil
49+
func (s *TokenService) validate(tokenString string) (jwt.MapClaims, error) {
50+
var hmacSampleSecret []byte
51+
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
52+
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
53+
return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
54+
}
55+
56+
return hmacSampleSecret, nil
57+
})
58+
59+
claims, ok := token.Claims.(jwt.MapClaims)
60+
if ok && token.Valid {
61+
return claims, nil
62+
}
63+
64+
return nil, err
5065
}

server/internal/service/user_service.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
)
99

1010
type IUserService interface {
11-
GetAllUsers(limit int, page int, sort string) (*model.UserConnection, error)
11+
GetAllUsers(limit int, page int, sort string) (*model.UsersConnection, error)
1212
GetUser(email string) (*model.User, error)
1313
IssueToken(payload model.LoginPayload) (*model.AccessToken, error)
1414
CreateUser(payload model.CreateUserPayload) (*model.User, error)
@@ -25,7 +25,7 @@ func NewUserService(repository *repository.UserRepository, tokenService *TokenSe
2525
return &UserService{repository, tokenService}
2626
}
2727

28-
func (s *UserService) GetAllItems(limit int, page int, sort string) (*model.UserConnection, error) {
28+
func (s *UserService) GetAllUsers(limit int, page int, sort string) (*model.UsersConnection, error) {
2929
return s.repository.GetAll(limit, page, sort)
3030
}
3131

@@ -34,7 +34,7 @@ func (s *UserService) GetUser(email string) (*model.User, error) {
3434
}
3535

3636
func (s *UserService) IssueToken(payload model.LoginPayload) (*model.AccessToken, error) {
37-
user, err := s.FindByEmail(payload.Email)
37+
user, err := s.repository.FindByEmail(payload.Email)
3838
if err != nil {
3939
return nil, err
4040
}
@@ -43,9 +43,13 @@ func (s *UserService) IssueToken(payload model.LoginPayload) (*model.AccessToken
4343
return nil, err
4444
}
4545

46-
token := s.tokenService.generate(user)
46+
token, err := s.tokenService.create(user)
4747

48-
return &model.AccessToken{token}, nil
48+
if err != nil {
49+
return nil, err
50+
}
51+
52+
return &model.AccessToken{Token: token}, nil
4953
}
5054

5155
func (s *UserService) CreateUser(payload model.CreateUserPayload) (*model.User, error) {

0 commit comments

Comments
 (0)