@@ -17,6 +17,7 @@ import { Redis } from "../../redis/Redis";
1717import { RedisKeys } from "../../redis/RedisKeys" ;
1818import { randomSequence } from "../../utils/random" ;
1919import { respond } from "../../utils/response" ;
20+ import { isHttpUrl } from "../../utils/url" ;
2021
2122const ManagedHandler = Router ( ) ;
2223
@@ -35,44 +36,50 @@ const LoginSchema = Type.Object({
3536 password : Type . String ( { minLength : 4 , maxLength : 1 << 10 } ) ,
3637} ) ;
3738
38- ManagedHandler . post ( "/login" , useValidation ( LoginSchema , { body : true } ) , async ( req , res ) => {
39- const managedUser = await Database . selectOneFrom ( "managed_users" , "*" , {
40- email : req . body . email ,
41- } ) ;
39+ ManagedHandler . post (
40+ "/login" ,
41+ useCaptchaSchema ,
42+ useCaptcha ,
43+ useValidation ( LoginSchema , { body : true } ) ,
44+ async ( req , res ) => {
45+ const managedUser = await Database . selectOneFrom ( "managed_users" , "*" , {
46+ email : req . body . email ,
47+ } ) ;
4248
43- if ( ! managedUser ) throw new SafeError ( StatusCodes . UNAUTHORIZED ) ;
49+ if ( ! managedUser ) throw new SafeError ( StatusCodes . UNAUTHORIZED ) ;
4450
45- const verifyResult = await verify ( managedUser . password , req . body . password ) ;
51+ const verifyResult = await verify ( managedUser . password , req . body . password ) ;
4652
47- if ( ! verifyResult ) throw new SafeError ( StatusCodes . UNAUTHORIZED ) ;
53+ if ( ! verifyResult ) throw new SafeError ( StatusCodes . UNAUTHORIZED ) ;
4854
49- const user = await Database . selectOneFrom ( "users" , "*" , {
50- id : managedUser . id ,
51- } ) ;
55+ const user = await Database . selectOneFrom ( "users" , "*" , {
56+ id : managedUser . id ,
57+ } ) ;
5258
53- if ( ! user ) throw new SafeError ( StatusCodes . INTERNAL_SERVER_ERROR ) ;
59+ if ( ! user ) throw new SafeError ( StatusCodes . INTERNAL_SERVER_ERROR ) ;
5460
55- if ( ! managedUser . confirmed_at ) {
56- const confirmationCode = await Redis . get (
57- RedisKeys . MANAGED_USER_CONFIRMATION_CODE ( managedUser . id )
58- ) ;
61+ if ( ! managedUser . confirmed_at ) {
62+ const confirmationCode = await Redis . get (
63+ RedisKeys . MANAGED_USER_CONFIRMATION_CODE ( managedUser . id )
64+ ) ;
5965
60- if ( confirmationCode !== null ) {
61- throw new SafeError ( StatusCodes . UNPROCESSABLE_ENTITY ) ;
62- }
66+ if ( confirmationCode !== null ) {
67+ throw new SafeError ( StatusCodes . UNPROCESSABLE_ENTITY ) ;
68+ }
6369
64- await processEmailVerification ( user ) ;
70+ await processEmailVerification ( user ) ;
6571
66- throw new SafeError ( StatusCodes . UNPROCESSABLE_ENTITY , "verification-repeat" ) ;
67- }
72+ throw new SafeError ( StatusCodes . UNPROCESSABLE_ENTITY , "verification-repeat" ) ;
73+ }
6874
69- await processLogin ( user , {
70- newLogin : false ,
71- confirm : true ,
72- } ) ;
75+ await processLogin ( user , {
76+ newLogin : false ,
77+ confirm : true ,
78+ } ) ;
7379
74- return respond ( res , StatusCodes . OK , { token : generateJwt ( user . id , "managed" , { } ) } ) ;
75- } ) ;
80+ return respond ( res , StatusCodes . OK , { token : generateJwt ( user . id , "managed" , { } ) } ) ;
81+ }
82+ ) ;
7683
7784const RegisterSchema = Type . Object ( {
7885 email : Type . RegEx ( / ^ [ ^ @ ] + @ [ ^ @ ] + \. [ ^ @ ] + $ / ) ,
@@ -87,6 +94,9 @@ ManagedHandler.post(
8794 useCaptcha ,
8895 useValidation ( RegisterSchema , { body : true } ) ,
8996 async ( req , res ) => {
97+ if ( req . body . picture_url && ! isHttpUrl ( req . body . picture_url ) )
98+ throw new SafeError ( StatusCodes . BAD_REQUEST ) ;
99+
90100 const existingUser = await Database . selectOneFrom ( "users" , [ "id" ] , {
91101 email : req . body . email . toLowerCase ( ) ,
92102 } ) ;
0 commit comments