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 }