feat: login with apple
This commit is contained in:
@@ -1,7 +1,11 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/golang-jwt/jwt/v5"
|
||||
"github.com/nose7en/ToyBoomServer/defs"
|
||||
"github.com/spf13/cast"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
@@ -17,16 +21,16 @@ func NewUserGettable(opt ...func(*User)) defs.UserGettable {
|
||||
|
||||
type User struct {
|
||||
gorm.Model
|
||||
UserID string `json:"user_id"` // user id from apple
|
||||
Name string `json:"name"` // ToyBoom's user name
|
||||
Username string `json:"username"` // user name from apple
|
||||
Email string `json:"email"` // email from apple
|
||||
AppleUserID string `json:"apple_user_id" gorm:"uniqueIndex"` // user id from apple
|
||||
Name string `json:"name"` // ToyBoom's user name
|
||||
Username string `json:"username"` // user name from apple
|
||||
Email string `json:"email"` // email from apple
|
||||
IsPrivateEmail bool `json:"is_private_email"`
|
||||
EmailVerified bool `json:"email_verified"`
|
||||
}
|
||||
|
||||
func (u *User) FillWithUserInfo(userInfo defs.UserGettable) {
|
||||
u.UserID = userInfo.GetUserID()
|
||||
func (u *User) FromUserInfo(userInfo defs.UserGettable) {
|
||||
u.AppleUserID = userInfo.GetAppleUserID()
|
||||
u.Name = userInfo.GetName()
|
||||
u.Username = userInfo.GetUsername()
|
||||
u.Email = userInfo.GetEmail()
|
||||
@@ -34,6 +38,28 @@ func (u *User) FillWithUserInfo(userInfo defs.UserGettable) {
|
||||
u.EmailVerified = userInfo.GetEmailVerified()
|
||||
}
|
||||
|
||||
func (u *User) FromJWTClaims(claims jwt.MapClaims) {
|
||||
u.ID = cast.ToUint(claims["user_id"])
|
||||
u.AppleUserID = cast.ToString(claims["apple_user_id"])
|
||||
u.Name = cast.ToString(claims["name"])
|
||||
u.Username = cast.ToString(claims["username"])
|
||||
u.Email = cast.ToString(claims["email"])
|
||||
u.IsPrivateEmail = cast.ToBool(claims["is_private_email"])
|
||||
u.EmailVerified = cast.ToBool(claims["email_verified"])
|
||||
}
|
||||
|
||||
func (u *User) ToMap() map[string]string {
|
||||
return map[string]string{
|
||||
"user_id": fmt.Sprint(u.ID),
|
||||
"apple_user_id": u.AppleUserID,
|
||||
"name": u.Name,
|
||||
"username": u.Username,
|
||||
"email": u.Email,
|
||||
"is_private_email": fmt.Sprint(u.IsPrivateEmail),
|
||||
"email_verified": fmt.Sprint(u.EmailVerified),
|
||||
}
|
||||
}
|
||||
|
||||
func (u *User) GetName() string {
|
||||
return u.Name
|
||||
}
|
||||
@@ -42,8 +68,12 @@ func (u *User) GetUsername() string {
|
||||
return u.Username
|
||||
}
|
||||
|
||||
func (u *User) GetUserID() string {
|
||||
return u.UserID
|
||||
func (u *User) GetAppleUserID() string {
|
||||
return u.AppleUserID
|
||||
}
|
||||
|
||||
func (u *User) GetUserID() int64 {
|
||||
return int64(u.ID)
|
||||
}
|
||||
|
||||
func (u *User) GetEmail() string {
|
||||
@@ -60,9 +90,10 @@ func (u *User) GetEmailVerified() bool {
|
||||
|
||||
func (u *User) ToUser() defs.User {
|
||||
return defs.User{
|
||||
UserID: u.UserID,
|
||||
Name: u.Name,
|
||||
Username: u.Username,
|
||||
Email: u.Email,
|
||||
ID: int64(u.ID),
|
||||
AppleUserID: u.AppleUserID,
|
||||
Name: u.Name,
|
||||
Username: u.Username,
|
||||
Email: u.Email,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user