@deephaven/auth-plugins 0.37.4-logout.21 → 0.37.4-relative-links.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"AuthPluginParent.d.ts","sourceRoot":"","sources":["../src/AuthPluginParent.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAmB,MAAM,cAAc,CAAC;AAiC3D,QAAA,MAAM,gBAAgB,EAAE,UAIvB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"AuthPluginParent.d.ts","sourceRoot":"","sources":["../src/AuthPluginParent.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAmB,MAAM,cAAc,CAAC;AAyC3D,QAAA,MAAM,gBAAgB,EAAE,UAIvB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -1,3 +1,5 @@
1
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
2
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
1
3
  import React from 'react';
2
4
  import { LOGIN_OPTIONS_REQUEST, requestParentResponse } from '@deephaven/jsapi-utils';
3
5
  import Log from '@deephaven/log';
@@ -7,9 +9,22 @@ var log = Log.module('AuthPluginParent');
7
9
  var permissionsOverrides = {
8
10
  canLogout: false
9
11
  };
12
+ function isLoginOptions(options) {
13
+ return options != null && typeof options.type === 'string';
14
+ }
10
15
  function getLoginOptions() {
11
- log.info('Logging in by delegating to parent window...');
12
- return requestParentResponse(LOGIN_OPTIONS_REQUEST);
16
+ return _getLoginOptions.apply(this, arguments);
17
+ }
18
+ function _getLoginOptions() {
19
+ _getLoginOptions = _asyncToGenerator(function* () {
20
+ log.info('Logging in by delegating to parent window...');
21
+ var response = yield requestParentResponse(LOGIN_OPTIONS_REQUEST);
22
+ if (!isLoginOptions(response)) {
23
+ throw new Error("Unexpected login options response: ".concat(response));
24
+ }
25
+ return response;
26
+ });
27
+ return _getLoginOptions.apply(this, arguments);
13
28
  }
14
29
  function getWindowAuthProvider() {
15
30
  var _URLSearchParams$get;
@@ -1 +1 @@
1
- {"version":3,"file":"AuthPluginParent.js","names":["React","LOGIN_OPTIONS_REQUEST","requestParentResponse","Log","AuthPluginBase","UserPermissionsOverrideContext","log","module","permissionsOverrides","canLogout","getLoginOptions","info","getWindowAuthProvider","URLSearchParams","window","location","search","get","Component","children","AuthPluginParent","isAvailable","opener"],"sources":["../src/AuthPluginParent.tsx"],"sourcesContent":["import React from 'react';\nimport { LoginOptions } from '@deephaven/jsapi-types';\nimport {\n LOGIN_OPTIONS_REQUEST,\n requestParentResponse,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { AuthPlugin, AuthPluginProps } from './AuthPlugin';\nimport AuthPluginBase from './AuthPluginBase';\nimport {\n UserPermissionsOverride,\n UserPermissionsOverrideContext,\n} from './UserContexts';\n\nconst log = Log.module('AuthPluginParent');\n\nconst permissionsOverrides: UserPermissionsOverride = { canLogout: false };\n\nfunction getLoginOptions(): Promise<LoginOptions> {\n log.info('Logging in by delegating to parent window...');\n return requestParentResponse<LoginOptions>(LOGIN_OPTIONS_REQUEST);\n}\n\nfunction getWindowAuthProvider(): string {\n return new URLSearchParams(window.location.search).get('authProvider') ?? '';\n}\n\n/**\n * AuthPlugin that tries to delegate to the parent window for authentication. Fails if there is no parent window.\n */\nfunction Component({ children }: AuthPluginProps): JSX.Element {\n return (\n <AuthPluginBase getLoginOptions={getLoginOptions}>\n <UserPermissionsOverrideContext.Provider value={permissionsOverrides}>\n {children}\n </UserPermissionsOverrideContext.Provider>\n </AuthPluginBase>\n );\n}\n\nconst AuthPluginParent: AuthPlugin = {\n Component,\n isAvailable: () =>\n window.opener != null && getWindowAuthProvider() === 'parent',\n};\n\nexport default AuthPluginParent;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SACEC,qBAAqB,EACrBC,qBAAqB,QAChB,wBAAwB;AAC/B,OAAOC,GAAG,MAAM,gBAAgB;AAAC,OAE1BC,cAAc;AAAA,SAGnBC,8BAA8B;AAGhC,IAAMC,GAAG,GAAGH,GAAG,CAACI,MAAM,CAAC,kBAAkB,CAAC;AAE1C,IAAMC,oBAA6C,GAAG;EAAEC,SAAS,EAAE;AAAM,CAAC;AAE1E,SAASC,eAAe,GAA0B;EAChDJ,GAAG,CAACK,IAAI,CAAC,8CAA8C,CAAC;EACxD,OAAOT,qBAAqB,CAAeD,qBAAqB,CAAC;AACnE;AAEA,SAASW,qBAAqB,GAAW;EAAA;EACvC,+BAAO,IAAIC,eAAe,CAACC,MAAM,CAACC,QAAQ,CAACC,MAAM,CAAC,CAACC,GAAG,CAAC,cAAc,CAAC,uEAAI,EAAE;AAC9E;;AAEA;AACA;AACA;AACA,SAASC,SAAS,OAA6C;EAAA,IAA5C;IAAEC;EAA0B,CAAC;EAC9C,oBACE,oBAAC,cAAc;IAAC,eAAe,EAAET;EAAgB,gBAC/C,oBAAC,8BAA8B,CAAC,QAAQ;IAAC,KAAK,EAAEF;EAAqB,GAClEW,QAAQ,CAC+B,CAC3B;AAErB;AAEA,IAAMC,gBAA4B,GAAG;EACnCF,SAAS;EACTG,WAAW,EAAE,MACXP,MAAM,CAACQ,MAAM,IAAI,IAAI,IAAIV,qBAAqB,EAAE,KAAK;AACzD,CAAC;AAED,eAAeQ,gBAAgB"}
1
+ {"version":3,"file":"AuthPluginParent.js","names":["React","LOGIN_OPTIONS_REQUEST","requestParentResponse","Log","AuthPluginBase","UserPermissionsOverrideContext","log","module","permissionsOverrides","canLogout","isLoginOptions","options","type","getLoginOptions","info","response","Error","getWindowAuthProvider","URLSearchParams","window","location","search","get","Component","children","AuthPluginParent","isAvailable","opener"],"sources":["../src/AuthPluginParent.tsx"],"sourcesContent":["import React from 'react';\nimport { LoginOptions } from '@deephaven/jsapi-types';\nimport {\n LOGIN_OPTIONS_REQUEST,\n requestParentResponse,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { AuthPlugin, AuthPluginProps } from './AuthPlugin';\nimport AuthPluginBase from './AuthPluginBase';\nimport {\n UserPermissionsOverride,\n UserPermissionsOverrideContext,\n} from './UserContexts';\n\nconst log = Log.module('AuthPluginParent');\n\nconst permissionsOverrides: UserPermissionsOverride = { canLogout: false };\n\nfunction isLoginOptions(options: unknown): options is LoginOptions {\n return options != null && typeof (options as LoginOptions).type === 'string';\n}\n\nasync function getLoginOptions(): Promise<LoginOptions> {\n log.info('Logging in by delegating to parent window...');\n const response = await requestParentResponse(LOGIN_OPTIONS_REQUEST);\n if (!isLoginOptions(response)) {\n throw new Error(`Unexpected login options response: ${response}`);\n }\n return response;\n}\n\nfunction getWindowAuthProvider(): string {\n return new URLSearchParams(window.location.search).get('authProvider') ?? '';\n}\n\n/**\n * AuthPlugin that tries to delegate to the parent window for authentication. Fails if there is no parent window.\n */\nfunction Component({ children }: AuthPluginProps): JSX.Element {\n return (\n <AuthPluginBase getLoginOptions={getLoginOptions}>\n <UserPermissionsOverrideContext.Provider value={permissionsOverrides}>\n {children}\n </UserPermissionsOverrideContext.Provider>\n </AuthPluginBase>\n );\n}\n\nconst AuthPluginParent: AuthPlugin = {\n Component,\n isAvailable: () =>\n window.opener != null && getWindowAuthProvider() === 'parent',\n};\n\nexport default AuthPluginParent;\n"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SACEC,qBAAqB,EACrBC,qBAAqB,QAChB,wBAAwB;AAC/B,OAAOC,GAAG,MAAM,gBAAgB;AAAC,OAE1BC,cAAc;AAAA,SAGnBC,8BAA8B;AAGhC,IAAMC,GAAG,GAAGH,GAAG,CAACI,MAAM,CAAC,kBAAkB,CAAC;AAE1C,IAAMC,oBAA6C,GAAG;EAAEC,SAAS,EAAE;AAAM,CAAC;AAE1E,SAASC,cAAc,CAACC,OAAgB,EAA2B;EACjE,OAAOA,OAAO,IAAI,IAAI,IAAI,OAAQA,OAAO,CAAkBC,IAAI,KAAK,QAAQ;AAC9E;AAAC,SAEcC,eAAe;EAAA;AAAA;AAAA;EAAA,qCAA9B,aAAwD;IACtDP,GAAG,CAACQ,IAAI,CAAC,8CAA8C,CAAC;IACxD,IAAMC,QAAQ,SAASb,qBAAqB,CAACD,qBAAqB,CAAC;IACnE,IAAI,CAACS,cAAc,CAACK,QAAQ,CAAC,EAAE;MAC7B,MAAM,IAAIC,KAAK,8CAAuCD,QAAQ,EAAG;IACnE;IACA,OAAOA,QAAQ;EACjB,CAAC;EAAA;AAAA;AAED,SAASE,qBAAqB,GAAW;EAAA;EACvC,+BAAO,IAAIC,eAAe,CAACC,MAAM,CAACC,QAAQ,CAACC,MAAM,CAAC,CAACC,GAAG,CAAC,cAAc,CAAC,uEAAI,EAAE;AAC9E;;AAEA;AACA;AACA;AACA,SAASC,SAAS,OAA6C;EAAA,IAA5C;IAAEC;EAA0B,CAAC;EAC9C,oBACE,oBAAC,cAAc;IAAC,eAAe,EAAEX;EAAgB,gBAC/C,oBAAC,8BAA8B,CAAC,QAAQ;IAAC,KAAK,EAAEL;EAAqB,GAClEgB,QAAQ,CAC+B,CAC3B;AAErB;AAEA,IAAMC,gBAA4B,GAAG;EACnCF,SAAS;EACTG,WAAW,EAAE,MACXP,MAAM,CAACQ,MAAM,IAAI,IAAI,IAAIV,qBAAqB,EAAE,KAAK;AACzD,CAAC;AAED,eAAeQ,gBAAgB"}
@@ -1,4 +1,8 @@
1
- import { AuthPlugin } from './AuthPlugin';
1
+ import { AuthPlugin, AuthPluginProps } from './AuthPlugin';
2
+ export type AuthPluginPskProps = AuthPluginProps & {
3
+ /** Custom path to a logo to display on the login screen */
4
+ logoPath?: string;
5
+ };
2
6
  declare const AuthPluginPsk: AuthPlugin;
3
7
  export default AuthPluginPsk;
4
8
  //# sourceMappingURL=AuthPluginPsk.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuthPluginPsk.d.ts","sourceRoot":"","sources":["../src/AuthPluginPsk.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAmB,MAAM,cAAc,CAAC;AA2M3D,QAAA,MAAM,aAAa,EAAE,UAGpB,CAAC;AAEF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"AuthPluginPsk.d.ts","sourceRoot":"","sources":["../src/AuthPluginPsk.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAsC3D,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG;IACjD,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAuKF,QAAA,MAAM,aAAa,EAAE,UAGpB,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -39,14 +39,14 @@ function storeCookieToken(token) {
39
39
  Cookies.remove(PSK_TOKEN_KEY);
40
40
  }
41
41
  }
42
-
43
42
  /**
44
43
  * AuthPlugin that tries to login using a pre-shared key.
45
44
  * Add the `psk=<token>` parameter to your URL string to set the token.
46
45
  */
47
46
  function Component(_ref) {
48
47
  var {
49
- children
48
+ children,
49
+ logoPath
50
50
  } = _ref;
51
51
  var client = useClient();
52
52
  var inputField = useRef(null);
@@ -170,7 +170,9 @@ function Component(_ref) {
170
170
  classNames: "fade",
171
171
  mountOnEnter: true,
172
172
  unmountOnExit: true
173
- }, /*#__PURE__*/React.createElement(Login, null, /*#__PURE__*/React.createElement(LoginForm, {
173
+ }, /*#__PURE__*/React.createElement(Login, {
174
+ logoPath: logoPath
175
+ }, /*#__PURE__*/React.createElement(LoginForm, {
174
176
  errorMessage: getErrorMessage(error),
175
177
  isLoggingIn: isLoggingIn,
176
178
  onSubmit: handleSubmit
@@ -1 +1 @@
1
- {"version":3,"file":"AuthPluginPsk.js","names":["React","useCallback","useEffect","useRef","useState","CSSTransition","LoadingOverlay","ThemeExport","useClient","useBroadcastLoginListener","Log","getErrorMessage","Cookies","LoginForm","Login","AuthenticationError","AUTH_TYPE","PSK_QUERY_PARAM_KEY","PSK_TOKEN_KEY","log","module","getWindowToken","URLSearchParams","window","location","search","get","clearWindowToken","debug2","url","URL","href","searchParams","delete","history","replaceState","readCookieToken","storeCookieToken","token","set","secure","sameSite","remove","Component","children","client","inputField","loginPromise","error","setError","isInputRequired","setIsInputRequired","isLoggedIn","setIsLoggedIn","isLoggingIn","setIsLoggingIn","setToken","login","loginToken","showError","info","newLoginPromise","type","current","e","message","cancelLogin","onLogin","debug","newToken","onLogout","isCanceled","initialLogin","initialToken","handleSubmit","autoFocusInput","focus","transitionMs","event","undefined","target","value","AuthPluginPsk","isAvailable","authHandlers","includes"],"sources":["../src/AuthPluginPsk.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport { LoadingOverlay, ThemeExport } from '@deephaven/components';\nimport { useClient } from '@deephaven/jsapi-bootstrap';\nimport { useBroadcastLoginListener } from '@deephaven/jsapi-components';\nimport Log from '@deephaven/log';\nimport { getErrorMessage } from '@deephaven/utils';\nimport Cookies from 'js-cookie';\nimport { AuthPlugin, AuthPluginProps } from './AuthPlugin';\nimport LoginForm from './LoginForm';\nimport Login from './Login';\nimport AuthenticationError from './AuthenticationError';\n\nconst AUTH_TYPE = 'io.deephaven.authentication.psk.PskAuthenticationHandler';\n\nconst PSK_QUERY_PARAM_KEY = 'psk';\n\nconst PSK_TOKEN_KEY = 'io.deephaven.web.client.auth.psk.token';\n\nconst log = Log.module('AuthPluginPsk');\n\nfunction getWindowToken(): string | null {\n return new URLSearchParams(window.location.search).get(PSK_QUERY_PARAM_KEY);\n}\n\nfunction clearWindowToken() {\n log.debug2('clearWindowToken');\n const url = new URL(window.location.href);\n url.searchParams.delete(PSK_QUERY_PARAM_KEY);\n\n window.history.replaceState(null, '', url.href);\n}\n\nfunction readCookieToken(): string | null {\n return Cookies.get(PSK_TOKEN_KEY) ?? null;\n}\n\nfunction storeCookieToken(token: string | null): void {\n log.debug2('Storing token in cookie', token);\n if (token != null) {\n Cookies.set(PSK_TOKEN_KEY, token, { secure: true, sameSite: 'strict' });\n } else {\n Cookies.remove(PSK_TOKEN_KEY);\n }\n}\n\n/**\n * AuthPlugin that tries to login using a pre-shared key.\n * Add the `psk=<token>` parameter to your URL string to set the token.\n */\nfunction Component({ children }: AuthPluginProps): JSX.Element {\n const client = useClient();\n const inputField = useRef<HTMLInputElement>(null);\n const loginPromise = useRef<Promise<void> | null>(null);\n const [error, setError] = useState<unknown>();\n const [isInputRequired, setIsInputRequired] = useState(false);\n const [isLoggedIn, setIsLoggedIn] = useState(false);\n const [isLoggingIn, setIsLoggingIn] = useState(false);\n const [token, setToken] = useState('');\n\n const login = useCallback(\n // eslint-disable-next-line @typescript-eslint/no-inferrable-types\n async (loginToken: string, showError: boolean = true) => {\n log.info('Logging in...');\n setIsLoggingIn(true);\n let newLoginPromise: Promise<void> | null = null;\n try {\n newLoginPromise = client.login({ type: AUTH_TYPE, token: loginToken });\n loginPromise.current = newLoginPromise;\n await newLoginPromise;\n\n log.info('Logged in successfully');\n if (loginPromise.current !== newLoginPromise) {\n return;\n }\n storeCookieToken(loginToken);\n setIsLoggedIn(true);\n } catch (e) {\n if (loginPromise.current !== newLoginPromise) {\n return;\n }\n setIsInputRequired(true);\n if (showError) {\n log.error('Unable to login', e);\n const message =\n getErrorMessage(e) ?? 'Unable to login: Verify credentials.';\n setError(new AuthenticationError(message));\n }\n }\n setIsLoggingIn(false);\n },\n [client]\n );\n\n const cancelLogin = useCallback(() => {\n loginPromise.current = null;\n setIsLoggingIn(false);\n }, []);\n\n const onLogin = useCallback(async () => {\n log.debug('onLogin');\n\n // User logged in successfully in another tab, we should be able to read the token from the cookie and login\n const newToken = readCookieToken();\n if (isLoggedIn || isLoggingIn || newToken == null) {\n return;\n }\n\n login(newToken, false);\n }, [isLoggedIn, isLoggingIn, login]);\n const onLogout = useCallback(() => {\n storeCookieToken(null);\n }, []);\n useBroadcastLoginListener(onLogin, onLogout);\n\n useEffect(() => {\n let isCanceled = false;\n async function initialLogin() {\n const initialToken = getWindowToken() ?? readCookieToken();\n clearWindowToken();\n\n if (initialToken == null) {\n setIsInputRequired(true);\n return;\n }\n\n setIsLoggingIn(true);\n try {\n await client.login({ type: AUTH_TYPE, token: initialToken });\n if (!isCanceled) {\n storeCookieToken(initialToken);\n setIsLoggedIn(true);\n setIsLoggingIn(false);\n }\n } catch (e) {\n if (!isCanceled) {\n setIsInputRequired(true);\n setIsLoggingIn(false);\n }\n }\n }\n initialLogin();\n return () => {\n isCanceled = true;\n };\n }, [client]);\n\n const handleSubmit = useCallback(() => {\n if (!isLoggingIn) {\n login(token);\n } else {\n cancelLogin();\n }\n }, [cancelLogin, isLoggingIn, login, token]);\n\n useEffect(\n function autoFocusInput() {\n inputField.current?.focus();\n },\n [inputField, isInputRequired]\n );\n\n return (\n <>\n {isLoggedIn && children}\n {isInputRequired && (\n <CSSTransition\n in={!isLoggedIn}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <Login>\n <LoginForm\n errorMessage={getErrorMessage(error)}\n isLoggingIn={isLoggingIn}\n onSubmit={handleSubmit}\n >\n <div className=\"form-group\">\n <label htmlFor=\"auth-psk-token-input\">Token</label>\n <input\n id=\"auth-psk-token-input\"\n name=\"token\"\n className=\"input-token form-control\"\n type=\"text\"\n autoComplete=\"username\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n ref={inputField}\n value={token}\n onChange={event => {\n setError(undefined);\n setToken(event.target.value);\n }}\n />\n </div>\n </LoginForm>\n </Login>\n </CSSTransition>\n )}\n <LoadingOverlay\n data-testid=\"auth-psk-loading\"\n isLoaded={isLoggedIn || isInputRequired}\n isLoading={!isLoggedIn && !isInputRequired}\n />\n </>\n );\n}\n\nconst AuthPluginPsk: AuthPlugin = {\n Component,\n isAvailable: authHandlers => authHandlers.includes(AUTH_TYPE),\n};\n\nexport default AuthPluginPsk;\n"],"mappings":"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"}
1
+ {"version":3,"file":"AuthPluginPsk.js","names":["React","useCallback","useEffect","useRef","useState","CSSTransition","LoadingOverlay","ThemeExport","useClient","useBroadcastLoginListener","Log","getErrorMessage","Cookies","LoginForm","Login","AuthenticationError","AUTH_TYPE","PSK_QUERY_PARAM_KEY","PSK_TOKEN_KEY","log","module","getWindowToken","URLSearchParams","window","location","search","get","clearWindowToken","debug2","url","URL","href","searchParams","delete","history","replaceState","readCookieToken","storeCookieToken","token","set","secure","sameSite","remove","Component","children","logoPath","client","inputField","loginPromise","error","setError","isInputRequired","setIsInputRequired","isLoggedIn","setIsLoggedIn","isLoggingIn","setIsLoggingIn","setToken","login","loginToken","showError","info","newLoginPromise","type","current","e","message","cancelLogin","onLogin","debug","newToken","onLogout","isCanceled","initialLogin","initialToken","handleSubmit","autoFocusInput","focus","transitionMs","event","undefined","target","value","AuthPluginPsk","isAvailable","authHandlers","includes"],"sources":["../src/AuthPluginPsk.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport { LoadingOverlay, ThemeExport } from '@deephaven/components';\nimport { useClient } from '@deephaven/jsapi-bootstrap';\nimport { useBroadcastLoginListener } from '@deephaven/jsapi-components';\nimport Log from '@deephaven/log';\nimport { getErrorMessage } from '@deephaven/utils';\nimport Cookies from 'js-cookie';\nimport { AuthPlugin, AuthPluginProps } from './AuthPlugin';\nimport LoginForm from './LoginForm';\nimport Login from './Login';\nimport AuthenticationError from './AuthenticationError';\n\nconst AUTH_TYPE = 'io.deephaven.authentication.psk.PskAuthenticationHandler';\n\nconst PSK_QUERY_PARAM_KEY = 'psk';\n\nconst PSK_TOKEN_KEY = 'io.deephaven.web.client.auth.psk.token';\n\nconst log = Log.module('AuthPluginPsk');\n\nfunction getWindowToken(): string | null {\n return new URLSearchParams(window.location.search).get(PSK_QUERY_PARAM_KEY);\n}\n\nfunction clearWindowToken() {\n log.debug2('clearWindowToken');\n const url = new URL(window.location.href);\n url.searchParams.delete(PSK_QUERY_PARAM_KEY);\n\n window.history.replaceState(null, '', url.href);\n}\n\nfunction readCookieToken(): string | null {\n return Cookies.get(PSK_TOKEN_KEY) ?? null;\n}\n\nfunction storeCookieToken(token: string | null): void {\n log.debug2('Storing token in cookie', token);\n if (token != null) {\n Cookies.set(PSK_TOKEN_KEY, token, { secure: true, sameSite: 'strict' });\n } else {\n Cookies.remove(PSK_TOKEN_KEY);\n }\n}\n\nexport type AuthPluginPskProps = AuthPluginProps & {\n /** Custom path to a logo to display on the login screen */\n logoPath?: string;\n};\n\n/**\n * AuthPlugin that tries to login using a pre-shared key.\n * Add the `psk=<token>` parameter to your URL string to set the token.\n */\nfunction Component({ children, logoPath }: AuthPluginPskProps): JSX.Element {\n const client = useClient();\n const inputField = useRef<HTMLInputElement>(null);\n const loginPromise = useRef<Promise<void> | null>(null);\n const [error, setError] = useState<unknown>();\n const [isInputRequired, setIsInputRequired] = useState(false);\n const [isLoggedIn, setIsLoggedIn] = useState(false);\n const [isLoggingIn, setIsLoggingIn] = useState(false);\n const [token, setToken] = useState('');\n\n const login = useCallback(\n // eslint-disable-next-line @typescript-eslint/no-inferrable-types\n async (loginToken: string, showError: boolean = true) => {\n log.info('Logging in...');\n setIsLoggingIn(true);\n let newLoginPromise: Promise<void> | null = null;\n try {\n newLoginPromise = client.login({ type: AUTH_TYPE, token: loginToken });\n loginPromise.current = newLoginPromise;\n await newLoginPromise;\n\n log.info('Logged in successfully');\n if (loginPromise.current !== newLoginPromise) {\n return;\n }\n storeCookieToken(loginToken);\n setIsLoggedIn(true);\n } catch (e) {\n if (loginPromise.current !== newLoginPromise) {\n return;\n }\n setIsInputRequired(true);\n if (showError) {\n log.error('Unable to login', e);\n const message =\n getErrorMessage(e) ?? 'Unable to login: Verify credentials.';\n setError(new AuthenticationError(message));\n }\n }\n setIsLoggingIn(false);\n },\n [client]\n );\n\n const cancelLogin = useCallback(() => {\n loginPromise.current = null;\n setIsLoggingIn(false);\n }, []);\n\n const onLogin = useCallback(async () => {\n log.debug('onLogin');\n\n // User logged in successfully in another tab, we should be able to read the token from the cookie and login\n const newToken = readCookieToken();\n if (isLoggedIn || isLoggingIn || newToken == null) {\n return;\n }\n\n login(newToken, false);\n }, [isLoggedIn, isLoggingIn, login]);\n const onLogout = useCallback(() => {\n storeCookieToken(null);\n }, []);\n useBroadcastLoginListener(onLogin, onLogout);\n\n useEffect(() => {\n let isCanceled = false;\n async function initialLogin() {\n const initialToken = getWindowToken() ?? readCookieToken();\n clearWindowToken();\n\n if (initialToken == null) {\n setIsInputRequired(true);\n return;\n }\n\n setIsLoggingIn(true);\n try {\n await client.login({ type: AUTH_TYPE, token: initialToken });\n if (!isCanceled) {\n storeCookieToken(initialToken);\n setIsLoggedIn(true);\n setIsLoggingIn(false);\n }\n } catch (e) {\n if (!isCanceled) {\n setIsInputRequired(true);\n setIsLoggingIn(false);\n }\n }\n }\n initialLogin();\n return () => {\n isCanceled = true;\n };\n }, [client]);\n\n const handleSubmit = useCallback(() => {\n if (!isLoggingIn) {\n login(token);\n } else {\n cancelLogin();\n }\n }, [cancelLogin, isLoggingIn, login, token]);\n\n useEffect(\n function autoFocusInput() {\n inputField.current?.focus();\n },\n [inputField, isInputRequired]\n );\n\n return (\n <>\n {isLoggedIn && children}\n {isInputRequired && (\n <CSSTransition\n in={!isLoggedIn}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <Login logoPath={logoPath}>\n <LoginForm\n errorMessage={getErrorMessage(error)}\n isLoggingIn={isLoggingIn}\n onSubmit={handleSubmit}\n >\n <div className=\"form-group\">\n <label htmlFor=\"auth-psk-token-input\">Token</label>\n <input\n id=\"auth-psk-token-input\"\n name=\"token\"\n className=\"input-token form-control\"\n type=\"text\"\n autoComplete=\"username\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n ref={inputField}\n value={token}\n onChange={event => {\n setError(undefined);\n setToken(event.target.value);\n }}\n />\n </div>\n </LoginForm>\n </Login>\n </CSSTransition>\n )}\n <LoadingOverlay\n data-testid=\"auth-psk-loading\"\n isLoaded={isLoggedIn || isInputRequired}\n isLoading={!isLoggedIn && !isInputRequired}\n />\n </>\n );\n}\n\nconst AuthPluginPsk: AuthPlugin = {\n Component,\n isAvailable: authHandlers => authHandlers.includes(AUTH_TYPE),\n};\n\nexport default AuthPluginPsk;\n"],"mappings":"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"}
package/dist/Login.d.ts CHANGED
@@ -3,7 +3,9 @@ import './Login.scss';
3
3
  interface LoginProps {
4
4
  /** What to show in the login input part of the login form. */
5
5
  children: React.ReactNode;
6
+ /** Path to the logo. Defaults to `/logo.png` */
7
+ logoPath?: string;
6
8
  }
7
- export declare function Login({ children }: LoginProps): JSX.Element;
9
+ export declare function Login({ children, logoPath }: LoginProps): JSX.Element;
8
10
  export default Login;
9
11
  //# sourceMappingURL=Login.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Login.d.ts","sourceRoot":"","sources":["../src/Login.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,cAAc,CAAC;AAEtB,UAAU,UAAU;IAClB,8DAA8D;IAC9D,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,KAAK,CAAC,EAAE,QAAQ,EAAE,EAAE,UAAU,eAgB7C;AAED,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Login.d.ts","sourceRoot":"","sources":["../src/Login.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,cAAc,CAAC;AAEtB,UAAU,UAAU;IAClB,8DAA8D;IAC9D,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAE1B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAsB,EAAE,EAAE,UAAU,eAgBrE;AAED,eAAe,KAAK,CAAC"}
package/dist/Login.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import React from 'react';
2
2
  import { RandomAreaPlotAnimation } from '@deephaven/components';
3
- import Logo from "./logo.png.js";
4
3
  import "./Login.css";
5
4
  export function Login(_ref) {
6
5
  var {
7
- children
6
+ children,
7
+ logoPath = '/logo.png'
8
8
  } = _ref;
9
9
  return /*#__PURE__*/React.createElement("div", {
10
10
  className: "login-container"
@@ -13,7 +13,7 @@ export function Login(_ref) {
13
13
  }, /*#__PURE__*/React.createElement("div", {
14
14
  className: "logo"
15
15
  }, /*#__PURE__*/React.createElement("img", {
16
- src: Logo,
16
+ src: logoPath,
17
17
  alt: "Deephaven Data Labs"
18
18
  })), children, /*#__PURE__*/React.createElement("p", {
19
19
  className: "footer"
package/dist/Login.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Login.js","names":["React","RandomAreaPlotAnimation","Logo","Login","children","Date","getFullYear"],"sources":["../src/Login.tsx"],"sourcesContent":["import React from 'react';\nimport { RandomAreaPlotAnimation } from '@deephaven/components';\nimport Logo from './logo.png';\nimport './Login.scss';\n\ninterface LoginProps {\n /** What to show in the login input part of the login form. */\n children: React.ReactNode;\n}\n\nexport function Login({ children }: LoginProps) {\n return (\n <div className=\"login-container\">\n <RandomAreaPlotAnimation />\n <div className=\"login-box\">\n <div className=\"logo\">\n <img src={Logo} alt=\"Deephaven Data Labs\" />\n </div>\n {children}\n <p className=\"footer\">\n © 2016-{new Date().getFullYear()} Deephaven Data Labs LLC. Patent\n Pending.\n </p>\n </div>\n </div>\n );\n}\n\nexport default Login;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,uBAAuB,QAAQ,uBAAuB;AAAC,OACzDC,IAAI;AAAA;AAQX,OAAO,SAASC,KAAK,OAA2B;EAAA,IAA1B;IAAEC;EAAqB,CAAC;EAC5C,oBACE;IAAK,SAAS,EAAC;EAAiB,gBAC9B,oBAAC,uBAAuB,OAAG,eAC3B;IAAK,SAAS,EAAC;EAAW,gBACxB;IAAK,SAAS,EAAC;EAAM,gBACnB;IAAK,GAAG,EAAEF,IAAK;IAAC,GAAG,EAAC;EAAqB,EAAG,CACxC,EACLE,QAAQ,eACT;IAAG,SAAS,EAAC;EAAQ,GAAC,YACb,EAAC,IAAIC,IAAI,EAAE,CAACC,WAAW,EAAE,EAAC,2CAEnC,CAAI,CACA,CACF;AAEV;AAEA,eAAeH,KAAK"}
1
+ {"version":3,"file":"Login.js","names":["React","RandomAreaPlotAnimation","Login","children","logoPath","Date","getFullYear"],"sources":["../src/Login.tsx"],"sourcesContent":["import React from 'react';\nimport { RandomAreaPlotAnimation } from '@deephaven/components';\nimport './Login.scss';\n\ninterface LoginProps {\n /** What to show in the login input part of the login form. */\n children: React.ReactNode;\n\n /** Path to the logo. Defaults to `/logo.png` */\n logoPath?: string;\n}\n\nexport function Login({ children, logoPath = '/logo.png' }: LoginProps) {\n return (\n <div className=\"login-container\">\n <RandomAreaPlotAnimation />\n <div className=\"login-box\">\n <div className=\"logo\">\n <img src={logoPath} alt=\"Deephaven Data Labs\" />\n </div>\n {children}\n <p className=\"footer\">\n © 2016-{new Date().getFullYear()} Deephaven Data Labs LLC. Patent\n Pending.\n </p>\n </div>\n </div>\n );\n}\n\nexport default Login;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,uBAAuB,QAAQ,uBAAuB;AAAC;AAWhE,OAAO,SAASC,KAAK,OAAmD;EAAA,IAAlD;IAAEC,QAAQ;IAAEC,QAAQ,GAAG;EAAwB,CAAC;EACpE,oBACE;IAAK,SAAS,EAAC;EAAiB,gBAC9B,oBAAC,uBAAuB,OAAG,eAC3B;IAAK,SAAS,EAAC;EAAW,gBACxB;IAAK,SAAS,EAAC;EAAM,gBACnB;IAAK,GAAG,EAAEA,QAAS;IAAC,GAAG,EAAC;EAAqB,EAAG,CAC5C,EACLD,QAAQ,eACT;IAAG,SAAS,EAAC;EAAQ,GAAC,YACb,EAAC,IAAIE,IAAI,EAAE,CAACC,WAAW,EAAE,EAAC,2CAEnC,CAAI,CACA,CACF;AAEV;AAEA,eAAeJ,KAAK"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/auth-plugins",
3
- "version": "0.37.4-logout.21+ae439be8",
3
+ "version": "0.37.4-relative-links.2+2189ddfe",
4
4
  "description": "Deephaven Auth Plugins",
5
5
  "keywords": [
6
6
  "Deephaven",
@@ -33,20 +33,20 @@
33
33
  "build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
34
34
  },
35
35
  "dependencies": {
36
- "@deephaven/components": "^0.37.4-logout.21+ae439be8",
37
- "@deephaven/jsapi-bootstrap": "^0.37.4-logout.21+ae439be8",
38
- "@deephaven/jsapi-components": "^0.37.4-logout.21+ae439be8",
39
- "@deephaven/jsapi-types": "^0.37.4-logout.21+ae439be8",
40
- "@deephaven/jsapi-utils": "^0.37.4-logout.21+ae439be8",
41
- "@deephaven/log": "^0.37.4-logout.21+ae439be8",
42
- "@deephaven/redux": "^0.37.4-logout.21+ae439be8",
43
- "@deephaven/utils": "^0.37.4-logout.21+ae439be8",
36
+ "@deephaven/components": "^0.37.4-relative-links.2+2189ddfe",
37
+ "@deephaven/jsapi-bootstrap": "^0.37.4-relative-links.2+2189ddfe",
38
+ "@deephaven/jsapi-components": "^0.37.4-relative-links.2+2189ddfe",
39
+ "@deephaven/jsapi-types": "^0.37.4-relative-links.2+2189ddfe",
40
+ "@deephaven/jsapi-utils": "^0.37.4-relative-links.2+2189ddfe",
41
+ "@deephaven/log": "^0.37.4-relative-links.2+2189ddfe",
42
+ "@deephaven/redux": "^0.37.4-relative-links.2+2189ddfe",
43
+ "@deephaven/utils": "^0.37.4-relative-links.2+2189ddfe",
44
44
  "classnames": "^2.3.1",
45
45
  "js-cookie": "^3.0.5",
46
46
  "react-transition-group": "^4.4.2"
47
47
  },
48
48
  "devDependencies": {
49
- "@deephaven/tsconfig": "^0.37.4-logout.21+ae439be8",
49
+ "@deephaven/tsconfig": "^0.37.4-relative-links.2+2189ddfe",
50
50
  "@types/react": "^17.0.2"
51
51
  },
52
52
  "peerDependencies": {
@@ -60,5 +60,5 @@
60
60
  "publishConfig": {
61
61
  "access": "public"
62
62
  },
63
- "gitHead": "ae439be89da6d61abc3e6f86ec734ddda74e67e3"
63
+ "gitHead": "2189ddfe7d10310de1be036201d39b0f969338a5"
64
64
  }
@@ -1,2 +0,0 @@
1
- /// <reference types="vite/client" />
2
- //# sourceMappingURL=vite-env.d.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vite-env.d.js","names":[],"sources":["../src/vite-env.d.ts"],"sourcesContent":["/// <reference types=\"vite/client\" />\n"],"mappings":"AAAA"}