@@ -26,15 +26,15 @@ export async function createUser(
26
26
res : Response
27
27
) : Promise < Response > {
28
28
try {
29
- const { username, email, password } = req . body ;
29
+ const { username, email, password, firstName , lastName } = req . body ;
30
30
const existingUser = await _findUserByUsernameOrEmail ( username , email ) ;
31
31
if ( existingUser ) {
32
32
return res
33
33
. status ( 409 )
34
34
. json ( { message : "username or email already exists" } ) ;
35
35
}
36
36
37
- if ( username && email && password ) {
37
+ if ( username && email && password && firstName && lastName ) {
38
38
const { isValid : isValidUsername , message : usernameMessage } =
39
39
validateUsername ( username ) ;
40
40
if ( ! isValidUsername ) {
@@ -55,15 +55,37 @@ export async function createUser(
55
55
56
56
const salt = bcrypt . genSaltSync ( 10 ) ;
57
57
const hashedPassword = bcrypt . hashSync ( password , salt ) ;
58
- const createdUser = await _createUser ( username , email , hashedPassword ) ;
58
+
59
+ const { isValid : isValidFirstName , message : firstNameMessage } =
60
+ validateName ( firstName , "first name" ) ;
61
+ if ( ! isValidFirstName ) {
62
+ return res . status ( 400 ) . json ( { message : firstNameMessage } ) ;
63
+ }
64
+
65
+ const { isValid : isValidLastName , message : lastNameMessage } =
66
+ validateName ( lastName , "last name" ) ;
67
+ if ( ! isValidLastName ) {
68
+ return res . status ( 400 ) . json ( { message : lastNameMessage } ) ;
69
+ }
70
+
71
+ const createdUser = await _createUser (
72
+ username ,
73
+ email ,
74
+ hashedPassword ,
75
+ firstName ,
76
+ lastName
77
+ ) ;
59
78
return res . status ( 201 ) . json ( {
60
79
message : `Created new user ${ username } successfully` ,
61
80
data : formatUserResponse ( createdUser ) ,
62
81
} ) ;
63
82
} else {
64
83
return res
65
84
. status ( 400 )
66
- . json ( { message : "username and/or email and/or password are missing" } ) ;
85
+ . json ( {
86
+ message :
87
+ "username and/or email and/or password and/or first name and/or last name are missing" ,
88
+ } ) ;
67
89
}
68
90
} catch ( err ) {
69
91
console . error ( err ) ;
@@ -120,18 +142,15 @@ export async function updateUser(
120
142
) : Promise < Response > {
121
143
try {
122
144
const {
123
- username,
124
- email,
125
- password,
145
+ oldPassword,
146
+ newPassword,
126
147
profilePictureUrl,
127
148
firstName,
128
149
lastName,
129
150
biography,
130
151
} = req . body ;
131
152
if (
132
- username ||
133
- email ||
134
- password ||
153
+ ( oldPassword && newPassword ) ||
135
154
profilePictureUrl ||
136
155
firstName ||
137
156
lastName ||
@@ -148,42 +167,23 @@ export async function updateUser(
148
167
return res . status ( 404 ) . json ( { message : `User ${ userId } not found` } ) ;
149
168
}
150
169
151
- if ( username ) {
152
- const { isValid : isValidUsername , message : usernameMessage } =
153
- validateUsername ( username ) ;
154
- if ( ! isValidUsername ) {
155
- return res . status ( 400 ) . json ( { message : usernameMessage } ) ;
156
- }
157
-
158
- const existingUser = await _findUserByUsername ( username ) ;
159
- if ( existingUser && existingUser . id !== userId ) {
160
- return res . status ( 409 ) . json ( { message : "username already exists" } ) ;
161
- }
162
- }
163
-
164
- if ( email ) {
165
- const { isValid : isValidEmail , message : emailMessage } =
166
- validateEmail ( email ) ;
167
- if ( ! isValidEmail ) {
168
- return res . status ( 400 ) . json ( { message : emailMessage } ) ;
169
- }
170
-
171
- const existingUser = await _findUserByEmail ( email ) ;
172
- if ( existingUser && existingUser . id !== userId ) {
173
- return res . status ( 409 ) . json ( { message : "email already exists" } ) ;
170
+ let hashedPassword : string | undefined ;
171
+ if ( oldPassword && newPassword ) {
172
+ const match = await bcrypt . compare ( oldPassword , user . password ) ;
173
+ if ( ! match ) {
174
+ return res
175
+ . status ( 403 )
176
+ . json ( { message : "Wrong current password given" } ) ;
174
177
}
175
- }
176
178
177
- let hashedPassword : string | undefined ;
178
- if ( password ) {
179
179
const { isValid : isValidPassword , message : passwordMessage } =
180
- validatePassword ( password ) ;
180
+ validatePassword ( newPassword ) ;
181
181
if ( ! isValidPassword ) {
182
182
return res . status ( 400 ) . json ( { message : passwordMessage } ) ;
183
183
}
184
184
185
185
const salt = bcrypt . genSaltSync ( 10 ) ;
186
- hashedPassword = bcrypt . hashSync ( password , salt ) ;
186
+ hashedPassword = bcrypt . hashSync ( newPassword , salt ) ;
187
187
}
188
188
189
189
if ( firstName ) {
@@ -212,8 +212,6 @@ export async function updateUser(
212
212
213
213
const updatedUser = await _updateUserById (
214
214
userId ,
215
- username ,
216
- email ,
217
215
hashedPassword ,
218
216
profilePictureUrl ,
219
217
firstName ,
0 commit comments