Browse Source

CoreUser settings view and logic

pull/1/head
Rob Colbert 3 years ago
parent
commit
60d0092bbc
  1. 42
      app/controllers/user.js
  2. 11
      app/services/core-node.js
  3. 15
      app/views/user/settings-core.pug
  4. 2
      app/views/user/settings.pug
  5. 5
      config/limiter.js

42
app/controllers/user.js

@ -63,6 +63,14 @@ class UserController extends SiteController {
router.param('userId', this.populateUser.bind(this)); router.param('userId', this.populateUser.bind(this));
router.param('coreUserId', this.populateCoreUser.bind(this)); router.param('coreUserId', this.populateCoreUser.bind(this));
router.post(
'/core/:userId/settings',
limiterService.create(limiterService.config.user.postUpdateCoreSettings),
checkProfileOwner,
upload.none(),
this.postUpdateCoreSettings.bind(this),
);
router.post( router.post(
'/:userId/profile-photo', '/:userId/profile-photo',
limiterService.create(limiterService.config.user.postProfilePhoto), limiterService.create(limiterService.config.user.postProfilePhoto),
@ -91,7 +99,7 @@ class UserController extends SiteController {
authRequired, authRequired,
otpMiddleware, otpMiddleware,
checkProfileOwner, checkProfileOwner,
this.getUserSettingsView.bind(this), this.getCoreUserSettingsView.bind(this),
); );
router.get( router.get(
'/core/:coreUserId', '/core/:coreUserId',
@ -250,6 +258,24 @@ class UserController extends SiteController {
} }
} }
async postUpdateCoreSettings (req, res) {
const { coreNode: coreNodeService } = this.dtp.services;
try {
const displayList = this.createDisplayList('app-settings');
await coreNodeService.updateUserSettings(req.user, req.body);
displayList.reload();
res.status(200).json({ success: true, displayList });
} catch (error) {
this.log.error('failed to update CoreUser settings', { error });
return res.status(error.statusCode || 500).json({
success: false,
message: error.message,
});
}
}
async postUpdateSettings (req, res) { async postUpdateSettings (req, res) {
const { user: userService } = this.dtp.services; const { user: userService } = this.dtp.services;
try { try {
@ -287,6 +313,18 @@ class UserController extends SiteController {
} }
} }
async getCoreUserSettingsView (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-core');
} catch (error) {
this.log.error('failed to render CoreUser settings view', { error });
return next(error);
}
}
async getUserSettingsView (req, res, next) { async getUserSettingsView (req, res, next) {
const { otpAuth: otpAuthService } = this.dtp.services; const { otpAuth: otpAuthService } = this.dtp.services;
try { try {
@ -294,7 +332,7 @@ class UserController extends SiteController {
res.locals.startTab = req.query.st || 'watch'; res.locals.startTab = req.query.st || 'watch';
res.render('user/settings'); res.render('user/settings');
} catch (error) { } catch (error) {
this.log.error('failed to produce user settings view', { error }); this.log.error('failed to render user settings view', { error });
return next(error); return next(error);
} }
} }

11
app/services/core-node.js

@ -391,6 +391,17 @@ class CoreNodeService extends SiteService {
user.type = 'CoreUser'; user.type = 'CoreUser';
return user; return user;
} }
async updateUserSettings (user, settings) {
await CoreUser.updateOne(
{ _id: user._id },
{
$set: {
theme: settings.theme,
},
},
);
}
} }
module.exports = { module.exports = {

15
app/views/user/settings-core.pug

@ -0,0 +1,15 @@
extends ../layouts/main
block content
section.uk-section.uk-section-default.uk-section-small
.uk-container
h1 Settings
form(method="POST", action=`/user/core/${userProfile._id}/settings`, onsubmit="return dtp.app.submitForm(event, 'user account update');").uk-form
.uk-margin
label(for="theme").uk-form-label UI Theme
select(id="theme", name="theme").uk-select
option(value="dtp-light", selected= user ? userProfile.theme === 'dtp-light' : true) Light Mode
option(value="dtp-dark", selected= user ? userProfile.theme === 'dtp-dark' : false) Dark Mode
.uk-margin
button(type="submit").uk-button.uk-button-primary Update settings

2
app/views/user/settings.pug

@ -108,4 +108,4 @@ block content
option(value="dtp-dark", selected= user ? userProfile.theme === 'dtp-dark' : false) Dark Mode option(value="dtp-dark", selected= user ? userProfile.theme === 'dtp-dark' : false) Dark Mode
.uk-margin .uk-margin
button(type="submit").uk-button.dtp-button-primary Update account settings button(type="submit").uk-button.uk-button-primary Update account settings

5
config/limiter.js

@ -146,6 +146,11 @@ module.exports = {
expire: ONE_MINUTE * 5, expire: ONE_MINUTE * 5,
message: 'You are updating your profile photo too quickly', message: 'You are updating your profile photo too quickly',
}, },
postUpdateCoreSettings: {
total: 4,
expire: ONE_MINUTE,
message: 'You are updating account settings too quickly',
},
postUpdateSettings: { postUpdateSettings: {
total: 4, total: 4,
expire: ONE_MINUTE, expire: ONE_MINUTE,

Loading…
Cancel
Save