mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
32 lines
1.4 KiB
TypeScript
32 lines
1.4 KiB
TypeScript
|
import {parseSubdomain} from 'app/common/gristUrls';
|
||
|
|
||
|
// This interface is used by the standalone login-connect tool for knowing where to redirect to,
|
||
|
// by Client.ts to construct this info, and by CognitoClient to decide what to do.
|
||
|
|
||
|
export interface LoginState {
|
||
|
// Locally-running Grist uses localPort, while hosted uses subdomain. Login-connect uses this to
|
||
|
// redirect back to the localhost or to the subdomain.
|
||
|
localPort?: number;
|
||
|
subdomain?: string;
|
||
|
baseDomain?: string; // the domain with the (left-most) subdomain removed, e.g. ".getgrist.com".
|
||
|
// undefined on localhost.
|
||
|
|
||
|
// Standalone version sets clientId, used later to find the LoginSession. Hosted and dev
|
||
|
// versions rely on the browser cookies instead, specifically on the session cookie.
|
||
|
clientId?: string;
|
||
|
|
||
|
// Hosted and dev versions set redirectUrl and redirect to it when login or logout completes.
|
||
|
// Standalone version omits redirectUrl, and serves a page which closes the window.
|
||
|
redirectUrl?: string;
|
||
|
}
|
||
|
|
||
|
/// Allowed localhost addresses.
|
||
|
export const localhostRegex = /^localhost(?::(\d+))?$/i;
|
||
|
|
||
|
export function getLoginState(reqHost: string): LoginState|null {
|
||
|
const {org, base} = parseSubdomain(reqHost);
|
||
|
const matchPort = localhostRegex.exec(reqHost);
|
||
|
return org ? {subdomain: org, baseDomain: base} :
|
||
|
matchPort ? {localPort: matchPort[1] ? parseInt(matchPort[1], 10) : 80} : null;
|
||
|
}
|