Add steam as a type
This commit is contained in:
parent
1ce90839fe
commit
05e737cb11
|
@ -10,13 +10,19 @@ export interface Code {
|
||||||
/** A unique id for the corresponding "auth entity" in our system. */
|
/** A unique id for the corresponding "auth entity" in our system. */
|
||||||
id?: String;
|
id?: String;
|
||||||
/** The type of the code. */
|
/** The type of the code. */
|
||||||
type: "totp" | "hotp";
|
type: "totp" | "hotp" | "steam";
|
||||||
/** The user's account or email for which this code is used. */
|
/** The user's account or email for which this code is used. */
|
||||||
account?: string;
|
account?: string;
|
||||||
/** The name of the entity that issued this code. */
|
/** The name of the entity that issued this code. */
|
||||||
issuer: string;
|
issuer: string;
|
||||||
/** Number of digits in the generated OTP. */
|
/**
|
||||||
digits: number;
|
* Length of the generated OTP.
|
||||||
|
*
|
||||||
|
* This is vernacularly called "digits", which is an accurate description
|
||||||
|
* for the OG TOTP/HOTP codes. However, steam codes are not just digits, so
|
||||||
|
* we name this as a content-neutral "length".
|
||||||
|
*/
|
||||||
|
length: number;
|
||||||
/**
|
/**
|
||||||
* The time period (in seconds) for which a single OTP generated from this
|
* The time period (in seconds) for which a single OTP generated from this
|
||||||
* code remains valid.
|
* code remains valid.
|
||||||
|
@ -85,7 +91,7 @@ const _codeFromURIString = (id: string, uriString: string): Code => {
|
||||||
type,
|
type,
|
||||||
account: parseAccount(path),
|
account: parseAccount(path),
|
||||||
issuer: parseIssuer(url, path),
|
issuer: parseIssuer(url, path),
|
||||||
digits: parseDigits(url),
|
length: parseLength(url),
|
||||||
period: parsePeriod(url),
|
period: parsePeriod(url),
|
||||||
secret: parseSecret(url),
|
secret: parseSecret(url),
|
||||||
algorithm: parseAlgorithm(url),
|
algorithm: parseAlgorithm(url),
|
||||||
|
@ -130,8 +136,17 @@ const parseIssuer = (url: URL, path: string): string => {
|
||||||
return p;
|
return p;
|
||||||
};
|
};
|
||||||
|
|
||||||
const parseDigits = (url: URL): number =>
|
/**
|
||||||
parseInt(url.searchParams.get("digits") ?? "", 10) || 6;
|
* Parse the length of the generated code.
|
||||||
|
*
|
||||||
|
* The URI query param is called digits since originally TOTP/HOTP codes used
|
||||||
|
* this for generating numeric codes. Now we also support steam, which instead
|
||||||
|
* shows non-numeric codes, and also with a different default length of 5.
|
||||||
|
*/
|
||||||
|
const parseLength = (url: URL, type: Code["type"]): number => {
|
||||||
|
const defaultLength = type == "steam" ? 5 : 6;
|
||||||
|
return parseInt(url.searchParams.get("digits") ?? "", 10) || defaultLength;
|
||||||
|
};
|
||||||
|
|
||||||
const parsePeriod = (url: URL): number =>
|
const parsePeriod = (url: URL): number =>
|
||||||
parseInt(url.searchParams.get("period") ?? "", 10) || 30;
|
parseInt(url.searchParams.get("period") ?? "", 10) || 30;
|
||||||
|
|
Loading…
Reference in a new issue