@ytsaurus/ui 1.12.1 → 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.
Files changed (176) hide show
  1. package/build/cjs/@types/core.d.ts +38 -0
  2. package/build/cjs/server/components/layout-config.js +6 -1
  3. package/build/cjs/server/components/layout-config.js.map +1 -1
  4. package/build/cjs/server/components/oauth.d.ts +26 -0
  5. package/build/cjs/server/components/oauth.js +123 -0
  6. package/build/cjs/server/components/oauth.js.map +1 -0
  7. package/build/cjs/server/components/yt-auth.d.ts +6 -0
  8. package/build/cjs/server/components/yt-auth.js +23 -0
  9. package/build/cjs/server/components/yt-auth.js.map +1 -0
  10. package/build/cjs/server/controllers/login.d.ts +0 -1
  11. package/build/cjs/server/controllers/login.js +4 -26
  12. package/build/cjs/server/controllers/login.js.map +1 -1
  13. package/build/cjs/server/controllers/logout.d.ts +2 -0
  14. package/build/cjs/server/controllers/logout.js +15 -0
  15. package/build/cjs/server/controllers/logout.js.map +1 -0
  16. package/build/cjs/server/controllers/oauth-login.d.ts +4 -0
  17. package/build/cjs/server/controllers/oauth-login.js +30 -0
  18. package/build/cjs/server/controllers/oauth-login.js.map +1 -0
  19. package/build/cjs/server/index.js +9 -1
  20. package/build/cjs/server/index.js.map +1 -1
  21. package/build/cjs/server/middlewares/authorization.d.ts +2 -0
  22. package/build/cjs/server/middlewares/authorization.js +42 -0
  23. package/build/cjs/server/middlewares/authorization.js.map +1 -0
  24. package/build/cjs/server/middlewares/oauth.d.ts +2 -0
  25. package/build/cjs/server/middlewares/oauth.js +27 -0
  26. package/build/cjs/server/middlewares/oauth.js.map +1 -0
  27. package/build/cjs/server/middlewares/yt-auth.d.ts +1 -1
  28. package/build/cjs/server/middlewares/yt-auth.js +10 -42
  29. package/build/cjs/server/middlewares/yt-auth.js.map +1 -1
  30. package/build/cjs/server/routes.js +6 -1
  31. package/build/cjs/server/routes.js.map +1 -1
  32. package/build/cjs/server/utils/authorization.d.ts +6 -0
  33. package/build/cjs/server/utils/authorization.js +33 -0
  34. package/build/cjs/server/utils/authorization.js.map +1 -0
  35. package/build/cjs/shared/constants/index.d.ts +3 -0
  36. package/build/cjs/shared/constants/index.js +3 -1
  37. package/build/cjs/shared/constants/index.js.map +1 -1
  38. package/build/cjs/shared/yt-types.d.ts +2 -0
  39. package/build/cjs/ui/components/Login/LoginFormPage/LoginFormPage.js +23 -5
  40. package/build/cjs/ui/components/Login/LoginFormPage/LoginFormPage.js.map +1 -1
  41. package/build/cjs/ui/components/Login/LoginPageWrapper/LoginPageWrapper.css +8 -0
  42. package/build/cjs/ui/components/Login/LoginPageWrapper/LoginPageWrapper.css.map +1 -1
  43. package/build/cjs/ui/components/NumberInput/NumberInput.d.ts +1 -1
  44. package/build/cjs/ui/constants/docsUrls.d.ts +1 -0
  45. package/build/cjs/ui/constants/docsUrls.js +1 -0
  46. package/build/cjs/ui/constants/docsUrls.js.map +1 -1
  47. package/build/cjs/ui/containers/AppNavigation/AppNavigation.js +2 -0
  48. package/build/cjs/ui/containers/AppNavigation/AppNavigation.js.map +1 -1
  49. package/build/cjs/ui/containers/AppNavigation/AppNavigationComponent.d.ts +1 -1
  50. package/build/cjs/ui/containers/AppNavigation/AppNavigationComponent.js +5 -7
  51. package/build/cjs/ui/containers/AppNavigation/AppNavigationComponent.js.map +1 -1
  52. package/build/cjs/ui/containers/AppNavigation/AppNavigationPageLayout.d.ts +2 -0
  53. package/build/cjs/ui/containers/AppNavigation/AppNavigationPageLayout.js.map +1 -1
  54. package/build/cjs/ui/pages/tablet_cell_bundles/bundles/BundleEditorDialog/BundleEditorDialog.js +11 -7
  55. package/build/cjs/ui/pages/tablet_cell_bundles/bundles/BundleEditorDialog/BundleEditorDialog.js.map +1 -1
  56. package/build/cjs/ui/store/actions/tablet_cell_bundles/index.js +1 -1
  57. package/build/cjs/ui/store/actions/tablet_cell_bundles/index.js.map +1 -1
  58. package/build/cjs/ui/store/reducers/global/index.d.ts +1 -0
  59. package/build/cjs/ui/store/reducers/global/index.js +1 -0
  60. package/build/cjs/ui/store/reducers/global/index.js.map +1 -1
  61. package/build/cjs/ui/store/reducers/tablet_cell_bundles/index.d.ts +8 -0
  62. package/build/cjs/ui/store/reducers/tablet_cell_bundles/index.js.map +1 -1
  63. package/build/cjs/ui/store/selectors/global/index.d.ts +4 -0
  64. package/build/cjs/ui/store/selectors/global/index.js +14 -4
  65. package/build/cjs/ui/store/selectors/global/index.js.map +1 -1
  66. package/build/cjs/ui/utils/tablet_cell_bundles/bundles/bundle-editor-dialog/index.d.ts +2 -1
  67. package/build/cjs/ui/utils/tablet_cell_bundles/bundles/bundle-editor-dialog/index.js +16 -1
  68. package/build/cjs/ui/utils/tablet_cell_bundles/bundles/bundle-editor-dialog/index.js.map +1 -1
  69. package/build/esm/@types/core.d.ts +38 -0
  70. package/build/esm/server/components/layout-config.js +7 -2
  71. package/build/esm/server/components/layout-config.js.map +1 -1
  72. package/build/esm/server/components/oauth.d.ts +26 -0
  73. package/build/esm/server/components/oauth.js +169 -0
  74. package/build/esm/server/components/oauth.js.map +1 -0
  75. package/build/esm/server/components/yt-auth.d.ts +6 -0
  76. package/build/esm/server/components/yt-auth.js +17 -0
  77. package/build/esm/server/components/yt-auth.js.map +1 -0
  78. package/build/esm/server/controllers/login.d.ts +0 -1
  79. package/build/esm/server/controllers/login.js +41 -88
  80. package/build/esm/server/controllers/login.js.map +1 -1
  81. package/build/esm/server/controllers/logout.d.ts +2 -0
  82. package/build/esm/server/controllers/logout.js +11 -0
  83. package/build/esm/server/controllers/logout.js.map +1 -0
  84. package/build/esm/server/controllers/oauth-login.d.ts +4 -0
  85. package/build/esm/server/controllers/oauth-login.js +50 -0
  86. package/build/esm/server/controllers/oauth-login.js.map +1 -0
  87. package/build/esm/server/index.js +7 -2
  88. package/build/esm/server/index.js.map +1 -1
  89. package/build/esm/server/middlewares/authorization.d.ts +2 -0
  90. package/build/esm/server/middlewares/authorization.js +74 -0
  91. package/build/esm/server/middlewares/authorization.js.map +1 -0
  92. package/build/esm/server/middlewares/oauth.d.ts +2 -0
  93. package/build/esm/server/middlewares/oauth.js +50 -0
  94. package/build/esm/server/middlewares/oauth.js.map +1 -0
  95. package/build/esm/server/middlewares/yt-auth.d.ts +1 -1
  96. package/build/esm/server/middlewares/yt-auth.js +8 -58
  97. package/build/esm/server/middlewares/yt-auth.js.map +1 -1
  98. package/build/esm/server/routes.js +16 -2
  99. package/build/esm/server/routes.js.map +1 -1
  100. package/build/esm/server/utils/authorization.d.ts +6 -0
  101. package/build/esm/server/utils/authorization.js +28 -0
  102. package/build/esm/server/utils/authorization.js.map +1 -0
  103. package/build/esm/shared/constants/index.d.ts +3 -0
  104. package/build/esm/shared/constants/index.js +2 -1
  105. package/build/esm/shared/constants/index.js.map +1 -1
  106. package/build/esm/shared/yt-types.d.ts +2 -0
  107. package/build/esm/ui/components/Login/LoginFormPage/LoginFormPage.js +24 -6
  108. package/build/esm/ui/components/Login/LoginFormPage/LoginFormPage.js.map +1 -1
  109. package/build/esm/ui/components/Login/LoginPageWrapper/LoginPageWrapper.css +8 -0
  110. package/build/esm/ui/components/Login/LoginPageWrapper/LoginPageWrapper.css.map +1 -1
  111. package/build/esm/ui/components/Login/LoginPageWrapper/LoginPageWrapper.scss +12 -0
  112. package/build/esm/ui/components/NumberInput/NumberInput.d.ts +1 -1
  113. package/build/esm/ui/constants/docsUrls.d.ts +1 -0
  114. package/build/esm/ui/constants/docsUrls.js +1 -0
  115. package/build/esm/ui/constants/docsUrls.js.map +1 -1
  116. package/build/esm/ui/containers/AppNavigation/AppNavigation.js +3 -1
  117. package/build/esm/ui/containers/AppNavigation/AppNavigation.js.map +1 -1
  118. package/build/esm/ui/containers/AppNavigation/AppNavigationComponent.d.ts +1 -1
  119. package/build/esm/ui/containers/AppNavigation/AppNavigationComponent.js +5 -7
  120. package/build/esm/ui/containers/AppNavigation/AppNavigationComponent.js.map +1 -1
  121. package/build/esm/ui/containers/AppNavigation/AppNavigationPageLayout.d.ts +2 -0
  122. package/build/esm/ui/containers/AppNavigation/AppNavigationPageLayout.js.map +1 -1
  123. package/build/esm/ui/pages/tablet_cell_bundles/bundles/BundleEditorDialog/BundleEditorDialog.js +12 -8
  124. package/build/esm/ui/pages/tablet_cell_bundles/bundles/BundleEditorDialog/BundleEditorDialog.js.map +1 -1
  125. package/build/esm/ui/store/actions/tablet_cell_bundles/index.js +1 -1
  126. package/build/esm/ui/store/actions/tablet_cell_bundles/index.js.map +1 -1
  127. package/build/esm/ui/store/reducers/global/index.d.ts +1 -0
  128. package/build/esm/ui/store/reducers/global/index.js +1 -0
  129. package/build/esm/ui/store/reducers/global/index.js.map +1 -1
  130. package/build/esm/ui/store/reducers/tablet_cell_bundles/index.d.ts +8 -0
  131. package/build/esm/ui/store/reducers/tablet_cell_bundles/index.js.map +1 -1
  132. package/build/esm/ui/store/selectors/global/index.d.ts +4 -0
  133. package/build/esm/ui/store/selectors/global/index.js +12 -2
  134. package/build/esm/ui/store/selectors/global/index.js.map +1 -1
  135. package/build/esm/ui/utils/tablet_cell_bundles/bundles/bundle-editor-dialog/index.d.ts +2 -1
  136. package/build/esm/ui/utils/tablet_cell_bundles/bundles/bundle-editor-dialog/index.js +15 -0
  137. package/build/esm/ui/utils/tablet_cell_bundles/bundles/bundle-editor-dialog/index.js.map +1 -1
  138. package/dist/public/build/assets-manifest.json +12 -12
  139. package/dist/public/build/css/{main.136a49c7.css → main.e919e247.css} +2 -2
  140. package/dist/public/build/css/main.e919e247.css.map +1 -0
  141. package/dist/public/build/js/89.07445d46.chunk.js +2 -0
  142. package/dist/public/build/js/89.07445d46.chunk.js.map +1 -0
  143. package/dist/public/build/js/main.9d592639.js +3 -0
  144. package/dist/public/build/js/{main.69fdeec5.js.map → main.9d592639.js.map} +1 -1
  145. package/dist/public/build/js/{runtime.6c8d85d3.js → runtime.9491563b.js} +2 -2
  146. package/dist/public/build/js/{runtime.6c8d85d3.js.map → runtime.9491563b.js.map} +1 -1
  147. package/dist/public/build/manifest.json +8 -8
  148. package/dist/server/components/layout-config.js +6 -1
  149. package/dist/server/components/oauth.d.ts +26 -0
  150. package/dist/server/components/oauth.js +123 -0
  151. package/dist/server/components/yt-auth.d.ts +6 -0
  152. package/dist/server/components/yt-auth.js +23 -0
  153. package/dist/server/controllers/login.d.ts +0 -1
  154. package/dist/server/controllers/login.js +4 -26
  155. package/dist/server/controllers/logout.d.ts +2 -0
  156. package/dist/server/controllers/logout.js +15 -0
  157. package/dist/server/controllers/oauth-login.d.ts +4 -0
  158. package/dist/server/controllers/oauth-login.js +30 -0
  159. package/dist/server/index.js +9 -1
  160. package/dist/server/middlewares/authorization.d.ts +2 -0
  161. package/dist/server/middlewares/authorization.js +42 -0
  162. package/dist/server/middlewares/oauth.d.ts +2 -0
  163. package/dist/server/middlewares/oauth.js +27 -0
  164. package/dist/server/middlewares/yt-auth.d.ts +1 -1
  165. package/dist/server/middlewares/yt-auth.js +10 -42
  166. package/dist/server/routes.js +6 -1
  167. package/dist/server/utils/authorization.d.ts +6 -0
  168. package/dist/server/utils/authorization.js +33 -0
  169. package/dist/shared/constants/index.d.ts +3 -0
  170. package/dist/shared/constants/index.js +3 -1
  171. package/package.json +2 -2
  172. package/dist/public/build/css/main.136a49c7.css.map +0 -1
  173. package/dist/public/build/js/89.6ea87438.chunk.js +0 -2
  174. package/dist/public/build/js/89.6ea87438.chunk.js.map +0 -1
  175. package/dist/public/build/js/main.69fdeec5.js +0 -3
  176. /package/dist/public/build/js/{main.69fdeec5.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,2 @@
1
+ import { AppMiddleware } from '@gravity-ui/expresskit';
2
+ export declare function createOAuthAuthorizationResolver(): AppMiddleware;
@@ -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 createYTAuthMiddleware(ytAuthCluster: string): AppMiddleware;
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.createYTAuthMiddleware = void 0;
7
- const axios_1 = __importDefault(require("axios"));
3
+ exports.createYTAuthorizationResolver = void 0;
8
4
  const constants_1 = require("../../shared/constants");
9
- const cluster_queries_1 = require("../components/cluster-queries");
10
- const requestsSetup_1 = require("../components/requestsSetup");
11
- const utils_1 = require("../utils");
12
- class AuthError extends Error {
13
- constructor() {
14
- super('Authorization required');
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.createYTAuthMiddleware = createYTAuthMiddleware;
16
+ exports.createYTAuthorizationResolver = createYTAuthorizationResolver;
@@ -1 +1 @@
1
- {"version":3,"names":["_axios","_interopRequireDefault","require","_constants","_clusterQueries","_requestsSetup","_utils","obj","__esModule","default","AuthError","_Error","_inherits","_super","_createSuper","_classCallCheck","call","_createClass","_wrapNativeSuper","Error","isAuthError","e","_e$response","axios","isAxiosError","response","status","createYTAuthMiddleware","ytAuthCluster","_ytAuthMiddleware","_asyncToGenerator","_regeneratorRuntime","mark","_callee","req","res","next","secret","cfg","_yield$getXSRFToken","login","isAuthFailed","error","wrap","_callee$","_context","prev","cookies","YT_CYPRESS_COOKIE_NAME","yt","ytApiAuthHeaders","Cookie","concat","getUserYTApiSetup","getXSRFToken","sent","t0","undefined","routeInfo","ui","sendError","abrupt","stop","ytAuthMiddleware","_x","_x2","_x3","apply","arguments"],"sources":["yt-auth.ts"],"sourcesContent":["import axios from 'axios';\n\nimport {AppMiddleware} from '@gravity-ui/expresskit';\n\nimport {YT_CYPRESS_COOKIE_NAME} from '../../shared/constants';\nimport {getXSRFToken} from '../components/cluster-queries';\nimport {getUserYTApiSetup} from '../components/requestsSetup';\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 createYTAuthMiddleware(ytAuthCluster: string): AppMiddleware {\n return async function ytAuthMiddleware(req, res, next) {\n try {\n const secret: string = req.cookies[YT_CYPRESS_COOKIE_NAME];\n\n req.yt = {\n ytApiAuthHeaders: {\n Cookie: `${YT_CYPRESS_COOKIE_NAME}=${secret};`,\n },\n };\n\n if (!secret) {\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":"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"}
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
- 'POST /api/yt/logout': { handler: login_1.handleLogout, ui: true },
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, handleLogout} 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';\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 'POST /api/yt/logout': {handler: handleLogout, ui: true},\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":"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"}
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;;AAElC;AACA;AACA;AACO,IAAMC,gBAAgB,GAAAJ,OAAA,CAAAI,gBAAA,GAAG;EAC5BC,qCAAqC,EAAE,IAAI;EAC3CC,sBAAsB,EAAE;AAC5B,CAAC"}
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, _isEmpty2.default)(validationErrors)) {
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.jsx)("p", {
105
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("p", {
103
106
  className: block('text'),
104
- children: "Single scalable platform for high volume storage and handling data. Login to your account."
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;AAKI;EACI,gEAAA;EACA,gEAAA;AAHR;AAMI;EACI,yCAAA;AAJR;AAOI;EACI,yDAAA;AALR;AAQI;EACI,iBAAA;EACA,WAAA;EACA,aAAA;EACA,mBAAA;EACA,8BAAA;AANR;AASI;EACI,SAAA;EACA,eAAA;EACA,kBAAA;EACA,gBAAA;EACA,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,oCAAA;EACA,yBAAA;EACA,gDAAA;AAPR;AASQ;EACI,kCAAA;EACA,sDAAA;AAPZ","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\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":""}
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;
@@ -8,6 +8,7 @@ export declare const docsUrls: {
8
8
  'faq:enablepathautocorrection': string;
9
9
  'storage:static_tables': string;
10
10
  'dynamic-tables:overview': string;
11
+ 'dynamic-tables:cross-dc': string;
11
12
  'storage:compression#compression_codecs': string;
12
13
  'storage:replication#replication': string;
13
14
  'storage:replication#erasure': string;
@@ -16,6 +16,7 @@ var docsUrls = exports.docsUrls = {
16
16
  'faq:enablepathautocorrection': "".concat(baseUrl, "/faq/faq#enablepathautocorrection"),
17
17
  'storage:static_tables': "".concat(baseUrl, "/user-guide/storage/static-tables"),
18
18
  'dynamic-tables:overview': "".concat(baseUrl, "/user-guide/dynamic-tables/overview"),
19
+ 'dynamic-tables:cross-dc': "".concat(baseUrl, "/user-guide/dynamic-tables/dynamic-tables-resources#georaspredelyonnye-klastery-cross-dc"),
19
20
  'storage:compression#compression_codecs': "".concat(baseUrl, "/user-guide/storage/compression#compression_codecs"),
20
21
  'storage:replication#replication': "".concat(baseUrl, "/user-guide/storage/replication#replication"),
21
22
  'storage:replication#erasure': "".concat(baseUrl, "/user-guide/storage/replication#erasure"),
@@ -1 +1 @@
1
- {"version":3,"names":["_config","require","baseUrl","getDocsBaseUrl","docsUrls","exports","concat"],"sources":["docsUrls.ts"],"sourcesContent":["import {getDocsBaseUrl} from '../config';\n\nconst baseUrl = getDocsBaseUrl() || '';\n\nexport const docsUrls = {\n 'bundle-controller:reserved-memory': ``,\n 'cypress:ttl': `${baseUrl}/user-guide/storage/cypress#TTL`,\n 'storage:compression': `${baseUrl}/user-guide/storage/compression`,\n 'operations:recommendations#slishkom-melkie-chanki': `${baseUrl}/user-guide/data-processing/operations/recommendations#slishkom-melkie-chanki`,\n 'scheduler:integral_guarantees': `${baseUrl}/user-guide/data-processing/scheduler/integral-guarantees`,\n 'overview:quickstart': `${baseUrl}/overview/try-yt`,\n 'faq:enablepathautocorrection': `${baseUrl}/faq/faq#enablepathautocorrection`,\n 'storage:static_tables': `${baseUrl}/user-guide/storage/static-tables`,\n 'dynamic-tables:overview': `${baseUrl}/user-guide/dynamic-tables/overview`,\n 'storage:compression#compression_codecs': `${baseUrl}/user-guide/storage/compression#compression_codecs`,\n 'storage:replication#replication': `${baseUrl}/user-guide/storage/replication#replication`,\n 'storage:replication#erasure': `${baseUrl}/user-guide/storage/replication#erasure`,\n 'storage:static_schema': `${baseUrl}/user-guide/storage/static-schema`,\n 'storage:data_types#schema': `${baseUrl}/user-guide/storage/data-types#schema`,\n 'storage:data_types#schema_optional': `${baseUrl}/user-guide/storage/data-types#schema_optional`,\n 'storage:static_schema#overview': `${baseUrl}/user-guide/storage/static-schema`,\n 'dynamic-tables:transactions#conflicts': `${baseUrl}/user-guide/dynamic-tables/transactions#conflicts`,\n 'dynamic-tables:sorted_dynamic_tables#aggr_columns': `${baseUrl}/user-guide/dynamic-tables/sorted-dynamic-tables#aggr_columns`,\n 'problems:jobstatistics': `${baseUrl}/user-guide/problems/jobstatistics`,\n 'storage:formats': `${baseUrl}/user-guide/storage/formats`,\n 'storage:excel#skachivanie': `${baseUrl}/user-guide/storage/excel#skachivanie`,\n 'storage:excel': `${baseUrl}/user-guide/storage/excel`,\n 'faq:web_interface_table_download': `${baseUrl}/faq/faq#web_interface_table_download`,\n 'dynamic-tables:overview#in_memory': `${baseUrl}/user-guide/dynamic-tables/overview#in_memory`,\n 'storage:chunks#optimize_for': `${baseUrl}/user-guide/storage/chunks#optimize_for`,\n 'storage:accounts': `${baseUrl}/user-guide/storage/accounts`,\n 'storage:media#primary': `${baseUrl}/user-guide/storage/media#primary`,\n 'dynamic-tables:concepts#tablet_cell_bundles': `${baseUrl}/user-guide/dynamic-tables/concepts#tablet_cell_bundles`,\n 'operations:operations_options#obshie-opcii-dlya-vseh-tipov-operacij': `${baseUrl}/user-guide/data-processing/operations/operations-options#common_options`,\n 'operations:erase': `${baseUrl}/user-guide/data-processing/operations/erase`,\n 'operations:merge': `${baseUrl}/user-guide/data-processing/operations/merge`,\n 'operations:overview#aborted_jobs': `${baseUrl}/user-guide/data-processing/operations/overview#aborted_jobs`,\n 'operations:overview#completed_jobs': `${baseUrl}/user-guide/data-processing/operations/overview#completed_jobs`,\n 'operations:operations_options': `${baseUrl}/user-guide/data-processing/operations/operations-options`,\n 'operations:remote_copy': `${baseUrl}/user-guide/data-processing/operations/remote-copy`,\n 'scheduler:scheduler_and_pools': `${baseUrl}/user-guide/data-processing/scheduler/scheduler-and-pools`,\n 'faq:alert_type': `${baseUrl}/faq/faq#`,\n 'common:quotas#request_quota': '',\n 'common:quota_request': '',\n 'api:cli': `${baseUrl}/api/cli/cli`,\n 'chyt:yt_tables#dynamic': `${baseUrl}/user-guide/data-processing/chyt/yt-tables#dynamic`,\n 'common:regular_system_processes': '',\n 'acl:permissions': `${baseUrl}/user-guide/storage/access-control#authorization`,\n};\n\nexport type DocsUrls = typeof docsUrls;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAMC,OAAO,GAAG,IAAAC,sBAAc,EAAC,CAAC,IAAI,EAAE;AAE/B,IAAMC,QAAQ,GAAAC,OAAA,CAAAD,QAAA,GAAG;EACpB,mCAAmC,IAAI;EACvC,aAAa,KAAAE,MAAA,CAAKJ,OAAO,oCAAiC;EAC1D,qBAAqB,KAAAI,MAAA,CAAKJ,OAAO,oCAAiC;EAClE,mDAAmD,KAAAI,MAAA,CAAKJ,OAAO,kFAA+E;EAC9I,+BAA+B,KAAAI,MAAA,CAAKJ,OAAO,8DAA2D;EACtG,qBAAqB,KAAAI,MAAA,CAAKJ,OAAO,qBAAkB;EACnD,8BAA8B,KAAAI,MAAA,CAAKJ,OAAO,sCAAmC;EAC7E,uBAAuB,KAAAI,MAAA,CAAKJ,OAAO,sCAAmC;EACtE,yBAAyB,KAAAI,MAAA,CAAKJ,OAAO,wCAAqC;EAC1E,wCAAwC,KAAAI,MAAA,CAAKJ,OAAO,uDAAoD;EACxG,iCAAiC,KAAAI,MAAA,CAAKJ,OAAO,gDAA6C;EAC1F,6BAA6B,KAAAI,MAAA,CAAKJ,OAAO,4CAAyC;EAClF,uBAAuB,KAAAI,MAAA,CAAKJ,OAAO,sCAAmC;EACtE,2BAA2B,KAAAI,MAAA,CAAKJ,OAAO,0CAAuC;EAC9E,oCAAoC,KAAAI,MAAA,CAAKJ,OAAO,mDAAgD;EAChG,gCAAgC,KAAAI,MAAA,CAAKJ,OAAO,sCAAmC;EAC/E,uCAAuC,KAAAI,MAAA,CAAKJ,OAAO,sDAAmD;EACtG,mDAAmD,KAAAI,MAAA,CAAKJ,OAAO,kEAA+D;EAC9H,wBAAwB,KAAAI,MAAA,CAAKJ,OAAO,uCAAoC;EACxE,iBAAiB,KAAAI,MAAA,CAAKJ,OAAO,gCAA6B;EAC1D,2BAA2B,KAAAI,MAAA,CAAKJ,OAAO,0CAAuC;EAC9E,eAAe,KAAAI,MAAA,CAAKJ,OAAO,8BAA2B;EACtD,kCAAkC,KAAAI,MAAA,CAAKJ,OAAO,0CAAuC;EACrF,mCAAmC,KAAAI,MAAA,CAAKJ,OAAO,kDAA+C;EAC9F,6BAA6B,KAAAI,MAAA,CAAKJ,OAAO,4CAAyC;EAClF,kBAAkB,KAAAI,MAAA,CAAKJ,OAAO,iCAA8B;EAC5D,uBAAuB,KAAAI,MAAA,CAAKJ,OAAO,sCAAmC;EACtE,6CAA6C,KAAAI,MAAA,CAAKJ,OAAO,4DAAyD;EAClH,qEAAqE,KAAAI,MAAA,CAAKJ,OAAO,6EAA0E;EAC3J,kBAAkB,KAAAI,MAAA,CAAKJ,OAAO,iDAA8C;EAC5E,kBAAkB,KAAAI,MAAA,CAAKJ,OAAO,iDAA8C;EAC5E,kCAAkC,KAAAI,MAAA,CAAKJ,OAAO,iEAA8D;EAC5G,oCAAoC,KAAAI,MAAA,CAAKJ,OAAO,mEAAgE;EAChH,+BAA+B,KAAAI,MAAA,CAAKJ,OAAO,8DAA2D;EACtG,wBAAwB,KAAAI,MAAA,CAAKJ,OAAO,uDAAoD;EACxF,+BAA+B,KAAAI,MAAA,CAAKJ,OAAO,8DAA2D;EACtG,gBAAgB,KAAAI,MAAA,CAAKJ,OAAO,cAAW;EACvC,6BAA6B,EAAE,EAAE;EACjC,sBAAsB,EAAE,EAAE;EAC1B,SAAS,KAAAI,MAAA,CAAKJ,OAAO,iBAAc;EACnC,wBAAwB,KAAAI,MAAA,CAAKJ,OAAO,uDAAoD;EACxF,iCAAiC,EAAE,EAAE;EACrC,iBAAiB,KAAAI,MAAA,CAAKJ,OAAO;AACjC,CAAC"}
1
+ {"version":3,"names":["_config","require","baseUrl","getDocsBaseUrl","docsUrls","exports","concat"],"sources":["docsUrls.ts"],"sourcesContent":["import {getDocsBaseUrl} from '../config';\n\nconst baseUrl = getDocsBaseUrl() || '';\n\nexport const docsUrls = {\n 'bundle-controller:reserved-memory': ``,\n 'cypress:ttl': `${baseUrl}/user-guide/storage/cypress#TTL`,\n 'storage:compression': `${baseUrl}/user-guide/storage/compression`,\n 'operations:recommendations#slishkom-melkie-chanki': `${baseUrl}/user-guide/data-processing/operations/recommendations#slishkom-melkie-chanki`,\n 'scheduler:integral_guarantees': `${baseUrl}/user-guide/data-processing/scheduler/integral-guarantees`,\n 'overview:quickstart': `${baseUrl}/overview/try-yt`,\n 'faq:enablepathautocorrection': `${baseUrl}/faq/faq#enablepathautocorrection`,\n 'storage:static_tables': `${baseUrl}/user-guide/storage/static-tables`,\n 'dynamic-tables:overview': `${baseUrl}/user-guide/dynamic-tables/overview`,\n 'dynamic-tables:cross-dc': `${baseUrl}/user-guide/dynamic-tables/dynamic-tables-resources#georaspredelyonnye-klastery-cross-dc`,\n 'storage:compression#compression_codecs': `${baseUrl}/user-guide/storage/compression#compression_codecs`,\n 'storage:replication#replication': `${baseUrl}/user-guide/storage/replication#replication`,\n 'storage:replication#erasure': `${baseUrl}/user-guide/storage/replication#erasure`,\n 'storage:static_schema': `${baseUrl}/user-guide/storage/static-schema`,\n 'storage:data_types#schema': `${baseUrl}/user-guide/storage/data-types#schema`,\n 'storage:data_types#schema_optional': `${baseUrl}/user-guide/storage/data-types#schema_optional`,\n 'storage:static_schema#overview': `${baseUrl}/user-guide/storage/static-schema`,\n 'dynamic-tables:transactions#conflicts': `${baseUrl}/user-guide/dynamic-tables/transactions#conflicts`,\n 'dynamic-tables:sorted_dynamic_tables#aggr_columns': `${baseUrl}/user-guide/dynamic-tables/sorted-dynamic-tables#aggr_columns`,\n 'problems:jobstatistics': `${baseUrl}/user-guide/problems/jobstatistics`,\n 'storage:formats': `${baseUrl}/user-guide/storage/formats`,\n 'storage:excel#skachivanie': `${baseUrl}/user-guide/storage/excel#skachivanie`,\n 'storage:excel': `${baseUrl}/user-guide/storage/excel`,\n 'faq:web_interface_table_download': `${baseUrl}/faq/faq#web_interface_table_download`,\n 'dynamic-tables:overview#in_memory': `${baseUrl}/user-guide/dynamic-tables/overview#in_memory`,\n 'storage:chunks#optimize_for': `${baseUrl}/user-guide/storage/chunks#optimize_for`,\n 'storage:accounts': `${baseUrl}/user-guide/storage/accounts`,\n 'storage:media#primary': `${baseUrl}/user-guide/storage/media#primary`,\n 'dynamic-tables:concepts#tablet_cell_bundles': `${baseUrl}/user-guide/dynamic-tables/concepts#tablet_cell_bundles`,\n 'operations:operations_options#obshie-opcii-dlya-vseh-tipov-operacij': `${baseUrl}/user-guide/data-processing/operations/operations-options#common_options`,\n 'operations:erase': `${baseUrl}/user-guide/data-processing/operations/erase`,\n 'operations:merge': `${baseUrl}/user-guide/data-processing/operations/merge`,\n 'operations:overview#aborted_jobs': `${baseUrl}/user-guide/data-processing/operations/overview#aborted_jobs`,\n 'operations:overview#completed_jobs': `${baseUrl}/user-guide/data-processing/operations/overview#completed_jobs`,\n 'operations:operations_options': `${baseUrl}/user-guide/data-processing/operations/operations-options`,\n 'operations:remote_copy': `${baseUrl}/user-guide/data-processing/operations/remote-copy`,\n 'scheduler:scheduler_and_pools': `${baseUrl}/user-guide/data-processing/scheduler/scheduler-and-pools`,\n 'faq:alert_type': `${baseUrl}/faq/faq#`,\n 'common:quotas#request_quota': '',\n 'common:quota_request': '',\n 'api:cli': `${baseUrl}/api/cli/cli`,\n 'chyt:yt_tables#dynamic': `${baseUrl}/user-guide/data-processing/chyt/yt-tables#dynamic`,\n 'common:regular_system_processes': '',\n 'acl:permissions': `${baseUrl}/user-guide/storage/access-control#authorization`,\n};\n\nexport type DocsUrls = typeof docsUrls;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAMC,OAAO,GAAG,IAAAC,sBAAc,EAAC,CAAC,IAAI,EAAE;AAE/B,IAAMC,QAAQ,GAAAC,OAAA,CAAAD,QAAA,GAAG;EACpB,mCAAmC,IAAI;EACvC,aAAa,KAAAE,MAAA,CAAKJ,OAAO,oCAAiC;EAC1D,qBAAqB,KAAAI,MAAA,CAAKJ,OAAO,oCAAiC;EAClE,mDAAmD,KAAAI,MAAA,CAAKJ,OAAO,kFAA+E;EAC9I,+BAA+B,KAAAI,MAAA,CAAKJ,OAAO,8DAA2D;EACtG,qBAAqB,KAAAI,MAAA,CAAKJ,OAAO,qBAAkB;EACnD,8BAA8B,KAAAI,MAAA,CAAKJ,OAAO,sCAAmC;EAC7E,uBAAuB,KAAAI,MAAA,CAAKJ,OAAO,sCAAmC;EACtE,yBAAyB,KAAAI,MAAA,CAAKJ,OAAO,wCAAqC;EAC1E,yBAAyB,KAAAI,MAAA,CAAKJ,OAAO,6FAA0F;EAC/H,wCAAwC,KAAAI,MAAA,CAAKJ,OAAO,uDAAoD;EACxG,iCAAiC,KAAAI,MAAA,CAAKJ,OAAO,gDAA6C;EAC1F,6BAA6B,KAAAI,MAAA,CAAKJ,OAAO,4CAAyC;EAClF,uBAAuB,KAAAI,MAAA,CAAKJ,OAAO,sCAAmC;EACtE,2BAA2B,KAAAI,MAAA,CAAKJ,OAAO,0CAAuC;EAC9E,oCAAoC,KAAAI,MAAA,CAAKJ,OAAO,mDAAgD;EAChG,gCAAgC,KAAAI,MAAA,CAAKJ,OAAO,sCAAmC;EAC/E,uCAAuC,KAAAI,MAAA,CAAKJ,OAAO,sDAAmD;EACtG,mDAAmD,KAAAI,MAAA,CAAKJ,OAAO,kEAA+D;EAC9H,wBAAwB,KAAAI,MAAA,CAAKJ,OAAO,uCAAoC;EACxE,iBAAiB,KAAAI,MAAA,CAAKJ,OAAO,gCAA6B;EAC1D,2BAA2B,KAAAI,MAAA,CAAKJ,OAAO,0CAAuC;EAC9E,eAAe,KAAAI,MAAA,CAAKJ,OAAO,8BAA2B;EACtD,kCAAkC,KAAAI,MAAA,CAAKJ,OAAO,0CAAuC;EACrF,mCAAmC,KAAAI,MAAA,CAAKJ,OAAO,kDAA+C;EAC9F,6BAA6B,KAAAI,MAAA,CAAKJ,OAAO,4CAAyC;EAClF,kBAAkB,KAAAI,MAAA,CAAKJ,OAAO,iCAA8B;EAC5D,uBAAuB,KAAAI,MAAA,CAAKJ,OAAO,sCAAmC;EACtE,6CAA6C,KAAAI,MAAA,CAAKJ,OAAO,4DAAyD;EAClH,qEAAqE,KAAAI,MAAA,CAAKJ,OAAO,6EAA0E;EAC3J,kBAAkB,KAAAI,MAAA,CAAKJ,OAAO,iDAA8C;EAC5E,kBAAkB,KAAAI,MAAA,CAAKJ,OAAO,iDAA8C;EAC5E,kCAAkC,KAAAI,MAAA,CAAKJ,OAAO,iEAA8D;EAC5G,oCAAoC,KAAAI,MAAA,CAAKJ,OAAO,mEAAgE;EAChH,+BAA+B,KAAAI,MAAA,CAAKJ,OAAO,8DAA2D;EACtG,wBAAwB,KAAAI,MAAA,CAAKJ,OAAO,uDAAoD;EACxF,+BAA+B,KAAAI,MAAA,CAAKJ,OAAO,8DAA2D;EACtG,gBAAgB,KAAAI,MAAA,CAAKJ,OAAO,cAAW;EACvC,6BAA6B,EAAE,EAAE;EACjC,sBAAsB,EAAE,EAAE;EAC1B,SAAS,KAAAI,MAAA,CAAKJ,OAAO,iBAAc;EACnC,wBAAwB,KAAAI,MAAA,CAAKJ,OAAO,uDAAoD;EACxF,iCAAiC,EAAE,EAAE;EACrC,iBAAiB,KAAAI,MAAA,CAAKJ,OAAO;AACjC,CAAC"}
@@ -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,