@humandialog/auth.svelte
Version:
Svelte package to deal with ObjectReef OAuth 2 Identity Provider
96 lines • 2.76 kB
JavaScript
//import base64url from "base64url";
export class Token {
_raw;
header;
payload;
constructor(token, parse_as_jwt = true) {
this._raw = token;
if (!parse_as_jwt)
return;
let parts;
parts = token.split('.');
let sheader = parts[0];
let spayload = parts[1];
sheader = this.decode_base64url(sheader);
spayload = this.decode_base64url(spayload);
this.header = JSON.parse(sheader);
this.payload = JSON.parse(spayload);
}
get raw() {
return this._raw;
}
get is_jwt() {
if (this.header == undefined)
return false;
if (this.header == null)
return false;
if (this.header["typ"] === "JWT")
return true;
else
return false;
}
get not_expired() {
let exp;
exp = this.get_claim("exp");
if (exp === undefined)
return false;
let margin_s = 2 * 60; // 2 min default
let iat;
iat = this.get_claim("iat");
if (iat) {
const tokenDuration_min = (exp - iat) / 60;
if (tokenDuration_min > 59) {
margin_s = 5 * 60; // 5 min
}
else if (tokenDuration_min > 29) {
margin_s = 3 * 60; // 3 min
}
else if (tokenDuration_min > 14) {
margin_s = 2 * 60; // 2 min
}
else if (tokenDuration_min > 9) {
margin_s = 1.5 * 60; // 1.5 min
}
else if (tokenDuration_min > 4) {
margin_s = 60; // 1 min
}
else {
margin_s = 15; // 15 sec
}
}
const now = Math.floor(Date.now() / 1000);
if (exp > now + margin_s)
return true;
return false;
}
get_claim(key) {
if (this.payload == undefined)
return undefined;
if (this.payload == null)
return undefined;
let v;
v = this.payload[key];
if (v === undefined)
return undefined;
return v;
}
decode_base64url(input) {
let output = input;
output = output.replace('-', '+');
output = output.replace('_', '/');
switch (output.length % 4) {
case 0:
break;
case 2:
output += "==";
break;
case 3:
output += "=";
break;
default:
return "";
}
return atob(output);
}
}
//# sourceMappingURL=Token.js.map