69 lines
1.7 KiB
Go
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
|
|
}
|