@ -31,6 +31,12 @@ class UserController extends SiteController {
dtp . app . use ( '/user' , router ) ;
const authRequired = sessionService . authCheckMiddleware ( { requireLogin : true } ) ;
const otpSetup = otpAuthService . middleware ( 'Account' , {
adminRequired : false ,
otpRequired : true ,
otpRedirectURL : async ( req ) => { return ` /user/ ${ req . user . _ id } ` ; } ,
} ) ;
const otpMiddleware = otpAuthService . middleware ( 'Account' , {
adminRequired : false ,
otpRequired : false ,
@ -58,31 +64,52 @@ class UserController extends SiteController {
router . param ( 'userId' , this . populateUser . bind ( this ) ) ;
router . post ( '/:userId/profile-photo' ,
router . post (
'/:userId/profile-photo' ,
limiterService . create ( limiterService . config . user . postProfilePhoto ) ,
checkProfileOwner ,
upload . single ( 'imageFile' ) ,
this . postProfilePhoto . bind ( this ) ,
) ;
router . post ( '/:userId/settings' ,
router . post (
'/:userId/settings' ,
limiterService . create ( limiterService . config . user . postUpdateSettings ) ,
checkProfileOwner ,
upload . none ( ) ,
this . postUpdateSettings . bind ( this ) ,
) ;
router . post ( '/' ,
router . post (
'/' ,
limiterService . create ( limiterService . config . user . postCreate ) ,
this . postCreateUser . bind ( this ) ,
) ;
router . get ( '/:userId/settings' ,
router . get (
'/:userId/otp-setup' ,
limiterService . create ( limiterService . config . user . getOtpSetup ) ,
otpSetup ,
this . getOtpSetup . bind ( this ) ,
) ;
router . get (
'/:userId/otp-disable' ,
limiterService . create ( limiterService . config . user . getOtpDisable ) ,
authRequired ,
this . getOtpDisable . bind ( this ) ,
) ;
router . get (
'/:userId/settings' ,
limiterService . create ( limiterService . config . user . getSettings ) ,
authRequired ,
otpMiddleware ,
checkProfileOwner ,
this . getUserSettingsView . bind ( this ) ,
) ;
router . get ( '/:userId' ,
router . get (
'/:userId' ,
limiterService . create ( limiterService . config . user . getUserProfile ) ,
authRequired ,
otpMiddleware ,
@ -90,7 +117,8 @@ class UserController extends SiteController {
this . getUserView . bind ( this ) ,
) ;
router . delete ( '/:userId/profile-photo' ,
router . delete (
'/:userId/profile-photo' ,
limiterService . create ( limiterService . config . user . deleteProfilePhoto ) ,
authRequired ,
checkProfileOwner ,
@ -214,8 +242,29 @@ class UserController extends SiteController {
}
}
async getOtpSetup ( req , res ) {
res . render ( 'user/otp-setup-complete' ) ;
}
async getOtpDisable ( req , res ) {
const { otpAuth : otpAuthService } = this . dtp . services ;
try {
await otpAuthService . destroyOtpSession ( req , 'Account' ) ;
await otpAuthService . removeForUser ( req . user , 'Account' ) ;
res . render ( 'user/otp-disabled' ) ;
} catch ( error ) {
this . log . error ( 'failed to disable OTP service for Account' , { error } ) ;
res . status ( error . statusCode || 500 ) . json ( {
success : false ,
message : error . message ,
} ) ;
}
}
async getUserSettingsView ( req , res , next ) {
const { otpAuth : otpAuthService } = this . dtp . services ;
try {
res . locals . hasOtpAccount = await otpAuthService . isUserProtected ( req . user , 'Account' ) ;
res . locals . startTab = req . query . st || 'watch' ;
res . render ( 'user/settings' ) ;
} catch ( error ) {