Files
frp-panel/biz/master/auth/register.go
2025-04-29 16:49:02 +00:00

70 lines
1.9 KiB
Go

package auth
import (
"fmt"
"github.com/VaalaCat/frp-panel/defs"
"github.com/VaalaCat/frp-panel/models"
"github.com/VaalaCat/frp-panel/pb"
"github.com/VaalaCat/frp-panel/services/app"
"github.com/VaalaCat/frp-panel/services/dao"
"github.com/VaalaCat/frp-panel/utils"
"github.com/google/uuid"
)
func RegisterHandler(c *app.Context, req *pb.RegisterRequest) (*pb.RegisterResponse, error) {
username := req.GetUsername()
password := req.GetPassword()
email := req.GetEmail()
if username == "" || password == "" || email == "" {
return &pb.RegisterResponse{
Status: &pb.Status{Code: pb.RespCode_RESP_CODE_INVALID, Message: "invalid username or password or email"},
}, fmt.Errorf("invalid username or password or email")
}
userCount, err := dao.NewQuery(c).AdminCountUsers()
if err != nil {
return &pb.RegisterResponse{
Status: &pb.Status{Code: pb.RespCode_RESP_CODE_INVALID, Message: err.Error()},
}, err
}
if !c.GetApp().GetConfig().App.EnableRegister && userCount > 0 {
return &pb.RegisterResponse{
Status: &pb.Status{Code: pb.RespCode_RESP_CODE_INVALID, Message: "register is disabled"},
}, fmt.Errorf("register is disabled")
}
hashedPassword, err := utils.HashPassword(password)
if err != nil {
return &pb.RegisterResponse{
Status: &pb.Status{Code: pb.RespCode_RESP_CODE_INVALID, Message: err.Error()},
}, err
}
newUser := &models.UserEntity{
UserName: username,
Password: hashedPassword,
Email: email,
Status: models.STATUS_NORMAL,
Role: defs.UserRole_Normal,
Token: uuid.New().String(),
}
if userCount == 0 {
newUser.Role = defs.UserRole_Admin
}
err = dao.NewQuery(c).CreateUser(newUser)
if err != nil {
return &pb.RegisterResponse{
Status: &pb.Status{Code: pb.RespCode_RESP_CODE_INVALID, Message: err.Error()},
}, err
}
return &pb.RegisterResponse{
Status: &pb.Status{Code: pb.RespCode_RESP_CODE_SUCCESS, Message: "ok"},
}, nil
}