@@ -21,6 +21,7 @@ import {
21
21
getUsersWithRole ,
22
22
} from "./auth-lib.js" ;
23
23
import Models from "../../database/models.js" ;
24
+ import { RouterError } from "../../middleware/error-handler.js" ;
24
25
25
26
passport . use (
26
27
Provider . GITHUB ,
@@ -53,10 +54,10 @@ authRouter.get("/test/", (_: Request, res: Response) => {
53
54
res . end ( "Auth endpoint is working!" ) ;
54
55
} ) ;
55
56
56
- authRouter . get ( "/dev/" , ( req : Request , res : Response ) => {
57
+ authRouter . get ( "/dev/" , ( req : Request , res : Response , next : NextFunction ) => {
57
58
const token : string | undefined = req . query . token as string | undefined ;
58
59
if ( ! token ) {
59
- res . status ( StatusCode . ClientErrorBadRequest ) . send ( { error : "NoToken" } ) ;
60
+ return next ( new RouterError ( StatusCode . ClientErrorBadRequest , "NoToken" ) ) ;
60
61
}
61
62
62
63
res . status ( StatusCode . SuccessOK ) . send ( { token : token } ) ;
@@ -85,7 +86,7 @@ authRouter.get("/login/github/", (req: Request, res: Response, next: NextFunctio
85
86
const device : string = ( req . query . device as string | undefined ) ?? Config . DEFAULT_DEVICE ;
86
87
87
88
if ( device && ! Config . REDIRECT_URLS . has ( device ) ) {
88
- return res . status ( StatusCode . ClientErrorBadRequest ) . send ( { error : "BadDevice" } ) ;
89
+ return next ( new RouterError ( StatusCode . ClientErrorBadRequest , "BadDevice" ) ) ;
89
90
}
90
91
return SelectAuthProvider ( "github" , device ) ( req , res , next ) ;
91
92
} ) ;
@@ -113,7 +114,7 @@ authRouter.get("/login/google/", (req: Request, res: Response, next: NextFunctio
113
114
const device : string = ( req . query . device as string | undefined ) ?? Config . DEFAULT_DEVICE ;
114
115
115
116
if ( device && ! Config . REDIRECT_URLS . has ( device ) ) {
116
- return res . status ( StatusCode . ClientErrorBadRequest ) . send ( { error : "BadDevice" } ) ;
117
+ return next ( new RouterError ( StatusCode . ClientErrorBadRequest , "BadDevice" ) ) ;
117
118
}
118
119
return SelectAuthProvider ( "google" , device ) ( req , res , next ) ;
119
120
} ) ;
@@ -127,18 +128,18 @@ authRouter.get(
127
128
const device = req . params . DEVICE ;
128
129
129
130
if ( ! device || ! Config . REDIRECT_URLS . has ( device ) ) {
130
- throw Error ( `Bad device ${ device } ` ) ;
131
+ throw Error ( `${ device } ` ) ;
131
132
}
132
133
133
134
res . locals . device = device ;
134
135
SelectAuthProvider ( provider , device ) ( req , res , next ) ;
135
136
} catch ( error ) {
136
- console . error ( error ) ;
137
+ return next ( new RouterError ( StatusCode . ClientErrorBadRequest , `Bad device ${ error } ` ) )
137
138
}
138
139
} ,
139
- async ( req : Request , res : Response ) => {
140
+ async ( req : Request , res : Response , next : NextFunction ) => {
140
141
if ( ! req . isAuthenticated ( ) ) {
141
- return res . status ( StatusCode . ClientErrorUnauthorized ) . send ( { error : "FailedAuth" } ) ;
142
+ return next ( new RouterError ( StatusCode . ClientErrorUnauthorized , "FailedAuth" ) ) ;
142
143
}
143
144
144
145
const device : string = ( res . locals . device ?? Config . DEFAULT_DEVICE ) as string ;
@@ -166,8 +167,7 @@ authRouter.get(
166
167
const url : string = `${ redirect } ?token=${ token } ` ;
167
168
return res . redirect ( url ) ;
168
169
} catch ( error ) {
169
- console . error ( error ) ;
170
- return res . status ( StatusCode . ClientErrorBadRequest ) . send ( { error : "InvalidData" } ) ;
170
+ return next ( new RouterError ( StatusCode . ClientErrorBadRequest , "InvalidData" ) ) ;
171
171
}
172
172
} ,
173
173
) ;
@@ -192,7 +192,7 @@ authRouter.get(
192
192
* @apiError (400: Bad Request) {String} UserNotFound User doesn't exist in the database.
193
193
* @apiError (403: Forbidden) {String} Forbidden API accessed by user without valid perms.
194
194
*/
195
- authRouter . get ( "/roles/:USERID" , strongJwtVerification , async ( req : Request , res : Response ) => {
195
+ authRouter . get ( "/roles/:USERID" , strongJwtVerification , async ( req : Request , res : Response , next : NextFunction ) => {
196
196
const targetUser : string | undefined = req . params . USERID ;
197
197
198
198
// Check if we have a user to get roles for - if not, get roles for current user
@@ -210,11 +210,10 @@ authRouter.get("/roles/:USERID", strongJwtVerification, async (req: Request, res
210
210
const roles : Role [ ] = await getRoles ( targetUser ) ;
211
211
return res . status ( StatusCode . SuccessOK ) . send ( { id : targetUser , roles : roles } ) ;
212
212
} catch ( error ) {
213
- console . error ( error ) ;
214
- return res . status ( StatusCode . ClientErrorBadRequest ) . send ( { error : "UserNotFound" } ) ;
213
+ return next ( new RouterError ( StatusCode . ClientErrorBadRequest , "UserNotFound" ) ) ;
215
214
}
216
215
} else {
217
- return res . status ( StatusCode . ClientErrorForbidden ) . send ( "Forbidden" ) ;
216
+ return next ( new RouterError ( StatusCode . ClientErrorForbidden , "Forbidden" ) ) ;
218
217
}
219
218
} ) ;
220
219
@@ -239,36 +238,35 @@ authRouter.get("/roles/:USERID", strongJwtVerification, async (req: Request, res
239
238
* @apiError (400: Bad Request) {String} InvalidRole Nonexistent role passed in.
240
239
* @apiUse strongVerifyErrors
241
240
*/
242
- authRouter . put ( "/roles/:OPERATION/" , strongJwtVerification , async ( req : Request , res : Response ) => {
241
+ authRouter . put ( "/roles/:OPERATION/" , strongJwtVerification , async ( req : Request , res : Response , next : NextFunction ) => {
243
242
const payload : JwtPayload = res . locals . payload as JwtPayload ;
244
243
245
244
// Not authenticated with modify roles perms
246
245
if ( ! hasElevatedPerms ( payload ) ) {
247
- return res . status ( StatusCode . ClientErrorForbidden ) . send ( { error : "Forbidden" } ) ;
246
+ return next ( new RouterError ( StatusCode . ClientErrorForbidden , "Forbidden" ) ) ;
248
247
}
249
248
250
249
// Parse to get operation type
251
250
const op : RoleOperation | undefined = RoleOperation [ req . params . operation as keyof typeof RoleOperation ] ;
252
251
253
252
// No operation - fail out
254
253
if ( ! op ) {
255
- return res . status ( StatusCode . ClientErrorBadRequest ) . send ( { error : "InvalidOperation" } ) ;
254
+ return next ( new RouterError ( StatusCode . ClientErrorBadRequest , "InvalidOperation" ) ) ;
256
255
}
257
256
258
257
// Check if role to add/remove actually exists
259
258
const data : ModifyRoleRequest = req . body as ModifyRoleRequest ;
260
259
const role : Role | undefined = Role [ data . role . toUpperCase ( ) as keyof typeof Role ] ;
261
260
if ( ! role ) {
262
- return res . status ( StatusCode . ClientErrorBadRequest ) . send ( { error : "InvalidRole" } ) ;
261
+ return next ( new RouterError ( StatusCode . ClientErrorBadRequest , "InvalidRole" ) ) ;
263
262
}
264
263
265
264
// Try to update roles, if possible
266
265
try {
267
266
const newRoles : Role [ ] = await updateRoles ( data . id , role , op ) ;
268
267
return res . status ( StatusCode . SuccessOK ) . send ( { id : data . id , roles : newRoles } ) ;
269
268
} catch ( error ) {
270
- console . error ( error ) ;
271
- return res . status ( StatusCode . ServerErrorInternal ) . send ( { error : "InternalError" } ) ;
269
+ return next ( new RouterError ( ) ) ;
272
270
}
273
271
} ) ;
274
272
@@ -289,12 +287,12 @@ authRouter.put("/roles/:OPERATION/", strongJwtVerification, async (req: Request,
289
287
* @apiError (400: Bad Request) {String} UserNotFound User doesn't exist in the database
290
288
* @apiError (403: Forbidden) {String} Forbidden API accessed by user without valid perms
291
289
*/
292
- authRouter . get ( "/list/roles/" , strongJwtVerification , ( _ : Request , res : Response ) => {
290
+ authRouter . get ( "/list/roles/" , strongJwtVerification , ( _ : Request , res : Response , next : NextFunction ) => {
293
291
const payload : JwtPayload = res . locals . payload as JwtPayload ;
294
292
295
293
// Check if current user should be able to access all roles
296
294
if ( ! hasElevatedPerms ( payload ) ) {
297
- return res . status ( StatusCode . ClientErrorForbidden ) . send ( { error : "Forbidden" } ) ;
295
+ return next ( new RouterError ( StatusCode . ClientErrorForbidden , "Forbidden" ) ) ;
298
296
}
299
297
300
298
// Filter enum to get all possible string keys
@@ -321,7 +319,7 @@ authRouter.get("/list/roles/", strongJwtVerification, (_: Request, res: Response
321
319
*
322
320
* @apiUse strongVerifyErrors
323
321
*/
324
- authRouter . get ( "/roles/" , strongJwtVerification , async ( _ : Request , res : Response ) => {
322
+ authRouter . get ( "/roles/" , strongJwtVerification , async ( _ : Request , res : Response , next : NextFunction ) => {
325
323
const payload : JwtPayload = res . locals . payload as JwtPayload ;
326
324
const targetUser : string = payload . id ;
327
325
@@ -330,8 +328,7 @@ authRouter.get("/roles/", strongJwtVerification, async (_: Request, res: Respons
330
328
return res . status ( StatusCode . SuccessOK ) . send ( { id : targetUser , roles : roles } ) ;
331
329
} )
332
330
. catch ( ( error : Error ) => {
333
- console . error ( error ) ;
334
- return res . status ( StatusCode . ClientErrorBadRequest ) . send ( { error : "UserNotFound" } ) ;
331
+ return next ( new RouterError ( StatusCode . ClientErrorBadRequest , "UserNotFound" , undefined , error . message ) ) ;
335
332
} ) ;
336
333
} ) ;
337
334
@@ -351,7 +348,7 @@ authRouter.get("/roles/", strongJwtVerification, async (_: Request, res: Respons
351
348
*
352
349
* @apiUse strongVerifyErrors
353
350
*/
354
- authRouter . get ( "/roles/list/:ROLE" , async ( req : Request , res : Response ) => {
351
+ authRouter . get ( "/roles/list/:ROLE" , async ( req : Request , res : Response , next : NextFunction ) => {
355
352
const role : string | undefined = req . params . ROLE ;
356
353
357
354
//Returns error if role parameter is empty
@@ -365,7 +362,7 @@ authRouter.get("/roles/list/:ROLE", async (req: Request, res: Response) => {
365
362
} )
366
363
. catch ( ( error : Error ) => {
367
364
console . error ( error ) ;
368
- return res . status ( StatusCode . ClientErrorBadRequest ) . send ( { error : "Unknown Error" } ) ;
365
+ return next ( new RouterError ( StatusCode . ClientErrorBadRequest , "Unknown Error" ) ) ;
369
366
} ) ;
370
367
} ) ;
371
368
@@ -383,7 +380,7 @@ authRouter.get("/roles/list/:ROLE", async (req: Request, res: Response) => {
383
380
*
384
381
* @apiUse strongVerifyErrors
385
382
*/
386
- authRouter . get ( "/token/refresh" , strongJwtVerification , async ( _ : Request , res : Response ) => {
383
+ authRouter . get ( "/token/refresh" , strongJwtVerification , async ( _ : Request , res : Response , next : NextFunction ) => {
387
384
// Get old data from token
388
385
const oldPayload : JwtPayload = res . locals . payload as JwtPayload ;
389
386
const data : ProfileData = {
@@ -399,8 +396,7 @@ authRouter.get("/token/refresh", strongJwtVerification, async (_: Request, res:
399
396
const newToken : string = generateJwtToken ( newPayload ) ;
400
397
return res . status ( StatusCode . SuccessOK ) . send ( { token : newToken } ) ;
401
398
} catch ( error ) {
402
- console . error ( error ) ;
403
- return res . status ( StatusCode . ServerErrorInternal ) . send ( { error : "InternalError" } ) ;
399
+ return next ( new RouterError ( ) ) ;
404
400
}
405
401
} ) ;
406
402
0 commit comments