Skip to content

Commit 2de0ea5

Browse files
committed
fix(update_profile): changing password if not signed up via basic
Resolves #198
1 parent f2886e6 commit 2de0ea5

File tree

1 file changed

+60
-22
lines changed

1 file changed

+60
-22
lines changed

server/resolvers/update_profile.go

Lines changed: 60 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func UpdateProfileResolver(ctx context.Context, params model.UpdateProfileInput)
4545
}
4646

4747
// validate if all params are not empty
48-
if params.GivenName == nil && params.FamilyName == nil && params.Picture == nil && params.MiddleName == nil && params.Nickname == nil && params.OldPassword == nil && params.Email == nil && params.Birthdate == nil && params.Gender == nil && params.PhoneNumber == nil {
48+
if params.GivenName == nil && params.FamilyName == nil && params.Picture == nil && params.MiddleName == nil && params.Nickname == nil && params.OldPassword == nil && params.Email == nil && params.Birthdate == nil && params.Gender == nil && params.PhoneNumber == nil && params.NewPassword == nil && params.ConfirmNewPassword == nil {
4949
log.Debug("All params are empty")
5050
return res, fmt.Errorf("please enter at least one param to update")
5151
}
@@ -61,70 +61,108 @@ func UpdateProfileResolver(ctx context.Context, params model.UpdateProfileInput)
6161
return res, err
6262
}
6363

64-
if params.GivenName != nil && user.GivenName != params.GivenName {
64+
if params.GivenName != nil && utils.StringValue(user.GivenName) != utils.StringValue(params.GivenName) {
6565
user.GivenName = params.GivenName
6666
}
6767

68-
if params.FamilyName != nil && user.FamilyName != params.FamilyName {
68+
if params.FamilyName != nil && utils.StringValue(user.FamilyName) != utils.StringValue(params.FamilyName) {
6969
user.FamilyName = params.FamilyName
7070
}
7171

72-
if params.MiddleName != nil && user.MiddleName != params.MiddleName {
72+
if params.MiddleName != nil && utils.StringValue(user.MiddleName) != utils.StringValue(params.MiddleName) {
7373
user.MiddleName = params.MiddleName
7474
}
7575

76-
if params.Nickname != nil && user.Nickname != params.Nickname {
76+
if params.Nickname != nil && utils.StringValue(user.Nickname) != utils.StringValue(params.Nickname) {
7777
user.Nickname = params.Nickname
7878
}
7979

80-
if params.Birthdate != nil && user.Birthdate != params.Birthdate {
80+
if params.Birthdate != nil && utils.StringValue(user.Birthdate) != utils.StringValue(params.Birthdate) {
8181
user.Birthdate = params.Birthdate
8282
}
8383

84-
if params.Gender != nil && user.Gender != params.Gender {
84+
if params.Gender != nil && utils.StringValue(user.Gender) != utils.StringValue(params.Gender) {
8585
user.Gender = params.Gender
8686
}
8787

88-
if params.PhoneNumber != nil && user.PhoneNumber != params.PhoneNumber {
88+
if params.PhoneNumber != nil && utils.StringValue(user.PhoneNumber) != utils.StringValue(params.PhoneNumber) {
8989
user.PhoneNumber = params.PhoneNumber
9090
}
9191

92-
if params.Picture != nil && user.Picture != params.Picture {
92+
if params.Picture != nil && utils.StringValue(user.Picture) != utils.StringValue(params.Picture) {
9393
user.Picture = params.Picture
9494
}
9595

96-
if params.OldPassword != nil {
97-
if err = bcrypt.CompareHashAndPassword([]byte(*user.Password), []byte(*params.OldPassword)); err != nil {
96+
isPasswordChanging := false
97+
if params.NewPassword != nil && params.ConfirmNewPassword == nil {
98+
isPasswordChanging = true
99+
log.Debug("confirm password is empty")
100+
return res, fmt.Errorf("confirm password is required")
101+
}
102+
103+
if params.ConfirmNewPassword != nil && params.NewPassword == nil {
104+
isPasswordChanging = true
105+
log.Debug("new password is empty")
106+
return res, fmt.Errorf("new password is required")
107+
}
108+
109+
if params.NewPassword != nil && params.ConfirmNewPassword != nil {
110+
isPasswordChanging = true
111+
}
112+
113+
if isPasswordChanging && user.Password != nil && params.OldPassword == nil {
114+
log.Debug("old password is empty")
115+
return res, fmt.Errorf("old password is required")
116+
}
117+
118+
if isPasswordChanging && user.Password != nil && params.OldPassword != nil {
119+
if err = bcrypt.CompareHashAndPassword([]byte(utils.StringValue(user.Password)), []byte(utils.StringValue(params.OldPassword))); err != nil {
98120
log.Debug("Failed to compare hash and old password: ", err)
99121
return res, fmt.Errorf("incorrect old password")
100122
}
123+
}
101124

102-
if params.NewPassword == nil {
103-
log.Debug("Failed to get new password: ")
104-
return res, fmt.Errorf("new password is required")
105-
}
125+
shouldAddBasicSignUpMethod := false
126+
isBasicAuthDisabled, err := memorystore.Provider.GetBoolStoreEnvVariable(constants.EnvKeyDisableBasicAuthentication)
127+
if err != nil {
128+
log.Debug("Error getting basic auth disabled: ", err)
129+
isBasicAuthDisabled = true
130+
}
106131

107-
if params.ConfirmNewPassword == nil {
108-
log.Debug("Failed to get confirm new password: ")
109-
return res, fmt.Errorf("confirm password is required")
132+
if params.NewPassword != nil && params.ConfirmNewPassword != nil {
133+
if isBasicAuthDisabled {
134+
log.Debug("Cannot update password as basic authentication is disabled")
135+
return res, fmt.Errorf(`basic authentication is disabled for this instance`)
110136
}
111137

112-
if *params.ConfirmNewPassword != *params.NewPassword {
138+
if utils.StringValue(params.ConfirmNewPassword) != utils.StringValue(params.NewPassword) {
113139
log.Debug("Failed to compare new password and confirm new password")
114140
return res, fmt.Errorf(`password and confirm password does not match`)
115141
}
116142

117-
password, _ := crypto.EncryptPassword(*params.NewPassword)
143+
if user.Password == nil || utils.StringValue(user.Password) == "" {
144+
shouldAddBasicSignUpMethod = true
145+
}
118146

147+
if err := validators.IsValidPassword(utils.StringValue(params.NewPassword)); err != nil {
148+
log.Debug("Invalid password")
149+
return res, err
150+
}
151+
152+
password, _ := crypto.EncryptPassword(utils.StringValue(params.NewPassword))
119153
user.Password = &password
154+
155+
if shouldAddBasicSignUpMethod {
156+
user.SignupMethods = user.SignupMethods + "," + constants.AuthRecipeMethodBasicAuth
157+
}
120158
}
121159

122160
hasEmailChanged := false
123161

124-
if params.Email != nil && user.Email != *params.Email {
162+
if params.Email != nil && user.Email != utils.StringValue(params.Email) {
125163
// check if valid email
126164
if !validators.IsValidEmail(*params.Email) {
127-
log.Debug("Failed to validate email: ", *params.Email)
165+
log.Debug("Failed to validate email: ", utils.StringValue(params.Email))
128166
return res, fmt.Errorf("invalid email address")
129167
}
130168
newEmail := strings.ToLower(*params.Email)

0 commit comments

Comments
 (0)