@nuvo-prime/np-samlify
Version:
High-level API for Single Sign On (SAML 2.0)
44 lines (34 loc) • 1.2 kB
text/typescript
// unit is ms
type DriftTolerance = [number, number];
function verifyTime(
utcNotBefore: string | undefined,
utcNotOnOrAfter: string | undefined,
drift: DriftTolerance = [0, 0]
): boolean {
const now = new Date();
if (!utcNotBefore && !utcNotOnOrAfter) {
// show warning because user intends to have time check but the document doesn't include corresponding information
console.warn('You intend to have time validation however the document doesn\'t include the valid range.');
return true;
}
let notBeforeLocal: Date | null = null;
let notOnOrAfterLocal: Date | null = null;
const [notBeforeDrift, notOnOrAfterDrift] = drift;
if (utcNotBefore && !utcNotOnOrAfter) {
notBeforeLocal = new Date(utcNotBefore);
return +notBeforeLocal + notBeforeDrift <= +now;
}
if (!utcNotBefore && utcNotOnOrAfter) {
notOnOrAfterLocal = new Date(utcNotOnOrAfter);
return +now < +notOnOrAfterLocal + notOnOrAfterDrift;
}
notBeforeLocal = new Date(utcNotBefore!);
notOnOrAfterLocal = new Date(utcNotOnOrAfter!);
return (
+notBeforeLocal + notBeforeDrift <= +now &&
+now < +notOnOrAfterLocal + notOnOrAfterDrift
);
}
export {
verifyTime
};