19 lines
653 B
TypeScript
19 lines
653 B
TypeScript
import { decryptSecretWithKey } from "@homarr/common/server";
|
|
|
|
export const ensureValidTokenOrThrow = (checksum: string | undefined, encryptionToken: string | null | undefined) => {
|
|
if (!encryptionToken || !checksum) return;
|
|
|
|
const [first, second] = checksum.split("\n");
|
|
if (!first || !second) throw new Error("Malformed checksum");
|
|
|
|
const key = Buffer.from(encryptionToken, "hex");
|
|
let decrypted: string;
|
|
try {
|
|
decrypted = decryptSecretWithKey(second as `${string}.${string}`, key);
|
|
} catch {
|
|
throw new Error("Invalid checksum");
|
|
}
|
|
const isValid = decrypted === first;
|
|
if (!isValid) throw new Error("Invalid checksum");
|
|
};
|