Compare commits

..

No commits in common. "99d8bd6b8037fd103f087c019599e49bc37b9bfe" and "bb21f5858d09360cc2da73e804f0b4b5ce596830" have entirely different histories.

7 changed files with 16 additions and 23 deletions

View File

@ -68,6 +68,7 @@ func (h *handler) CallbackHandler() gin.HandlerFunc {
// Extract custom claims
// TODO: extract role from claims
// TODO: currently username = email, add Email in User model
var claims struct {
Email string `json:"email"`
EmailVerified bool `json:"email_verified"`
@ -84,7 +85,7 @@ func (h *handler) CallbackHandler() gin.HandlerFunc {
}
// Check user existence
u, status := h.user.ProfileOrCreate(&user.CreateData{Email: claims.Email, NickName: claims.Nickname})
u, status := h.user.ProfileOrCreate(&user.CreateData{UserName: claims.Email, NickName: claims.Nickname})
if status != e.Success {
e.Pong[any](c, status, nil)
return

View File

@ -5,11 +5,10 @@ import (
"git.0x7f.app/WOJ/woj-server/internal/model"
"git.0x7f.app/WOJ/woj-server/internal/service/user"
"github.com/gin-gonic/gin"
"net/mail"
)
type createRequest struct {
Email string `form:"email" json:"email" binding:"required"`
UserName string `form:"username" json:"username" binding:"required"`
NickName string `form:"nickname" json:"nickname" binding:"required"`
Password string `form:"password" json:"password" binding:"required"`
}
@ -20,7 +19,7 @@ type createRequest struct {
// @Tags user
// @Accept application/x-www-form-urlencoded
// @Produce json
// @Param email formData string true "email"
// @Param username formData string true "username"
// @Param nickname formData string true "nickname"
// @Param password formData string true "password"
// @Response 200 {object} e.Response[string] "jwt token"
@ -32,16 +31,9 @@ func (h *handler) Create(c *gin.Context) {
return
}
// verify email is valid
_, err := mail.ParseAddress(req.Email)
if err != nil {
e.Pong[any](c, e.InvalidParameter, nil)
return
}
// create user
createData := &user.CreateData{
Email: req.Email,
UserName: req.UserName,
NickName: req.NickName,
Password: req.Password,
}

View File

@ -8,7 +8,7 @@ import (
)
type loginRequest struct {
Email string `form:"email" json:"email" binding:"required"`
UserName string `form:"username" json:"username" binding:"required"`
Password string `form:"password" json:"password" binding:"required"`
}
@ -23,7 +23,7 @@ type LoginResponse struct {
// @Tags user
// @Accept application/x-www-form-urlencoded
// @Produce json
// @Param email formData string true "email"
// @Param username formData string true "username"
// @Param password formData string true "password"
// @Response 200 {object} e.Response[LoginResponse] "jwt token and user's nickname"
// @Router /v1/user/login [post]
@ -36,7 +36,7 @@ func (h *handler) Login(c *gin.Context) {
// check password
loginData := &user.LoginData{
Email: req.Email,
UserName: req.UserName,
Password: req.Password,
}
u, status := h.userService.Login(loginData)

View File

@ -6,8 +6,8 @@ import (
type User struct {
gorm.Model `json:"meta"`
Email string `json:"email" gorm:"not null;uniqueIndex"`
NickName string `json:"nick_name" gorm:"not null;uniqueIndex"`
UserName string `json:"user_name" gorm:"not null;uniqueIndex"`
NickName string `json:"nick_name" gorm:"not null"`
Role Role `json:"role" gorm:"not null"`
Password []byte `json:"-"`
IsEnabled bool `json:"is_enabled" gorm:"not null;index"`

View File

@ -9,7 +9,7 @@ import (
)
type CreateData struct {
Email string
UserName string
NickName string
Password string
}
@ -22,7 +22,7 @@ func (s *service) Create(data *CreateData) (*model.User, e.Status) {
}
user := &model.User{
Email: data.Email,
UserName: data.UserName,
NickName: data.NickName,
Password: hashed,
Role: model.RoleGeneral,

View File

@ -10,12 +10,12 @@ import (
)
type LoginData struct {
Email string
UserName string
Password string
}
func (s *service) Login(data *LoginData) (*model.User, e.Status) {
user := &model.User{Email: data.Email}
user := &model.User{UserName: data.UserName}
err := s.db.Get().Where(user).First(&user).Error
if errors.Is(err, gorm.ErrRecordNotFound) {

View File

@ -25,7 +25,7 @@ func (s *service) Profile(uid uint) (*model.User, e.Status) {
func (s *service) ProfileOrCreate(data *CreateData) (*model.User, e.Status) {
user := &model.User{
Email: data.Email,
UserName: data.UserName,
NickName: data.NickName,
Role: model.RoleGeneral,
IsEnabled: true,
@ -33,7 +33,7 @@ func (s *service) ProfileOrCreate(data *CreateData) (*model.User, e.Status) {
// Notice: FirstOrCreate will not update the record if it exists, and also we should not update the record
// Notice: OAuth2 created user will not have password
err := s.db.Get().Where(model.User{Email: data.Email}).FirstOrCreate(&user, data).Error
err := s.db.Get().Where(model.User{UserName: data.UserName}).FirstOrCreate(&user, data).Error
if err != nil {
s.log.Warn("DatabaseError", zap.Error(err), zap.Any("user", user))
return nil, e.DatabaseError