mirror of
https://github.com/misenhower/splatoon2.ink.git
synced 2026-09-28 12:16:54 -05:00
57 lines
1.9 KiB
JavaScript
57 lines
1.9 KiB
JavaScript
import { test } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { generateKeyPair, SignJWT } from 'jose';
|
|
import { verifyAccess } from '../../workers/updater/src/admin/access.mjs';
|
|
|
|
const { publicKey, privateKey } = await generateKeyPair('RS256');
|
|
const env = {
|
|
ADMIN_HOSTNAME: 'admin.example.test',
|
|
ACCESS_TEAM_DOMAIN: 'example.cloudflareaccess.com',
|
|
ACCESS_AUD: 'admin-audience',
|
|
};
|
|
|
|
async function token({
|
|
audience = env.ACCESS_AUD,
|
|
issuer = 'https://' + env.ACCESS_TEAM_DOMAIN,
|
|
expires = '5m',
|
|
} = {}) {
|
|
return new SignJWT({ email: 'admin@example.test' })
|
|
.setProtectedHeader({ alg: 'RS256' })
|
|
.setSubject('user-id')
|
|
.setIssuer(issuer)
|
|
.setAudience(audience)
|
|
.setExpirationTime(expires)
|
|
.sign(privateKey);
|
|
}
|
|
|
|
function request(jwt, host = env.ADMIN_HOSTNAME) {
|
|
return new Request(`https://${host}/admin/`, {
|
|
headers: jwt ? { 'Cf-Access-Jwt-Assertion': jwt } : {},
|
|
});
|
|
}
|
|
|
|
test('validates Access signature, issuer, audience, expiration and configured hostname', async () => {
|
|
assert.deepEqual(await verifyAccess(request(await token()), env, publicKey), {
|
|
email: 'admin@example.test',
|
|
});
|
|
|
|
for (const options of [
|
|
{ audience: 'different-app' },
|
|
{ issuer: 'https://other.cloudflareaccess.com' },
|
|
{ expires: '0s' },
|
|
])
|
|
assert.equal(await verifyAccess(request(await token(options)), env, publicKey), null);
|
|
|
|
assert.equal(await verifyAccess(request(await token(), 'other.workers.dev'), env, publicKey), null);
|
|
|
|
const wrong = await generateKeyPair('RS256');
|
|
|
|
assert.equal(await verifyAccess(request(await token()), env, wrong.publicKey), null);
|
|
});
|
|
|
|
test('fails closed without configuration or a valid assertion', async () => {
|
|
assert.equal(await verifyAccess(request(), env, publicKey), null);
|
|
assert.equal(await verifyAccess(request('forged'), env, publicKey), null);
|
|
assert.equal(await verifyAccess(request(await token()), {}, publicKey), null);
|
|
});
|