- replace bearer auth with session+CSRF flow and add admin user directory - update frontend moderation flow, force password change gate, and new CLI - refresh changelog/docs/feature plan + ensure swagger dev experience
74 lines
1.9 KiB
JavaScript
74 lines
1.9 KiB
JavaScript
const { getAgent } = require('../testServer');
|
||
|
||
const DEFAULT_CREDENTIALS = {
|
||
username: 'testadmin',
|
||
password: 'SuperSicher123!'
|
||
};
|
||
|
||
let cachedSession = null;
|
||
|
||
async function initializeSession() {
|
||
const agent = getAgent();
|
||
|
||
const statusResponse = await agent
|
||
.get('/auth/setup/status')
|
||
.expect(200);
|
||
|
||
let csrfToken;
|
||
|
||
if (statusResponse.body.needsSetup) {
|
||
const setupResponse = await agent
|
||
.post('/auth/setup/initial-admin')
|
||
.send(DEFAULT_CREDENTIALS)
|
||
.expect(201);
|
||
|
||
csrfToken = setupResponse.body?.csrfToken;
|
||
} else {
|
||
const loginResponse = await agent
|
||
.post('/auth/login')
|
||
.send(DEFAULT_CREDENTIALS);
|
||
|
||
if (loginResponse.status === 409 && loginResponse.body?.error === 'SETUP_REQUIRED') {
|
||
// Edge case: setup status may lag behind – perform setup now
|
||
const setupResponse = await agent
|
||
.post('/auth/setup/initial-admin')
|
||
.send(DEFAULT_CREDENTIALS)
|
||
.expect(201);
|
||
csrfToken = setupResponse.body?.csrfToken;
|
||
} else if (loginResponse.status !== 200) {
|
||
throw new Error(
|
||
`Failed to log in test admin (status ${loginResponse.status}): ${JSON.stringify(loginResponse.body)}`
|
||
);
|
||
} else {
|
||
csrfToken = loginResponse.body?.csrfToken;
|
||
}
|
||
}
|
||
|
||
if (!csrfToken) {
|
||
const csrfResponse = await agent.get('/auth/csrf-token').expect(200);
|
||
csrfToken = csrfResponse.body.csrfToken;
|
||
}
|
||
|
||
cachedSession = { agent, csrfToken };
|
||
return cachedSession;
|
||
}
|
||
|
||
async function getAdminSession() {
|
||
if (cachedSession) {
|
||
return cachedSession;
|
||
}
|
||
return initializeSession();
|
||
}
|
||
|
||
async function refreshCsrfToken() {
|
||
const session = await getAdminSession();
|
||
const csrfResponse = await session.agent.get('/auth/csrf-token').expect(200);
|
||
session.csrfToken = csrfResponse.body.csrfToken;
|
||
return session.csrfToken;
|
||
}
|
||
|
||
module.exports = {
|
||
getAdminSession,
|
||
refreshCsrfToken
|
||
};
|