added record.SetRandomPassword() helper and updated oauth2 autogenerated password handling
This commit is contained in:
@@ -27,9 +27,9 @@ type RecordUpsert struct {
|
||||
accessLevel int
|
||||
|
||||
// extra password fields
|
||||
Password string `form:"password" json:"password"`
|
||||
PasswordConfirm string `form:"passwordConfirm" json:"passwordConfirm"`
|
||||
OldPassword string `form:"oldPassword" json:"oldPassword"`
|
||||
password string
|
||||
passwordConfirm string
|
||||
oldPassword string
|
||||
}
|
||||
|
||||
// NewRecordUpsert creates a new [RecordUpsert] form from the provided [core.App] and [core.Record] instances
|
||||
@@ -93,13 +93,13 @@ func (form *RecordUpsert) Load(data map[string]any) {
|
||||
// load the special auth form fields
|
||||
if isAuth {
|
||||
if v, ok := data["password"]; ok {
|
||||
form.Password = cast.ToString(v)
|
||||
form.password = cast.ToString(v)
|
||||
}
|
||||
if v, ok := data["passwordConfirm"]; ok {
|
||||
form.PasswordConfirm = cast.ToString(v)
|
||||
form.passwordConfirm = cast.ToString(v)
|
||||
}
|
||||
if v, ok := data["oldPassword"]; ok {
|
||||
form.OldPassword = cast.ToString(v)
|
||||
form.oldPassword = cast.ToString(v)
|
||||
}
|
||||
|
||||
excludeFields = append(excludeFields, "passwordConfirm", "oldPassword") // skip non-schema password fields
|
||||
@@ -137,9 +137,9 @@ func (form *RecordUpsert) validateFormFields() error {
|
||||
validateData := map[string]any{
|
||||
"email": form.record.Email(),
|
||||
"verified": form.record.Verified(),
|
||||
"password": form.Password,
|
||||
"passwordConfirm": form.PasswordConfirm,
|
||||
"oldPassword": form.OldPassword,
|
||||
"password": form.password,
|
||||
"passwordConfirm": form.passwordConfirm,
|
||||
"oldPassword": form.oldPassword,
|
||||
}
|
||||
|
||||
return validation.Validate(validateData,
|
||||
@@ -165,17 +165,17 @@ func (form *RecordUpsert) validateFormFields() error {
|
||||
validation.Key(
|
||||
"password",
|
||||
validation.When(
|
||||
(isNew || form.PasswordConfirm != "" || form.OldPassword != ""),
|
||||
(isNew || form.passwordConfirm != "" || form.oldPassword != ""),
|
||||
validation.Required,
|
||||
),
|
||||
),
|
||||
validation.Key(
|
||||
"passwordConfirm",
|
||||
validation.When(
|
||||
(isNew || form.Password != "" || form.OldPassword != ""),
|
||||
(isNew || form.password != "" || form.oldPassword != ""),
|
||||
validation.Required,
|
||||
),
|
||||
validation.By(validators.Equal(form.Password)),
|
||||
validation.By(validators.Equal(form.password)),
|
||||
),
|
||||
validation.Key(
|
||||
"oldPassword",
|
||||
@@ -183,7 +183,7 @@ func (form *RecordUpsert) validateFormFields() error {
|
||||
// - form.HasManageAccess() is not satisfied
|
||||
// - changing the existing password
|
||||
validation.When(
|
||||
!isNew && !form.HasManageAccess() && (form.Password != "" || form.PasswordConfirm != ""),
|
||||
!isNew && !form.HasManageAccess() && (form.password != "" || form.passwordConfirm != ""),
|
||||
validation.Required,
|
||||
validation.By(form.checkOldPassword),
|
||||
),
|
||||
|
||||
@@ -64,15 +64,15 @@ func TestRecordUpsertLoad(t *testing.T) {
|
||||
`"text":"test_text"`,
|
||||
`"number":456`,
|
||||
`"select_many":["optionB","optionC"]`,
|
||||
`"password":""`,
|
||||
`"oldPassword":""`,
|
||||
`"passwordConfirm":""`,
|
||||
`"created":""`,
|
||||
`"updated":""`,
|
||||
`"json":null`,
|
||||
},
|
||||
notExpected: []string{
|
||||
`"custom"`,
|
||||
`"password"`,
|
||||
`"oldPassword"`,
|
||||
`"passwordConfirm"`,
|
||||
`"select_many-"`,
|
||||
`"select_many+"`,
|
||||
},
|
||||
@@ -89,9 +89,11 @@ func TestRecordUpsertLoad(t *testing.T) {
|
||||
record: core.NewRecord(usersCol),
|
||||
expected: []string{
|
||||
`"email":"test@example.com"`,
|
||||
`"oldPassword":"123"`,
|
||||
`"password":"456"`,
|
||||
`"passwordConfirm":"789"`,
|
||||
},
|
||||
notExpected: []string{
|
||||
`"oldPassword"`,
|
||||
`"passwordConfirm"`,
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -110,8 +112,10 @@ func TestRecordUpsertLoad(t *testing.T) {
|
||||
`"email":"test@example.com"`,
|
||||
`"tokenKey":""`,
|
||||
`"password":"456"`,
|
||||
`"oldPassword":"123"`,
|
||||
`"passwordConfirm":"789"`,
|
||||
},
|
||||
notExpected: []string{
|
||||
`"oldPassword"`,
|
||||
`"passwordConfirm"`,
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -130,8 +134,10 @@ func TestRecordUpsertLoad(t *testing.T) {
|
||||
`"email":"test@example.com"`,
|
||||
`"tokenKey":"abc"`,
|
||||
`"password":"456"`,
|
||||
`"oldPassword":"123"`,
|
||||
`"passwordConfirm":"789"`,
|
||||
},
|
||||
notExpected: []string{
|
||||
`"oldPassword"`,
|
||||
`"passwordConfirm"`,
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -168,11 +174,7 @@ func TestRecordUpsertLoad(t *testing.T) {
|
||||
|
||||
form.Load(s.data)
|
||||
|
||||
loaded := map[string]any{
|
||||
"oldPassword": form.OldPassword,
|
||||
"password": form.Password,
|
||||
"passwordConfirm": form.PasswordConfirm,
|
||||
}
|
||||
loaded := map[string]any{}
|
||||
maps.Copy(loaded, s.record.FieldsData())
|
||||
maps.Copy(loaded, s.record.CustomData())
|
||||
|
||||
|
||||
Reference in New Issue
Block a user