diff options
author | George Goldberg <george@gberg.me> | 2017-04-28 23:01:56 +0100 |
---|---|---|
committer | Corey Hulen <corey@hulen.com> | 2017-04-28 15:01:56 -0700 |
commit | 6f6b7e4e97f466ee0f29c96b7fee0d9b98ce751c (patch) | |
tree | c45e87929309d361f36d8afdf5afaac2b4f38c14 | |
parent | 96906482cecb0df21c8e1a40a2ba00c13c0182a7 (diff) | |
download | chat-6f6b7e4e97f466ee0f29c96b7fee0d9b98ce751c.tar.gz chat-6f6b7e4e97f466ee0f29c96b7fee0d9b98ce751c.tar.bz2 chat-6f6b7e4e97f466ee0f29c96b7fee0d9b98ce751c.zip |
Add Password field to Bulk Importer. (#6268)
-rw-r--r-- | app/import.go | 18 | ||||
-rw-r--r-- | app/import_test.go | 23 | ||||
-rw-r--r-- | i18n/en.json | 8 | ||||
-rw-r--r-- | model/user.go | 3 |
4 files changed, 50 insertions, 2 deletions
diff --git a/app/import.go b/app/import.go index 488cb22aa..eb51fd34e 100644 --- a/app/import.go +++ b/app/import.go @@ -52,6 +52,7 @@ type UserImportData struct { Email *string `json:"email"` AuthService *string `json:"auth_service"` AuthData *string `json:"auth_data"` + Password *string `json:"password"` Nickname *string `json:"nickname"` FirstName *string `json:"first_name"` LastName *string `json:"last_name"` @@ -429,8 +430,11 @@ func ImportUser(data *UserImportData, dryRun bool) *model.AppError { if data.AuthData != nil { authData = data.AuthData password = "" + } else if data.Password != nil { + password = *data.Password + authData = nil } else { - // If no Auth Data is specified, we must generate a password. + // If no AuthData or Password is specified, we must generate a password. password = model.NewId() authData = nil } @@ -695,10 +699,22 @@ func validateUserImportData(data *UserImportData) *model.AppError { return model.NewAppError("BulkImport", "app.import.validate_user_import_data.auth_service_length.error", nil, "", http.StatusBadRequest) } + if data.AuthData != nil && data.Password != nil { + return model.NewAppError("BulkImport", "app.import.validate_user_import_data.auth_data_and_password.error", nil, "", http.StatusBadRequest) + } + if data.AuthData != nil && len(*data.AuthData) > model.USER_AUTH_DATA_MAX_LENGTH { return model.NewAppError("BulkImport", "app.import.validate_user_import_data.auth_data_length.error", nil, "", http.StatusBadRequest) } + if data.Password != nil && len(*data.Password) == 0 { + return model.NewAppError("BulkImport", "app.import.validate_user_import_data.pasword_length.error", nil, "", http.StatusBadRequest) + } + + if data.Password != nil && len(*data.Password) > model.USER_PASSWORD_MAX_LENGTH { + return model.NewAppError("BulkImport", "app.import.validate_user_import_data.password_length.error", nil, "", http.StatusBadRequest) + } + if data.Nickname != nil && utf8.RuneCountInString(*data.Nickname) > model.USER_NICKNAME_MAX_RUNES { return model.NewAppError("BulkImport", "app.import.validate_user_import_data.nickname_length.error", nil, "", http.StatusBadRequest) } diff --git a/app/import_test.go b/app/import_test.go index 0290bd53f..27cd9f551 100644 --- a/app/import_test.go +++ b/app/import_test.go @@ -1013,6 +1013,29 @@ func TestImportImportUser(t *testing.T) { } } + // Check Password and AuthData together. + data.Password = ptrStr("PasswordTest") + if err := ImportUser(&data, false); err == nil { + t.Fatalf("Should have failed to import invalid user.") + } + + data.AuthData = nil + if err := ImportUser(&data, false); err != nil { + t.Fatalf("Should have succeeded to update valid user %v", err) + } + + data.Password = ptrStr("") + if err := ImportUser(&data, false); err == nil { + t.Fatalf("Should have failed to import invalid user.") + } + + data.Password = ptrStr(strings.Repeat("0123456789", 10)) + if err := ImportUser(&data, false); err == nil { + t.Fatalf("Should have failed to import invalid user.") + } + + data.Password = ptrStr("TestPassword") + // Test team and channel memberships teamName := model.NewId() ImportTeam(&TeamImportData{ diff --git a/i18n/en.json b/i18n/en.json index 2aa8dd150..48491e3e9 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -3096,6 +3096,14 @@ "translation": "User AuthData is too long." }, { + "id": "app.import.validate_user_import_data.auth_data_and_password.error", + "translation": "User AuthData and Password are mutually exclusive." + }, + { + "id": "app.import.validate_user_import_data.pasword_length.error", + "translation": "User Password has invalid length." + }, + { "id": "app.import.validate_user_import_data.auth_service_length.error", "translation": "User AuthService should not be empty if it is provided." }, diff --git a/model/user.go b/model/user.go index f983139f9..48d85526d 100644 --- a/model/user.go +++ b/model/user.go @@ -36,6 +36,7 @@ const ( USER_AUTH_DATA_MAX_LENGTH = 128 USER_NAME_MAX_LENGTH = 64 USER_NAME_MIN_LENGTH = 1 + USER_PASSWORD_MAX_LENGTH = 72 ) type User struct { @@ -130,7 +131,7 @@ func (u *User) IsValid() *AppError { return InvalidUserError("auth_data_pwd", u.Id) } - if len(u.Password) > 72 { + if len(u.Password) > USER_PASSWORD_MAX_LENGTH { return InvalidUserError("password_limit", u.Id) } |