mirror of
https://github.com/khairul169/vaulterm.git
synced 2026-09-15 17:03:30 +07:00
feat: add register page
This commit is contained in:
@@ -13,9 +13,12 @@ func NewRepository() *Auth {
|
||||
return &Auth{db: db.Get()}
|
||||
}
|
||||
|
||||
func (r *Auth) FindUser(username string) (*models.User, error) {
|
||||
func (r *Auth) FindUser(username string, email string) (*models.User, error) {
|
||||
var user models.User
|
||||
ret := r.db.Where("username = ? OR email = ?", username, username).First(&user)
|
||||
if email == "" {
|
||||
email = username
|
||||
}
|
||||
ret := r.db.Where("username = ? OR email = ?", username, email).First(&user)
|
||||
|
||||
return &user, ret.Error
|
||||
}
|
||||
@@ -48,3 +51,10 @@ func (r *Auth) RemoveUserSession(sessionId string, force bool) error {
|
||||
res := db.Delete(&models.UserSession{ID: sessionId})
|
||||
return res.Error
|
||||
}
|
||||
|
||||
func (r *Auth) CreateUser(user *models.User) (string, error) {
|
||||
if err := r.db.Create(user).Error; err != nil {
|
||||
return "", err
|
||||
}
|
||||
return r.CreateUserSession(user)
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"rul.sh/vaulterm/lib"
|
||||
"rul.sh/vaulterm/middleware"
|
||||
"rul.sh/vaulterm/models"
|
||||
"rul.sh/vaulterm/utils"
|
||||
)
|
||||
|
||||
@@ -12,6 +13,7 @@ func Router(app *fiber.App) {
|
||||
|
||||
router.Post("/login", login)
|
||||
router.Get("/user", middleware.Protected(), getUser)
|
||||
router.Post("/register", register)
|
||||
router.Post("/logout", middleware.Protected(), logout)
|
||||
}
|
||||
|
||||
@@ -26,7 +28,7 @@ func login(c *fiber.Ctx) error {
|
||||
}
|
||||
}
|
||||
|
||||
user, err := repo.FindUser(body.Username)
|
||||
user, err := repo.FindUser(body.Username, "")
|
||||
if err != nil {
|
||||
return &fiber.Error{
|
||||
Code: fiber.StatusUnauthorized,
|
||||
@@ -71,6 +73,49 @@ func getUser(c *fiber.Ctx) error {
|
||||
})
|
||||
}
|
||||
|
||||
func register(c *fiber.Ctx) error {
|
||||
repo := NewRepository()
|
||||
|
||||
var body RegisterSchema
|
||||
if err := c.BodyParser(&body); err != nil {
|
||||
return &fiber.Error{
|
||||
Code: fiber.StatusBadRequest,
|
||||
Message: err.Error(),
|
||||
}
|
||||
}
|
||||
|
||||
exist, _ := repo.FindUser(body.Username, body.Email)
|
||||
if exist.ID != "" {
|
||||
return &fiber.Error{
|
||||
Code: fiber.StatusBadRequest,
|
||||
Message: "Username or email already exists",
|
||||
}
|
||||
}
|
||||
|
||||
password, err := lib.HashPassword(body.Password)
|
||||
if err != nil {
|
||||
return utils.ResponseError(c, err, 500)
|
||||
}
|
||||
|
||||
user := &models.User{
|
||||
Name: body.Name,
|
||||
Username: body.Username,
|
||||
Email: body.Email,
|
||||
Password: password,
|
||||
Role: models.UserRoleUser,
|
||||
}
|
||||
|
||||
sessionId, err := repo.CreateUser(user)
|
||||
if err != nil {
|
||||
return utils.ResponseError(c, err, 500)
|
||||
}
|
||||
|
||||
return c.JSON(fiber.Map{
|
||||
"user": user,
|
||||
"sessionId": sessionId,
|
||||
})
|
||||
}
|
||||
|
||||
func logout(c *fiber.Ctx) error {
|
||||
force := c.Query("force")
|
||||
sessionId := c.Locals("sessionId").(string)
|
||||
|
||||
@@ -18,3 +18,10 @@ type GetUserResult struct {
|
||||
middleware.AuthUser
|
||||
Teams []TeamWithRole `json:"teams"`
|
||||
}
|
||||
|
||||
type RegisterSchema struct {
|
||||
Name string `json:"name"`
|
||||
Username string `json:"username"`
|
||||
Email string `json:"email"`
|
||||
Password string `json:"password"`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user