@@ -26,15 +26,27 @@ export async function createUser(
26
26
res : Response
27
27
) : Promise < Response > {
28
28
try {
29
- const { username, email, password } = req . body ;
29
+ const { firstName , lastName , username, email, password } = req . body ;
30
30
const existingUser = await _findUserByUsernameOrEmail ( username , email ) ;
31
31
if ( existingUser ) {
32
32
return res
33
33
. status ( 409 )
34
- . json ( { message : "username or email already exists" } ) ;
34
+ . json ( { message : "Username or email already exists" } ) ;
35
35
}
36
36
37
- if ( username && email && password ) {
37
+ if ( firstName && lastName && username && email && password ) {
38
+ const { isValid : isValidFirstName , message : firstNameMessage } =
39
+ validateName ( firstName , "first name" ) ;
40
+ if ( ! isValidFirstName ) {
41
+ return res . status ( 400 ) . json ( { message : firstNameMessage } ) ;
42
+ }
43
+
44
+ const { isValid : isValidLastName , message : lastNameMessage } =
45
+ validateName ( lastName , "last name" ) ;
46
+ if ( ! isValidLastName ) {
47
+ return res . status ( 400 ) . json ( { message : lastNameMessage } ) ;
48
+ }
49
+
38
50
const { isValid : isValidUsername , message : usernameMessage } =
39
51
validateUsername ( username ) ;
40
52
if ( ! isValidUsername ) {
@@ -55,15 +67,23 @@ export async function createUser(
55
67
56
68
const salt = bcrypt . genSaltSync ( 10 ) ;
57
69
const hashedPassword = bcrypt . hashSync ( password , salt ) ;
58
- const createdUser = await _createUser ( username , email , hashedPassword ) ;
70
+
71
+ const createdUser = await _createUser (
72
+ firstName ,
73
+ lastName ,
74
+ username ,
75
+ email ,
76
+ hashedPassword ,
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
- return res
65
- . status ( 400 )
66
- . json ( { message : "username and/or email and/or password are missing" } ) ;
83
+ return res . status ( 400 ) . json ( {
84
+ message :
85
+ "At least one of first name, last name, username, email and password are missing" ,
86
+ } ) ;
67
87
}
68
88
} catch ( err ) {
69
89
console . error ( err ) ;
@@ -120,18 +140,15 @@ export async function updateUser(
120
140
) : Promise < Response > {
121
141
try {
122
142
const {
123
- username,
124
- email,
125
- password,
143
+ oldPassword,
144
+ newPassword,
126
145
profilePictureUrl,
127
146
firstName,
128
147
lastName,
129
148
biography,
130
149
} = req . body ;
131
150
if (
132
- username ||
133
- email ||
134
- password ||
151
+ ( oldPassword && newPassword ) ||
135
152
profilePictureUrl ||
136
153
firstName ||
137
154
lastName ||
@@ -148,42 +165,23 @@ export async function updateUser(
148
165
return res . status ( 404 ) . json ( { message : `User ${ userId } not found` } ) ;
149
166
}
150
167
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" } ) ;
168
+ let hashedPassword : string | undefined ;
169
+ if ( oldPassword && newPassword ) {
170
+ const match = await bcrypt . compare ( oldPassword , user . password ) ;
171
+ if ( ! match ) {
172
+ return res
173
+ . status ( 403 )
174
+ . json ( { message : "Wrong current password given" } ) ;
174
175
}
175
- }
176
176
177
- let hashedPassword : string | undefined ;
178
- if ( password ) {
179
177
const { isValid : isValidPassword , message : passwordMessage } =
180
- validatePassword ( password ) ;
178
+ validatePassword ( newPassword ) ;
181
179
if ( ! isValidPassword ) {
182
180
return res . status ( 400 ) . json ( { message : passwordMessage } ) ;
183
181
}
184
182
185
183
const salt = bcrypt . genSaltSync ( 10 ) ;
186
- hashedPassword = bcrypt . hashSync ( password , salt ) ;
184
+ hashedPassword = bcrypt . hashSync ( newPassword , salt ) ;
187
185
}
188
186
189
187
if ( firstName ) {
@@ -212,8 +210,6 @@ export async function updateUser(
212
210
213
211
const updatedUser = await _updateUserById (
214
212
userId ,
215
- username ,
216
- email ,
217
213
hashedPassword ,
218
214
profilePictureUrl ,
219
215
firstName ,
0 commit comments