@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
@@ -1,80 +1,30 @@
1
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
- import _createClass from "@babel/runtime/helpers/createClass";
3
- import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
4
- import _inherits from "@babel/runtime/helpers/inherits";
5
- import _createSuper from "@babel/runtime/helpers/createSuper";
6
- import _wrapNativeSuper from "@babel/runtime/helpers/wrapNativeSuper";
7
2
  import _regeneratorRuntime from "@babel/runtime/regenerator";
8
- import axios from 'axios';
9
3
  import { YT_CYPRESS_COOKIE_NAME } from '../../shared/constants';
10
- import { getXSRFToken } from '../components/cluster-queries';
11
- import { getUserYTApiSetup } from '../components/requestsSetup';
12
- import { sendError } from '../utils';
13
- var AuthError = /*#__PURE__*/function (_Error) {
14
- _inherits(AuthError, _Error);
15
- var _super = _createSuper(AuthError);
16
- function AuthError() {
17
- _classCallCheck(this, AuthError);
18
- return _super.call(this, 'Authorization required');
19
- }
20
- return _createClass(AuthError);
21
- }( /*#__PURE__*/_wrapNativeSuper(Error));
22
- function isAuthError(e) {
23
- var _e$response;
24
- return e instanceof AuthError || axios.isAxiosError(e) && ((_e$response = e.response) === null || _e$response === void 0 ? void 0 : _e$response.status) === 401;
25
- }
26
- export function createYTAuthMiddleware(ytAuthCluster) {
4
+ export function createYTAuthorizationResolver() {
27
5
  return /*#__PURE__*/function () {
28
- var _ytAuthMiddleware = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(req, res, next) {
29
- var secret, cfg, _yield$getXSRFToken, login, isAuthFailed, error;
6
+ var _resoleOAuthAuthorize = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(req, _, next) {
7
+ var secret;
30
8
  return _regeneratorRuntime.wrap(function _callee$(_context) {
31
9
  while (1) switch (_context.prev = _context.next) {
32
10
  case 0:
33
- _context.prev = 0;
34
11
  secret = req.cookies[YT_CYPRESS_COOKIE_NAME];
35
12
  req.yt = {
36
13
  ytApiAuthHeaders: {
37
14
  Cookie: "".concat(YT_CYPRESS_COOKIE_NAME, "=").concat(secret, ";")
38
15
  }
39
16
  };
40
- if (secret) {
41
- _context.next = 5;
42
- break;
43
- }
44
- throw new AuthError();
45
- case 5:
46
- cfg = getUserYTApiSetup(ytAuthCluster, req);
47
- _context.next = 8;
48
- return getXSRFToken(req, cfg);
49
- case 8:
50
- _yield$getXSRFToken = _context.sent;
51
- login = _yield$getXSRFToken.login;
52
- req.yt.login = login;
53
- _context.next = 20;
54
- break;
55
- case 13:
56
- _context.prev = 13;
57
- _context.t0 = _context["catch"](0);
58
- isAuthFailed = isAuthError(_context.t0);
59
- error = isAuthFailed ? undefined : _context.t0;
60
- if (!(!req.routeInfo.ui && isAuthFailed)) {
61
- _context.next = 20;
62
- break;
63
- }
64
- sendError(res, error, 401);
65
- return _context.abrupt("return");
66
- case 20:
67
17
  next();
68
- case 21:
18
+ case 3:
69
19
  case "end":
70
20
  return _context.stop();
71
21
  }
72
- }, _callee, null, [[0, 13]]);
22
+ }, _callee);
73
23
  }));
74
- function ytAuthMiddleware(_x, _x2, _x3) {
75
- return _ytAuthMiddleware.apply(this, arguments);
24
+ function resoleOAuthAuthorize(_x, _x2, _x3) {
25
+ return _resoleOAuthAuthorize.apply(this, arguments);
76
26
  }
77
- return ytAuthMiddleware;
27
+ return resoleOAuthAuthorize;
78
28
  }();
79
29
  }
80
30
  // #sourceMappingURL=yt-auth.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["axios","YT_CYPRESS_COOKIE_NAME","getXSRFToken","getUserYTApiSetup","sendError","AuthError","_Error","_inherits","_super","_createSuper","_classCallCheck","call","_createClass","_wrapNativeSuper","Error","isAuthError","e","_e$response","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","ytApiAuthHeaders","Cookie","concat","sent","t0","undefined","routeInfo","ui","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":["YT_CYPRESS_COOKIE_NAME","createYTAuthorizationResolver","_resoleOAuthAuthorize","_asyncToGenerator","_regeneratorRuntime","mark","_callee","req","_","next","secret","wrap","_callee$","_context","prev","cookies","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,SAAQA,sBAAsB,QAAO,wBAAwB;AAE7D,OAAO,SAASC,6BAA6BA,CAAA,EAAkB;EAC3D;IAAA,IAAAC,qBAAA,GAAAC,iBAAA,eAAAC,mBAAA,CAAAC,IAAA,CAAO,SAAAC,QAAoCC,GAAY,EAAEC,CAAW,EAAEC,IAAI;MAAA,IAAAC,MAAA;MAAA,OAAAN,mBAAA,CAAAO,IAAA,UAAAC,SAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAJ,IAAA;UAAA;YAChEC,MAAc,GAAGH,GAAG,CAACQ,OAAO,CAACf,sBAAsB,CAAC;YAC1DO,GAAG,CAACS,EAAE,GAAG;cACLC,gBAAgB,EAAE;gBACdC,MAAM,KAAAC,MAAA,CAAKnB,sBAAsB,OAAAmB,MAAA,CAAIT,MAAM;cAC/C;YACJ,CAAC;YACDD,IAAI,CAAC,CAAC;UAAC;UAAA;YAAA,OAAAI,QAAA,CAAAO,IAAA;QAAA;MAAA,GAAAd,OAAA;IAAA,CACV;IAAA,SARqBe,oBAAoBA,CAAAC,EAAA,EAAAC,GAAA,EAAAC,GAAA;MAAA,OAAAtB,qBAAA,CAAAuB,KAAA,OAAAC,SAAA;IAAA;IAAA,OAApBL,oBAAoB;EAAA;AAS9C"}
@@ -9,12 +9,14 @@ import { handleClusterInfo } from './controllers/cluster-info';
9
9
  import { clusterVersions } from './controllers/clusters';
10
10
  import { tableColumnPresetGet, tableColumnPresetSave } from './controllers/table-column-preset';
11
11
  import { ping } from './controllers/ping';
12
- import { handleChangePassword, handleLogin, handleLogout } from './controllers/login';
12
+ import { handleChangePassword, handleLogin } from './controllers/login';
13
13
  import { getClusterPools } from './controllers/scheduling-pools';
14
14
  import { markdownToHtmlHandler } from './controllers/markdown-to-html';
15
15
  import { odinProxyApi } from './controllers/odin-proxy-api';
16
16
  import { getClustersAvailability } from './controllers/availability';
17
17
  import { chytProxyApi } from './controllers/chyt-api';
18
+ import { oauthCallback, oauthLogin, oauthLogout } from './controllers/oauth-login';
19
+ import { handleLogout } from './controllers/logout';
18
20
  var HOME_INDEX_TARGET = {
19
21
  handler: homeIndex,
20
22
  ui: true
@@ -42,10 +44,22 @@ var routes = {
42
44
  handler: handleLogin,
43
45
  ui: true
44
46
  },
45
- 'POST /api/yt/logout': {
47
+ 'GET /api/yt/logout': {
46
48
  handler: handleLogout,
47
49
  ui: true
48
50
  },
51
+ 'GET /oauth/login': {
52
+ handler: oauthLogin,
53
+ ui: true
54
+ },
55
+ 'GET /api/oauth/callback': {
56
+ handler: oauthCallback,
57
+ ui: true
58
+ },
59
+ 'GET /api/oauth/logout/callback': {
60
+ handler: oauthLogout,
61
+ ui: true
62
+ },
49
63
  'POST /api/yt/change-password': {
50
64
  handler: handleChangePassword,
51
65
  ui: true
@@ -1 +1 @@
1
- {"version":3,"names":["AuthPolicy","clusterParams","ytTvmApiHandler","handleRemoteCopy","ytProxyApi","settingsCreate","settingsDeleteItem","settingsGet","settingsGetItem","settingsSetItem","homeIndex","homeRedirect","handleClusterInfo","clusterVersions","tableColumnPresetGet","tableColumnPresetSave","ping","handleChangePassword","handleLogin","handleLogout","getClusterPools","markdownToHtmlHandler","odinProxyApi","getClustersAvailability","chytProxyApi","HOME_INDEX_TARGET","handler","ui","routes","authPolicy","disabled"],"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":["AuthPolicy","clusterParams","ytTvmApiHandler","handleRemoteCopy","ytProxyApi","settingsCreate","settingsDeleteItem","settingsGet","settingsGetItem","settingsSetItem","homeIndex","homeRedirect","handleClusterInfo","clusterVersions","tableColumnPresetGet","tableColumnPresetSave","ping","handleChangePassword","handleLogin","getClusterPools","markdownToHtmlHandler","odinProxyApi","getClustersAvailability","chytProxyApi","oauthCallback","oauthLogin","oauthLogout","handleLogout","HOME_INDEX_TARGET","handler","ui","routes","authPolicy","disabled"],"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":"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"}
@@ -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,28 @@
1
+ import { isUserOAuthLogged } from '../components/oauth';
2
+ export function isAuthorized(req) {
3
+ if (req.yt) {
4
+ var _req$yt$ytApiAuthHead;
5
+ return Boolean(Object.keys((_req$yt$ytApiAuthHead = req.yt.ytApiAuthHeaders) !== null && _req$yt$ytApiAuthHead !== void 0 ? _req$yt$ytApiAuthHead : {}));
6
+ }
7
+ return false;
8
+ }
9
+ export function getAuthWay(req) {
10
+ if (!isAuthorized(req)) {
11
+ return undefined;
12
+ }
13
+ if (isUserOAuthLogged(req)) {
14
+ return 'oauth';
15
+ }
16
+ return 'passwd';
17
+ }
18
+ export function authorizationResolver(resolver) {
19
+ return function (req, res, next) {
20
+ if (isAuthorized(req)) {
21
+ next();
22
+ return;
23
+ }
24
+ resolver(req, res, next);
25
+ return;
26
+ };
27
+ }
28
+ // #sourceMappingURL=authorization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isUserOAuthLogged","isAuthorized","req","yt","_req$yt$ytApiAuthHead","Boolean","Object","keys","ytApiAuthHeaders","getAuthWay","undefined","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,SAAQA,iBAAiB,QAAO,qBAAqB;AAErD,OAAO,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;AAEA,OAAO,SAASK,UAAUA,CAACP,GAAY,EAAuB;EAC1D,IAAI,CAACD,YAAY,CAACC,GAAG,CAAC,EAAE;IACpB,OAAOQ,SAAS;EACpB;EACA,IAAIV,iBAAiB,CAACE,GAAG,CAAC,EAAE;IACxB,OAAO,OAAO;EAClB;EACA,OAAO,QAAQ;AACnB;AAEA,OAAO,SAASS,qBAAqBA,CAACC,QAAuB,EAAiB;EAC1E,OAAO,UAACV,GAAG,EAAEW,GAAG,EAAEC,IAAI,EAAK;IACvB,IAAIb,YAAY,CAACC,GAAG,CAAC,EAAE;MACnBY,IAAI,CAAC,CAAC;MACN;IACJ;IACAF,QAAQ,CAACV,GAAG,EAAEW,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
  */
@@ -2,7 +2,8 @@ export var YT_API_REQUEST_ID_HEADER = 'X-Custom-Request-Id';
2
2
  export var YT_CYPRESS_COOKIE_NAME = 'YTCypressCookie';
3
3
  export var YT_LOCAL_CLUSTER_ID = 'ui';
4
4
  export var ODIN_PAGE_ID = 'odin';
5
-
5
+ export var YT_OAUTH_ACCESS_TOKEN_NAME = 'yt_oauth_access_token';
6
+ export var YT_OAUTH_REFRESH_TOKEN_NAME = 'yt_oauth_refresh_token';
6
7
  /**
7
8
  * Allows to succeed requests when master are in read-only mode and the transaction coordinator cell is evicted
8
9
  */
@@ -1 +1 @@
1
- {"version":3,"names":["YT_API_REQUEST_ID_HEADER","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":"AAAA,OAAO,IAAMA,wBAAwB,GAAG,qBAAqB;AAC7D,OAAO,IAAMC,sBAAsB,GAAG,iBAAiB;AACvD,OAAO,IAAMC,mBAAmB,GAAG,IAAI;AACvC,OAAO,IAAMC,YAAY,GAAG,MAAM;;AAElC;AACA;AACA;AACA,OAAO,IAAMC,gBAAgB,GAAG;EAC5BC,qCAAqC,EAAE,IAAI;EAC3CC,sBAAsB,EAAE;AAC5B,CAAC"}
1
+ {"version":3,"names":["YT_API_REQUEST_ID_HEADER","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":"AAAA,OAAO,IAAMA,wBAAwB,GAAG,qBAAqB;AAC7D,OAAO,IAAMC,sBAAsB,GAAG,iBAAiB;AACvD,OAAO,IAAMC,mBAAmB,GAAG,IAAI;AACvC,OAAO,IAAMC,YAAY,GAAG,MAAM;AAElC,OAAO,IAAMC,0BAA0B,GAAG,uBAAuB;AACjE,OAAO,IAAMC,2BAA2B,GAAG,wBAAwB;AAInE;AACA;AACA;AACA,OAAO,IAAMC,gBAAgB,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
  }
@@ -1,14 +1,15 @@
1
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
- import _isEmpty from "lodash/isEmpty";
3
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
3
  import _regeneratorRuntime from "@babel/runtime/regenerator";
5
4
  import React, { useCallback, useState } from 'react';
6
5
  import axios from 'axios';
7
- import { useDispatch } from 'react-redux';
6
+ import { useDispatch, useSelector } from 'react-redux';
8
7
  import { Button, Text, TextInput } from '@gravity-ui/uikit';
9
8
  import { onSuccessLogin } from '../../../store/actions/global';
10
9
  import ytLocalStorage from '../../../utils/yt-local-storage';
10
+ import { getOAuthButtonLabel, getOAuthEnabled } from '../../../store/selectors/global';
11
11
  import LoginPageWrapper from '../LoginPageWrapper/LoginPageWrapper';
12
+ import isEmpty from 'lodash/isEmpty';
12
13
  import cn from 'bem-cn-lite';
13
14
  import { jsx as _jsx } from "react/jsx-runtime";
14
15
  import { jsxs as _jsxs } from "react/jsx-runtime";
@@ -34,6 +35,8 @@ function LoginForm(_ref2) {
34
35
  _useState2 = _slicedToArray(_useState, 2),
35
36
  username = _useState2[0],
36
37
  setUsername = _useState2[1];
38
+ var allowOAuth = useSelector(getOAuthEnabled);
39
+ var buttonLabel = useSelector(getOAuthButtonLabel);
37
40
  var _useState3 = useState(''),
38
41
  _useState4 = _slicedToArray(_useState3, 2),
39
42
  password = _useState4[0],
@@ -53,7 +56,7 @@ function LoginForm(_ref2) {
53
56
  username: username,
54
57
  password: password
55
58
  });
56
- if (!_isEmpty(validationErrors)) {
59
+ if (!isEmpty(validationErrors)) {
57
60
  setErrors(validationErrors);
58
61
  return;
59
62
  }
@@ -92,9 +95,9 @@ function LoginForm(_ref2) {
92
95
  children: [/*#__PURE__*/_jsx("h1", {
93
96
  className: block('title'),
94
97
  children: "Welcome to YTsaurus!"
95
- }), /*#__PURE__*/_jsx("p", {
98
+ }), /*#__PURE__*/_jsxs("p", {
96
99
  className: block('text'),
97
- children: "Single scalable platform for high volume storage and handling data. Login to your account."
100
+ children: ["A unified scalable platform for storing and processing large volumes of data.", /*#__PURE__*/_jsx("br", {}), /*#__PURE__*/_jsx("br", {}), "Login to your account."]
98
101
  }), /*#__PURE__*/_jsxs("form", {
99
102
  onSubmit: handleFormSubmit,
100
103
  children: [/*#__PURE__*/_jsx(TextInput, {
@@ -119,7 +122,8 @@ function LoginForm(_ref2) {
119
122
  error: errors.password
120
123
  }), /*#__PURE__*/_jsx(Button, {
121
124
  className: block('button', {
122
- solid: true
125
+ solid: true,
126
+ submit: true
123
127
  }),
124
128
  type: "submit",
125
129
  width: "max",
@@ -128,6 +132,20 @@ function LoginForm(_ref2) {
128
132
  view: theme === 'light' ? 'action' : 'normal-contrast',
129
133
  loading: loading,
130
134
  children: "Login"
135
+ }), allowOAuth && /*#__PURE__*/_jsx(Button, {
136
+ className: block('button', {
137
+ solid: true,
138
+ link: true,
139
+ submit: true
140
+ }),
141
+ type: "submit",
142
+ href: "/oauth/login",
143
+ width: "max",
144
+ size: "l",
145
+ pin: "circle-circle",
146
+ view: theme === 'light' ? 'action' : 'normal-contrast',
147
+ loading: loading,
148
+ children: buttonLabel || 'Login via SSO'
131
149
  }), errors.response && /*#__PURE__*/_jsx(Text, {
132
150
  as: "p",
133
151
  color: "danger",
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useState","axios","useDispatch","Button","Text","TextInput","onSuccessLogin","ytLocalStorage","LoginPageWrapper","cn","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","block","validate","_ref","username","password","result","LoginForm","_ref2","_ytLocalStorage$get","theme","dispatch","_useState","get","_useState2","_slicedToArray","setUsername","_useState3","_useState4","setPassword","_useState5","_useState6","loading","setLoading","_React$useState","_React$useState2","errors","setErrors","handleFormSubmit","e","preventDefault","validationErrors","_isEmpty","authorize","then","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","set","stop","error","response","data","message","children","className","onSubmit","type","size","placeholder","name","value","onUpdate","solid","width","pin","view","as","color","_ref4","post","LoginFormPage","_ref5"],"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","useCallback","useState","axios","useDispatch","useSelector","Button","Text","TextInput","onSuccessLogin","ytLocalStorage","getOAuthButtonLabel","getOAuthEnabled","LoginPageWrapper","isEmpty","cn","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","block","validate","_ref","username","password","result","LoginForm","_ref2","_ytLocalStorage$get","theme","dispatch","_useState","get","_useState2","_slicedToArray","setUsername","allowOAuth","buttonLabel","_useState3","_useState4","setPassword","_useState5","_useState6","loading","setLoading","_React$useState","_React$useState2","errors","setErrors","handleFormSubmit","e","preventDefault","validationErrors","authorize","then","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","set","stop","error","response","data","message","children","className","onSubmit","type","size","placeholder","name","value","onUpdate","solid","submit","width","pin","view","link","href","as","color","_ref4","post","LoginFormPage","_ref5"],"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":""}
@@ -111,6 +111,18 @@
111
111
  --yc-button-background-color: var(--login-button-solid);
112
112
  --yc-button-background-color-hover: var(--login-button-solid-hover);
113
113
  }
114
+
115
+ &_link {
116
+ display: flex;
117
+ align-items: center;
118
+ justify-content: center;
119
+ }
120
+
121
+ &_submit {
122
+ &:not(:last-child) {
123
+ margin-bottom: 10px;
124
+ }
125
+ }
114
126
  }
115
127
 
116
128
  .yc-button_loading {
@@ -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;
@@ -10,6 +10,7 @@ export var docsUrls = {
10
10
  'faq:enablepathautocorrection': "".concat(baseUrl, "/faq/faq#enablepathautocorrection"),
11
11
  'storage:static_tables': "".concat(baseUrl, "/user-guide/storage/static-tables"),
12
12
  'dynamic-tables:overview': "".concat(baseUrl, "/user-guide/dynamic-tables/overview"),
13
+ 'dynamic-tables:cross-dc': "".concat(baseUrl, "/user-guide/dynamic-tables/dynamic-tables-resources#georaspredelyonnye-klastery-cross-dc"),
13
14
  'storage:compression#compression_codecs': "".concat(baseUrl, "/user-guide/storage/compression#compression_codecs"),
14
15
  'storage:replication#replication': "".concat(baseUrl, "/user-guide/storage/replication#replication"),
15
16
  'storage:replication#erasure': "".concat(baseUrl, "/user-guide/storage/replication#erasure"),
@@ -1 +1 @@
1
- {"version":3,"names":["getDocsBaseUrl","baseUrl","docsUrls","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,SAAQA,cAAc,QAAO,WAAW;AAExC,IAAMC,OAAO,GAAGD,cAAc,CAAC,CAAC,IAAI,EAAE;AAEtC,OAAO,IAAME,QAAQ,GAAG;EACpB,mCAAmC,IAAI;EACvC,aAAa,KAAAC,MAAA,CAAKF,OAAO,oCAAiC;EAC1D,qBAAqB,KAAAE,MAAA,CAAKF,OAAO,oCAAiC;EAClE,mDAAmD,KAAAE,MAAA,CAAKF,OAAO,kFAA+E;EAC9I,+BAA+B,KAAAE,MAAA,CAAKF,OAAO,8DAA2D;EACtG,qBAAqB,KAAAE,MAAA,CAAKF,OAAO,qBAAkB;EACnD,8BAA8B,KAAAE,MAAA,CAAKF,OAAO,sCAAmC;EAC7E,uBAAuB,KAAAE,MAAA,CAAKF,OAAO,sCAAmC;EACtE,yBAAyB,KAAAE,MAAA,CAAKF,OAAO,wCAAqC;EAC1E,wCAAwC,KAAAE,MAAA,CAAKF,OAAO,uDAAoD;EACxG,iCAAiC,KAAAE,MAAA,CAAKF,OAAO,gDAA6C;EAC1F,6BAA6B,KAAAE,MAAA,CAAKF,OAAO,4CAAyC;EAClF,uBAAuB,KAAAE,MAAA,CAAKF,OAAO,sCAAmC;EACtE,2BAA2B,KAAAE,MAAA,CAAKF,OAAO,0CAAuC;EAC9E,oCAAoC,KAAAE,MAAA,CAAKF,OAAO,mDAAgD;EAChG,gCAAgC,KAAAE,MAAA,CAAKF,OAAO,sCAAmC;EAC/E,uCAAuC,KAAAE,MAAA,CAAKF,OAAO,sDAAmD;EACtG,mDAAmD,KAAAE,MAAA,CAAKF,OAAO,kEAA+D;EAC9H,wBAAwB,KAAAE,MAAA,CAAKF,OAAO,uCAAoC;EACxE,iBAAiB,KAAAE,MAAA,CAAKF,OAAO,gCAA6B;EAC1D,2BAA2B,KAAAE,MAAA,CAAKF,OAAO,0CAAuC;EAC9E,eAAe,KAAAE,MAAA,CAAKF,OAAO,8BAA2B;EACtD,kCAAkC,KAAAE,MAAA,CAAKF,OAAO,0CAAuC;EACrF,mCAAmC,KAAAE,MAAA,CAAKF,OAAO,kDAA+C;EAC9F,6BAA6B,KAAAE,MAAA,CAAKF,OAAO,4CAAyC;EAClF,kBAAkB,KAAAE,MAAA,CAAKF,OAAO,iCAA8B;EAC5D,uBAAuB,KAAAE,MAAA,CAAKF,OAAO,sCAAmC;EACtE,6CAA6C,KAAAE,MAAA,CAAKF,OAAO,4DAAyD;EAClH,qEAAqE,KAAAE,MAAA,CAAKF,OAAO,6EAA0E;EAC3J,kBAAkB,KAAAE,MAAA,CAAKF,OAAO,iDAA8C;EAC5E,kBAAkB,KAAAE,MAAA,CAAKF,OAAO,iDAA8C;EAC5E,kCAAkC,KAAAE,MAAA,CAAKF,OAAO,iEAA8D;EAC5G,oCAAoC,KAAAE,MAAA,CAAKF,OAAO,mEAAgE;EAChH,+BAA+B,KAAAE,MAAA,CAAKF,OAAO,8DAA2D;EACtG,wBAAwB,KAAAE,MAAA,CAAKF,OAAO,uDAAoD;EACxF,+BAA+B,KAAAE,MAAA,CAAKF,OAAO,8DAA2D;EACtG,gBAAgB,KAAAE,MAAA,CAAKF,OAAO,cAAW;EACvC,6BAA6B,EAAE,EAAE;EACjC,sBAAsB,EAAE,EAAE;EAC1B,SAAS,KAAAE,MAAA,CAAKF,OAAO,iBAAc;EACnC,wBAAwB,KAAAE,MAAA,CAAKF,OAAO,uDAAoD;EACxF,iCAAiC,EAAE,EAAE;EACrC,iBAAiB,KAAAE,MAAA,CAAKF,OAAO;AACjC,CAAC"}
1
+ {"version":3,"names":["getDocsBaseUrl","baseUrl","docsUrls","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,SAAQA,cAAc,QAAO,WAAW;AAExC,IAAMC,OAAO,GAAGD,cAAc,CAAC,CAAC,IAAI,EAAE;AAEtC,OAAO,IAAME,QAAQ,GAAG;EACpB,mCAAmC,IAAI;EACvC,aAAa,KAAAC,MAAA,CAAKF,OAAO,oCAAiC;EAC1D,qBAAqB,KAAAE,MAAA,CAAKF,OAAO,oCAAiC;EAClE,mDAAmD,KAAAE,MAAA,CAAKF,OAAO,kFAA+E;EAC9I,+BAA+B,KAAAE,MAAA,CAAKF,OAAO,8DAA2D;EACtG,qBAAqB,KAAAE,MAAA,CAAKF,OAAO,qBAAkB;EACnD,8BAA8B,KAAAE,MAAA,CAAKF,OAAO,sCAAmC;EAC7E,uBAAuB,KAAAE,MAAA,CAAKF,OAAO,sCAAmC;EACtE,yBAAyB,KAAAE,MAAA,CAAKF,OAAO,wCAAqC;EAC1E,yBAAyB,KAAAE,MAAA,CAAKF,OAAO,6FAA0F;EAC/H,wCAAwC,KAAAE,MAAA,CAAKF,OAAO,uDAAoD;EACxG,iCAAiC,KAAAE,MAAA,CAAKF,OAAO,gDAA6C;EAC1F,6BAA6B,KAAAE,MAAA,CAAKF,OAAO,4CAAyC;EAClF,uBAAuB,KAAAE,MAAA,CAAKF,OAAO,sCAAmC;EACtE,2BAA2B,KAAAE,MAAA,CAAKF,OAAO,0CAAuC;EAC9E,oCAAoC,KAAAE,MAAA,CAAKF,OAAO,mDAAgD;EAChG,gCAAgC,KAAAE,MAAA,CAAKF,OAAO,sCAAmC;EAC/E,uCAAuC,KAAAE,MAAA,CAAKF,OAAO,sDAAmD;EACtG,mDAAmD,KAAAE,MAAA,CAAKF,OAAO,kEAA+D;EAC9H,wBAAwB,KAAAE,MAAA,CAAKF,OAAO,uCAAoC;EACxE,iBAAiB,KAAAE,MAAA,CAAKF,OAAO,gCAA6B;EAC1D,2BAA2B,KAAAE,MAAA,CAAKF,OAAO,0CAAuC;EAC9E,eAAe,KAAAE,MAAA,CAAKF,OAAO,8BAA2B;EACtD,kCAAkC,KAAAE,MAAA,CAAKF,OAAO,0CAAuC;EACrF,mCAAmC,KAAAE,MAAA,CAAKF,OAAO,kDAA+C;EAC9F,6BAA6B,KAAAE,MAAA,CAAKF,OAAO,4CAAyC;EAClF,kBAAkB,KAAAE,MAAA,CAAKF,OAAO,iCAA8B;EAC5D,uBAAuB,KAAAE,MAAA,CAAKF,OAAO,sCAAmC;EACtE,6CAA6C,KAAAE,MAAA,CAAKF,OAAO,4DAAyD;EAClH,qEAAqE,KAAAE,MAAA,CAAKF,OAAO,6EAA0E;EAC3J,kBAAkB,KAAAE,MAAA,CAAKF,OAAO,iDAA8C;EAC5E,kBAAkB,KAAAE,MAAA,CAAKF,OAAO,iDAA8C;EAC5E,kCAAkC,KAAAE,MAAA,CAAKF,OAAO,iEAA8D;EAC5G,oCAAoC,KAAAE,MAAA,CAAKF,OAAO,mEAAgE;EAChH,+BAA+B,KAAAE,MAAA,CAAKF,OAAO,8DAA2D;EACtG,wBAAwB,KAAAE,MAAA,CAAKF,OAAO,uDAAoD;EACxF,+BAA+B,KAAAE,MAAA,CAAKF,OAAO,8DAA2D;EACtG,gBAAgB,KAAAE,MAAA,CAAKF,OAAO,cAAW;EACvC,6BAA6B,EAAE,EAAE;EACjC,sBAAsB,EAAE,EAAE;EAC1B,SAAS,KAAAE,MAAA,CAAKF,OAAO,iBAAc;EACnC,wBAAwB,KAAAE,MAAA,CAAKF,OAAO,uDAAoD;EACxF,iCAAiC,EAAE,EAAE;EACrC,iBAAiB,KAAAE,MAAA,CAAKF,OAAO;AACjC,CAAC"}
@@ -7,7 +7,7 @@ import _isEmpty from 'lodash/isEmpty';
7
7
  import ellipsisIcon from '../../../../img/svg/ellipsis.svg';
8
8
  import { useDispatch, useSelector } from 'react-redux';
9
9
  import { PagesSettingsEditor, usePagesMenuItems } from './PagesSettingsEditor';
10
- import { getClusterConfigByName, getCurrentUserName, getRootPagesCluster } from '../../store/selectors/global';
10
+ import { getAuthWay, getClusterConfigByName, getCurrentUserName, getRootPagesCluster } from '../../store/selectors/global';
11
11
  import SettingsPanel from '../SettingsPanel/SettingsPanel';
12
12
  import { useClusterFromLocation } from '../../hooks/use-cluster';
13
13
  import "./AppNavigation.css";
@@ -32,6 +32,7 @@ export default function AppNavigation(_ref) {
32
32
  var clusterConfig = getClusterConfigByName(cluster || '');
33
33
  var items = usePagesMenuItems(cluster);
34
34
  var currentUser = useSelector(getCurrentUserName);
35
+ var authWay = useSelector(getAuthWay);
35
36
  var _React$useState = React.useState(false),
36
37
  _React$useState2 = _slicedToArray(_React$useState, 2),
37
38
  settingsVisible = _React$useState2[0],
@@ -88,6 +89,7 @@ export default function AppNavigation(_ref) {
88
89
  'no-cluster': !cluster
89
90
  }),
90
91
  currentUser: currentUser,
92
+ authWay: authWay,
91
93
  menuItems: _isEmpty(clusterConfig) ? [] : menuItems,
92
94
  panelContent: /*#__PURE__*/_jsx(PagesSettingsEditor, {
93
95
  cluster: cluster,