/**
* @module routes/room
* @author jesse reichler <mouser@donationcoder.com>
* @copyright 5/1/19
* @description
* room routes for working with the room objects
*/
"use strict";
// modules
const express = require("express");
// helpers
const JrContext = require("../helpers/jrcontext");
const JrResult = require("../helpers/jrresult");
// requirement service locator
const jrequire = require("../helpers/jrequire");
// controllers
const arserver = jrequire("arserver");
const aclAid = jrequire("aclaid");
// models
const RoomModel = jrequire("models/room");
//---------------------------------------------------------------------------
function setupRouter(urlPath) {
// create express router
const router = express.Router();
// setup route
router.get("/", routerGetIndex);
router.get("/invite", routerGetInvite);
router.post("/invite", routerPostInvite);
// return router
return router;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// router functions
async function routerGetIndex(req, res, next) {
const jrContext = JrContext.makeNew(req, res, next);
res.render("room/index", {
jrResult: jrContext.mergeSessionMessages(),
title: "Room Route",
});
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
async function routerGetInvite(req, res, next) {
const jrContext = JrContext.makeNew(req, res, next);
// require them to be logged in, or creates a redirect
const user = await arserver.lookupLoggedInUser(jrContext);
if (!arserver.requireUserIsLoggedInRenderErrorPageOrRedirect(jrContext, user)) {
// all done
return;
}
// present form
presentFormInvite(jrContext);
}
async function routerPostInvite(req, res, next) {
const jrContext = JrContext.makeNew(req, res, next);
// require them to be logged in, or creates a redirect
const user = await arserver.lookupLoggedInUser(jrContext);
if (!arserver.requireUserIsLoggedInRenderErrorPageOrRedirect(jrContext, user)) {
// all done
return;
}
// test csrf token
arserver.testCsrf(jrContext);
if (!jrContext.isError()) {
// variables from form
const roleChange = {
operation: "add",
role: req.body.role,
object: {
model: RoomModel,
id: req.body.roomId,
},
petitioner: {
user,
},
recipient: {
usernameEmailId: req.body.usernameEmailId,
},
};
// run the acl change
await aclAid.performRoleChange(jrContext, roleChange);
}
// error in form, re-present the form
presentFormInvite(jrContext);
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
function presentFormInvite(jrContext) {
jrContext.res.render("room/inviteform", {
jrResult: jrContext.mergeSessionMessages(),
title: "Invite to Room",
csrfToken: arserver.makeCsrf(jrContext),
reqBody: jrContext.req.body,
});
}
//---------------------------------------------------------------------------
module.exports = {
setupRouter,
};