Browse Source

room settings

develop
Rob Colbert 1 year ago
parent
commit
dea8bc5119
  1. 42
      app/controllers/chat.js
  2. 21
      app/views/chat/room/settings.pug
  3. 6
      app/views/layout/main.pug

42
app/controllers/chat.js

@ -29,6 +29,20 @@ export default class ChatController extends SiteController {
const authRequired = sessionService.authCheckMiddleware({ requireLogin: true });
const multer = this.createMulter(ChatController.slug);
async function requireRoomOwner (req, res, next) {
if (!req.user) {
return next(new SiteError(403, 'Must be logged in to proceed'));
}
if (!res.locals.room) {
return next(new SiteError(403, 'Room not found'));
}
if (!res.locals.room.owner._id.equals(req.user._id)) {
return next(new SiteError(403, 'This is not your room'));
}
return next();
}
const router = express.Router();
this.dtp.app.use('/chat', router);
@ -48,6 +62,12 @@ export default class ChatController extends SiteController {
this.postRoomMessage.bind(this),
);
router.post(
'/room/:roomId/settings',
requireRoomOwner,
this.postRoomSettings.bind(this),
);
router.post(
'/room',
// limiterService.create(limiterService.config.chat.postCreateRoom),
@ -71,6 +91,13 @@ export default class ChatController extends SiteController {
this.getRoomMessages.bind(this),
);
router.get(
'/room/:roomId/settings',
// limiterService.create(limiterService.config.chat.getRoomMessages),
requireRoomOwner,
this.getRoomSettingsView.bind(this),
);
router.get(
'/room/:roomId',
// limiterService.create(limiterService.config.chat.getRoomView),
@ -124,6 +151,17 @@ export default class ChatController extends SiteController {
}
}
async postRoomSettings (req, res, next) {
const { chat: chatService } = this.dtp.services;
try {
await chatService.updateRoomSettings(res.locals.room, req.body);
res.redirect(`/chat/room/${res.locals.room._id}`);
} catch (error) {
this.log.error('failed to present the room settings view', { error });
return next(error);
}
}
async postCreateRoom (req, res, next) {
const { chat: chatService } = this.dtp.services;
try {
@ -162,6 +200,10 @@ export default class ChatController extends SiteController {
}
}
async getRoomSettingsView (req, res) {
res.render('chat/room/settings');
}
async getRoomView (req, res, next) {
const { chat: chatService } = this.dtp.services;
try {

21
app/views/chat/room/settings.pug

@ -0,0 +1,21 @@
extends ../../layout/main
block view-content
.uk-section.uk-section-default
.uk-container
form(method="POST", action= `/chat/room/${room._id}/settings`).uk-form
.uk-card.uk-card-default.uk-card-small
.uk-card-header
h1.uk-card-title Room Settings
.uk-card-body
.uk-margin
label(for="name") Room Name
input(id="name", name="name", type="text", placeholder="Enter room name", value= room.name).uk-input
.uk-margin
label(for="topic") Topic
input(id="topic", name="topic", type="text", placeholder="Enter room topic or leave blank", value= room.topic).uk-input
.uk-card-footer.uk-flex.uk-flex-right
button(type="submit").uk-button.uk-button-default.uk-border-rounded Save Settings

6
app/views/layout/main.pug

@ -25,9 +25,9 @@ html(lang='en', data-obs-widget= obsWidget)
block viewcss
block js
script(async, src=`/fontawesome/js/fontawesome.min.js?v=${pkg.version}`)
script(src=`/uikit/dist/js/uikit.min.js?v=${pkg.version}`)
script(src=`/uikit/dist/js/uikit-icons.min.js?v=${pkg.version}`)
script(async, src=`/fontawesome/js/fontawesome.min.js?v=${pkg.version}`, type="module")
script(src=`/uikit/dist/js/uikit.min.js?v=${pkg.version}`, type="module")
script(src=`/uikit/dist/js/uikit-icons.min.js?v=${pkg.version}`, type="module")
block pwa-support
include ../components/pwa-support

Loading…
Cancel
Save