2024-09-04 18:15:49 +00:00

69 lines
1.7 KiB
Go

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/utils"
)
func LoginWithApple(c context.Context, req *defs.CommonRequest) (*defs.GetUserAuthTokenResponse, error) {
userInfo := common.GetUser(c)
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
}
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
}