feat: login with apple

This commit is contained in:
VaalaCat
2024-09-04 18:15:49 +00:00
parent 13148b95e3
commit 0948d23239
13 changed files with 268 additions and 41 deletions

View File

@@ -17,13 +17,13 @@ func Router() *gin.Engine {
userRouter := v1.Group("/user")
{
userRouter.POST("/create", middleware.ValidateAppleAppToken(), common.Wrapper(user.CreateUser))
userRouter.GET("/info", middleware.ValidateAppleAppToken(), common.Wrapper(user.GetUserInfo))
userRouter.POST("/login-with-apple", middleware.ValidateAppleAppLoginCode(), common.Wrapper(user.LoginWithApple))
userRouter.GET("/info", middleware.ValidateToken(), common.Wrapper(user.GetUserInfo))
}
if config.IsDebug() {
// for debug
v1.GET("/ping", middleware.ValidateAppleAppToken(), func(ctx *gin.Context) { ctx.JSON(200, gin.H{"message": "pong"}) })
v1.GET("/ping", middleware.ValidateToken(), func(ctx *gin.Context) { ctx.JSON(200, gin.H{"message": "pong"}) })
}
return r
}

View File

@@ -2,23 +2,67 @@ package user
import (
"context"
"time"
"github.com/nose7en/ToyBoomServer/common"
"github.com/nose7en/ToyBoomServer/config"
"github.com/nose7en/ToyBoomServer/dao"
"github.com/nose7en/ToyBoomServer/defs"
"github.com/nose7en/ToyBoomServer/models"
"github.com/nose7en/ToyBoomServer/utils"
)
func CreateUser(c context.Context, req *defs.CommonRequest) (*defs.CommonResponse, error) {
func LoginWithApple(c context.Context, req *defs.CommonRequest) (*defs.GetUserAuthTokenResponse, error) {
userInfo := common.GetUser(c)
newUser := &models.User{}
newUser.FillWithUserInfo(userInfo)
if err := dao.NewMutation().CreateUser(newUser); err != nil {
if userInfo.GetUserID() > 0 {
userInfo, err := dao.NewQuery().GetUserByID(userInfo.GetUserID())
if err != nil {
common.Logger(c).WithError(err).Errorf("failed to get user info")
return nil, err
}
newUserToken, err := newUserToken(userInfo)
if err != nil {
common.Logger(c).WithError(err).Errorf("failed to new user token")
return nil, err
}
return &defs.GetUserAuthTokenResponse{
Status: &defs.Status{Code: defs.RespCode_SUCCESS, Message: "user exists"},
Token: newUserToken,
}, nil
}
newUser, err := dao.NewMutation().FirstOrCreateUser(userInfo)
if err != nil {
common.Logger(c).WithError(err).Errorf("failed to create user")
return nil, err
}
return &defs.CommonResponse{
newUserToken, err := newUserToken(newUser)
if err != nil {
common.Logger(c).WithError(err).Errorf("failed to new user token")
return nil, err
}
common.Logger(c).Infof("create user success, user info record is %+v", newUser)
return &defs.GetUserAuthTokenResponse{
Status: &defs.Status{Code: defs.RespCode_SUCCESS, Message: defs.RespMessage_SUCCESS},
Token: newUserToken,
}, nil
}
func newUserToken(userInfo defs.UserGettable) (string, error) {
token, err := utils.GetJwtTokenFromMap(
config.GetSettings().JWTConfig.Secret,
time.Now().Unix(),
config.GetSettings().JWTConfig.ExpireSec,
userInfo.ToMap(),
)
if err != nil {
return "", err
}
return token, nil
}