From 0d277e30359d108e9b584b3cf3bbae3651520bcf Mon Sep 17 00:00:00 2001 From: Cameron Redmore Date: Fri, 25 Apr 2025 23:54:55 +0100 Subject: [PATCH] Add in registration token requirement to prevent unauthorised registrations. --- src-server/routes/auth.js | 12 ++++++++++-- src/pages/RegisterPage.vue | 38 +++++++++++++++++++++++++++++++++----- src/pages/SettingsPage.vue | 6 ++++++ src/router/routes.js | 2 +- 4 files changed, 50 insertions(+), 8 deletions(-) diff --git a/src-server/routes/auth.js b/src-server/routes/auth.js index b69860b..5280430 100644 --- a/src-server/routes/auth.js +++ b/src-server/routes/auth.js @@ -9,6 +9,7 @@ import { import { isoBase64URL } from '@simplewebauthn/server/helpers'; // Ensure this is imported if not already import prisma from '../database.js'; import { rpID, rpName, origin, challengeStore } from '../server.js'; // Import RP details and challenge store +import { getSetting } from '../utils/settings.js'; const router = express.Router(); @@ -49,13 +50,21 @@ async function getAuthenticatorByCredentialID(credentialID) router.post('/generate-registration-options', async(req, res) => { // Destructure username, email, and fullName from the request body - const { username, email, fullName } = req.body; + const { username, email, fullName, registrationToken } = req.body; if (!username) { return res.status(400).json({ error: 'Username is required' }); } + //Check if the registrationToken matches the setting + const registrationTokenSetting = await getSetting('REGISTRATION_TOKEN'); + + if (registrationTokenSetting !== registrationToken) + { + return res.status(403).json({ error: 'Invalid registration token' }); + } + try { let user = await getUserByUsername(username); @@ -71,7 +80,6 @@ router.post('/generate-registration-options', async(req, res) => data: userData, }); } - // ... rest of the existing logic ... const userAuthenticators = await getUserAuthenticators(user.id); diff --git a/src/pages/RegisterPage.vue b/src/pages/RegisterPage.vue index 0f0aacc..c04226c 100644 --- a/src/pages/RegisterPage.vue +++ b/src/pages/RegisterPage.vue @@ -35,6 +35,15 @@ :rules="[val => !!val || 'Full Name is required']" @keyup.enter="handleRegister" /> +