@ytsaurus/ui 1.12.2 → 1.13.0
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.
- package/build/cjs/@types/core.d.ts +38 -0
- package/build/cjs/server/components/layout-config.js +6 -1
- package/build/cjs/server/components/layout-config.js.map +1 -1
- package/build/cjs/server/components/oauth.d.ts +26 -0
- package/build/cjs/server/components/oauth.js +123 -0
- package/build/cjs/server/components/oauth.js.map +1 -0
- package/build/cjs/server/components/yt-auth.d.ts +6 -0
- package/build/cjs/server/components/yt-auth.js +23 -0
- package/build/cjs/server/components/yt-auth.js.map +1 -0
- package/build/cjs/server/controllers/login.d.ts +0 -1
- package/build/cjs/server/controllers/login.js +4 -26
- package/build/cjs/server/controllers/login.js.map +1 -1
- package/build/cjs/server/controllers/logout.d.ts +2 -0
- package/build/cjs/server/controllers/logout.js +15 -0
- package/build/cjs/server/controllers/logout.js.map +1 -0
- package/build/cjs/server/controllers/oauth-login.d.ts +4 -0
- package/build/cjs/server/controllers/oauth-login.js +30 -0
- package/build/cjs/server/controllers/oauth-login.js.map +1 -0
- package/build/cjs/server/index.js +9 -1
- package/build/cjs/server/index.js.map +1 -1
- package/build/cjs/server/middlewares/authorization.d.ts +2 -0
- package/build/cjs/server/middlewares/authorization.js +42 -0
- package/build/cjs/server/middlewares/authorization.js.map +1 -0
- package/build/cjs/server/middlewares/oauth.d.ts +2 -0
- package/build/cjs/server/middlewares/oauth.js +27 -0
- package/build/cjs/server/middlewares/oauth.js.map +1 -0
- package/build/cjs/server/middlewares/yt-auth.d.ts +1 -1
- package/build/cjs/server/middlewares/yt-auth.js +10 -42
- package/build/cjs/server/middlewares/yt-auth.js.map +1 -1
- package/build/cjs/server/routes.js +6 -1
- package/build/cjs/server/routes.js.map +1 -1
- package/build/cjs/server/utils/authorization.d.ts +6 -0
- package/build/cjs/server/utils/authorization.js +33 -0
- package/build/cjs/server/utils/authorization.js.map +1 -0
- package/build/cjs/shared/constants/index.d.ts +3 -0
- package/build/cjs/shared/constants/index.js +3 -1
- package/build/cjs/shared/constants/index.js.map +1 -1
- package/build/cjs/shared/yt-types.d.ts +2 -0
- package/build/cjs/ui/components/Login/LoginFormPage/LoginFormPage.js +23 -5
- package/build/cjs/ui/components/Login/LoginFormPage/LoginFormPage.js.map +1 -1
- package/build/cjs/ui/components/Login/LoginPageWrapper/LoginPageWrapper.css +8 -0
- package/build/cjs/ui/components/Login/LoginPageWrapper/LoginPageWrapper.css.map +1 -1
- package/build/cjs/ui/components/NumberInput/NumberInput.d.ts +1 -1
- package/build/cjs/ui/containers/AppNavigation/AppNavigation.js +2 -0
- package/build/cjs/ui/containers/AppNavigation/AppNavigation.js.map +1 -1
- package/build/cjs/ui/containers/AppNavigation/AppNavigationComponent.d.ts +1 -1
- package/build/cjs/ui/containers/AppNavigation/AppNavigationComponent.js +5 -7
- package/build/cjs/ui/containers/AppNavigation/AppNavigationComponent.js.map +1 -1
- package/build/cjs/ui/containers/AppNavigation/AppNavigationPageLayout.d.ts +2 -0
- package/build/cjs/ui/containers/AppNavigation/AppNavigationPageLayout.js.map +1 -1
- package/build/cjs/ui/store/reducers/global/index.d.ts +1 -0
- package/build/cjs/ui/store/reducers/global/index.js +1 -0
- package/build/cjs/ui/store/reducers/global/index.js.map +1 -1
- package/build/cjs/ui/store/selectors/global/index.d.ts +4 -0
- package/build/cjs/ui/store/selectors/global/index.js +14 -4
- package/build/cjs/ui/store/selectors/global/index.js.map +1 -1
- package/build/esm/@types/core.d.ts +38 -0
- package/build/esm/server/components/layout-config.js +7 -2
- package/build/esm/server/components/layout-config.js.map +1 -1
- package/build/esm/server/components/oauth.d.ts +26 -0
- package/build/esm/server/components/oauth.js +169 -0
- package/build/esm/server/components/oauth.js.map +1 -0
- package/build/esm/server/components/yt-auth.d.ts +6 -0
- package/build/esm/server/components/yt-auth.js +17 -0
- package/build/esm/server/components/yt-auth.js.map +1 -0
- package/build/esm/server/controllers/login.d.ts +0 -1
- package/build/esm/server/controllers/login.js +41 -88
- package/build/esm/server/controllers/login.js.map +1 -1
- package/build/esm/server/controllers/logout.d.ts +2 -0
- package/build/esm/server/controllers/logout.js +11 -0
- package/build/esm/server/controllers/logout.js.map +1 -0
- package/build/esm/server/controllers/oauth-login.d.ts +4 -0
- package/build/esm/server/controllers/oauth-login.js +50 -0
- package/build/esm/server/controllers/oauth-login.js.map +1 -0
- package/build/esm/server/index.js +7 -2
- package/build/esm/server/index.js.map +1 -1
- package/build/esm/server/middlewares/authorization.d.ts +2 -0
- package/build/esm/server/middlewares/authorization.js +74 -0
- package/build/esm/server/middlewares/authorization.js.map +1 -0
- package/build/esm/server/middlewares/oauth.d.ts +2 -0
- package/build/esm/server/middlewares/oauth.js +50 -0
- package/build/esm/server/middlewares/oauth.js.map +1 -0
- package/build/esm/server/middlewares/yt-auth.d.ts +1 -1
- package/build/esm/server/middlewares/yt-auth.js +8 -58
- package/build/esm/server/middlewares/yt-auth.js.map +1 -1
- package/build/esm/server/routes.js +16 -2
- package/build/esm/server/routes.js.map +1 -1
- package/build/esm/server/utils/authorization.d.ts +6 -0
- package/build/esm/server/utils/authorization.js +28 -0
- package/build/esm/server/utils/authorization.js.map +1 -0
- package/build/esm/shared/constants/index.d.ts +3 -0
- package/build/esm/shared/constants/index.js +2 -1
- package/build/esm/shared/constants/index.js.map +1 -1
- package/build/esm/shared/yt-types.d.ts +2 -0
- package/build/esm/ui/components/Login/LoginFormPage/LoginFormPage.js +24 -6
- package/build/esm/ui/components/Login/LoginFormPage/LoginFormPage.js.map +1 -1
- package/build/esm/ui/components/Login/LoginPageWrapper/LoginPageWrapper.css +8 -0
- package/build/esm/ui/components/Login/LoginPageWrapper/LoginPageWrapper.css.map +1 -1
- package/build/esm/ui/components/Login/LoginPageWrapper/LoginPageWrapper.scss +12 -0
- package/build/esm/ui/components/NumberInput/NumberInput.d.ts +1 -1
- package/build/esm/ui/containers/AppNavigation/AppNavigation.js +3 -1
- package/build/esm/ui/containers/AppNavigation/AppNavigation.js.map +1 -1
- package/build/esm/ui/containers/AppNavigation/AppNavigationComponent.d.ts +1 -1
- package/build/esm/ui/containers/AppNavigation/AppNavigationComponent.js +5 -7
- package/build/esm/ui/containers/AppNavigation/AppNavigationComponent.js.map +1 -1
- package/build/esm/ui/containers/AppNavigation/AppNavigationPageLayout.d.ts +2 -0
- package/build/esm/ui/containers/AppNavigation/AppNavigationPageLayout.js.map +1 -1
- package/build/esm/ui/store/reducers/global/index.d.ts +1 -0
- package/build/esm/ui/store/reducers/global/index.js +1 -0
- package/build/esm/ui/store/reducers/global/index.js.map +1 -1
- package/build/esm/ui/store/selectors/global/index.d.ts +4 -0
- package/build/esm/ui/store/selectors/global/index.js +12 -2
- package/build/esm/ui/store/selectors/global/index.js.map +1 -1
- package/dist/public/build/assets-manifest.json +12 -12
- package/dist/public/build/css/{main.136a49c7.css → main.e919e247.css} +2 -2
- package/dist/public/build/css/main.e919e247.css.map +1 -0
- package/dist/public/build/js/89.07445d46.chunk.js +2 -0
- package/dist/public/build/js/89.07445d46.chunk.js.map +1 -0
- package/dist/public/build/js/main.9d592639.js +3 -0
- package/dist/public/build/js/{main.f91e3651.js.map → main.9d592639.js.map} +1 -1
- package/dist/public/build/js/{runtime.6c8d85d3.js → runtime.9491563b.js} +2 -2
- package/dist/public/build/js/{runtime.6c8d85d3.js.map → runtime.9491563b.js.map} +1 -1
- package/dist/public/build/manifest.json +8 -8
- package/dist/server/components/layout-config.js +6 -1
- package/dist/server/components/oauth.d.ts +26 -0
- package/dist/server/components/oauth.js +123 -0
- package/dist/server/components/yt-auth.d.ts +6 -0
- package/dist/server/components/yt-auth.js +23 -0
- package/dist/server/controllers/login.d.ts +0 -1
- package/dist/server/controllers/login.js +4 -26
- package/dist/server/controllers/logout.d.ts +2 -0
- package/dist/server/controllers/logout.js +15 -0
- package/dist/server/controllers/oauth-login.d.ts +4 -0
- package/dist/server/controllers/oauth-login.js +30 -0
- package/dist/server/index.js +9 -1
- package/dist/server/middlewares/authorization.d.ts +2 -0
- package/dist/server/middlewares/authorization.js +42 -0
- package/dist/server/middlewares/oauth.d.ts +2 -0
- package/dist/server/middlewares/oauth.js +27 -0
- package/dist/server/middlewares/yt-auth.d.ts +1 -1
- package/dist/server/middlewares/yt-auth.js +10 -42
- package/dist/server/routes.js +6 -1
- package/dist/server/utils/authorization.d.ts +6 -0
- package/dist/server/utils/authorization.js +33 -0
- package/dist/shared/constants/index.d.ts +3 -0
- package/dist/shared/constants/index.js +3 -1
- package/package.json +2 -2
- package/dist/public/build/css/main.136a49c7.css.map +0 -1
- package/dist/public/build/js/89.6ea87438.chunk.js +0 -2
- package/dist/public/build/js/89.6ea87438.chunk.js.map +0 -1
- package/dist/public/build/js/main.f91e3651.js +0 -3
- /package/dist/public/build/js/{main.f91e3651.js.LICENSE.txt → main.9d592639.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["_axios","_interopRequireDefault","require","_authorization","_requestsSetup","_clusterQueries","_utils","obj","__esModule","default","AuthError","_Error","_inherits","_super","_createSuper","_classCallCheck","call","_createClass","_wrapNativeSuper","Error","isAuthError","e","_e$response","axios","isAxiosError","response","status","createAuthMiddleware","ytAuthCluster","_authMiddleware","_asyncToGenerator","_regeneratorRuntime","mark","_callee","req","res","next","cfg","_yield$getXSRFToken","login","isAuthFailed","error","wrap","_callee$","_context","prev","isAuthorized","getUserYTApiSetup","getXSRFToken","sent","yt","t0","undefined","routeInfo","ui","sendError","abrupt","stop","authMiddleware","_x","_x2","_x3","apply","arguments"],"sources":["authorization.ts"],"sourcesContent":["import axios from 'axios';\nimport {isAuthorized} from '../utils/authorization';\nimport {getUserYTApiSetup} from '../components/requestsSetup';\nimport {AppMiddleware} from '@gravity-ui/expresskit';\nimport {getXSRFToken} from '../components/cluster-queries';\nimport {sendError} from '../utils';\n\nclass AuthError extends Error {\n constructor() {\n super('Authorization required');\n }\n}\n\nfunction isAuthError(e: unknown) {\n return e instanceof AuthError || (axios.isAxiosError(e) && e.response?.status === 401);\n}\n\nexport function createAuthMiddleware(ytAuthCluster: string): AppMiddleware {\n return async function authMiddleware(req, res, next) {\n try {\n if (!isAuthorized(req)) {\n throw new AuthError();\n }\n\n const cfg = getUserYTApiSetup(ytAuthCluster, req);\n const {login} = await getXSRFToken(req, cfg);\n req.yt.login = login;\n } catch (e) {\n const isAuthFailed = isAuthError(e);\n const error = isAuthFailed ? undefined : e;\n\n if (!req.routeInfo.ui && isAuthFailed) {\n sendError(res, error, 401);\n return;\n }\n }\n\n next();\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AAEA,IAAAG,eAAA,GAAAH,OAAA;AACA,IAAAI,MAAA,GAAAJ,OAAA;AAAkC,SAAAD,uBAAAM,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAC,IAE7BG,SAAS,0BAAAC,MAAA;EAAA,IAAAC,kBAAA,EAAAF,SAAA,EAAAC,MAAA;EAAA,IAAAE,MAAA,OAAAC,qBAAA,EAAAJ,SAAA;EACX,SAAAA,UAAA,EAAc;IAAA,IAAAK,wBAAA,QAAAL,SAAA;IAAA,OAAAG,MAAA,CAAAG,IAAA,OACJ,wBAAwB;EAClC;EAAC,WAAAC,qBAAA,EAAAP,SAAA;AAAA,oBAAAQ,yBAAA,EAHmBC,KAAK;AAM7B,SAASC,WAAWA,CAACC,CAAU,EAAE;EAAA,IAAAC,WAAA;EAC7B,OAAOD,CAAC,YAAYX,SAAS,IAAKa,cAAK,CAACC,YAAY,CAACH,CAAC,CAAC,IAAI,EAAAC,WAAA,GAAAD,CAAC,CAACI,QAAQ,cAAAH,WAAA,uBAAVA,WAAA,CAAYI,MAAM,MAAK,GAAI;AAC1F;AAEO,SAASC,oBAAoBA,CAACC,aAAqB,EAAiB;EACvE;IAAA,IAAAC,eAAA,OAAAC,0BAAA,gBAAAC,oBAAA,CAAAC,IAAA,CAAO,SAAAC,QAA8BC,GAAG,EAAEC,GAAG,EAAEC,IAAI;MAAA,IAAAC,GAAA,EAAAC,mBAAA,EAAAC,KAAA,EAAAC,YAAA,EAAAC,KAAA;MAAA,OAAAV,oBAAA,CAAAW,IAAA,UAAAC,SAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAR,IAAA;UAAA;YAAAQ,QAAA,CAAAC,IAAA;YAAA,IAEtC,IAAAC,2BAAY,EAACZ,GAAG,CAAC;cAAAU,QAAA,CAAAR,IAAA;cAAA;YAAA;YAAA,MACZ,IAAI1B,SAAS,CAAC,CAAC;UAAA;YAGnB2B,GAAG,GAAG,IAAAU,gCAAiB,EAACnB,aAAa,EAAEM,GAAG,CAAC;YAAAU,QAAA,CAAAR,IAAA;YAAA,OAC3B,IAAAY,4BAAY,EAACd,GAAG,EAAEG,GAAG,CAAC;UAAA;YAAAC,mBAAA,GAAAM,QAAA,CAAAK,IAAA;YAArCV,KAAK,GAAAD,mBAAA,CAALC,KAAK;YACZL,GAAG,CAACgB,EAAE,CAACX,KAAK,GAAGA,KAAK;YAACK,QAAA,CAAAR,IAAA;YAAA;UAAA;YAAAQ,QAAA,CAAAC,IAAA;YAAAD,QAAA,CAAAO,EAAA,GAAAP,QAAA;YAEfJ,YAAY,GAAGpB,WAAW,CAAAwB,QAAA,CAAAO,EAAE,CAAC;YAC7BV,KAAK,GAAGD,YAAY,GAAGY,SAAS,GAAAR,QAAA,CAAAO,EAAI;YAAA,MAEtC,CAACjB,GAAG,CAACmB,SAAS,CAACC,EAAE,IAAId,YAAY;cAAAI,QAAA,CAAAR,IAAA;cAAA;YAAA;YACjC,IAAAmB,gBAAS,EAACpB,GAAG,EAAEM,KAAK,EAAE,GAAG,CAAC;YAAC,OAAAG,QAAA,CAAAY,MAAA;UAAA;YAKnCpB,IAAI,CAAC,CAAC;UAAC;UAAA;YAAA,OAAAQ,QAAA,CAAAa,IAAA;QAAA;MAAA,GAAAxB,OAAA;IAAA,CACV;IAAA,SApBqByB,cAAcA,CAAAC,EAAA,EAAAC,GAAA,EAAAC,GAAA;MAAA,OAAAhC,eAAA,CAAAiC,KAAA,OAAAC,SAAA;IAAA;IAAA,OAAdL,cAAc;EAAA;AAqBxC"}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.createOAuthAuthorizationResolver = void 0;
|
4
|
+
const oauth_1 = require("../components/oauth");
|
5
|
+
function createOAuthAuthorizationResolver() {
|
6
|
+
return async function resoleOAuthAuthorize(req, res, next) {
|
7
|
+
if (!(0, oauth_1.isOAuthAllowed)(req) || !(0, oauth_1.isUserOAuthLogged)(req)) {
|
8
|
+
next();
|
9
|
+
return;
|
10
|
+
}
|
11
|
+
try {
|
12
|
+
const token = await (0, oauth_1.getOAuthAccessToken)(req, res);
|
13
|
+
req.yt = {
|
14
|
+
ytApiAuthHeaders: {
|
15
|
+
Authorization: `OAuth ${token}`,
|
16
|
+
},
|
17
|
+
};
|
18
|
+
req.ctx.log('OAuth: provide a token');
|
19
|
+
}
|
20
|
+
catch (e) {
|
21
|
+
req.ctx.logError('Can not resolve access token', e);
|
22
|
+
}
|
23
|
+
next();
|
24
|
+
return;
|
25
|
+
};
|
26
|
+
}
|
27
|
+
exports.createOAuthAuthorizationResolver = createOAuthAuthorizationResolver;
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["_oauth","require","_interopRequireDefault","obj","__esModule","default","createOAuthAuthorizationResolver","_resoleOAuthAuthorize","_asyncToGenerator","_regeneratorRuntime","mark","_callee","req","res","next","token","wrap","_callee$","_context","prev","isOAuthAllowed","isUserOAuthLogged","abrupt","getOAuthAccessToken","sent","yt","ytApiAuthHeaders","Authorization","concat","ctx","log","t0","logError","stop","resoleOAuthAuthorize","_x","_x2","_x3","apply","arguments"],"sources":["oauth.ts"],"sourcesContent":["import {AppMiddleware} from '@gravity-ui/expresskit';\nimport type {Request, Response} from 'express';\nimport {getOAuthAccessToken, isOAuthAllowed, isUserOAuthLogged} from '../components/oauth';\n\nexport function createOAuthAuthorizationResolver(): AppMiddleware {\n return async function resoleOAuthAuthorize(req: Request, res: Response, next) {\n if (!isOAuthAllowed(req) || !isUserOAuthLogged(req)) {\n next();\n return;\n }\n try {\n const token = await getOAuthAccessToken(req, res);\n req.yt = {\n ytApiAuthHeaders: {\n Authorization: `OAuth ${token}`,\n },\n };\n req.ctx.log('OAuth: provide a token');\n } catch (e) {\n req.ctx.logError('Can not resolve access token', e);\n }\n next();\n return;\n };\n}\n"],"mappings":";;;;;;;;AAEA,IAAAA,MAAA,GAAAC,OAAA;AAA0F,SAAAC,uBAAAC,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEnF,SAASG,gCAAgCA,CAAA,EAAkB;EAC9D;IAAA,IAAAC,qBAAA,OAAAC,0BAAA,gBAAAC,oBAAA,CAAAC,IAAA,CAAO,SAAAC,QAAoCC,GAAY,EAAEC,GAAa,EAAEC,IAAI;MAAA,IAAAC,KAAA;MAAA,OAAAN,oBAAA,CAAAO,IAAA,UAAAC,SAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAJ,IAAA;UAAA;YAAA,MACpE,CAAC,IAAAM,qBAAc,EAACR,GAAG,CAAC,IAAI,CAAC,IAAAS,wBAAiB,EAACT,GAAG,CAAC;cAAAM,QAAA,CAAAJ,IAAA;cAAA;YAAA;YAC/CA,IAAI,CAAC,CAAC;YAAC,OAAAI,QAAA,CAAAI,MAAA;UAAA;YAAAJ,QAAA,CAAAC,IAAA;YAAAD,QAAA,CAAAJ,IAAA;YAAA,OAIa,IAAAS,0BAAmB,EAACX,GAAG,EAAEC,GAAG,CAAC;UAAA;YAA3CE,KAAK,GAAAG,QAAA,CAAAM,IAAA;YACXZ,GAAG,CAACa,EAAE,GAAG;cACLC,gBAAgB,EAAE;gBACdC,aAAa,WAAAC,MAAA,CAAWb,KAAK;cACjC;YACJ,CAAC;YACDH,GAAG,CAACiB,GAAG,CAACC,GAAG,CAAC,wBAAwB,CAAC;YAACZ,QAAA,CAAAJ,IAAA;YAAA;UAAA;YAAAI,QAAA,CAAAC,IAAA;YAAAD,QAAA,CAAAa,EAAA,GAAAb,QAAA;YAEtCN,GAAG,CAACiB,GAAG,CAACG,QAAQ,CAAC,8BAA8B,EAAAd,QAAA,CAAAa,EAAG,CAAC;UAAC;YAExDjB,IAAI,CAAC,CAAC;YAAC,OAAAI,QAAA,CAAAI,MAAA;UAAA;UAAA;YAAA,OAAAJ,QAAA,CAAAe,IAAA;QAAA;MAAA,GAAAtB,OAAA;IAAA,CAEV;IAAA,SAlBqBuB,oBAAoBA,CAAAC,EAAA,EAAAC,GAAA,EAAAC,GAAA;MAAA,OAAA9B,qBAAA,CAAA+B,KAAA,OAAAC,SAAA;IAAA;IAAA,OAApBL,oBAAoB;EAAA;AAmB9C"}
|
@@ -1,2 +1,2 @@
|
|
1
1
|
import { AppMiddleware } from '@gravity-ui/expresskit';
|
2
|
-
export declare function
|
2
|
+
export declare function createYTAuthorizationResolver(): AppMiddleware;
|
@@ -1,48 +1,16 @@
|
|
1
1
|
"use strict";
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
-
};
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.
|
7
|
-
const axios_1 = __importDefault(require("axios"));
|
3
|
+
exports.createYTAuthorizationResolver = void 0;
|
8
4
|
const constants_1 = require("../../shared/constants");
|
9
|
-
|
10
|
-
|
11
|
-
const
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
}
|
17
|
-
function isAuthError(e) {
|
18
|
-
var _a;
|
19
|
-
return e instanceof AuthError || (axios_1.default.isAxiosError(e) && ((_a = e.response) === null || _a === void 0 ? void 0 : _a.status) === 401);
|
20
|
-
}
|
21
|
-
function createYTAuthMiddleware(ytAuthCluster) {
|
22
|
-
return async function ytAuthMiddleware(req, res, next) {
|
23
|
-
try {
|
24
|
-
const secret = req.cookies[constants_1.YT_CYPRESS_COOKIE_NAME];
|
25
|
-
req.yt = {
|
26
|
-
ytApiAuthHeaders: {
|
27
|
-
Cookie: `${constants_1.YT_CYPRESS_COOKIE_NAME}=${secret};`,
|
28
|
-
},
|
29
|
-
};
|
30
|
-
if (!secret) {
|
31
|
-
throw new AuthError();
|
32
|
-
}
|
33
|
-
const cfg = (0, requestsSetup_1.getUserYTApiSetup)(ytAuthCluster, req);
|
34
|
-
const { login } = await (0, cluster_queries_1.getXSRFToken)(req, cfg);
|
35
|
-
req.yt.login = login;
|
36
|
-
}
|
37
|
-
catch (e) {
|
38
|
-
const isAuthFailed = isAuthError(e);
|
39
|
-
const error = isAuthFailed ? undefined : e;
|
40
|
-
if (!req.routeInfo.ui && isAuthFailed) {
|
41
|
-
(0, utils_1.sendError)(res, error, 401);
|
42
|
-
return;
|
43
|
-
}
|
44
|
-
}
|
5
|
+
function createYTAuthorizationResolver() {
|
6
|
+
return async function resoleOAuthAuthorize(req, _, next) {
|
7
|
+
const secret = req.cookies[constants_1.YT_CYPRESS_COOKIE_NAME];
|
8
|
+
req.yt = {
|
9
|
+
ytApiAuthHeaders: {
|
10
|
+
Cookie: `${constants_1.YT_CYPRESS_COOKIE_NAME}=${secret};`,
|
11
|
+
},
|
12
|
+
};
|
45
13
|
next();
|
46
14
|
};
|
47
15
|
}
|
48
|
-
exports.
|
16
|
+
exports.createYTAuthorizationResolver = createYTAuthorizationResolver;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["
|
1
|
+
{"version":3,"names":["_constants","require","_interopRequireDefault","obj","__esModule","default","createYTAuthorizationResolver","_resoleOAuthAuthorize","_asyncToGenerator","_regeneratorRuntime","mark","_callee","req","_","next","secret","wrap","_callee$","_context","prev","cookies","YT_CYPRESS_COOKIE_NAME","yt","ytApiAuthHeaders","Cookie","concat","stop","resoleOAuthAuthorize","_x","_x2","_x3","apply","arguments"],"sources":["yt-auth.ts"],"sourcesContent":["import type {Request, Response} from 'express';\nimport {AppMiddleware} from '@gravity-ui/expresskit';\nimport {YT_CYPRESS_COOKIE_NAME} from '../../shared/constants';\n\nexport function createYTAuthorizationResolver(): AppMiddleware {\n return async function resoleOAuthAuthorize(req: Request, _: Response, next) {\n const secret: string = req.cookies[YT_CYPRESS_COOKIE_NAME];\n req.yt = {\n ytApiAuthHeaders: {\n Cookie: `${YT_CYPRESS_COOKIE_NAME}=${secret};`,\n },\n };\n next();\n };\n}\n"],"mappings":";;;;;;;;AAEA,IAAAA,UAAA,GAAAC,OAAA;AAA6D,SAAAC,uBAAAC,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtD,SAASG,6BAA6BA,CAAA,EAAkB;EAC3D;IAAA,IAAAC,qBAAA,OAAAC,0BAAA,gBAAAC,oBAAA,CAAAC,IAAA,CAAO,SAAAC,QAAoCC,GAAY,EAAEC,CAAW,EAAEC,IAAI;MAAA,IAAAC,MAAA;MAAA,OAAAN,oBAAA,CAAAO,IAAA,UAAAC,SAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAJ,IAAA;UAAA;YAChEC,MAAc,GAAGH,GAAG,CAACQ,OAAO,CAACC,iCAAsB,CAAC;YAC1DT,GAAG,CAACU,EAAE,GAAG;cACLC,gBAAgB,EAAE;gBACdC,MAAM,KAAAC,MAAA,CAAKJ,iCAAsB,OAAAI,MAAA,CAAIV,MAAM;cAC/C;YACJ,CAAC;YACDD,IAAI,CAAC,CAAC;UAAC;UAAA;YAAA,OAAAI,QAAA,CAAAQ,IAAA;QAAA;MAAA,GAAAf,OAAA;IAAA,CACV;IAAA,SARqBgB,oBAAoBA,CAAAC,EAAA,EAAAC,GAAA,EAAAC,GAAA;MAAA,OAAAvB,qBAAA,CAAAwB,KAAA,OAAAC,SAAA;IAAA;IAAA,OAApBL,oBAAoB;EAAA;AAS9C"}
|
@@ -17,6 +17,8 @@ const markdown_to_html_1 = require("./controllers/markdown-to-html");
|
|
17
17
|
const odin_proxy_api_1 = require("./controllers/odin-proxy-api");
|
18
18
|
const availability_1 = require("./controllers/availability");
|
19
19
|
const chyt_api_1 = require("./controllers/chyt-api");
|
20
|
+
const oauth_login_1 = require("./controllers/oauth-login");
|
21
|
+
const logout_1 = require("./controllers/logout");
|
20
22
|
const HOME_INDEX_TARGET = { handler: home_1.homeIndex, ui: true };
|
21
23
|
const routes = {
|
22
24
|
'GET /change-password/': HOME_INDEX_TARGET,
|
@@ -27,7 +29,10 @@ const routes = {
|
|
27
29
|
'GET /api/clusters/versions': { handler: clusters_1.clusterVersions },
|
28
30
|
'GET /api/pool-names/:cluster': { handler: scheduling_pools_1.getClusterPools },
|
29
31
|
'POST /api/yt/login': { handler: login_1.handleLogin, ui: true },
|
30
|
-
'
|
32
|
+
'GET /api/yt/logout': { handler: logout_1.handleLogout, ui: true },
|
33
|
+
'GET /oauth/login': { handler: oauth_login_1.oauthLogin, ui: true },
|
34
|
+
'GET /api/oauth/callback': { handler: oauth_login_1.oauthCallback, ui: true },
|
35
|
+
'GET /api/oauth/logout/callback': { handler: oauth_login_1.oauthLogout, ui: true },
|
31
36
|
'POST /api/yt/change-password': { handler: login_1.handleChangePassword, ui: true },
|
32
37
|
'POST /api/remote-copy': { handler: remote_copy_1.handleRemoteCopy },
|
33
38
|
'POST /api/markdown-to-html': { handler: markdown_to_html_1.markdownToHtmlHandler },
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_expresskit","require","_clusterParams","_ytApi","_remoteCopy","_ytProxyApi","_settings","_home","_clusterInfo","_clusters","_tableColumnPreset","_ping","_login","_schedulingPools","_markdownToHtml","_odinProxyApi","_availability","_chytApi","HOME_INDEX_TARGET","handler","homeIndex","ui","routes","ping","authPolicy","AuthPolicy","disabled","handleClusterInfo","clusterParams","clusterVersions","getClusterPools","handleLogin","handleLogout","handleChangePassword","handleRemoteCopy","markdownToHtmlHandler","ytTvmApiHandler","ytProxyApi","odinProxyApi","getClustersAvailability","chytProxyApi","settingsGet","settingsCreate","settingsGetItem","settingsSetItem","settingsDeleteItem","tableColumnPresetGet","tableColumnPresetSave","homeRedirect","_default","exports","default"],"sources":["routes.ts"],"sourcesContent":["import {AppRouteDescription, AppRoutes, AuthPolicy} from '@gravity-ui/expresskit';\nimport {clusterParams} from './controllers/cluster-params';\nimport {ytTvmApiHandler} from './controllers/yt-api';\nimport {handleRemoteCopy} from './controllers/remote-copy';\nimport {ytProxyApi} from './controllers/yt-proxy-api';\nimport {\n settingsCreate,\n settingsDeleteItem,\n settingsGet,\n settingsGetItem,\n settingsSetItem,\n} from './controllers/settings';\nimport {homeIndex, homeRedirect} from './controllers/home';\nimport {handleClusterInfo} from './controllers/cluster-info';\n\nimport {clusterVersions} from './controllers/clusters';\nimport {tableColumnPresetGet, tableColumnPresetSave} from './controllers/table-column-preset';\nimport {ping} from './controllers/ping';\nimport {handleChangePassword, handleLogin
|
1
|
+
{"version":3,"names":["_expresskit","require","_clusterParams","_ytApi","_remoteCopy","_ytProxyApi","_settings","_home","_clusterInfo","_clusters","_tableColumnPreset","_ping","_login","_schedulingPools","_markdownToHtml","_odinProxyApi","_availability","_chytApi","_oauthLogin","_logout","HOME_INDEX_TARGET","handler","homeIndex","ui","routes","ping","authPolicy","AuthPolicy","disabled","handleClusterInfo","clusterParams","clusterVersions","getClusterPools","handleLogin","handleLogout","oauthLogin","oauthCallback","oauthLogout","handleChangePassword","handleRemoteCopy","markdownToHtmlHandler","ytTvmApiHandler","ytProxyApi","odinProxyApi","getClustersAvailability","chytProxyApi","settingsGet","settingsCreate","settingsGetItem","settingsSetItem","settingsDeleteItem","tableColumnPresetGet","tableColumnPresetSave","homeRedirect","_default","exports","default"],"sources":["routes.ts"],"sourcesContent":["import {AppRouteDescription, AppRoutes, AuthPolicy} from '@gravity-ui/expresskit';\nimport {clusterParams} from './controllers/cluster-params';\nimport {ytTvmApiHandler} from './controllers/yt-api';\nimport {handleRemoteCopy} from './controllers/remote-copy';\nimport {ytProxyApi} from './controllers/yt-proxy-api';\nimport {\n settingsCreate,\n settingsDeleteItem,\n settingsGet,\n settingsGetItem,\n settingsSetItem,\n} from './controllers/settings';\nimport {homeIndex, homeRedirect} from './controllers/home';\nimport {handleClusterInfo} from './controllers/cluster-info';\n\nimport {clusterVersions} from './controllers/clusters';\nimport {tableColumnPresetGet, tableColumnPresetSave} from './controllers/table-column-preset';\nimport {ping} from './controllers/ping';\nimport {handleChangePassword, handleLogin} from './controllers/login';\nimport {getClusterPools} from './controllers/scheduling-pools';\nimport {markdownToHtmlHandler} from './controllers/markdown-to-html';\nimport {odinProxyApi} from './controllers/odin-proxy-api';\nimport {getClustersAvailability} from './controllers/availability';\nimport {chytProxyApi} from './controllers/chyt-api';\nimport {oauthCallback, oauthLogin, oauthLogout} from './controllers/oauth-login';\nimport {handleLogout} from './controllers/logout';\n\nconst HOME_INDEX_TARGET: AppRouteDescription = {handler: homeIndex, ui: true};\n\nconst routes: AppRoutes = {\n 'GET /change-password/': HOME_INDEX_TARGET,\n 'GET /': HOME_INDEX_TARGET,\n 'GET /ping': {handler: ping, authPolicy: AuthPolicy.disabled},\n 'GET /api/cluster-info/:cluster': {handler: handleClusterInfo},\n 'GET /api/cluster-params/:cluster': {handler: clusterParams},\n 'GET /api/clusters/versions': {handler: clusterVersions},\n 'GET /api/pool-names/:cluster': {handler: getClusterPools},\n 'POST /api/yt/login': {handler: handleLogin, ui: true},\n 'GET /api/yt/logout': {handler: handleLogout, ui: true},\n\n 'GET /oauth/login': {handler: oauthLogin, ui: true},\n 'GET /api/oauth/callback': {handler: oauthCallback, ui: true},\n 'GET /api/oauth/logout/callback': {handler: oauthLogout, ui: true},\n\n 'POST /api/yt/change-password': {handler: handleChangePassword, ui: true},\n 'POST /api/remote-copy': {handler: handleRemoteCopy},\n\n 'POST /api/markdown-to-html': {handler: markdownToHtmlHandler},\n\n 'GET /api/yt/:cluster/api/:version/:command': {handler: ytTvmApiHandler},\n 'POST /api/yt/:cluster/api/:version/:command': {handler: ytTvmApiHandler},\n 'PUT /api/yt/:cluster/api/:version/:command': {handler: ytTvmApiHandler},\n\n 'GET /api/yt-proxy/:cluster/:command': {handler: ytProxyApi},\n\n 'GET /api/odin/proxy/:action/:cluster?': {handler: odinProxyApi},\n 'GET /api/odin/clusters/availability': {handler: getClustersAvailability},\n\n 'POST /api/chyt/:cluster/:action': {handler: chytProxyApi},\n\n 'GET /api/settings/:username': {handler: settingsGet},\n 'POST /api/settings/:username': {handler: settingsCreate},\n 'GET /api/settings/:username/:path': {handler: settingsGetItem},\n 'PUT /api/settings/:username/:path': {handler: settingsSetItem},\n 'DELETE /api/settings/:username/:path': {handler: settingsDeleteItem},\n\n 'GET /api/table-column-preset/:hash': {\n handler: tableColumnPresetGet,\n },\n 'POST /api/table-column-preset': {handler: tableColumnPresetSave},\n\n 'GET /:cluster/': HOME_INDEX_TARGET,\n 'GET /:cluster/maintenance': {handler: homeRedirect},\n 'GET /:cluster/:page': HOME_INDEX_TARGET,\n 'GET /:cluster/:page/:tab': HOME_INDEX_TARGET,\n 'GET /:cluster/:page/:operation/:tab': HOME_INDEX_TARGET,\n 'GET /:cluster/:page/:operation/:job/:tab': HOME_INDEX_TARGET,\n};\n\nexport default routes;\n"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AACA,IAAAK,SAAA,GAAAL,OAAA;AAOA,IAAAM,KAAA,GAAAN,OAAA;AACA,IAAAO,YAAA,GAAAP,OAAA;AAEA,IAAAQ,SAAA,GAAAR,OAAA;AACA,IAAAS,kBAAA,GAAAT,OAAA;AACA,IAAAU,KAAA,GAAAV,OAAA;AACA,IAAAW,MAAA,GAAAX,OAAA;AACA,IAAAY,gBAAA,GAAAZ,OAAA;AACA,IAAAa,eAAA,GAAAb,OAAA;AACA,IAAAc,aAAA,GAAAd,OAAA;AACA,IAAAe,aAAA,GAAAf,OAAA;AACA,IAAAgB,QAAA,GAAAhB,OAAA;AACA,IAAAiB,WAAA,GAAAjB,OAAA;AACA,IAAAkB,OAAA,GAAAlB,OAAA;AAEA,IAAMmB,iBAAsC,GAAG;EAACC,OAAO,EAAEC,eAAS;EAAEC,EAAE,EAAE;AAAI,CAAC;AAE7E,IAAMC,MAAiB,GAAG;EACtB,uBAAuB,EAAEJ,iBAAiB;EAC1C,OAAO,EAAEA,iBAAiB;EAC1B,WAAW,EAAE;IAACC,OAAO,EAAEI,UAAI;IAAEC,UAAU,EAAEC,sBAAU,CAACC;EAAQ,CAAC;EAC7D,gCAAgC,EAAE;IAACP,OAAO,EAAEQ;EAAiB,CAAC;EAC9D,kCAAkC,EAAE;IAACR,OAAO,EAAES;EAAa,CAAC;EAC5D,4BAA4B,EAAE;IAACT,OAAO,EAAEU;EAAe,CAAC;EACxD,8BAA8B,EAAE;IAACV,OAAO,EAAEW;EAAe,CAAC;EAC1D,oBAAoB,EAAE;IAACX,OAAO,EAAEY,kBAAW;IAAEV,EAAE,EAAE;EAAI,CAAC;EACtD,oBAAoB,EAAE;IAACF,OAAO,EAAEa,oBAAY;IAAEX,EAAE,EAAE;EAAI,CAAC;EAEvD,kBAAkB,EAAE;IAACF,OAAO,EAAEc,sBAAU;IAAEZ,EAAE,EAAE;EAAI,CAAC;EACnD,yBAAyB,EAAE;IAACF,OAAO,EAAEe,yBAAa;IAAEb,EAAE,EAAE;EAAI,CAAC;EAC7D,gCAAgC,EAAE;IAACF,OAAO,EAAEgB,uBAAW;IAAEd,EAAE,EAAE;EAAI,CAAC;EAElE,8BAA8B,EAAE;IAACF,OAAO,EAAEiB,2BAAoB;IAAEf,EAAE,EAAE;EAAI,CAAC;EACzE,uBAAuB,EAAE;IAACF,OAAO,EAAEkB;EAAgB,CAAC;EAEpD,4BAA4B,EAAE;IAAClB,OAAO,EAAEmB;EAAqB,CAAC;EAE9D,6CAA6C,EAAE;IAACnB,OAAO,EAAEoB;EAAe,CAAC;EACzE,6CAA6C,EAAE;IAACpB,OAAO,EAAEoB;EAAe,CAAC;EACzE,6CAA6C,EAAE;IAACpB,OAAO,EAAEoB;EAAe,CAAC;EAEzE,qCAAqC,EAAE;IAACpB,OAAO,EAAEqB;EAAU,CAAC;EAE5D,uCAAuC,EAAE;IAACrB,OAAO,EAAEsB;EAAY,CAAC;EAChE,qCAAqC,EAAE;IAACtB,OAAO,EAAEuB;EAAuB,CAAC;EAEzE,iCAAiC,EAAE;IAACvB,OAAO,EAAEwB;EAAY,CAAC;EAE1D,gCAAgC,EAAE;IAACxB,OAAO,EAAEyB;EAAW,CAAC;EACxD,gCAAgC,EAAE;IAACzB,OAAO,EAAE0B;EAAc,CAAC;EAC3D,sCAAsC,EAAE;IAAC1B,OAAO,EAAE2B;EAAe,CAAC;EAClE,sCAAsC,EAAE;IAAC3B,OAAO,EAAE4B;EAAe,CAAC;EAClE,sCAAsC,EAAE;IAAC5B,OAAO,EAAE6B;EAAkB,CAAC;EAErE,qCAAqC,EAAE;IACnC7B,OAAO,EAAE8B;EACb,CAAC;EACD,+BAA+B,EAAE;IAAC9B,OAAO,EAAE+B;EAAqB,CAAC;EAEjE,gBAAgB,EAAEhC,iBAAiB;EACnC,2BAA2B,EAAE;IAACC,OAAO,EAAEgC;EAAY,CAAC;EACpD,qBAAqB,EAAEjC,iBAAiB;EACxC,0BAA0B,EAAEA,iBAAiB;EAC7C,qCAAqC,EAAEA,iBAAiB;EACxD,0CAA0C,EAAEA;AAChD,CAAC;AAAA,IAAAkC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEchC,MAAM"}
|
@@ -0,0 +1,6 @@
|
|
1
|
+
import type { Request } from 'express';
|
2
|
+
import { AppMiddleware } from '@gravity-ui/expresskit';
|
3
|
+
import { AuthWay } from '../../shared/constants';
|
4
|
+
export declare function isAuthorized(req: Request): boolean;
|
5
|
+
export declare function getAuthWay(req: Request): AuthWay | undefined;
|
6
|
+
export declare function authorizationResolver(resolver: AppMiddleware): AppMiddleware;
|
@@ -0,0 +1,33 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.authorizationResolver = exports.getAuthWay = exports.isAuthorized = void 0;
|
4
|
+
const oauth_1 = require("../components/oauth");
|
5
|
+
function isAuthorized(req) {
|
6
|
+
var _a;
|
7
|
+
if (req.yt) {
|
8
|
+
return Boolean(Object.keys((_a = req.yt.ytApiAuthHeaders) !== null && _a !== void 0 ? _a : {}));
|
9
|
+
}
|
10
|
+
return false;
|
11
|
+
}
|
12
|
+
exports.isAuthorized = isAuthorized;
|
13
|
+
function getAuthWay(req) {
|
14
|
+
if (!isAuthorized(req)) {
|
15
|
+
return undefined;
|
16
|
+
}
|
17
|
+
if ((0, oauth_1.isUserOAuthLogged)(req)) {
|
18
|
+
return 'oauth';
|
19
|
+
}
|
20
|
+
return 'passwd';
|
21
|
+
}
|
22
|
+
exports.getAuthWay = getAuthWay;
|
23
|
+
function authorizationResolver(resolver) {
|
24
|
+
return (req, res, next) => {
|
25
|
+
if (isAuthorized(req)) {
|
26
|
+
next();
|
27
|
+
return;
|
28
|
+
}
|
29
|
+
resolver(req, res, next);
|
30
|
+
return;
|
31
|
+
};
|
32
|
+
}
|
33
|
+
exports.authorizationResolver = authorizationResolver;
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["_oauth","require","isAuthorized","req","yt","_req$yt$ytApiAuthHead","Boolean","Object","keys","ytApiAuthHeaders","getAuthWay","undefined","isUserOAuthLogged","authorizationResolver","resolver","res","next"],"sources":["authorization.ts"],"sourcesContent":["import type {Request} from 'express';\nimport {AppMiddleware} from '@gravity-ui/expresskit';\nimport {AuthWay} from '../../shared/constants';\nimport {isUserOAuthLogged} from '../components/oauth';\n\nexport function isAuthorized(req: Request) {\n if (req.yt) {\n return Boolean(Object.keys(req.yt.ytApiAuthHeaders ?? {}));\n }\n return false;\n}\n\nexport function getAuthWay(req: Request): AuthWay | undefined {\n if (!isAuthorized(req)) {\n return undefined;\n }\n if (isUserOAuthLogged(req)) {\n return 'oauth';\n }\n return 'passwd';\n}\n\nexport function authorizationResolver(resolver: AppMiddleware): AppMiddleware {\n return (req, res, next) => {\n if (isAuthorized(req)) {\n next();\n return;\n }\n resolver(req, res, next);\n return;\n };\n}\n"],"mappings":";;;;;;;;AAGA,IAAAA,MAAA,GAAAC,OAAA;AAEO,SAASC,YAAYA,CAACC,GAAY,EAAE;EACvC,IAAIA,GAAG,CAACC,EAAE,EAAE;IAAA,IAAAC,qBAAA;IACR,OAAOC,OAAO,CAACC,MAAM,CAACC,IAAI,EAAAH,qBAAA,GAACF,GAAG,CAACC,EAAE,CAACK,gBAAgB,cAAAJ,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAC,CAAC,CAAC;EAC9D;EACA,OAAO,KAAK;AAChB;AAEO,SAASK,UAAUA,CAACP,GAAY,EAAuB;EAC1D,IAAI,CAACD,YAAY,CAACC,GAAG,CAAC,EAAE;IACpB,OAAOQ,SAAS;EACpB;EACA,IAAI,IAAAC,wBAAiB,EAACT,GAAG,CAAC,EAAE;IACxB,OAAO,OAAO;EAClB;EACA,OAAO,QAAQ;AACnB;AAEO,SAASU,qBAAqBA,CAACC,QAAuB,EAAiB;EAC1E,OAAO,UAACX,GAAG,EAAEY,GAAG,EAAEC,IAAI,EAAK;IACvB,IAAId,YAAY,CAACC,GAAG,CAAC,EAAE;MACnBa,IAAI,CAAC,CAAC;MACN;IACJ;IACAF,QAAQ,CAACX,GAAG,EAAEY,GAAG,EAAEC,IAAI,CAAC;IACxB;EACJ,CAAC;AACL"}
|
@@ -2,6 +2,9 @@ export declare const YT_API_REQUEST_ID_HEADER = "X-Custom-Request-Id";
|
|
2
2
|
export declare const YT_CYPRESS_COOKIE_NAME = "YTCypressCookie";
|
3
3
|
export declare const YT_LOCAL_CLUSTER_ID = "ui";
|
4
4
|
export declare const ODIN_PAGE_ID = "odin";
|
5
|
+
export declare const YT_OAUTH_ACCESS_TOKEN_NAME = "yt_oauth_access_token";
|
6
|
+
export declare const YT_OAUTH_REFRESH_TOKEN_NAME = "yt_oauth_refresh_token";
|
7
|
+
export type AuthWay = 'oauth' | 'passwd';
|
5
8
|
/**
|
6
9
|
* Allows to succeed requests when master are in read-only mode and the transaction coordinator cell is evicted
|
7
10
|
*/
|
@@ -1,10 +1,12 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.USE_SUPRESS_SYNC = exports.ODIN_PAGE_ID = exports.YT_LOCAL_CLUSTER_ID = exports.YT_CYPRESS_COOKIE_NAME = exports.YT_API_REQUEST_ID_HEADER = void 0;
|
3
|
+
exports.USE_SUPRESS_SYNC = exports.YT_OAUTH_REFRESH_TOKEN_NAME = exports.YT_OAUTH_ACCESS_TOKEN_NAME = exports.ODIN_PAGE_ID = exports.YT_LOCAL_CLUSTER_ID = exports.YT_CYPRESS_COOKIE_NAME = exports.YT_API_REQUEST_ID_HEADER = void 0;
|
4
4
|
exports.YT_API_REQUEST_ID_HEADER = 'X-Custom-Request-Id';
|
5
5
|
exports.YT_CYPRESS_COOKIE_NAME = 'YTCypressCookie';
|
6
6
|
exports.YT_LOCAL_CLUSTER_ID = 'ui';
|
7
7
|
exports.ODIN_PAGE_ID = 'odin';
|
8
|
+
exports.YT_OAUTH_ACCESS_TOKEN_NAME = 'yt_oauth_access_token';
|
9
|
+
exports.YT_OAUTH_REFRESH_TOKEN_NAME = 'yt_oauth_refresh_token';
|
8
10
|
/**
|
9
11
|
* Allows to succeed requests when master are in read-only mode and the transaction coordinator cell is evicted
|
10
12
|
*/
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["YT_API_REQUEST_ID_HEADER","exports","YT_CYPRESS_COOKIE_NAME","YT_LOCAL_CLUSTER_ID","ODIN_PAGE_ID","USE_SUPRESS_SYNC","suppress_transaction_coordinator_sync","suppress_upstream_sync"],"sources":["index.ts"],"sourcesContent":["export const YT_API_REQUEST_ID_HEADER = 'X-Custom-Request-Id';\nexport const YT_CYPRESS_COOKIE_NAME = 'YTCypressCookie';\nexport const YT_LOCAL_CLUSTER_ID = 'ui';\nexport const ODIN_PAGE_ID = 'odin';\n\n/**\n * Allows to succeed requests when master are in read-only mode and the transaction coordinator cell is evicted\n */\nexport const USE_SUPRESS_SYNC = {\n suppress_transaction_coordinator_sync: true,\n suppress_upstream_sync: true,\n};\n"],"mappings":";;;;;;AAAO,IAAMA,wBAAwB,GAAAC,OAAA,CAAAD,wBAAA,GAAG,qBAAqB;AACtD,IAAME,sBAAsB,GAAAD,OAAA,CAAAC,sBAAA,GAAG,iBAAiB;AAChD,IAAMC,mBAAmB,GAAAF,OAAA,CAAAE,mBAAA,GAAG,IAAI;AAChC,IAAMC,YAAY,GAAAH,OAAA,CAAAG,YAAA,GAAG,MAAM
|
1
|
+
{"version":3,"names":["YT_API_REQUEST_ID_HEADER","exports","YT_CYPRESS_COOKIE_NAME","YT_LOCAL_CLUSTER_ID","ODIN_PAGE_ID","YT_OAUTH_ACCESS_TOKEN_NAME","YT_OAUTH_REFRESH_TOKEN_NAME","USE_SUPRESS_SYNC","suppress_transaction_coordinator_sync","suppress_upstream_sync"],"sources":["index.ts"],"sourcesContent":["export const YT_API_REQUEST_ID_HEADER = 'X-Custom-Request-Id';\nexport const YT_CYPRESS_COOKIE_NAME = 'YTCypressCookie';\nexport const YT_LOCAL_CLUSTER_ID = 'ui';\nexport const ODIN_PAGE_ID = 'odin';\n\nexport const YT_OAUTH_ACCESS_TOKEN_NAME = 'yt_oauth_access_token';\nexport const YT_OAUTH_REFRESH_TOKEN_NAME = 'yt_oauth_refresh_token';\n\nexport type AuthWay = 'oauth' | 'passwd';\n\n/**\n * Allows to succeed requests when master are in read-only mode and the transaction coordinator cell is evicted\n */\nexport const USE_SUPRESS_SYNC = {\n suppress_transaction_coordinator_sync: true,\n suppress_upstream_sync: true,\n};\n"],"mappings":";;;;;;AAAO,IAAMA,wBAAwB,GAAAC,OAAA,CAAAD,wBAAA,GAAG,qBAAqB;AACtD,IAAME,sBAAsB,GAAAD,OAAA,CAAAC,sBAAA,GAAG,iBAAiB;AAChD,IAAMC,mBAAmB,GAAAF,OAAA,CAAAE,mBAAA,GAAG,IAAI;AAChC,IAAMC,YAAY,GAAAH,OAAA,CAAAG,YAAA,GAAG,MAAM;AAE3B,IAAMC,0BAA0B,GAAAJ,OAAA,CAAAI,0BAAA,GAAG,uBAAuB;AAC1D,IAAMC,2BAA2B,GAAAL,OAAA,CAAAK,2BAAA,GAAG,wBAAwB;AAInE;AACA;AACA;AACO,IAAMC,gBAAgB,GAAAN,OAAA,CAAAM,gBAAA,GAAG;EAC5BC,qCAAqC,EAAE,IAAI;EAC3CC,sBAAsB,EAAE;AAC5B,CAAC"}
|
@@ -233,6 +233,8 @@ export interface ConfigData {
|
|
233
233
|
uiSettings?: UISettings;
|
234
234
|
metrikaCounterId?: number;
|
235
235
|
allowLoginDialog?: boolean;
|
236
|
+
allowOAuth?: boolean;
|
237
|
+
oauthButtonLabel?: string;
|
236
238
|
allowUserColumnPresets?: boolean;
|
237
239
|
odinPageEnabled: boolean;
|
238
240
|
}
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
});
|
6
6
|
exports.LoginFormPage = LoginFormPage;
|
7
7
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
8
|
-
var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty"));
|
9
8
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
10
9
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
11
10
|
var _react = _interopRequireWildcard(require("react"));
|
@@ -14,7 +13,9 @@ var _reactRedux = require("react-redux");
|
|
14
13
|
var _uikit = require("@gravity-ui/uikit");
|
15
14
|
var _global = require("../../../store/actions/global");
|
16
15
|
var _ytLocalStorage = _interopRequireDefault(require("../../../utils/yt-local-storage"));
|
16
|
+
var _global2 = require("../../../store/selectors/global");
|
17
17
|
var _LoginPageWrapper = _interopRequireDefault(require("../LoginPageWrapper/LoginPageWrapper"));
|
18
|
+
var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
|
18
19
|
var _bemCnLite = _interopRequireDefault(require("bem-cn-lite"));
|
19
20
|
var _jsxRuntime = require("react/jsx-runtime");
|
20
21
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
@@ -41,6 +42,8 @@ function LoginForm(_ref2) {
|
|
41
42
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
42
43
|
username = _useState2[0],
|
43
44
|
setUsername = _useState2[1];
|
45
|
+
var allowOAuth = (0, _reactRedux.useSelector)(_global2.getOAuthEnabled);
|
46
|
+
var buttonLabel = (0, _reactRedux.useSelector)(_global2.getOAuthButtonLabel);
|
44
47
|
var _useState3 = (0, _react.useState)(''),
|
45
48
|
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
46
49
|
password = _useState4[0],
|
@@ -60,7 +63,7 @@ function LoginForm(_ref2) {
|
|
60
63
|
username: username,
|
61
64
|
password: password
|
62
65
|
});
|
63
|
-
if (!(0,
|
66
|
+
if (!(0, _isEmpty.default)(validationErrors)) {
|
64
67
|
setErrors(validationErrors);
|
65
68
|
return;
|
66
69
|
}
|
@@ -99,9 +102,9 @@ function LoginForm(_ref2) {
|
|
99
102
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("h1", {
|
100
103
|
className: block('title'),
|
101
104
|
children: "Welcome to YTsaurus!"
|
102
|
-
}), /*#__PURE__*/(0, _jsxRuntime.
|
105
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("p", {
|
103
106
|
className: block('text'),
|
104
|
-
children: "
|
107
|
+
children: ["A unified scalable platform for storing and processing large volumes of data.", /*#__PURE__*/(0, _jsxRuntime.jsx)("br", {}), /*#__PURE__*/(0, _jsxRuntime.jsx)("br", {}), "Login to your account."]
|
105
108
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("form", {
|
106
109
|
onSubmit: handleFormSubmit,
|
107
110
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_uikit.TextInput, {
|
@@ -126,7 +129,8 @@ function LoginForm(_ref2) {
|
|
126
129
|
error: errors.password
|
127
130
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_uikit.Button, {
|
128
131
|
className: block('button', {
|
129
|
-
solid: true
|
132
|
+
solid: true,
|
133
|
+
submit: true
|
130
134
|
}),
|
131
135
|
type: "submit",
|
132
136
|
width: "max",
|
@@ -135,6 +139,20 @@ function LoginForm(_ref2) {
|
|
135
139
|
view: theme === 'light' ? 'action' : 'normal-contrast',
|
136
140
|
loading: loading,
|
137
141
|
children: "Login"
|
142
|
+
}), allowOAuth && /*#__PURE__*/(0, _jsxRuntime.jsx)(_uikit.Button, {
|
143
|
+
className: block('button', {
|
144
|
+
solid: true,
|
145
|
+
link: true,
|
146
|
+
submit: true
|
147
|
+
}),
|
148
|
+
type: "submit",
|
149
|
+
href: "/oauth/login",
|
150
|
+
width: "max",
|
151
|
+
size: "l",
|
152
|
+
pin: "circle-circle",
|
153
|
+
view: theme === 'light' ? 'action' : 'normal-contrast',
|
154
|
+
loading: loading,
|
155
|
+
children: buttonLabel || 'Login via SSO'
|
138
156
|
}), errors.response && /*#__PURE__*/(0, _jsxRuntime.jsx)(_uikit.Text, {
|
139
157
|
as: "p",
|
140
158
|
color: "danger",
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_axios","_interopRequireDefault","_reactRedux","_uikit","_global","_ytLocalStorage","_LoginPageWrapper","_bemCnLite","_jsxRuntime","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","obj","block","cn","validate","_ref","username","password","result","LoginForm","_ref2","_ytLocalStorage$get","theme","dispatch","useDispatch","_useState","useState","ytLocalStorage","_useState2","_slicedToArray","setUsername","_useState3","_useState4","setPassword","_useState5","_useState6","loading","setLoading","_React$useState","React","_React$useState2","errors","setErrors","handleFormSubmit","useCallback","preventDefault","validationErrors","_isEmpty","authorize","then","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","onSuccessLogin","stop","error","response","data","message","_jsxs","_Fragment","children","_jsx","className","onSubmit","TextInput","type","size","placeholder","name","value","onUpdate","Button","solid","width","pin","view","Text","as","color","_ref4","axios","post","LoginFormPage","_ref5","LoginPageWrapper"],"sources":["LoginFormPage.tsx"],"sourcesContent":["import React, {useCallback, useState} from 'react';\nimport axios, {AxiosError} from 'axios';\nimport {useDispatch} from 'react-redux';\nimport {Button, Text, TextInput} from '@gravity-ui/uikit';\nimport {onSuccessLogin} from '../../../store/actions/global';\nimport ytLocalStorage from '../../../utils/yt-local-storage';\nimport LoginPageWrapper from '../LoginPageWrapper/LoginPageWrapper';\nimport _ from 'lodash';\n\nimport cn from 'bem-cn-lite';\n\nconst block = cn('login-page');\n\ninterface ErrorFields {\n username?: string;\n password?: string;\n response?: string;\n}\n\ninterface Props {\n theme?: 'light' | 'dark';\n}\n\nconst validate = ({\n username,\n password,\n}: Record<keyof Omit<ErrorFields, 'response'>, string>): ErrorFields => {\n const result: ErrorFields = {};\n if (username === '') {\n result.username = 'Username must not be empty';\n }\n\n if (password === '') {\n result.password = 'Password must not be empty';\n }\n\n return result;\n};\n\nfunction LoginForm({theme}: Props) {\n const dispatch = useDispatch();\n const [username, setUsername] = useState(ytLocalStorage.get('loginDialog')?.username || '');\n const [password, setPassword] = useState('');\n const [loading, setLoading] = useState<boolean>(false);\n const [errors, setErrors] = React.useState<ErrorFields>({});\n\n const handleFormSubmit = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault();\n setErrors({});\n const validationErrors = validate({username, password});\n if (!_.isEmpty(validationErrors)) {\n setErrors(validationErrors);\n return;\n }\n setLoading(true);\n authorize({username, password})\n .then(async () => {\n ytLocalStorage.set('loginDialog', {username});\n dispatch(onSuccessLogin(username));\n })\n .catch((error: AxiosError<Error>) => {\n if (error.response && error.response.data && error.response.data.message) {\n setErrors({\n response: error.response.data.message,\n });\n } else {\n setErrors({response: error.message});\n }\n })\n .finally(() => {\n setLoading(false);\n });\n },\n [username, password, dispatch],\n );\n\n return (\n <>\n <h1 className={block('title')}>Welcome to YTsaurus!</h1>\n <p className={block('text')}>\n Single scalable platform for high volume storage and handling data. Login to your\n account.\n </p>\n <form onSubmit={handleFormSubmit}>\n <TextInput\n className={block('field')}\n type=\"text\"\n size=\"l\"\n placeholder=\"Login\"\n name=\"username\"\n value={username}\n onUpdate={setUsername}\n error={errors.username}\n />\n <TextInput\n className={block('field', {password: true})}\n type=\"password\"\n size=\"l\"\n placeholder=\"Password\"\n name=\"password\"\n value={password}\n onUpdate={setPassword}\n error={errors.password}\n />\n <Button\n className={block('button', {solid: true})}\n type=\"submit\"\n width=\"max\"\n size=\"l\"\n pin=\"circle-circle\"\n view={theme === 'light' ? 'action' : 'normal-contrast'}\n loading={loading}\n >\n Login\n </Button>\n {errors.response && (\n <Text as=\"p\" color=\"danger\" className={block('error')}>\n {errors.response}\n </Text>\n )}\n </form>\n </>\n );\n}\n\nfunction authorize({username, password}: {username: string; password: string}) {\n return axios.post(`/api/yt/login`, {\n username,\n password,\n });\n}\n\nexport function LoginFormPage({theme}: Props) {\n return (\n <LoginPageWrapper theme={theme}>\n <LoginForm theme={theme} />\n </LoginPageWrapper>\n );\n}\n"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_axios","_interopRequireDefault","_reactRedux","_uikit","_global","_ytLocalStorage","_global2","_LoginPageWrapper","_isEmpty","_bemCnLite","_jsxRuntime","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","obj","block","cn","validate","_ref","username","password","result","LoginForm","_ref2","_ytLocalStorage$get","theme","dispatch","useDispatch","_useState","useState","ytLocalStorage","_useState2","_slicedToArray","setUsername","allowOAuth","useSelector","getOAuthEnabled","buttonLabel","getOAuthButtonLabel","_useState3","_useState4","setPassword","_useState5","_useState6","loading","setLoading","_React$useState","React","_React$useState2","errors","setErrors","handleFormSubmit","useCallback","preventDefault","validationErrors","isEmpty","authorize","then","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","onSuccessLogin","stop","error","response","data","message","_jsxs","_Fragment","children","_jsx","className","onSubmit","TextInput","type","size","placeholder","name","value","onUpdate","Button","solid","submit","width","pin","view","link","href","Text","as","color","_ref4","axios","post","LoginFormPage","_ref5","LoginPageWrapper"],"sources":["LoginFormPage.tsx"],"sourcesContent":["import React, {useCallback, useState} from 'react';\nimport axios, {AxiosError} from 'axios';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Button, Text, TextInput} from '@gravity-ui/uikit';\nimport {onSuccessLogin} from '../../../store/actions/global';\nimport ytLocalStorage from '../../../utils/yt-local-storage';\nimport {getOAuthButtonLabel, getOAuthEnabled} from '../../../store/selectors/global';\nimport LoginPageWrapper from '../LoginPageWrapper/LoginPageWrapper';\nimport isEmpty from 'lodash/isEmpty';\n\nimport cn from 'bem-cn-lite';\n\nconst block = cn('login-page');\n\ninterface ErrorFields {\n username?: string;\n password?: string;\n response?: string;\n}\n\ninterface Props {\n theme?: 'light' | 'dark';\n}\n\nconst validate = ({\n username,\n password,\n}: Record<keyof Omit<ErrorFields, 'response'>, string>): ErrorFields => {\n const result: ErrorFields = {};\n if (username === '') {\n result.username = 'Username must not be empty';\n }\n\n if (password === '') {\n result.password = 'Password must not be empty';\n }\n\n return result;\n};\n\nfunction LoginForm({theme}: Props) {\n const dispatch = useDispatch();\n const [username, setUsername] = useState(ytLocalStorage.get('loginDialog')?.username || '');\n const allowOAuth = useSelector(getOAuthEnabled);\n const buttonLabel = useSelector(getOAuthButtonLabel);\n const [password, setPassword] = useState('');\n const [loading, setLoading] = useState<boolean>(false);\n const [errors, setErrors] = React.useState<ErrorFields>({});\n\n const handleFormSubmit = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault();\n setErrors({});\n const validationErrors = validate({username, password});\n if (!isEmpty(validationErrors)) {\n setErrors(validationErrors);\n return;\n }\n setLoading(true);\n authorize({username, password})\n .then(async () => {\n ytLocalStorage.set('loginDialog', {username});\n dispatch(onSuccessLogin(username));\n })\n .catch((error: AxiosError<Error>) => {\n if (error.response && error.response.data && error.response.data.message) {\n setErrors({\n response: error.response.data.message,\n });\n } else {\n setErrors({response: error.message});\n }\n })\n .finally(() => {\n setLoading(false);\n });\n },\n [username, password, dispatch],\n );\n\n return (\n <>\n <h1 className={block('title')}>Welcome to YTsaurus!</h1>\n <p className={block('text')}>\n A unified scalable platform for storing and processing large volumes of data.\n <br />\n <br />\n Login to your account.\n </p>\n <form onSubmit={handleFormSubmit}>\n <TextInput\n className={block('field')}\n type=\"text\"\n size=\"l\"\n placeholder=\"Login\"\n name=\"username\"\n value={username}\n onUpdate={setUsername}\n error={errors.username}\n />\n <TextInput\n className={block('field', {password: true})}\n type=\"password\"\n size=\"l\"\n placeholder=\"Password\"\n name=\"password\"\n value={password}\n onUpdate={setPassword}\n error={errors.password}\n />\n\n <Button\n className={block('button', {solid: true, submit: true})}\n type=\"submit\"\n width=\"max\"\n size=\"l\"\n pin=\"circle-circle\"\n view={theme === 'light' ? 'action' : 'normal-contrast'}\n loading={loading}\n >\n Login\n </Button>\n\n {allowOAuth && (\n <Button\n className={block('button', {solid: true, link: true, submit: true})}\n type=\"submit\"\n href=\"/oauth/login\"\n width=\"max\"\n size=\"l\"\n pin=\"circle-circle\"\n view={theme === 'light' ? 'action' : 'normal-contrast'}\n loading={loading}\n >\n {buttonLabel || 'Login via SSO'}\n </Button>\n )}\n\n {errors.response && (\n <Text as=\"p\" color=\"danger\" className={block('error')}>\n {errors.response}\n </Text>\n )}\n </form>\n </>\n );\n}\n\nfunction authorize({username, password}: {username: string; password: string}) {\n return axios.post(`/api/yt/login`, {\n username,\n password,\n });\n}\n\nexport function LoginFormPage({theme}: Props) {\n return (\n <LoginPageWrapper theme={theme}>\n <LoginForm theme={theme} />\n </LoginPageWrapper>\n );\n}\n"],"mappings":"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"}
|
@@ -112,6 +112,14 @@
|
|
112
112
|
--yc-button-background-color: var(--login-button-solid);
|
113
113
|
--yc-button-background-color-hover: var(--login-button-solid-hover);
|
114
114
|
}
|
115
|
+
.login-page__button_link {
|
116
|
+
display: flex;
|
117
|
+
align-items: center;
|
118
|
+
justify-content: center;
|
119
|
+
}
|
120
|
+
.login-page__button_submit:not(:last-child) {
|
121
|
+
margin-bottom: 10px;
|
122
|
+
}
|
115
123
|
.login-page .yc-button_loading {
|
116
124
|
--yc-button-loading-color-1: var(--login-button-loading-color-1);
|
117
125
|
--yc-button-loading-color-2: var(--login-button-loading-color-2);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["LoginPageWrapper.scss","login-page-theme-light.scss","login-page-theme-dark.scss"],"names":[],"mappings":"AAGA;;ECFI,2BAAA;EACA,6BAAA;EACA,mCAAA;EACA,0FAAA;EACA,uCAAA;EACA,uCAAA;ADEJ;;AAAA;;EEPI,2BAAA;EACA,6BAAA;EACA,mCAAA;EACA,yFAAA;EACA,uCAAA;EACA,uCAAA;AFYJ;;AACA;EALI,sBAAA;EACA,kBAAA;EACA,gBAAA;EAMA,kBAAA;EACA,aAAA;EACA,sBAAA;EAEA,gBAAA;EACA,iBAAA;EACA,uBAAA;EAEA,yCAAA;EACA,+CAAA;EACA,4BAAA;EACA,qCAAA;EACA,0BAAA;AACJ;AACI;EACI,kBAAA;EACA,SAAA;EACA,UAAA;EACA,eAAA;EACA,eAAA;AACR;AAEI;EACI,gBAAA;EACA,kBAAA;AAAR;AAEQ;EAJJ;IAKQ,kBAAA;EACV;AACF;AACQ;EARJ;IASQ,kBAAA;EAEV;AACF;AAAQ;EAZJ;IAaQ,kBAAA;EAGV;AACF;AADQ;EAhBJ;IAiBQ,kBAAA;EAIV;AACF;AADI;EACI,eAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,mBAAA;AAGR;AAAI;EACI,eAAA;EACA,iBAAA;EACA,gBAAA;AAER;AACI;EACI,cAAA;AACR;AAEI;EACI,mBAAA;EACA,mCAAA;AAAR;AAEQ;EAzEJ,sBAAA;EACA,kBAAA;EACA,gBAAA;EAyEQ,YAAA;EACA,kBAAA;EACA,eAAA;EACA,iBAAA;EACA,gBAAA;AAEZ;AAEY;EACI,mBAAA;AAAhB;AADY;EACI,mBAAA;AAAhB;AAKI;EAzFA,sBAAA;EACA,kBAAA;EACA,gBAAA;EAyFI,wBAAA;EACA,eAAA;EACA,iBAAA;AADR;AAGQ;EACI,uDAAA;EACA,mEAAA;AADZ;
|
1
|
+
{"version":3,"sources":["LoginPageWrapper.scss","login-page-theme-light.scss","login-page-theme-dark.scss"],"names":[],"mappings":"AAGA;;ECFI,2BAAA;EACA,6BAAA;EACA,mCAAA;EACA,0FAAA;EACA,uCAAA;EACA,uCAAA;ADEJ;;AAAA;;EEPI,2BAAA;EACA,6BAAA;EACA,mCAAA;EACA,yFAAA;EACA,uCAAA;EACA,uCAAA;AFYJ;;AACA;EALI,sBAAA;EACA,kBAAA;EACA,gBAAA;EAMA,kBAAA;EACA,aAAA;EACA,sBAAA;EAEA,gBAAA;EACA,iBAAA;EACA,uBAAA;EAEA,yCAAA;EACA,+CAAA;EACA,4BAAA;EACA,qCAAA;EACA,0BAAA;AACJ;AACI;EACI,kBAAA;EACA,SAAA;EACA,UAAA;EACA,eAAA;EACA,eAAA;AACR;AAEI;EACI,gBAAA;EACA,kBAAA;AAAR;AAEQ;EAJJ;IAKQ,kBAAA;EACV;AACF;AACQ;EARJ;IASQ,kBAAA;EAEV;AACF;AAAQ;EAZJ;IAaQ,kBAAA;EAGV;AACF;AADQ;EAhBJ;IAiBQ,kBAAA;EAIV;AACF;AADI;EACI,eAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,mBAAA;AAGR;AAAI;EACI,eAAA;EACA,iBAAA;EACA,gBAAA;AAER;AACI;EACI,cAAA;AACR;AAEI;EACI,mBAAA;EACA,mCAAA;AAAR;AAEQ;EAzEJ,sBAAA;EACA,kBAAA;EACA,gBAAA;EAyEQ,YAAA;EACA,kBAAA;EACA,eAAA;EACA,iBAAA;EACA,gBAAA;AAEZ;AAEY;EACI,mBAAA;AAAhB;AADY;EACI,mBAAA;AAAhB;AAKI;EAzFA,sBAAA;EACA,kBAAA;EACA,gBAAA;EAyFI,wBAAA;EACA,eAAA;EACA,iBAAA;AADR;AAGQ;EACI,uDAAA;EACA,mEAAA;AADZ;AAIQ;EACI,aAAA;EACA,mBAAA;EACA,uBAAA;AAFZ;AAMY;EACI,mBAAA;AAJhB;AASI;EACI,gEAAA;EACA,gEAAA;AAPR;AAUI;EACI,yCAAA;AARR;AAWI;EACI,yDAAA;AATR;AAYI;EACI,iBAAA;EACA,WAAA;EACA,aAAA;EACA,mBAAA;EACA,8BAAA;AAVR;AAaI;EACI,SAAA;EACA,eAAA;EACA,kBAAA;EACA,gBAAA;EACA,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,oCAAA;EACA,yBAAA;EACA,gDAAA;AAXR;AAaQ;EACI,kCAAA;EACA,sDAAA;AAXZ","file":"LoginPageWrapper.css","sourcesContent":["@import './login-page-theme-light.scss';\n@import './login-page-theme-dark.scss';\n\n.g-root_theme_light,\n.g-root_theme_light-hc {\n @include yt-login-page-light;\n}\n\n.g-root_theme_dark,\n.g-root_theme_dark-hc {\n @include yt-login-page-dark;\n}\n\n@mixin login-page-font-settings {\n font-family: 'Manrope';\n font-style: normal;\n font-weight: 400;\n}\n\n.login-page {\n @include login-page-font-settings;\n\n position: relative;\n display: flex;\n flex-direction: column;\n\n min-width: 320px;\n min-height: 100vh;\n justify-content: center;\n\n background-color: var(--login-background);\n background-image: var(--login-background-image);\n background-repeat: no-repeat;\n background-position: bottom 0 right 0;\n background-size: auto 100%;\n\n &__logo {\n position: absolute;\n top: 40px;\n left: 40px;\n width: 160.32px;\n height: 33.06px;\n }\n\n &__content {\n max-width: 300px;\n margin-left: 150px;\n\n @media (min-width: 1200px) {\n margin-left: 150px;\n }\n\n @media (min-width: 1400px) {\n margin-left: 200px;\n }\n\n @media (min-width: 1600px) {\n margin-left: 250px;\n }\n\n @media (min-width: 1920px) {\n margin-left: 330px;\n }\n }\n\n &__title {\n font-size: 30px;\n line-height: 36px;\n margin: 0 0 8px;\n font-weight: 600;\n white-space: nowrap;\n }\n\n &__text {\n font-size: 13px;\n line-height: 18px;\n margin: 0 0 24px;\n }\n\n &__error {\n margin: 12px 0;\n }\n\n &__field {\n margin-bottom: 20px;\n --yc-text-input-border-radius: 10px;\n\n .yc-text-input__control {\n @include login-page-font-settings;\n height: 40px;\n padding: 12px 10px;\n font-size: 13px;\n line-height: 16px;\n background: none;\n }\n\n &_password {\n .yc-text-input__control:not(:placeholder-shown) {\n letter-spacing: 2px;\n }\n }\n }\n\n &__button {\n @include login-page-font-settings;\n --yc-button-height: 38px;\n font-size: 15px;\n line-height: 20px;\n\n &_solid {\n --yc-button-background-color: var(--login-button-solid);\n --yc-button-background-color-hover: var(--login-button-solid-hover);\n }\n\n &_link {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n &_submit {\n &:not(:last-child) {\n margin-bottom: 10px;\n }\n }\n }\n\n .yc-button_loading {\n --yc-button-loading-color-1: var(--login-button-loading-color-1);\n --yc-button-loading-color-2: var(--login-button-loading-color-2);\n }\n\n .yc-button_view_outlined::before {\n background-color: var(--login-background);\n }\n\n .yc-button:hover::before {\n background-color: var(--yc-button-background-color-hover);\n }\n\n &__navigate {\n padding-top: 15px;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n &__navigate-link {\n margin: 0;\n cursor: pointer;\n font-style: normal;\n font-weight: 400;\n font-size: 13px;\n line-height: 18px;\n text-align: left;\n color: var(--g-color-text-secondary);\n border-bottom: 1px dashed;\n border-color: var(--g-color-line-generic-accent);\n\n &:hover {\n color: var(--g-color-text-primary);\n border-color: var(--g-color-line-generic-accent-hover);\n }\n }\n}\n","@mixin yt-login-page-light {\n --login-background: #f5fff0;\n --login-button-solid: #4c4c4c;\n --login-button-solid-hover: #333333;\n --login-background-image: url('../../../../../img/svg/YT-login-page-background-light.svg');\n --login-button-loading-color-1: #333333;\n --login-button-loading-color-2: #4c4c4c;\n}\n","@mixin yt-login-page-dark {\n --login-background: #1a1a1a;\n --login-button-solid: #e9a43b;\n --login-button-solid-hover: #d28004;\n --login-background-image: url('../../../../../img/svg/YT-login-page-background-dark.svg');\n --login-button-loading-color-1: #e9a43b;\n --login-button-loading-color-2: #d28004;\n}\n"],"sourceRoot":""}
|
@@ -68,8 +68,8 @@ export declare class NumberInputWithError extends React.Component<NumberInputWit
|
|
68
68
|
bottomLineVisibility?: "hidden" | "visible" | "focused" | undefined;
|
69
69
|
disabled?: boolean | undefined;
|
70
70
|
type?: string | undefined;
|
71
|
-
id?: string | undefined;
|
72
71
|
name?: string | undefined;
|
72
|
+
id?: string | undefined;
|
73
73
|
errorMessage?: React.ReactNode;
|
74
74
|
size?: import("@gravity-ui/uikit").InputControlSize | undefined;
|
75
75
|
label?: string | undefined;
|
@@ -39,6 +39,7 @@ function AppNavigation(_ref) {
|
|
39
39
|
var clusterConfig = (0, _global.getClusterConfigByName)(cluster || '');
|
40
40
|
var items = (0, _PagesSettingsEditor.usePagesMenuItems)(cluster);
|
41
41
|
var currentUser = (0, _reactRedux.useSelector)(_global.getCurrentUserName);
|
42
|
+
var authWay = (0, _reactRedux.useSelector)(_global.getAuthWay);
|
42
43
|
var _React$useState = _react.default.useState(false),
|
43
44
|
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
|
44
45
|
settingsVisible = _React$useState2[0],
|
@@ -95,6 +96,7 @@ function AppNavigation(_ref) {
|
|
95
96
|
'no-cluster': !cluster
|
96
97
|
}),
|
97
98
|
currentUser: currentUser,
|
99
|
+
authWay: authWay,
|
98
100
|
menuItems: (0, _isEmpty2.default)(clusterConfig) ? [] : menuItems,
|
99
101
|
panelContent: /*#__PURE__*/(0, _jsxRuntime.jsx)(_PagesSettingsEditor.PagesSettingsEditor, {
|
100
102
|
cluster: cluster,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_bemCnLite","_some2","_isEmpty2","_ellipsis","_reactRedux","_PagesSettingsEditor","_global","_SettingsPanel","_useCluster","_UIFactory","_settings","_settings2","_global2","_jsxRuntime","obj","__esModule","default","block","cn","isRootPage","cluster","arguments","length","undefined","_some","UIFactory","getExtraRootPages","info","pageId","AppNavigation","_ref","children","dispatch","useDispatch","pageOrCluster","useClusterFromLocation","rootPageCluster","useSelector","getRootPagesCluster","clusterConfig","getClusterConfigByName","items","usePagesMenuItems","currentUser","getCurrentUserName","_React$useState","React","useState","_React$useState2","_slicedToArray","settingsVisible","setSettingsVisible","_React$useState3","_React$useState4","panelVisible","setPanelVisible","onClosePanel","useCallback","togglePanelVisibility","toggleSettingsVisible","menuItems","useMemo","concat","_toConsumableArray","id","title","icon","ellipsisIcon","current","onItemClick","iconSize","className","expanded","getSettingNavigationPanelExpanded","onChangeCompact","newCompact","setSettingNavigationPanelExpanded","setTimeout","el","window","document","querySelector","_getComputedStyle","_widthStr$slice","widthStr","getComputedStyle","getPropertyValue","width","Number","slice","call","isNaN","setAsideHeaderWidth","props","logoClassName","_isEmpty","panelContent","_jsx","PagesSettingsEditor","panelClassName","settingsContent","SettingsPanel","compact","renderAppNavigation"],"sources":["AppNavigation.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'bem-cn-lite';\nimport _some from 'lodash/some';\nimport _isEmpty from 'lodash/isEmpty';\n\nimport ellipsisIcon from '../../../../img/svg/ellipsis.svg';\n\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {PagesSettingsEditor, usePagesMenuItems} from './PagesSettingsEditor';\nimport {\n getClusterConfigByName,\n getCurrentUserName,\n getRootPagesCluster,\n} from '../../store/selectors/global';\n\nimport SettingsPanel from '../SettingsPanel/SettingsPanel';\nimport {useClusterFromLocation} from '../../hooks/use-cluster';\n\nimport './AppNavigation.scss';\nimport UIFactory from '../../UIFactory';\nimport {AppNavigationProps} from './AppNavigationPageLayout';\nimport {getSettingNavigationPanelExpanded} from '../../store/selectors/settings';\nimport {setSettingNavigationPanelExpanded} from '../../store/actions/settings/settings';\nimport {setAsideHeaderWidth} from '../../store/actions/global';\n\nconst block = cn('app-navigation');\n\ninterface ExtProps {\n children: React.ReactNode;\n}\n\nfunction isRootPage(cluster = '') {\n return _some(UIFactory.getExtraRootPages(), (info) => {\n return cluster === info.pageId;\n });\n}\n\nexport default function AppNavigation({children}: ExtProps) {\n const dispatch = useDispatch();\n const pageOrCluster = useClusterFromLocation();\n const rootPageCluster = useSelector(getRootPagesCluster);\n const cluster = isRootPage(pageOrCluster) ? rootPageCluster : pageOrCluster;\n const clusterConfig = getClusterConfigByName(cluster || '');\n\n const items = usePagesMenuItems(cluster);\n const currentUser = useSelector(getCurrentUserName);\n\n const [settingsVisible, setSettingsVisible] = React.useState(false);\n const [panelVisible, setPanelVisible] = React.useState(false);\n\n const onClosePanel = React.useCallback(() => {\n setSettingsVisible(false);\n setPanelVisible(false);\n }, []);\n\n const togglePanelVisibility = React.useCallback(() => {\n setSettingsVisible(false);\n setPanelVisible(!panelVisible);\n }, [panelVisible]);\n\n const toggleSettingsVisible = React.useCallback(() => {\n setPanelVisible(false);\n setSettingsVisible(!settingsVisible);\n }, [settingsVisible]);\n\n const menuItems: typeof items = React.useMemo(() => {\n if (!cluster) {\n return [];\n }\n return [\n ...items,\n {\n id: 'all_pages',\n title: 'All pages',\n icon: ellipsisIcon,\n current: false,\n onItemClick: togglePanelVisibility,\n iconSize: 24,\n },\n ];\n }, [items, cluster, togglePanelVisibility]);\n\n const className = block();\n\n const expanded = useSelector(getSettingNavigationPanelExpanded);\n const onChangeCompact = React.useCallback(\n (newCompact: boolean) => {\n dispatch(setSettingNavigationPanelExpanded(!newCompact));\n\n setTimeout(() => {\n const el = window.document.querySelector(`.${className}`);\n if (el) {\n const widthStr =\n getComputedStyle(el)?.getPropertyValue('--gn-aside-header-size');\n const width = Number(widthStr?.slice?.(0, -2)); // '236px' or '56px'\n if (!isNaN(width)) {\n dispatch(setAsideHeaderWidth(width));\n }\n }\n }, 500);\n },\n [dispatch],\n );\n\n const props: AppNavigationProps = {\n className,\n clusterConfig,\n logoClassName: block('logo-icon', {'no-cluster': !cluster}),\n currentUser,\n menuItems: _isEmpty(clusterConfig) ? [] : menuItems,\n panelContent: (\n <PagesSettingsEditor\n cluster={cluster}\n className={block('panel-content')}\n onItemClick={onClosePanel}\n />\n ),\n panelClassName: block('panel'),\n panelVisible,\n onClosePanel,\n settingsContent: <SettingsPanel />,\n settingsVisible,\n toggleSettingsVisible,\n\n compact: !expanded,\n onChangeCompact,\n children,\n };\n\n return UIFactory.renderAppNavigation(props);\n}\n"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_bemCnLite","_some2","_isEmpty2","_ellipsis","_reactRedux","_PagesSettingsEditor","_global","_SettingsPanel","_useCluster","_UIFactory","_settings","_settings2","_global2","_jsxRuntime","obj","__esModule","default","block","cn","isRootPage","cluster","arguments","length","undefined","_some","UIFactory","getExtraRootPages","info","pageId","AppNavigation","_ref","children","dispatch","useDispatch","pageOrCluster","useClusterFromLocation","rootPageCluster","useSelector","getRootPagesCluster","clusterConfig","getClusterConfigByName","items","usePagesMenuItems","currentUser","getCurrentUserName","authWay","getAuthWay","_React$useState","React","useState","_React$useState2","_slicedToArray","settingsVisible","setSettingsVisible","_React$useState3","_React$useState4","panelVisible","setPanelVisible","onClosePanel","useCallback","togglePanelVisibility","toggleSettingsVisible","menuItems","useMemo","concat","_toConsumableArray","id","title","icon","ellipsisIcon","current","onItemClick","iconSize","className","expanded","getSettingNavigationPanelExpanded","onChangeCompact","newCompact","setSettingNavigationPanelExpanded","setTimeout","el","window","document","querySelector","_getComputedStyle","_widthStr$slice","widthStr","getComputedStyle","getPropertyValue","width","Number","slice","call","isNaN","setAsideHeaderWidth","props","logoClassName","_isEmpty","panelContent","_jsx","PagesSettingsEditor","panelClassName","settingsContent","SettingsPanel","compact","renderAppNavigation"],"sources":["AppNavigation.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'bem-cn-lite';\nimport _some from 'lodash/some';\nimport _isEmpty from 'lodash/isEmpty';\n\nimport ellipsisIcon from '../../../../img/svg/ellipsis.svg';\n\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {PagesSettingsEditor, usePagesMenuItems} from './PagesSettingsEditor';\nimport {\n getAuthWay,\n getClusterConfigByName,\n getCurrentUserName,\n getRootPagesCluster,\n} from '../../store/selectors/global';\n\nimport SettingsPanel from '../SettingsPanel/SettingsPanel';\nimport {useClusterFromLocation} from '../../hooks/use-cluster';\n\nimport './AppNavigation.scss';\nimport UIFactory from '../../UIFactory';\nimport {AppNavigationProps} from './AppNavigationPageLayout';\nimport {getSettingNavigationPanelExpanded} from '../../store/selectors/settings';\nimport {setSettingNavigationPanelExpanded} from '../../store/actions/settings/settings';\nimport {setAsideHeaderWidth} from '../../store/actions/global';\n\nconst block = cn('app-navigation');\n\ninterface ExtProps {\n children: React.ReactNode;\n}\n\nfunction isRootPage(cluster = '') {\n return _some(UIFactory.getExtraRootPages(), (info) => {\n return cluster === info.pageId;\n });\n}\n\nexport default function AppNavigation({children}: ExtProps) {\n const dispatch = useDispatch();\n const pageOrCluster = useClusterFromLocation();\n const rootPageCluster = useSelector(getRootPagesCluster);\n const cluster = isRootPage(pageOrCluster) ? rootPageCluster : pageOrCluster;\n const clusterConfig = getClusterConfigByName(cluster || '');\n\n const items = usePagesMenuItems(cluster);\n const currentUser = useSelector(getCurrentUserName);\n const authWay = useSelector(getAuthWay);\n\n const [settingsVisible, setSettingsVisible] = React.useState(false);\n const [panelVisible, setPanelVisible] = React.useState(false);\n\n const onClosePanel = React.useCallback(() => {\n setSettingsVisible(false);\n setPanelVisible(false);\n }, []);\n\n const togglePanelVisibility = React.useCallback(() => {\n setSettingsVisible(false);\n setPanelVisible(!panelVisible);\n }, [panelVisible]);\n\n const toggleSettingsVisible = React.useCallback(() => {\n setPanelVisible(false);\n setSettingsVisible(!settingsVisible);\n }, [settingsVisible]);\n\n const menuItems: typeof items = React.useMemo(() => {\n if (!cluster) {\n return [];\n }\n return [\n ...items,\n {\n id: 'all_pages',\n title: 'All pages',\n icon: ellipsisIcon,\n current: false,\n onItemClick: togglePanelVisibility,\n iconSize: 24,\n },\n ];\n }, [items, cluster, togglePanelVisibility]);\n\n const className = block();\n\n const expanded = useSelector(getSettingNavigationPanelExpanded);\n const onChangeCompact = React.useCallback(\n (newCompact: boolean) => {\n dispatch(setSettingNavigationPanelExpanded(!newCompact));\n\n setTimeout(() => {\n const el = window.document.querySelector(`.${className}`);\n if (el) {\n const widthStr =\n getComputedStyle(el)?.getPropertyValue('--gn-aside-header-size');\n const width = Number(widthStr?.slice?.(0, -2)); // '236px' or '56px'\n if (!isNaN(width)) {\n dispatch(setAsideHeaderWidth(width));\n }\n }\n }, 500);\n },\n [dispatch],\n );\n\n const props: AppNavigationProps = {\n className,\n clusterConfig,\n logoClassName: block('logo-icon', {'no-cluster': !cluster}),\n currentUser,\n authWay,\n menuItems: _isEmpty(clusterConfig) ? [] : menuItems,\n panelContent: (\n <PagesSettingsEditor\n cluster={cluster}\n className={block('panel-content')}\n onItemClick={onClosePanel}\n />\n ),\n panelClassName: block('panel'),\n panelVisible,\n onClosePanel,\n settingsContent: <SettingsPanel />,\n settingsVisible,\n toggleSettingsVisible,\n\n compact: !expanded,\n onChangeCompact,\n children,\n };\n\n return UIFactory.renderAppNavigation(props);\n}\n"],"mappings":"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"}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { AppNavigationProps } from './AppNavigationPageLayout';
|
3
3
|
import './AppNavigationComponent.scss';
|
4
|
-
declare function AppNavigationComponent({ logoClassName, menuItems, currentUser, panelContent, panelVisible, panelClassName, onClosePanel, settingsVisible, settingsContent, toggleSettingsVisible, onChangeCompact, }: Omit<AppNavigationProps, 'compact' | 'rememberSize' | 'className'>): React.JSX.Element;
|
4
|
+
declare function AppNavigationComponent({ logoClassName, menuItems, currentUser, authWay, panelContent, panelVisible, panelClassName, onClosePanel, settingsVisible, settingsContent, toggleSettingsVisible, onChangeCompact, }: Omit<AppNavigationProps, 'compact' | 'rememberSize' | 'className'>): React.JSX.Element;
|
5
5
|
declare const _default: React.MemoExoticComponent<typeof AppNavigationComponent>;
|
6
6
|
export default _default;
|