Move checks to separate functions
This commit is contained in:
parent
7d3718396e
commit
e11e7485f8
|
@ -33,50 +33,16 @@ func CreateUser(user *User) (newUser *User, err error) {
|
|||
newUser.Issuer = "local"
|
||||
}
|
||||
|
||||
// Check if we have all needed informations
|
||||
if (newUser.Issuer != "local" && newUser.Subject == "") ||
|
||||
(newUser.Issuer == "local" && (newUser.Password == "" ||
|
||||
newUser.Username == "" ||
|
||||
newUser.Email == "")) {
|
||||
return &User{}, ErrNoUsernamePassword{}
|
||||
}
|
||||
|
||||
// Check if the user already existst with that username
|
||||
exists := true
|
||||
_, err = GetUserByUsername(newUser.Username)
|
||||
// Check if we have all needed information
|
||||
err = checkIfUserIsValid(newUser)
|
||||
if err != nil {
|
||||
if IsErrUserDoesNotExist(err) {
|
||||
exists = false
|
||||
} else {
|
||||
return &User{}, err
|
||||
}
|
||||
}
|
||||
if exists {
|
||||
return &User{}, ErrUsernameExists{newUser.ID, newUser.Username}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Check if the user already existst with that email
|
||||
exists = true
|
||||
userToCheck := &User{
|
||||
Email: newUser.Email,
|
||||
Issuer: newUser.Issuer,
|
||||
Subject: newUser.Subject,
|
||||
}
|
||||
|
||||
if newUser.Issuer != "local" {
|
||||
userToCheck.Email = ""
|
||||
}
|
||||
|
||||
_, err = GetUser(userToCheck)
|
||||
// Check if the user already exists with that username
|
||||
err = checkIfUserExists(newUser)
|
||||
if err != nil {
|
||||
if IsErrUserDoesNotExist(err) {
|
||||
exists = false
|
||||
} else {
|
||||
return &User{}, err
|
||||
}
|
||||
}
|
||||
if exists && newUser.Issuer == "local" {
|
||||
return &User{}, ErrUserEmailExists{newUser.ID, newUser.Email}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if newUser.Issuer == "local" {
|
||||
|
@ -112,7 +78,7 @@ func CreateUser(user *User) (newUser *User, err error) {
|
|||
return &User{}, err
|
||||
}
|
||||
|
||||
// Dont send a mail if we're testing
|
||||
// Dont send a mail if no mailer is configured
|
||||
if !config.MailerEnabled.GetBool() {
|
||||
return newUserOut, err
|
||||
}
|
||||
|
@ -133,3 +99,55 @@ func hashPassword(password string) (string, error) {
|
|||
bytes, err := bcrypt.GenerateFromPassword([]byte(password), 11)
|
||||
return string(bytes), err
|
||||
}
|
||||
|
||||
func checkIfUserIsValid(user *User) error {
|
||||
if (user.Issuer != "local" && user.Subject == "") ||
|
||||
(user.Issuer == "local" && (user.Password == "" ||
|
||||
user.Username == "" ||
|
||||
user.Email == "")) {
|
||||
return ErrNoUsernamePassword{}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func checkIfUserExists(user *User) (err error) {
|
||||
exists := true
|
||||
_, err = GetUserByUsername(user.Username)
|
||||
if err != nil {
|
||||
if IsErrUserDoesNotExist(err) {
|
||||
exists = false
|
||||
} else {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if exists {
|
||||
return ErrUsernameExists{user.ID, user.Username}
|
||||
}
|
||||
|
||||
// Check if the user already existst with that email
|
||||
exists = true
|
||||
userToCheck := &User{
|
||||
Email: user.Email,
|
||||
Issuer: user.Issuer,
|
||||
Subject: user.Subject,
|
||||
}
|
||||
|
||||
if user.Issuer != "local" {
|
||||
userToCheck.Email = ""
|
||||
}
|
||||
|
||||
_, err = GetUser(userToCheck)
|
||||
if err != nil {
|
||||
if IsErrUserDoesNotExist(err) {
|
||||
exists = false
|
||||
} else {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if exists && user.Issuer == "local" {
|
||||
return ErrUserEmailExists{user.ID, user.Email}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue