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