Create jwt revocation endpoint

This commit is contained in:
Regalijan 2023-10-25 18:50:57 -04:00
parent 7281d73509
commit d491c3b453
Signed by: regalijan
GPG Key ID: 5D4196DA269EF520

View File

@ -1,6 +1,32 @@
import { jsonError } from "../../../common.js"; import { jsonError } from "../../../common.js";
import tokenPrefixes from "../../../../data/token_prefixes.json"; import tokenPrefixes from "../../../../data/token_prefixes.json";
export async function onRequestDelete(context: RequestContext) {
const authHeader = context.request.headers.get("authorization");
if (!authHeader) return jsonError("No token provided", 401);
const payload = JSON.parse(
atob(authHeader.split(".")[1]).replaceAll("-", "+").replaceAll("_", "/"),
);
const tokenHash = await crypto.subtle.digest(
"SHA-512",
new TextEncoder().encode(payload.jti),
);
await context.env.DATA.delete(
`auth_${btoa(String.fromCharCode(...new Uint8Array(tokenHash)))
.replaceAll("+", "-")
.replaceAll("/", "_")
.replaceAll("=", "")}`,
);
return new Response(null, {
status: 204,
});
}
export async function onRequestGet(context: RequestContext) { export async function onRequestGet(context: RequestContext) {
const { current_user: currentUser } = context.data; const { current_user: currentUser } = context.data;