@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.
- package/build/cjs/@types/core.d.ts +38 -0
- package/build/cjs/server/components/layout-config.js +6 -1
- package/build/cjs/server/components/layout-config.js.map +1 -1
- package/build/cjs/server/components/oauth.d.ts +26 -0
- package/build/cjs/server/components/oauth.js +123 -0
- package/build/cjs/server/components/oauth.js.map +1 -0
- package/build/cjs/server/components/yt-auth.d.ts +6 -0
- package/build/cjs/server/components/yt-auth.js +23 -0
- package/build/cjs/server/components/yt-auth.js.map +1 -0
- package/build/cjs/server/controllers/login.d.ts +0 -1
- package/build/cjs/server/controllers/login.js +4 -26
- package/build/cjs/server/controllers/login.js.map +1 -1
- package/build/cjs/server/controllers/logout.d.ts +2 -0
- package/build/cjs/server/controllers/logout.js +15 -0
- package/build/cjs/server/controllers/logout.js.map +1 -0
- package/build/cjs/server/controllers/oauth-login.d.ts +4 -0
- package/build/cjs/server/controllers/oauth-login.js +30 -0
- package/build/cjs/server/controllers/oauth-login.js.map +1 -0
- package/build/cjs/server/index.js +9 -1
- package/build/cjs/server/index.js.map +1 -1
- package/build/cjs/server/middlewares/authorization.d.ts +2 -0
- package/build/cjs/server/middlewares/authorization.js +42 -0
- package/build/cjs/server/middlewares/authorization.js.map +1 -0
- package/build/cjs/server/middlewares/oauth.d.ts +2 -0
- package/build/cjs/server/middlewares/oauth.js +27 -0
- package/build/cjs/server/middlewares/oauth.js.map +1 -0
- package/build/cjs/server/middlewares/yt-auth.d.ts +1 -1
- package/build/cjs/server/middlewares/yt-auth.js +10 -42
- package/build/cjs/server/middlewares/yt-auth.js.map +1 -1
- package/build/cjs/server/routes.js +6 -1
- package/build/cjs/server/routes.js.map +1 -1
- package/build/cjs/server/utils/authorization.d.ts +6 -0
- package/build/cjs/server/utils/authorization.js +33 -0
- package/build/cjs/server/utils/authorization.js.map +1 -0
- package/build/cjs/shared/constants/index.d.ts +3 -0
- package/build/cjs/shared/constants/index.js +3 -1
- package/build/cjs/shared/constants/index.js.map +1 -1
- package/build/cjs/shared/yt-types.d.ts +2 -0
- package/build/cjs/ui/components/Login/LoginFormPage/LoginFormPage.js +23 -5
- package/build/cjs/ui/components/Login/LoginFormPage/LoginFormPage.js.map +1 -1
- package/build/cjs/ui/components/Login/LoginPageWrapper/LoginPageWrapper.css +8 -0
- package/build/cjs/ui/components/Login/LoginPageWrapper/LoginPageWrapper.css.map +1 -1
- package/build/cjs/ui/components/NumberInput/NumberInput.d.ts +1 -1
- package/build/cjs/ui/constants/docsUrls.d.ts +1 -0
- package/build/cjs/ui/constants/docsUrls.js +1 -0
- package/build/cjs/ui/constants/docsUrls.js.map +1 -1
- package/build/cjs/ui/containers/AppNavigation/AppNavigation.js +2 -0
- package/build/cjs/ui/containers/AppNavigation/AppNavigation.js.map +1 -1
- package/build/cjs/ui/containers/AppNavigation/AppNavigationComponent.d.ts +1 -1
- package/build/cjs/ui/containers/AppNavigation/AppNavigationComponent.js +5 -7
- package/build/cjs/ui/containers/AppNavigation/AppNavigationComponent.js.map +1 -1
- package/build/cjs/ui/containers/AppNavigation/AppNavigationPageLayout.d.ts +2 -0
- package/build/cjs/ui/containers/AppNavigation/AppNavigationPageLayout.js.map +1 -1
- package/build/cjs/ui/pages/tablet_cell_bundles/bundles/BundleEditorDialog/BundleEditorDialog.js +11 -7
- package/build/cjs/ui/pages/tablet_cell_bundles/bundles/BundleEditorDialog/BundleEditorDialog.js.map +1 -1
- package/build/cjs/ui/store/actions/tablet_cell_bundles/index.js +1 -1
- package/build/cjs/ui/store/actions/tablet_cell_bundles/index.js.map +1 -1
- package/build/cjs/ui/store/reducers/global/index.d.ts +1 -0
- package/build/cjs/ui/store/reducers/global/index.js +1 -0
- package/build/cjs/ui/store/reducers/global/index.js.map +1 -1
- package/build/cjs/ui/store/reducers/tablet_cell_bundles/index.d.ts +8 -0
- package/build/cjs/ui/store/reducers/tablet_cell_bundles/index.js.map +1 -1
- package/build/cjs/ui/store/selectors/global/index.d.ts +4 -0
- package/build/cjs/ui/store/selectors/global/index.js +14 -4
- package/build/cjs/ui/store/selectors/global/index.js.map +1 -1
- package/build/cjs/ui/utils/tablet_cell_bundles/bundles/bundle-editor-dialog/index.d.ts +2 -1
- package/build/cjs/ui/utils/tablet_cell_bundles/bundles/bundle-editor-dialog/index.js +16 -1
- package/build/cjs/ui/utils/tablet_cell_bundles/bundles/bundle-editor-dialog/index.js.map +1 -1
- package/build/esm/@types/core.d.ts +38 -0
- package/build/esm/server/components/layout-config.js +7 -2
- package/build/esm/server/components/layout-config.js.map +1 -1
- package/build/esm/server/components/oauth.d.ts +26 -0
- package/build/esm/server/components/oauth.js +169 -0
- package/build/esm/server/components/oauth.js.map +1 -0
- package/build/esm/server/components/yt-auth.d.ts +6 -0
- package/build/esm/server/components/yt-auth.js +17 -0
- package/build/esm/server/components/yt-auth.js.map +1 -0
- package/build/esm/server/controllers/login.d.ts +0 -1
- package/build/esm/server/controllers/login.js +41 -88
- package/build/esm/server/controllers/login.js.map +1 -1
- package/build/esm/server/controllers/logout.d.ts +2 -0
- package/build/esm/server/controllers/logout.js +11 -0
- package/build/esm/server/controllers/logout.js.map +1 -0
- package/build/esm/server/controllers/oauth-login.d.ts +4 -0
- package/build/esm/server/controllers/oauth-login.js +50 -0
- package/build/esm/server/controllers/oauth-login.js.map +1 -0
- package/build/esm/server/index.js +7 -2
- package/build/esm/server/index.js.map +1 -1
- package/build/esm/server/middlewares/authorization.d.ts +2 -0
- package/build/esm/server/middlewares/authorization.js +74 -0
- package/build/esm/server/middlewares/authorization.js.map +1 -0
- package/build/esm/server/middlewares/oauth.d.ts +2 -0
- package/build/esm/server/middlewares/oauth.js +50 -0
- package/build/esm/server/middlewares/oauth.js.map +1 -0
- package/build/esm/server/middlewares/yt-auth.d.ts +1 -1
- package/build/esm/server/middlewares/yt-auth.js +8 -58
- package/build/esm/server/middlewares/yt-auth.js.map +1 -1
- package/build/esm/server/routes.js +16 -2
- package/build/esm/server/routes.js.map +1 -1
- package/build/esm/server/utils/authorization.d.ts +6 -0
- package/build/esm/server/utils/authorization.js +28 -0
- package/build/esm/server/utils/authorization.js.map +1 -0
- package/build/esm/shared/constants/index.d.ts +3 -0
- package/build/esm/shared/constants/index.js +2 -1
- package/build/esm/shared/constants/index.js.map +1 -1
- package/build/esm/shared/yt-types.d.ts +2 -0
- package/build/esm/ui/components/Login/LoginFormPage/LoginFormPage.js +24 -6
- package/build/esm/ui/components/Login/LoginFormPage/LoginFormPage.js.map +1 -1
- package/build/esm/ui/components/Login/LoginPageWrapper/LoginPageWrapper.css +8 -0
- package/build/esm/ui/components/Login/LoginPageWrapper/LoginPageWrapper.css.map +1 -1
- package/build/esm/ui/components/Login/LoginPageWrapper/LoginPageWrapper.scss +12 -0
- package/build/esm/ui/components/NumberInput/NumberInput.d.ts +1 -1
- package/build/esm/ui/constants/docsUrls.d.ts +1 -0
- package/build/esm/ui/constants/docsUrls.js +1 -0
- package/build/esm/ui/constants/docsUrls.js.map +1 -1
- package/build/esm/ui/containers/AppNavigation/AppNavigation.js +3 -1
- package/build/esm/ui/containers/AppNavigation/AppNavigation.js.map +1 -1
- package/build/esm/ui/containers/AppNavigation/AppNavigationComponent.d.ts +1 -1
- package/build/esm/ui/containers/AppNavigation/AppNavigationComponent.js +5 -7
- package/build/esm/ui/containers/AppNavigation/AppNavigationComponent.js.map +1 -1
- package/build/esm/ui/containers/AppNavigation/AppNavigationPageLayout.d.ts +2 -0
- package/build/esm/ui/containers/AppNavigation/AppNavigationPageLayout.js.map +1 -1
- package/build/esm/ui/pages/tablet_cell_bundles/bundles/BundleEditorDialog/BundleEditorDialog.js +12 -8
- package/build/esm/ui/pages/tablet_cell_bundles/bundles/BundleEditorDialog/BundleEditorDialog.js.map +1 -1
- package/build/esm/ui/store/actions/tablet_cell_bundles/index.js +1 -1
- package/build/esm/ui/store/actions/tablet_cell_bundles/index.js.map +1 -1
- package/build/esm/ui/store/reducers/global/index.d.ts +1 -0
- package/build/esm/ui/store/reducers/global/index.js +1 -0
- package/build/esm/ui/store/reducers/global/index.js.map +1 -1
- package/build/esm/ui/store/reducers/tablet_cell_bundles/index.d.ts +8 -0
- package/build/esm/ui/store/reducers/tablet_cell_bundles/index.js.map +1 -1
- package/build/esm/ui/store/selectors/global/index.d.ts +4 -0
- package/build/esm/ui/store/selectors/global/index.js +12 -2
- package/build/esm/ui/store/selectors/global/index.js.map +1 -1
- package/build/esm/ui/utils/tablet_cell_bundles/bundles/bundle-editor-dialog/index.d.ts +2 -1
- package/build/esm/ui/utils/tablet_cell_bundles/bundles/bundle-editor-dialog/index.js +15 -0
- package/build/esm/ui/utils/tablet_cell_bundles/bundles/bundle-editor-dialog/index.js.map +1 -1
- package/dist/public/build/assets-manifest.json +12 -12
- package/dist/public/build/css/{main.136a49c7.css → main.e919e247.css} +2 -2
- package/dist/public/build/css/main.e919e247.css.map +1 -0
- package/dist/public/build/js/89.07445d46.chunk.js +2 -0
- package/dist/public/build/js/89.07445d46.chunk.js.map +1 -0
- package/dist/public/build/js/main.9d592639.js +3 -0
- package/dist/public/build/js/{main.69fdeec5.js.map → main.9d592639.js.map} +1 -1
- package/dist/public/build/js/{runtime.6c8d85d3.js → runtime.9491563b.js} +2 -2
- package/dist/public/build/js/{runtime.6c8d85d3.js.map → runtime.9491563b.js.map} +1 -1
- package/dist/public/build/manifest.json +8 -8
- package/dist/server/components/layout-config.js +6 -1
- package/dist/server/components/oauth.d.ts +26 -0
- package/dist/server/components/oauth.js +123 -0
- package/dist/server/components/yt-auth.d.ts +6 -0
- package/dist/server/components/yt-auth.js +23 -0
- package/dist/server/controllers/login.d.ts +0 -1
- package/dist/server/controllers/login.js +4 -26
- package/dist/server/controllers/logout.d.ts +2 -0
- package/dist/server/controllers/logout.js +15 -0
- package/dist/server/controllers/oauth-login.d.ts +4 -0
- package/dist/server/controllers/oauth-login.js +30 -0
- package/dist/server/index.js +9 -1
- package/dist/server/middlewares/authorization.d.ts +2 -0
- package/dist/server/middlewares/authorization.js +42 -0
- package/dist/server/middlewares/oauth.d.ts +2 -0
- package/dist/server/middlewares/oauth.js +27 -0
- package/dist/server/middlewares/yt-auth.d.ts +1 -1
- package/dist/server/middlewares/yt-auth.js +10 -42
- package/dist/server/routes.js +6 -1
- package/dist/server/utils/authorization.d.ts +6 -0
- package/dist/server/utils/authorization.js +33 -0
- package/dist/shared/constants/index.d.ts +3 -0
- package/dist/shared/constants/index.js +3 -1
- package/package.json +2 -2
- package/dist/public/build/css/main.136a49c7.css.map +0 -1
- package/dist/public/build/js/89.6ea87438.chunk.js +0 -2
- package/dist/public/build/js/89.6ea87438.chunk.js.map +0 -1
- package/dist/public/build/js/main.69fdeec5.js +0 -3
- /package/dist/public/build/js/{main.69fdeec5.js.LICENSE.txt → main.9d592639.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_ypath","_interopRequireDefault","require","_hammer","obj","__esModule","default","bundleEditorDict","exports","keys","resources","memory_limits","cpu_limits","defaults","error","memory_reset","tablet_static","tablet_dynamic","compressed_block_cache","uncompressed_block_cache","versioned_chunk_meta","lookup_row_cache","key_filter_block_cache","threadPool_reset","lookup_thread_pool_size","query_thread_pool_size","write_thread_pool_size","getResourceData","source","resourceType","usage","ypath","getValue","concat","limit","getInitialFormValues","data","bundleControllerConfig","slug","changelogAccount","snapshotAccount","_getResourceData","tablet_count","_getResourceData2","tablet_static_memory","general","abc","changelog_account","snapshot_account","rpc_proxy_count","tablet_node_count","rpc_proxy_resource_guarantee","tablet_node_resource_guarantee","info","undefined","reserved","formatNetwork","value","formatted","toPrecision","createConfigurationList","Object","entries","map","_ref","_ref2","_slicedToArray","type","itemData","_itemData$resource_gu","resource_guarantee","net","vcpu","memory","id","hammer","format","initialData","_objectSpread","createParams","formatType","total","used","_hammer$format$format","split","_hammer$format$format2","totalVal","totalPref","params","title","postfix","difference","_hammer$format$format3","_hammer$format$format4","usedVal","usedPref","push","NO_VALUE","prepareAbc","prepareSubmitBundle","form","prepare","_form$getState","getState","dirtyFields","values","addToChange","attr","field","prepareValue","_get","simpleBundleValidate","v","toNumber","Number","isFinite","getBundleControllerResource","current","defaultValues","resourceName","result","_iterator","_createForOfIteratorHelper","_step","s","n","done","_current$key","key","err","e","f"],"sources":["index.ts"],"sourcesContent":["import _ from 'lodash';\nimport ypath from '../../../../common/thor/ypath';\nimport hammer from '../../../../common/hammer';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport {\n BundleControllerConfig,\n BundleDefaultConfigData,\n} from '../../../../store/reducers/tablet_cell_bundles';\nimport {BundleParam} from '../../../../pages/tablet_cell_bundles/bundles/BundleEditorDialog/components/BundleParamsList/BundleParamsList';\nimport {BundleEditorDialogFormValues} from '../../../../pages/tablet_cell_bundles/bundles/BundleEditorDialog/BundleEditorDialog';\nimport {FormApi} from '../../../../components/Dialog/Dialog';\n\ntype InnerKeys<T> = {[K in keyof T]: Array<keyof T[K]>};\ntype FormKeys = InnerKeys<Required<BundleEditorDialogFormValues>>;\n\nexport const bundleEditorDict: {\n keys: Pick<FormKeys, 'memory_limits' | 'resources' | 'cpu_limits'>;\n defaults: Pick<Required<BundleEditorDialogFormValues>, 'memory_limits' | 'cpu_limits'>;\n} = {\n keys: {\n resources: [\n 'rpc_proxy_count',\n 'rpc_proxy_resource_guarantee',\n 'tablet_node_count',\n 'tablet_node_resource_guarantee',\n ],\n memory_limits: [\n 'reserved',\n 'tablet_static',\n 'tablet_dynamic',\n 'compressed_block_cache',\n 'uncompressed_block_cache',\n 'versioned_chunk_meta',\n 'lookup_row_cache',\n 'key_filter_block_cache',\n ],\n cpu_limits: ['lookup_thread_pool_size', 'query_thread_pool_size', 'write_thread_pool_size'],\n },\n defaults: {\n memory_limits: {\n error: false,\n memory_reset: false,\n tablet_static: 0,\n tablet_dynamic: 0,\n compressed_block_cache: 0,\n uncompressed_block_cache: 0,\n versioned_chunk_meta: 0,\n lookup_row_cache: 0,\n key_filter_block_cache: 0,\n },\n cpu_limits: {\n threadPool_reset: false,\n lookup_thread_pool_size: 0,\n query_thread_pool_size: 0,\n write_thread_pool_size: 0,\n },\n },\n};\n\nexport const getResourceData = (source: object, resourceType: string) => {\n const usage = ypath.getValue(source, `/@resource_usage/${resourceType}`);\n const limit = ypath.getValue(source, `/@resource_limits/${resourceType}`);\n return {\n usage,\n limit,\n };\n};\n\nexport const getInitialFormValues = (\n data: object,\n bundleControllerConfig?: BundleControllerConfig,\n): Partial<BundleEditorDialogFormValues> => {\n const slug = ypath.getValue(data, '/@abc/slug');\n const changelogAccount = ypath.getValue(data, `/@options/changelog_account`);\n const snapshotAccount = ypath.getValue(data, `/@options/snapshot_account`);\n const {limit: tablet_count} = getResourceData(data, 'tablet_count');\n const {limit: tablet_static_memory} = getResourceData(data, 'tablet_static_memory');\n\n if (!bundleControllerConfig) {\n return {\n general: {\n abc: {slug},\n changelog_account: changelogAccount,\n snapshot_account: snapshotAccount,\n },\n resources: {\n tablet_count: tablet_count || 0,\n tablet_static_memory: tablet_static_memory || 0,\n },\n };\n }\n\n const {\n rpc_proxy_count,\n tablet_node_count,\n cpu_limits,\n memory_limits,\n rpc_proxy_resource_guarantee,\n tablet_node_resource_guarantee,\n } = bundleControllerConfig;\n\n return {\n general: {\n abc: {slug},\n changelog_account: changelogAccount,\n snapshot_account: snapshotAccount,\n },\n resources: {\n info: '', // system\n tablet_count: tablet_count || 0,\n rpc_proxy_count: rpc_proxy_count, // todo\n rpc_proxy_resource_guarantee: rpc_proxy_resource_guarantee || undefined,\n tablet_node_count: tablet_node_count,\n tablet_node_resource_guarantee: tablet_node_resource_guarantee || undefined,\n },\n memory_limits: {\n error: false, // system\n memory_reset: false, // system\n reserved: memory_limits?.reserved || 0,\n tablet_static: memory_limits?.tablet_static || 0,\n tablet_dynamic: memory_limits?.tablet_dynamic || 0,\n compressed_block_cache: memory_limits?.compressed_block_cache || 0,\n uncompressed_block_cache: memory_limits?.uncompressed_block_cache || 0,\n versioned_chunk_meta: memory_limits?.versioned_chunk_meta || 0,\n lookup_row_cache: memory_limits?.lookup_row_cache || 0,\n key_filter_block_cache: memory_limits?.key_filter_block_cache || 0,\n },\n cpu_limits: {\n threadPool_reset: false, //system\n lookup_thread_pool_size: cpu_limits?.lookup_thread_pool_size || 0,\n query_thread_pool_size: cpu_limits?.query_thread_pool_size || 0,\n write_thread_pool_size: cpu_limits?.write_thread_pool_size || 0,\n },\n };\n};\n\nfunction formatNetwork(value?: number) {\n const formatted = typeof value !== 'undefined' ? (value / 1000e6).toPrecision(2) : 0;\n return `${formatted} Gbit RX/TX`;\n}\n\nexport const createConfigurationList = (\n data: BundleDefaultConfigData['rpc_proxy_sizes'] | BundleDefaultConfigData['tablet_node_sizes'],\n) => {\n return Object.entries(data).map(([type, itemData]) => {\n const {net, vcpu, memory} = itemData.resource_guarantee;\n return {\n id: type,\n type,\n memory: hammer.format['Bytes'](memory),\n net: formatNetwork(net),\n vcpu: hammer.format['vCores'](vcpu),\n initialData: {...itemData.resource_guarantee, type},\n };\n });\n};\n\nexport const createParams = (formatType: 'Bytes' | 'vCores', total: number, used?: number) => {\n const [totalVal, totalPref] = hammer.format[formatType](total).split(' ');\n const params: BundleParam[] = [{title: 'Total', value: totalVal, postfix: totalPref}];\n\n if (typeof used !== 'undefined') {\n const difference = total - used;\n const [usedVal, usedPref] = hammer.format[formatType](difference).split(' ');\n params.push({\n title: 'Free',\n value: usedVal === hammer.format.NO_VALUE ? '0' : usedVal,\n postfix: usedPref,\n type: difference >= 0 ? 'positive' : 'negative',\n });\n }\n return params;\n};\n\nfunction prepareAbc(value: {id: number; slug: string}) {\n const {id, slug} = value;\n return id && slug ? {id, slug} : undefined;\n}\n\nexport const prepareSubmitBundle = (form: FormApi<BundleEditorDialogFormValues>) => {\n const prepare: {[path: string]: any} = {};\n const {dirtyFields, values} = form.getState();\n\n function addToChange(attr: string, field: string, prepareValue?: Function) {\n if (!dirtyFields[field]) {\n return;\n }\n const value = _.get(values, field);\n prepare[attr] = typeof prepareValue === 'function' ? prepareValue(value) : value;\n }\n\n // Generel\n addToChange('@abc', 'general.abc', prepareAbc);\n addToChange('@options/changelog_account', 'general.changelog_account');\n addToChange('@options/snapshot_account', 'general.snapshot_account');\n // Resources\n addToChange('@resource_limits/tablet_count', 'resources.tablet_count');\n addToChange('@resource_limits/tablet_static_memory', 'resources.tablet_static_memory');\n addToChange('@bundle_controller_target_config/rpc_proxy_count', 'resources.rpc_proxy_count');\n addToChange(\n '@bundle_controller_target_config/tablet_node_count',\n 'resources.tablet_node_count',\n );\n addToChange(\n '@bundle_controller_target_config/rpc_proxy_resource_guarantee',\n 'resources.rpc_proxy_resource_guarantee',\n );\n addToChange(\n '@bundle_controller_target_config/tablet_node_resource_guarantee',\n 'resources.tablet_node_resource_guarantee',\n );\n // Memory_limits\n addToChange(\n '@bundle_controller_target_config/memory_limits/tablet_static',\n 'memory_limits.tablet_static',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/tablet_dynamic',\n 'memory_limits.tablet_dynamic',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/compressed_block_cache',\n 'memory_limits.compressed_block_cache',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/uncompressed_block_cache',\n 'memory_limits.uncompressed_block_cache',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/versioned_chunk_meta',\n 'memory_limits.versioned_chunk_meta',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/lookup_row_cache',\n 'memory_limits.lookup_row_cache',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/key_filter_block_cache',\n 'memory_limits.key_filter_block_cache',\n );\n // Cpu_limits\n addToChange(\n '@bundle_controller_target_config/cpu_limits/lookup_thread_pool_size',\n 'cpu_limits.lookup_thread_pool_size',\n );\n addToChange(\n '@bundle_controller_target_config/cpu_limits/query_thread_pool_size',\n 'cpu_limits.query_thread_pool_size',\n );\n addToChange(\n '@bundle_controller_target_config/cpu_limits/write_thread_pool_size',\n 'cpu_limits.write_thread_pool_size',\n );\n\n return prepare;\n};\n\nexport const simpleBundleValidate = (v?: number | string) => {\n const toNumber = Number(v);\n let error;\n if (!Number.isFinite(toNumber)) {\n error = 'Incorrect value';\n }\n\n if (toNumber < 0) {\n error = 'Must be greater than or equal to zero';\n }\n\n return error;\n};\n\nexport function getBundleControllerResource<K extends 'cpu_limits' | 'memory_limits'>(\n current: Partial<Required<BundleEditorDialogFormValues>[K]>,\n defaultValues: Partial<Required<BundleEditorDialogFormValues>[K]>,\n resourceName: K,\n) {\n const result: Partial<BundleEditorDialogFormValues[K]> = {};\n\n for (const key of bundleEditorDict.keys[resourceName]) {\n result[key] = current[key] ?? defaultValues[key];\n }\n\n return result;\n}\n"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["_ypath","_interopRequireDefault","require","_hammer","obj","__esModule","default","bundleEditorDict","exports","keys","resources","memory_limits","cpu_limits","defaults","error","memory_reset","tablet_static","tablet_dynamic","compressed_block_cache","uncompressed_block_cache","versioned_chunk_meta","lookup_row_cache","key_filter_block_cache","threadPool_reset","lookup_thread_pool_size","query_thread_pool_size","write_thread_pool_size","getResourceData","source","resourceType","usage","ypath","getValue","concat","limit","getInitialFormValues","data","bundleControllerConfig","slug","changelogAccount","snapshotAccount","_getResourceData","tablet_count","_getResourceData2","tablet_static_memory","general","abc","changelog_account","snapshot_account","rpc_proxy_count","tablet_node_count","rpc_proxy_resource_guarantee","tablet_node_resource_guarantee","info","undefined","reserved","formatNetwork","value","formatted","toPrecision","createConfigurationList","Object","entries","map","_ref","_ref2","_slicedToArray","type","itemData","_itemData$resource_gu","resource_guarantee","net","vcpu","memory","id","hammer","format","initialData","_objectSpread","createParams","formatType","total","used","_hammer$format$format","split","_hammer$format$format2","totalVal","totalPref","params","title","postfix","difference","_hammer$format$format3","_hammer$format$format4","usedVal","usedPref","push","NO_VALUE","prepareAbc","prepareSubmitBundle","form","prepare","_form$getState","getState","dirtyFields","values","addToChange","attr","field","prepareValue","_get","simpleBundleValidate","v","toNumber","Number","isFinite","instanceCountValidate","_ref3","length","input","number","getBundleControllerResource","current","defaultValues","resourceName","result","_iterator","_createForOfIteratorHelper","_step","s","n","done","_current$key","key","err","e","f"],"sources":["index.ts"],"sourcesContent":["import _ from 'lodash';\nimport ypath from '../../../../common/thor/ypath';\nimport hammer from '../../../../common/hammer';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport {\n BundleControllerConfig,\n BundleDataCenter,\n BundleDefaultConfigData,\n} from '../../../../store/reducers/tablet_cell_bundles';\nimport {BundleParam} from '../../../../pages/tablet_cell_bundles/bundles/BundleEditorDialog/components/BundleParamsList/BundleParamsList';\nimport {BundleEditorDialogFormValues} from '../../../../pages/tablet_cell_bundles/bundles/BundleEditorDialog/BundleEditorDialog';\nimport {FormApi} from '../../../../components/Dialog/Dialog';\n\ntype InnerKeys<T> = {[K in keyof T]: Array<keyof T[K]>};\ntype FormKeys = InnerKeys<Required<BundleEditorDialogFormValues>>;\n\nexport const bundleEditorDict: {\n keys: Pick<FormKeys, 'memory_limits' | 'resources' | 'cpu_limits'>;\n defaults: Pick<Required<BundleEditorDialogFormValues>, 'memory_limits' | 'cpu_limits'>;\n} = {\n keys: {\n resources: [\n 'rpc_proxy_count',\n 'rpc_proxy_resource_guarantee',\n 'tablet_node_count',\n 'tablet_node_resource_guarantee',\n ],\n memory_limits: [\n 'reserved',\n 'tablet_static',\n 'tablet_dynamic',\n 'compressed_block_cache',\n 'uncompressed_block_cache',\n 'versioned_chunk_meta',\n 'lookup_row_cache',\n 'key_filter_block_cache',\n ],\n cpu_limits: ['lookup_thread_pool_size', 'query_thread_pool_size', 'write_thread_pool_size'],\n },\n defaults: {\n memory_limits: {\n error: false,\n memory_reset: false,\n tablet_static: 0,\n tablet_dynamic: 0,\n compressed_block_cache: 0,\n uncompressed_block_cache: 0,\n versioned_chunk_meta: 0,\n lookup_row_cache: 0,\n key_filter_block_cache: 0,\n },\n cpu_limits: {\n threadPool_reset: false,\n lookup_thread_pool_size: 0,\n query_thread_pool_size: 0,\n write_thread_pool_size: 0,\n },\n },\n};\n\nexport const getResourceData = (source: object, resourceType: string) => {\n const usage = ypath.getValue(source, `/@resource_usage/${resourceType}`);\n const limit = ypath.getValue(source, `/@resource_limits/${resourceType}`);\n return {\n usage,\n limit,\n };\n};\n\nexport const getInitialFormValues = (\n data: object,\n bundleControllerConfig?: BundleControllerConfig,\n): Partial<BundleEditorDialogFormValues> => {\n const slug = ypath.getValue(data, '/@abc/slug');\n const changelogAccount = ypath.getValue(data, `/@options/changelog_account`);\n const snapshotAccount = ypath.getValue(data, `/@options/snapshot_account`);\n const {limit: tablet_count} = getResourceData(data, 'tablet_count');\n const {limit: tablet_static_memory} = getResourceData(data, 'tablet_static_memory');\n\n if (!bundleControllerConfig) {\n return {\n general: {\n abc: {slug},\n changelog_account: changelogAccount,\n snapshot_account: snapshotAccount,\n },\n resources: {\n tablet_count: tablet_count || 0,\n tablet_static_memory: tablet_static_memory || 0,\n },\n };\n }\n\n const {\n rpc_proxy_count,\n tablet_node_count,\n cpu_limits,\n memory_limits,\n rpc_proxy_resource_guarantee,\n tablet_node_resource_guarantee,\n } = bundleControllerConfig;\n\n return {\n general: {\n abc: {slug},\n changelog_account: changelogAccount,\n snapshot_account: snapshotAccount,\n },\n resources: {\n info: '', // system\n tablet_count: tablet_count || 0,\n rpc_proxy_count: rpc_proxy_count, // todo\n rpc_proxy_resource_guarantee: rpc_proxy_resource_guarantee || undefined,\n tablet_node_count: tablet_node_count,\n tablet_node_resource_guarantee: tablet_node_resource_guarantee || undefined,\n },\n memory_limits: {\n error: false, // system\n memory_reset: false, // system\n reserved: memory_limits?.reserved || 0,\n tablet_static: memory_limits?.tablet_static || 0,\n tablet_dynamic: memory_limits?.tablet_dynamic || 0,\n compressed_block_cache: memory_limits?.compressed_block_cache || 0,\n uncompressed_block_cache: memory_limits?.uncompressed_block_cache || 0,\n versioned_chunk_meta: memory_limits?.versioned_chunk_meta || 0,\n lookup_row_cache: memory_limits?.lookup_row_cache || 0,\n key_filter_block_cache: memory_limits?.key_filter_block_cache || 0,\n },\n cpu_limits: {\n threadPool_reset: false, //system\n lookup_thread_pool_size: cpu_limits?.lookup_thread_pool_size || 0,\n query_thread_pool_size: cpu_limits?.query_thread_pool_size || 0,\n write_thread_pool_size: cpu_limits?.write_thread_pool_size || 0,\n },\n };\n};\n\nfunction formatNetwork(value?: number) {\n const formatted = typeof value !== 'undefined' ? (value / 1000e6).toPrecision(2) : 0;\n return `${formatted} Gbit RX/TX`;\n}\n\nexport const createConfigurationList = (\n data: BundleDefaultConfigData['rpc_proxy_sizes'] | BundleDefaultConfigData['tablet_node_sizes'],\n) => {\n return Object.entries(data).map(([type, itemData]) => {\n const {net, vcpu, memory} = itemData.resource_guarantee;\n return {\n id: type,\n type,\n memory: hammer.format['Bytes'](memory),\n net: formatNetwork(net),\n vcpu: hammer.format['vCores'](vcpu),\n initialData: {...itemData.resource_guarantee, type},\n };\n });\n};\n\nexport const createParams = (formatType: 'Bytes' | 'vCores', total: number, used?: number) => {\n const [totalVal, totalPref] = hammer.format[formatType](total).split(' ');\n const params: BundleParam[] = [{title: 'Total', value: totalVal, postfix: totalPref}];\n\n if (typeof used !== 'undefined') {\n const difference = total - used;\n const [usedVal, usedPref] = hammer.format[formatType](difference).split(' ');\n params.push({\n title: 'Free',\n value: usedVal === hammer.format.NO_VALUE ? '0' : usedVal,\n postfix: usedPref,\n type: difference >= 0 ? 'positive' : 'negative',\n });\n }\n return params;\n};\n\nfunction prepareAbc(value: {id: number; slug: string}) {\n const {id, slug} = value;\n return id && slug ? {id, slug} : undefined;\n}\n\nexport const prepareSubmitBundle = (form: FormApi<BundleEditorDialogFormValues>) => {\n const prepare: {[path: string]: any} = {};\n const {dirtyFields, values} = form.getState();\n\n function addToChange(attr: string, field: string, prepareValue?: Function) {\n if (!dirtyFields[field]) {\n return;\n }\n const value = _.get(values, field);\n prepare[attr] = typeof prepareValue === 'function' ? prepareValue(value) : value;\n }\n\n // Generel\n addToChange('@abc', 'general.abc', prepareAbc);\n addToChange('@options/changelog_account', 'general.changelog_account');\n addToChange('@options/snapshot_account', 'general.snapshot_account');\n // Resources\n addToChange('@resource_limits/tablet_count', 'resources.tablet_count');\n addToChange('@resource_limits/tablet_static_memory', 'resources.tablet_static_memory');\n addToChange('@bundle_controller_target_config/rpc_proxy_count', 'resources.rpc_proxy_count');\n addToChange(\n '@bundle_controller_target_config/tablet_node_count',\n 'resources.tablet_node_count',\n );\n addToChange(\n '@bundle_controller_target_config/rpc_proxy_resource_guarantee',\n 'resources.rpc_proxy_resource_guarantee',\n );\n addToChange(\n '@bundle_controller_target_config/tablet_node_resource_guarantee',\n 'resources.tablet_node_resource_guarantee',\n );\n // Memory_limits\n addToChange(\n '@bundle_controller_target_config/memory_limits/tablet_static',\n 'memory_limits.tablet_static',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/tablet_dynamic',\n 'memory_limits.tablet_dynamic',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/compressed_block_cache',\n 'memory_limits.compressed_block_cache',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/uncompressed_block_cache',\n 'memory_limits.uncompressed_block_cache',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/versioned_chunk_meta',\n 'memory_limits.versioned_chunk_meta',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/lookup_row_cache',\n 'memory_limits.lookup_row_cache',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/key_filter_block_cache',\n 'memory_limits.key_filter_block_cache',\n );\n // Cpu_limits\n addToChange(\n '@bundle_controller_target_config/cpu_limits/lookup_thread_pool_size',\n 'cpu_limits.lookup_thread_pool_size',\n );\n addToChange(\n '@bundle_controller_target_config/cpu_limits/query_thread_pool_size',\n 'cpu_limits.query_thread_pool_size',\n );\n addToChange(\n '@bundle_controller_target_config/cpu_limits/write_thread_pool_size',\n 'cpu_limits.write_thread_pool_size',\n );\n\n return prepare;\n};\n\nexport const simpleBundleValidate = (v?: number | string) => {\n const toNumber = Number(v);\n let error;\n if (!Number.isFinite(toNumber)) {\n error = 'Incorrect value';\n }\n\n if (toNumber < 0) {\n error = 'Must be greater than or equal to zero';\n }\n\n return error;\n};\n\nexport const instanceCountValidate = ({\n length,\n}: BundleDataCenter[]): ((input?: number | string) => string | undefined) => {\n return (input?: number | string): string | undefined => {\n const number = Number(input);\n let error: string | undefined;\n\n if (!Number.isFinite(number)) {\n error = 'Incorrect value';\n } else if (number < 0) {\n error = 'Must be greater than or equal to zero';\n } else if (length > 0 && number % length !== 0) {\n error = `Must be divisible by ${length}`;\n }\n\n return error;\n };\n};\n\nexport function getBundleControllerResource<K extends 'cpu_limits' | 'memory_limits'>(\n current: Partial<Required<BundleEditorDialogFormValues>[K]>,\n defaultValues: Partial<Required<BundleEditorDialogFormValues>[K]>,\n resourceName: K,\n) {\n const result: Partial<BundleEditorDialogFormValues[K]> = {};\n\n for (const key of bundleEditorDict.keys[resourceName]) {\n result[key] = current[key] ?? defaultValues[key];\n }\n\n return result;\n}\n"],"mappings":"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"}
|
@@ -72,6 +72,44 @@ export interface YTCoreConfig {
|
|
72
72
|
* Enables YT-password authentication when defined
|
73
73
|
*/
|
74
74
|
ytAuthCluster?: string;
|
75
|
+
|
76
|
+
/**
|
77
|
+
* OpenID Connect configuration
|
78
|
+
*/
|
79
|
+
ytOAuthSettings?: {
|
80
|
+
/**
|
81
|
+
* URL of the OpenID connect server without the trailing slash
|
82
|
+
*/
|
83
|
+
baseURL: string;
|
84
|
+
/**
|
85
|
+
* Authorization endpoint
|
86
|
+
*/
|
87
|
+
authPath: string;
|
88
|
+
/**
|
89
|
+
* Authorization endpoint
|
90
|
+
*/
|
91
|
+
logoutPath: string;
|
92
|
+
/**
|
93
|
+
* Authorization endpoint
|
94
|
+
*/
|
95
|
+
tokenPath: string;
|
96
|
+
/**
|
97
|
+
* OpenID Client id
|
98
|
+
*/
|
99
|
+
clientId: string;
|
100
|
+
/**
|
101
|
+
* OpenID Client secret
|
102
|
+
*/
|
103
|
+
clientSecret: string;
|
104
|
+
/**
|
105
|
+
* OpenID Scope(Details https://auth0.com/docs/get-started/apis/scopes/openid-connect-scopes)
|
106
|
+
*/
|
107
|
+
scope: string;
|
108
|
+
/**
|
109
|
+
* Label on the Login via OpenID button
|
110
|
+
*/
|
111
|
+
buttonLabel?: string;
|
112
|
+
};
|
75
113
|
/**
|
76
114
|
* Modifies headers of /api/yt/login request:
|
77
115
|
* if enabled removes 'Secure'-option from 'Set-Cookie: YTCypressCookie=...; ...' response-header
|
@@ -1,7 +1,9 @@
|
|
1
1
|
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
2
2
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
3
|
-
import { getInterfaceVersion, isProductionEnv } from '../utils';
|
4
3
|
import { isUserColumnPresetsEnabled } from '../controllers/table-column-preset';
|
4
|
+
import { getInterfaceVersion, isProductionEnv } from '../utils';
|
5
|
+
import { getAuthWay } from '../utils/authorization';
|
6
|
+
import { getOAuthSettings, isOAuthAllowed } from './oauth';
|
5
7
|
export function getLayoutConfig(_x, _x2) {
|
6
8
|
return _getLayoutConfig.apply(this, arguments);
|
7
9
|
}
|
@@ -20,7 +22,8 @@ function _getLayoutConfig() {
|
|
20
22
|
"interface": {
|
21
23
|
version: uiVersion
|
22
24
|
},
|
23
|
-
login: login
|
25
|
+
login: login,
|
26
|
+
authWay: getAuthWay(req)
|
24
27
|
};
|
25
28
|
isProduction = isProductionEnv();
|
26
29
|
res = {
|
@@ -42,6 +45,8 @@ function _getLayoutConfig() {
|
|
42
45
|
uiSettings: uiSettings,
|
43
46
|
metrikaCounterId: metrikaCounter === null || metrikaCounter === void 0 || (_metrikaCounter$ = metrikaCounter[0]) === null || _metrikaCounter$ === void 0 ? void 0 : _metrikaCounter$.id,
|
44
47
|
allowLoginDialog: Boolean(ytAuthCluster),
|
48
|
+
allowOAuth: isOAuthAllowed(req),
|
49
|
+
oauthButtonLabel: isOAuthAllowed(req) ? getOAuthSettings(req).buttonLabel : undefined,
|
45
50
|
allowUserColumnPresets: isUserColumnPresetsEnabled(req),
|
46
51
|
odinPageEnabled: Boolean(odinBaseUrl)
|
47
52
|
},
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["getInterfaceVersion","isProductionEnv","
|
1
|
+
{"version":3,"names":["isUserColumnPresetsEnabled","getInterfaceVersion","isProductionEnv","getAuthWay","getOAuthSettings","isOAuthAllowed","getLayoutConfig","_x","_x2","_getLayoutConfig","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee","req","params","_metrikaCounter$","login","ytConfig","settings","_ref","ytApiUseCORS","uiSettings","metrikaCounter","ytAuthCluster","odinBaseUrl","YT","uiVersion","parameters","isProduction","res","wrap","_callee$","_context","prev","next","ctx","config","version","authWay","bodyContent","root","title","lang","meta","name","content","inlineScripts","concat","JSON","stringify","data","metrikaCounterId","id","allowLoginDialog","Boolean","allowOAuth","oauthButtonLabel","buttonLabel","undefined","allowUserColumnPresets","odinPageEnabled","pluginsOptions","yandexMetrika","counter","layout","abrupt","stop"],"sources":["layout-config.ts"],"sourcesContent":["import type {Request} from 'express';\nimport {YTCoreConfig} from '../../@types/core';\nimport {ConfigData, YTConfig} from '../../shared/yt-types';\nimport {AppLayoutConfig} from '../render-layout';\nimport {isUserColumnPresetsEnabled} from '../controllers/table-column-preset';\nimport {getInterfaceVersion, isProductionEnv} from '../utils';\nimport {getAuthWay} from '../utils/authorization';\nimport {getOAuthSettings, isOAuthAllowed} from './oauth';\n\ninterface Params {\n login?: string;\n uid?: string;\n cluster: string | undefined;\n settings: ConfigData['settings'];\n ytConfig: Partial<YTConfig>;\n}\n\nexport async function getLayoutConfig(req: Request, params: Params): Promise<AppLayoutConfig> {\n const {login, ytConfig, settings} = params;\n const {ytApiUseCORS, uiSettings, metrikaCounter, ytAuthCluster, odinBaseUrl} = req.ctx\n .config as YTCoreConfig;\n const YT = ytConfig;\n const uiVersion = getInterfaceVersion();\n\n const parameters = {\n interface: {\n version: uiVersion,\n },\n login,\n authWay: getAuthWay(req),\n };\n\n const isProduction = isProductionEnv();\n\n const res: AppLayoutConfig = {\n bodyContent: {root: ''},\n title: 'YT',\n lang: 'en',\n meta: [\n {\n name: 'viewport',\n content: 'width=device-width, initial-scale=1.0',\n },\n ],\n inlineScripts: [\n `window.YT = Object.assign(window.YT || {}, ${JSON.stringify(YT)}, ${JSON.stringify({\n parameters,\n })});`,\n `window.YT.environment = window.YT.environment || (${isProduction} ? 'production' : 'development');`,\n ],\n data: {\n settings,\n ytApiUseCORS,\n uiSettings,\n metrikaCounterId: metrikaCounter?.[0]?.id,\n allowLoginDialog: Boolean(ytAuthCluster),\n allowOAuth: isOAuthAllowed(req),\n oauthButtonLabel: isOAuthAllowed(req) ? getOAuthSettings(req).buttonLabel : undefined,\n allowUserColumnPresets: isUserColumnPresetsEnabled(req),\n odinPageEnabled: Boolean(odinBaseUrl),\n },\n pluginsOptions: {\n yandexMetrika: {\n counter: metrikaCounter,\n },\n layout: {\n name: 'main',\n },\n },\n };\n return res;\n}\n"],"mappings":"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"}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
import type { Request, Response } from 'express';
|
2
|
+
export declare function isOAuthAllowed(req: Request): boolean;
|
3
|
+
export declare function getOAuthSettings(req: Request): {
|
4
|
+
baseURL: string;
|
5
|
+
authPath: string;
|
6
|
+
logoutPath: string;
|
7
|
+
tokenPath: string;
|
8
|
+
clientId: string;
|
9
|
+
clientSecret: string;
|
10
|
+
scope: string;
|
11
|
+
buttonLabel?: string | undefined;
|
12
|
+
};
|
13
|
+
export type OAuthAuthorizationTokens = {
|
14
|
+
access_token: string;
|
15
|
+
expires_in: number;
|
16
|
+
refresh_token: string;
|
17
|
+
refresh_expires_in: number;
|
18
|
+
};
|
19
|
+
export declare function isUserOAuthLogged(req: Request): boolean;
|
20
|
+
export declare function getOAuthAccessToken(req: Request, res: Response): Promise<any>;
|
21
|
+
export declare function removeOAuthCookies(res: Response): void;
|
22
|
+
export declare function saveOAuthTokensInCookies(res: Response, tokens: OAuthAuthorizationTokens): void;
|
23
|
+
export declare function getOAuthLoginPath(req: Request): string;
|
24
|
+
export declare function getOAuthLogoutPath(req: Request): string;
|
25
|
+
export declare function refreshOAuthToken(req: Request, token: string): Promise<OAuthAuthorizationTokens>;
|
26
|
+
export declare function exchangeOAuthToken(req: Request, code: string): Promise<OAuthAuthorizationTokens>;
|
@@ -0,0 +1,169 @@
|
|
1
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
2
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
3
|
+
import axios from 'axios';
|
4
|
+
import { YT_OAUTH_ACCESS_TOKEN_NAME, YT_OAUTH_REFRESH_TOKEN_NAME } from '../../shared/constants';
|
5
|
+
export function isOAuthAllowed(req) {
|
6
|
+
var config = req.ctx.config.ytOAuthSettings;
|
7
|
+
return Boolean(config && config.baseURL && config.authPath && config.tokenPath && config.clientId && config.clientSecret);
|
8
|
+
}
|
9
|
+
export function getOAuthSettings(req) {
|
10
|
+
var config = req.ctx.config.ytOAuthSettings;
|
11
|
+
if (!config) {
|
12
|
+
throw new Error('OAuth settings is not specified');
|
13
|
+
}
|
14
|
+
return config;
|
15
|
+
}
|
16
|
+
|
17
|
+
// See https://openid.net/specs/openid-connect-core-1_0.html#rfc.section.3.1.3.3
|
18
|
+
|
19
|
+
export function isUserOAuthLogged(req) {
|
20
|
+
return Boolean(req.cookies[YT_OAUTH_ACCESS_TOKEN_NAME]) || Boolean(req.cookies[YT_OAUTH_REFRESH_TOKEN_NAME]);
|
21
|
+
}
|
22
|
+
export function getOAuthAccessToken(_x, _x2) {
|
23
|
+
return _getOAuthAccessToken.apply(this, arguments);
|
24
|
+
}
|
25
|
+
function _getOAuthAccessToken() {
|
26
|
+
_getOAuthAccessToken = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(req, res) {
|
27
|
+
var tokens;
|
28
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
29
|
+
while (1) switch (_context.prev = _context.next) {
|
30
|
+
case 0:
|
31
|
+
if (!req.cookies[YT_OAUTH_ACCESS_TOKEN_NAME]) {
|
32
|
+
_context.next = 4;
|
33
|
+
break;
|
34
|
+
}
|
35
|
+
return _context.abrupt("return", req.cookies[YT_OAUTH_ACCESS_TOKEN_NAME]);
|
36
|
+
case 4:
|
37
|
+
if (!req.cookies[YT_OAUTH_REFRESH_TOKEN_NAME]) {
|
38
|
+
_context.next = 10;
|
39
|
+
break;
|
40
|
+
}
|
41
|
+
_context.next = 7;
|
42
|
+
return refreshOAuthToken(req, req.cookies[YT_OAUTH_REFRESH_TOKEN_NAME]);
|
43
|
+
case 7:
|
44
|
+
tokens = _context.sent;
|
45
|
+
saveOAuthTokensInCookies(res, tokens);
|
46
|
+
return _context.abrupt("return", tokens.access_token);
|
47
|
+
case 10:
|
48
|
+
return _context.abrupt("return", undefined);
|
49
|
+
case 11:
|
50
|
+
case "end":
|
51
|
+
return _context.stop();
|
52
|
+
}
|
53
|
+
}, _callee);
|
54
|
+
}));
|
55
|
+
return _getOAuthAccessToken.apply(this, arguments);
|
56
|
+
}
|
57
|
+
export function removeOAuthCookies(res) {
|
58
|
+
res.clearCookie(YT_OAUTH_ACCESS_TOKEN_NAME);
|
59
|
+
res.clearCookie(YT_OAUTH_REFRESH_TOKEN_NAME);
|
60
|
+
}
|
61
|
+
export function saveOAuthTokensInCookies(res, tokens) {
|
62
|
+
res.cookie(YT_OAUTH_ACCESS_TOKEN_NAME, tokens.access_token, {
|
63
|
+
maxAge: tokens.expires_in * 1000,
|
64
|
+
httpOnly: true,
|
65
|
+
secure: true
|
66
|
+
});
|
67
|
+
if (tokens.refresh_token) {
|
68
|
+
res.cookie(YT_OAUTH_REFRESH_TOKEN_NAME, tokens.refresh_token, {
|
69
|
+
maxAge: tokens.refresh_expires_in,
|
70
|
+
httpOnly: true,
|
71
|
+
secure: true
|
72
|
+
});
|
73
|
+
}
|
74
|
+
}
|
75
|
+
export function getOAuthLoginPath(req) {
|
76
|
+
var config = getOAuthSettings(req);
|
77
|
+
var host = req.get('host');
|
78
|
+
var params = new URLSearchParams({
|
79
|
+
response_type: 'code',
|
80
|
+
client_id: config.clientId,
|
81
|
+
scope: config.scope,
|
82
|
+
redirect_uri: "https://".concat(host, "/api/oauth/callback")
|
83
|
+
});
|
84
|
+
var url = new URL(config.authPath, config.baseURL);
|
85
|
+
url.search = params.toString();
|
86
|
+
return url.toString();
|
87
|
+
}
|
88
|
+
export function getOAuthLogoutPath(req) {
|
89
|
+
var config = getOAuthSettings(req);
|
90
|
+
var host = req.get('host');
|
91
|
+
var params = new URLSearchParams({
|
92
|
+
post_logout_redirect_uri: "https://".concat(host, "/api/oauth/logout/callback"),
|
93
|
+
client_id: config.clientId
|
94
|
+
});
|
95
|
+
var url = new URL(config.logoutPath, config.baseURL);
|
96
|
+
url.search = params.toString();
|
97
|
+
return url.toString();
|
98
|
+
}
|
99
|
+
export function refreshOAuthToken(_x3, _x4) {
|
100
|
+
return _refreshOAuthToken.apply(this, arguments);
|
101
|
+
}
|
102
|
+
function _refreshOAuthToken() {
|
103
|
+
_refreshOAuthToken = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(req, token) {
|
104
|
+
var config, params, _yield$axios$post, data;
|
105
|
+
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
106
|
+
while (1) switch (_context2.prev = _context2.next) {
|
107
|
+
case 0:
|
108
|
+
config = getOAuthSettings(req);
|
109
|
+
params = new URLSearchParams({
|
110
|
+
grant_type: 'refresh_token',
|
111
|
+
client_id: config === null || config === void 0 ? void 0 : config.clientId,
|
112
|
+
refresh_token: token,
|
113
|
+
client_secret: config === null || config === void 0 ? void 0 : config.clientSecret
|
114
|
+
});
|
115
|
+
_context2.next = 4;
|
116
|
+
return axios.post(new URL(config.tokenPath, config.baseURL).toString(), params.toString(), {
|
117
|
+
headers: {
|
118
|
+
'Content-type': 'application/x-www-form-urlencoded'
|
119
|
+
}
|
120
|
+
});
|
121
|
+
case 4:
|
122
|
+
_yield$axios$post = _context2.sent;
|
123
|
+
data = _yield$axios$post.data;
|
124
|
+
return _context2.abrupt("return", data);
|
125
|
+
case 7:
|
126
|
+
case "end":
|
127
|
+
return _context2.stop();
|
128
|
+
}
|
129
|
+
}, _callee2);
|
130
|
+
}));
|
131
|
+
return _refreshOAuthToken.apply(this, arguments);
|
132
|
+
}
|
133
|
+
export function exchangeOAuthToken(_x5, _x6) {
|
134
|
+
return _exchangeOAuthToken.apply(this, arguments);
|
135
|
+
}
|
136
|
+
function _exchangeOAuthToken() {
|
137
|
+
_exchangeOAuthToken = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(req, code) {
|
138
|
+
var config, host, params, _yield$axios$post2, data;
|
139
|
+
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
|
140
|
+
while (1) switch (_context3.prev = _context3.next) {
|
141
|
+
case 0:
|
142
|
+
config = getOAuthSettings(req);
|
143
|
+
host = req.get('host');
|
144
|
+
params = new URLSearchParams({
|
145
|
+
grant_type: 'authorization_code',
|
146
|
+
client_id: config.clientId,
|
147
|
+
code: code,
|
148
|
+
client_secret: config.clientSecret,
|
149
|
+
redirect_uri: "https://".concat(host, "/api/oauth/callback")
|
150
|
+
});
|
151
|
+
_context3.next = 5;
|
152
|
+
return axios.post(new URL(config.tokenPath, config.baseURL).toString(), params.toString(), {
|
153
|
+
headers: {
|
154
|
+
'Content-type': 'application/x-www-form-urlencoded'
|
155
|
+
}
|
156
|
+
});
|
157
|
+
case 5:
|
158
|
+
_yield$axios$post2 = _context3.sent;
|
159
|
+
data = _yield$axios$post2.data;
|
160
|
+
return _context3.abrupt("return", data);
|
161
|
+
case 8:
|
162
|
+
case "end":
|
163
|
+
return _context3.stop();
|
164
|
+
}
|
165
|
+
}, _callee3);
|
166
|
+
}));
|
167
|
+
return _exchangeOAuthToken.apply(this, arguments);
|
168
|
+
}
|
169
|
+
// #sourceMappingURL=oauth.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["axios","YT_OAUTH_ACCESS_TOKEN_NAME","YT_OAUTH_REFRESH_TOKEN_NAME","isOAuthAllowed","req","config","ctx","ytOAuthSettings","Boolean","baseURL","authPath","tokenPath","clientId","clientSecret","getOAuthSettings","Error","isUserOAuthLogged","cookies","getOAuthAccessToken","_x","_x2","_getOAuthAccessToken","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee","res","tokens","wrap","_callee$","_context","prev","next","abrupt","refreshOAuthToken","sent","saveOAuthTokensInCookies","access_token","undefined","stop","removeOAuthCookies","clearCookie","cookie","maxAge","expires_in","httpOnly","secure","refresh_token","refresh_expires_in","getOAuthLoginPath","host","get","params","URLSearchParams","response_type","client_id","scope","redirect_uri","concat","url","URL","search","toString","getOAuthLogoutPath","post_logout_redirect_uri","logoutPath","_x3","_x4","_refreshOAuthToken","_callee2","token","_yield$axios$post","data","_callee2$","_context2","grant_type","client_secret","post","headers","exchangeOAuthToken","_x5","_x6","_exchangeOAuthToken","_callee3","code","_yield$axios$post2","_callee3$","_context3"],"sources":["oauth.ts"],"sourcesContent":["import axios from 'axios';\nimport type {Request, Response} from 'express';\nimport {YT_OAUTH_ACCESS_TOKEN_NAME, YT_OAUTH_REFRESH_TOKEN_NAME} from '../../shared/constants';\n\nexport function isOAuthAllowed(req: Request) {\n const config = req.ctx.config.ytOAuthSettings;\n return Boolean(\n config &&\n config.baseURL &&\n config.authPath &&\n config.tokenPath &&\n config.clientId &&\n config.clientSecret,\n );\n}\n\nexport function getOAuthSettings(req: Request) {\n const config = req.ctx.config.ytOAuthSettings;\n if (!config) {\n throw new Error('OAuth settings is not specified');\n }\n return config;\n}\n\n// See https://openid.net/specs/openid-connect-core-1_0.html#rfc.section.3.1.3.3\nexport type OAuthAuthorizationTokens = {\n access_token: string;\n expires_in: number;\n refresh_token: string;\n refresh_expires_in: number;\n};\n\nexport function isUserOAuthLogged(req: Request) {\n return (\n Boolean(req.cookies[YT_OAUTH_ACCESS_TOKEN_NAME]) ||\n Boolean(req.cookies[YT_OAUTH_REFRESH_TOKEN_NAME])\n );\n}\n\nexport async function getOAuthAccessToken(req: Request, res: Response) {\n if (req.cookies[YT_OAUTH_ACCESS_TOKEN_NAME]) {\n return req.cookies[YT_OAUTH_ACCESS_TOKEN_NAME];\n } else if (req.cookies[YT_OAUTH_REFRESH_TOKEN_NAME]) {\n const tokens = await refreshOAuthToken(\n req,\n req.cookies[YT_OAUTH_REFRESH_TOKEN_NAME] as string,\n );\n saveOAuthTokensInCookies(res, tokens);\n return tokens.access_token;\n }\n return undefined;\n}\n\nexport function removeOAuthCookies(res: Response) {\n res.clearCookie(YT_OAUTH_ACCESS_TOKEN_NAME);\n res.clearCookie(YT_OAUTH_REFRESH_TOKEN_NAME);\n}\n\nexport function saveOAuthTokensInCookies(res: Response, tokens: OAuthAuthorizationTokens) {\n res.cookie(YT_OAUTH_ACCESS_TOKEN_NAME, tokens.access_token, {\n maxAge: tokens.expires_in * 1000,\n httpOnly: true,\n secure: true,\n });\n\n if (tokens.refresh_token) {\n res.cookie(YT_OAUTH_REFRESH_TOKEN_NAME, tokens.refresh_token, {\n maxAge: tokens.refresh_expires_in,\n httpOnly: true,\n secure: true,\n });\n }\n}\n\nexport function getOAuthLoginPath(req: Request) {\n const config = getOAuthSettings(req);\n const host = req.get('host');\n const params = new URLSearchParams({\n response_type: 'code',\n client_id: config.clientId,\n scope: config.scope,\n redirect_uri: `https://${host}/api/oauth/callback`,\n });\n\n const url = new URL(config.authPath, config.baseURL);\n url.search = params.toString();\n\n return url.toString();\n}\n\nexport function getOAuthLogoutPath(req: Request) {\n const config = getOAuthSettings(req);\n const host = req.get('host');\n const params = new URLSearchParams({\n post_logout_redirect_uri: `https://${host}/api/oauth/logout/callback`,\n client_id: config.clientId,\n });\n\n const url = new URL(config.logoutPath, config.baseURL);\n url.search = params.toString();\n\n return url.toString();\n}\n\nexport async function refreshOAuthToken(\n req: Request,\n token: string,\n): Promise<OAuthAuthorizationTokens> {\n const config = getOAuthSettings(req);\n const params = new URLSearchParams({\n grant_type: 'refresh_token',\n client_id: config?.clientId,\n refresh_token: token,\n client_secret: config?.clientSecret,\n });\n const {data} = await axios.post(\n new URL(config.tokenPath, config.baseURL).toString(),\n params.toString(),\n {\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n },\n },\n );\n return data;\n}\n\nexport async function exchangeOAuthToken(\n req: Request,\n code: string,\n): Promise<OAuthAuthorizationTokens> {\n const config = getOAuthSettings(req);\n const host = req.get('host');\n const params = new URLSearchParams({\n grant_type: 'authorization_code',\n client_id: config.clientId,\n code: code as string,\n client_secret: config.clientSecret,\n redirect_uri: `https://${host}/api/oauth/callback`,\n });\n\n const {data} = await axios.post(\n new URL(config.tokenPath, config.baseURL).toString(),\n params.toString(),\n {\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n },\n },\n );\n return data;\n}\n"],"mappings":"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"}
|
@@ -0,0 +1,6 @@
|
|
1
|
+
import { AppConfig } from '@gravity-ui/nodekit';
|
2
|
+
import type { Response } from 'express';
|
3
|
+
export declare function isYtAuthEnabled(config: AppConfig): boolean;
|
4
|
+
export declare function assertAuthEnabled(ytAuthCluster?: string): asserts ytAuthCluster is string;
|
5
|
+
export declare function getAuthCluster(config: AppConfig): string;
|
6
|
+
export declare function YTAuthLogout(res: Response): void;
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import { YT_CYPRESS_COOKIE_NAME } from '../../shared/constants';
|
2
|
+
export function isYtAuthEnabled(config) {
|
3
|
+
return Boolean(config.ytAuthCluster);
|
4
|
+
}
|
5
|
+
export function assertAuthEnabled(ytAuthCluster) {
|
6
|
+
if (!ytAuthCluster) {
|
7
|
+
throw new Error('Cluster for password authentication is disabled. You have to define ytAuthCluster to use it.');
|
8
|
+
}
|
9
|
+
}
|
10
|
+
export function getAuthCluster(config) {
|
11
|
+
assertAuthEnabled(config.ytAuthCluster);
|
12
|
+
return config.ytAuthCluster;
|
13
|
+
}
|
14
|
+
export function YTAuthLogout(res) {
|
15
|
+
res.setHeader('set-cookie', "".concat(YT_CYPRESS_COOKIE_NAME, "=deleted; Path=/; Max-Age=0;"));
|
16
|
+
}
|
17
|
+
// #sourceMappingURL=yt-auth.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["YT_CYPRESS_COOKIE_NAME","isYtAuthEnabled","config","Boolean","ytAuthCluster","assertAuthEnabled","Error","getAuthCluster","YTAuthLogout","res","setHeader","concat"],"sources":["yt-auth.ts"],"sourcesContent":["import {AppConfig} from '@gravity-ui/nodekit';\nimport type {Response} from 'express';\nimport {YT_CYPRESS_COOKIE_NAME} from '../../shared/constants';\n\nexport function isYtAuthEnabled(config: AppConfig) {\n return Boolean(config.ytAuthCluster);\n}\n\nexport function assertAuthEnabled(ytAuthCluster?: string): asserts ytAuthCluster is string {\n if (!ytAuthCluster) {\n throw new Error(\n 'Cluster for password authentication is disabled. You have to define ytAuthCluster to use it.',\n );\n }\n}\n\nexport function getAuthCluster(config: AppConfig) {\n assertAuthEnabled(config.ytAuthCluster);\n return config.ytAuthCluster;\n}\n\nexport function YTAuthLogout(res: Response) {\n res.setHeader('set-cookie', `${YT_CYPRESS_COOKIE_NAME}=deleted; Path=/; Max-Age=0;`);\n}\n"],"mappings":"AAEA,SAAQA,sBAAsB,QAAO,wBAAwB;AAE7D,OAAO,SAASC,eAAeA,CAACC,MAAiB,EAAE;EAC/C,OAAOC,OAAO,CAACD,MAAM,CAACE,aAAa,CAAC;AACxC;AAEA,OAAO,SAASC,iBAAiBA,CAACD,aAAsB,EAAmC;EACvF,IAAI,CAACA,aAAa,EAAE;IAChB,MAAM,IAAIE,KAAK,CACX,8FACJ,CAAC;EACL;AACJ;AAEA,OAAO,SAASC,cAAcA,CAACL,MAAiB,EAAE;EAC9CG,iBAAiB,CAACH,MAAM,CAACE,aAAa,CAAC;EACvC,OAAOF,MAAM,CAACE,aAAa;AAC/B;AAEA,OAAO,SAASI,YAAYA,CAACC,GAAa,EAAE;EACxCA,GAAG,CAACC,SAAS,CAAC,YAAY,KAAAC,MAAA,CAAKX,sBAAsB,iCAA8B,CAAC;AACxF"}
|
@@ -1,4 +1,3 @@
|
|
1
1
|
import type { Request, Response } from 'express';
|
2
2
|
export declare function handleLogin(req: Request, res: Response): Promise<void>;
|
3
|
-
export declare function handleLogout(req: Request, res: Response): Promise<void>;
|
4
3
|
export declare function handleChangePassword(req: Request, res: Response): Promise<void>;
|