File size: 625 Bytes
c09f67c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import { timingSafeEqual } from "node:crypto";
import { hash } from "@midday/encryption";
export type OAuthApplication = {
id: string;
active: boolean | null;
clientSecret: string;
};
export function validateClientCredentials(
application: OAuthApplication | null | undefined,
clientSecret: string,
): boolean {
if (!application || !application.active) {
return false;
}
const hashedSecret = hash(clientSecret);
const storedSecret = application.clientSecret;
// Use timing-safe comparison to prevent timing attacks
return timingSafeEqual(Buffer.from(storedSecret), Buffer.from(hashedSecret));
}
|