don't allow going home unless profile details are complete

This commit is contained in:
counterweight 2025-02-20 23:45:13 +01:00
parent c38feef86f
commit f57a20a3a3
Signed by: counterweight
GPG key ID: 883EDBAA726BD96C
3 changed files with 26 additions and 23 deletions

View file

@ -0,0 +1,12 @@
const profileService = require('../services/profileService');
async function redirectIfMissingProfileDetailsMiddleware(req, res, next) {
const publicKey = req.cookies.publicKey;
if (!(await profileService.areProfileDetailsComplete(publicKey))) {
res.redirect('/createProfile');
}
next();
}
module.exports = redirectIfMissingProfileDetailsMiddleware;

View file

@ -4,6 +4,7 @@ const router = express.Router();
const redirectIfNotAuthorizedMiddleware = require('../middlewares/redirectIfNotAuthorizedMiddleware'); const redirectIfNotAuthorizedMiddleware = require('../middlewares/redirectIfNotAuthorizedMiddleware');
const invitesService = require('../services/invitesService'); const invitesService = require('../services/invitesService');
const attachPublicKeyMiddleware = require('../middlewares/attachPublicKeyMiddleware'); const attachPublicKeyMiddleware = require('../middlewares/attachPublicKeyMiddleware');
const redirectIfMissingProfileDetailsMiddleware = require('../middlewares/redirectIfMissingProfileDetailsMiddleware');
router.get('/', (req, res) => { router.get('/', (req, res) => {
res.render('index', { uuid: req.cookies.sessionUuid }); res.render('index', { uuid: req.cookies.sessionUuid });
@ -32,29 +33,6 @@ router.get('/invite/:inviteUuid', async (req, res) => {
return res.render('invite', { invite }); return res.render('invite', { invite });
}); });
router.get('/invite/:inviteUuid', async (req, res) => {
const { inviteUuid } = req.params;
res.cookie('inviteUuid', inviteUuid, { httpOnly: true, maxAge: 86400000 });
let invite;
try {
invite = await invitesService.getAppInvite(inviteUuid);
if (!invite) {
return res.status(404).render('error', { message: 'Invite not found.' });
}
if (await invitesService.isAppInviteSpent(inviteUuid)) {
return res.status(410).render('invite_spent', { invite });
}
} catch (error) {
console.error('Error fetching invite:', error);
return res.status(500).render('error', { message: 'An error occurred' });
}
return res.render('invite', { invite });
});
router.get( router.get(
'/createProfile', '/createProfile',
redirectIfNotAuthorizedMiddleware, redirectIfNotAuthorizedMiddleware,
@ -67,6 +45,7 @@ router.get(
'/home', '/home',
redirectIfNotAuthorizedMiddleware, redirectIfNotAuthorizedMiddleware,
attachPublicKeyMiddleware, attachPublicKeyMiddleware,
redirectIfMissingProfileDetailsMiddleware,
(req, res) => { (req, res) => {
res.render('home', {}); res.render('home', {});
} }

View file

@ -20,7 +20,19 @@ async function setNym(publicKey, nym) {
}); });
} }
async function areProfileDetailsComplete(publicKey) {
const isNymSet = await NymSet.findOne({ where: { public_key: publicKey } });
const areContactDetailsSet = await ContactDetailsSet.findOne({
where: {
public_key: publicKey,
},
});
return isNymSet && areContactDetailsSet;
}
module.exports = { module.exports = {
setContactDetails, setContactDetails,
setNym, setNym,
areProfileDetailsComplete,
}; };