Move checks to separate functions

This commit is contained in:
kolaente 2020-11-19 21:07:22 +01:00
parent 7d3718396e
commit e11e7485f8
Signed by: konrad
GPG Key ID: F40E70337AB24C9B
1 changed files with 59 additions and 41 deletions

View File

@ -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
}