Extend PostgreSQL implementation and unit tests on MongoDB storage

This commit is contained in:
2023-05-02 00:34:33 +02:00
parent 1bf02aa132
commit c6ba00b74f
18 changed files with 870 additions and 752 deletions

View File

@@ -17,7 +17,8 @@ func (h MobilityAccountsHandler) Login(username string, password string, namespa
if password == "" {
return nil, errors.New("empty password not allowed")
}
account, err := h.storage.DB.LocalAuthentication(namespace, strings.ToLower(username), "", "")
u := strings.ToLower(username)
account, err := h.storage.DB.LocalAuthentication(namespace, &u, nil, nil)
if err != nil {
return nil, err
}
@@ -33,25 +34,34 @@ func (h MobilityAccountsHandler) Register(account storage.Account) (*storage.Acc
return nil, errors.New("id should be empty")
}
account.Authentication.Local.Username = strings.ToLower(account.Authentication.Local.Username)
account.Authentication.Local.Email = strings.ToLower(account.Authentication.Local.Email)
_, err := h.storage.DB.LocalAuthentication(account.Namespace, account.Authentication.Local.Username, account.Authentication.Local.Email, account.Authentication.Local.PhoneNumber)
if err == nil {
return nil, errors.New("user already exists")
}
// Generate new UUID
account.ID = uuid.NewString()
// If a password was sent, hash the password
if account.Authentication.Local.Password != "" {
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(account.Authentication.Local.Password), bcrypt.DefaultCost)
if err != nil {
return nil, err
if account.Authentication.Local != nil && account.Authentication.Local.Username != nil {
username := strings.ToLower(*account.Authentication.Local.Username)
account.Authentication.Local.Username = &username
}
if account.Authentication.Local != nil && account.Authentication.Local.Email != nil {
email := strings.ToLower(*account.Authentication.Local.Email)
account.Authentication.Local.Username = &email
}
//TODO remove this as we want to handle unicity in storage
if account.Authentication.Local != nil {
// If a password was sent, hash the password
if account.Authentication.Local.Password != "" {
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(account.Authentication.Local.Password), bcrypt.DefaultCost)
if err != nil {
return nil, err
}
account.Authentication.Local.Password = string(hashedPassword)
}
_, err := h.storage.DB.LocalAuthentication(account.Namespace, account.Authentication.Local.Username, account.Authentication.Local.Email, account.Authentication.Local.PhoneNumber)
if err == nil {
return nil, errors.New("user already exists")
}
account.Authentication.Local.Password = string(hashedPassword)
}
// Validate data schemas
@@ -131,13 +141,13 @@ func (h MobilityAccountsHandler) UpdatePhoneNumber(accountid, phone_number strin
return err
}
account2, err := h.storage.DB.LocalAuthentication(account.Namespace, "", "", phone_number)
account2, err := h.storage.DB.LocalAuthentication(account.Namespace, nil, nil, &phone_number)
if err == nil && account.ID != account2.ID {
return errors.New("user with this phone number already exists")
}
account.Authentication.Local.PhoneNumber = phone_number
account.Authentication.Local.PhoneNumber = &phone_number
account.Authentication.Local.PhoneNumberValidation.Validated = verified
account.Authentication.Local.PhoneNumberValidation.ValidationCode = verification_code
@@ -155,7 +165,7 @@ func (h MobilityAccountsHandler) GetAccount(id string) (account *storage.Account
}
func (h MobilityAccountsHandler) GetAccountUsername(username string, namespace string) (account *storage.Account, err error) {
account, err = h.storage.DB.LocalAuthentication(namespace, username, "", "")
account, err = h.storage.DB.LocalAuthentication(namespace, &username, nil, nil)
return
}