├── .gitignore
├── LICENSE
├── README.md
├── VERSION
├── __init__.py
├── app.yml
├── asgi.py
├── bastion
├── __init__.py
├── admin.py
├── apps.py
├── audit
│ ├── __init__.py
│ └── audit_views.py
├── component
│ ├── __init__.py
│ ├── audit.py
│ ├── batch_operation_component.py
│ ├── common.py
│ ├── core.py
│ ├── credential.py
│ ├── network_proxy.py
│ ├── resource.py
│ ├── strategy.py
│ └── strategy_v2.py
├── constant.py
├── core
│ ├── __init__.py
│ ├── consumers.py
│ ├── guacamole
│ │ ├── __init__.py
│ │ ├── client.py
│ │ ├── component.py
│ │ ├── exceptions.py
│ │ └── instruction.py
│ ├── status_code.py
│ ├── terminal
│ │ ├── __init__.py
│ │ └── component.py
│ └── views.py
├── credential
│ ├── __init__.py
│ └── credential_views.py
├── forms
│ ├── __init__.py
│ ├── batch_form.py
│ ├── core_form.py
│ ├── forms.py
│ ├── network_proxy_form.py
│ ├── strategy_from.py
│ └── strategy_v2_form.py
├── migrations
│ ├── 0001_initial.py
│ ├── 0002_init_script.py
│ ├── 0003_init_command_script.py
│ ├── 0004_init_iam_system.py
│ ├── 0005_init_iam_action.py
│ ├── 0006_init_iam_action_v2.py
│ ├── 0007_init_iam_action_v3.py
│ ├── 0008_auto_20211126_1238.py
│ ├── 0009_init_default_group.py
│ ├── 0010_init_iam_action_v4.py
│ └── __init__.py
├── models.py
├── resource
│ ├── __init__.py
│ ├── batch_views.py
│ ├── network_proxy_views.py
│ └── resource_views.py
├── routing.py
├── strategy
│ ├── __init__.py
│ ├── views.py
│ └── views_v2.py
├── tests.py
├── urls.py
├── utils
│ ├── __init__.py
│ ├── base_model.py
│ ├── base_views.py
│ ├── constants.py
│ ├── create_iam.py
│ ├── data_repair.py
│ ├── decorator.py
│ ├── encryption.py
│ ├── esb_api.py
│ ├── iam.py
│ ├── init_action.py
│ ├── init_action_v2.py
│ ├── init_action_v3.py
│ ├── init_action_v4.py
│ ├── init_command_script.py
│ ├── init_default_group.py
│ ├── init_iam_system.py
│ ├── init_script.py
│ ├── menu_json.py
│ ├── middleware.py
│ └── status_code.py
└── views.py
├── blueapps
├── __init__.py
├── account
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── backends.py
│ ├── components
│ │ ├── __init__.py
│ │ ├── bk_jwt
│ │ │ ├── __init__.py
│ │ │ ├── backends.py
│ │ │ └── middlewares.py
│ │ ├── bk_token
│ │ │ ├── __init__.py
│ │ │ ├── backends.py
│ │ │ ├── forms.py
│ │ │ ├── middlewares.py
│ │ │ └── models.py
│ │ ├── null
│ │ │ └── __init__.py
│ │ └── weixin
│ │ │ ├── __init__.py
│ │ │ ├── backends.py
│ │ │ ├── forms.py
│ │ │ └── middlewares.py
│ ├── conf.py
│ ├── decorators.py
│ ├── forms.py
│ ├── handlers
│ │ ├── __init__.py
│ │ └── response.py
│ ├── middlewares.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_init_superuser.py
│ │ ├── 0003_verifyinfo.py
│ │ └── __init__.py
│ ├── models.py
│ ├── readme.md
│ ├── sites
│ │ ├── __init__.py
│ │ ├── default.py
│ │ └── open
│ │ │ ├── __init__.py
│ │ │ └── conf.py
│ ├── static
│ │ └── account
│ │ │ └── login.js
│ ├── templates
│ │ └── account
│ │ │ ├── login_page.html
│ │ │ └── login_success.html
│ ├── urls.py
│ ├── utils
│ │ ├── __init__.py
│ │ ├── http.py
│ │ └── sms.py
│ └── views.py
├── conf
│ ├── __init__.py
│ ├── database.py
│ ├── default_settings.py
│ ├── environ.py
│ ├── log.py
│ └── sites
│ │ ├── __init__.py
│ │ └── open
│ │ └── __init__.py
├── contrib
│ ├── __init__.py
│ └── bk_commands
│ │ ├── __init__.py
│ │ ├── management
│ │ ├── __init__.py
│ │ ├── commands
│ │ │ ├── __init__.py
│ │ │ ├── init.py
│ │ │ ├── startexample.py
│ │ │ ├── startweixin.py
│ │ │ └── startwxapp.py
│ │ └── templates.py
│ │ └── test.py
├── core
│ ├── __init__.py
│ ├── celery
│ │ ├── __init__.py
│ │ └── celery.py
│ ├── exceptions
│ │ ├── __init__.py
│ │ ├── base.py
│ │ └── middleware.py
│ ├── handler
│ │ ├── __init__.py
│ │ └── wsgi.py
│ ├── sites
│ │ ├── __init__.py
│ │ └── middleware.py
│ └── wsgi.py
├── middleware
│ ├── __init__.py
│ ├── bkui
│ │ ├── __init__.py
│ │ └── middlewares.py
│ ├── request_provider.py
│ └── xss
│ │ ├── __init__.py
│ │ ├── decorators.py
│ │ ├── middlewares.py
│ │ ├── pxfilter.py
│ │ └── utils.py
├── patch
│ ├── __init__.py
│ ├── log.py
│ ├── settings_open_saas.py
│ └── settings_paas_services.py
├── template
│ ├── __init__.py
│ ├── backends
│ │ ├── __init__.py
│ │ └── mako.py
│ └── context_processors.py
└── utils
│ ├── __init__.py
│ ├── esbclient.py
│ ├── logger.py
│ ├── request_provider.py
│ ├── sites
│ ├── __init__.py
│ ├── clouds
│ │ └── __init__.py
│ ├── ieod
│ │ └── __init__.py
│ ├── open
│ │ └── __init__.py
│ ├── qcloud
│ │ └── __init__.py
│ └── tencent
│ │ └── __init__.py
│ └── unique.py
├── blueking
├── __init__.py
├── component
│ ├── README.md
│ ├── __init__.py
│ ├── apis
│ │ ├── __init__.py
│ │ ├── bk_login.py
│ │ ├── bk_paas.py
│ │ ├── cc.py
│ │ ├── cmsi.py
│ │ ├── gse.py
│ │ ├── job.py
│ │ └── sops.py
│ ├── base.py
│ ├── client.py
│ ├── collections.py
│ ├── compat.py
│ ├── conf.py
│ ├── exceptions.py
│ ├── shortcuts.py
│ └── utils.py
└── tests
│ ├── README.md
│ ├── __init__.py
│ ├── test_client.py
│ ├── test_shortcuts.py
│ ├── test_utils.py
│ └── utils
│ ├── __init__.py
│ └── utils.py
├── config
├── __init__.py
├── default.py
├── dev.py
├── prod.py
└── stag.py
├── docker
├── Dockerfile
├── README.md
├── supervisord.conf
└── websocket.ini
├── docs
├── .gitkeep
├── blueking.md
├── develop.md
├── static
│ ├── .gitkeep
│ ├── bastion-deploy.png
│ └── bastion-update.png
└── update.md
├── frontend
├── .browserslistrc
├── .editorconfig
├── .env.development
├── .env.preview
├── .eslintrc.js
├── .gitattributes
├── .gitignore
├── .prettierrc
├── .travis.yml
├── README.md
├── babel.config.js
├── config
│ ├── plugin.config.js
│ └── themePluginConfig.js
├── docs
│ ├── add-page-loading-animate.md
│ ├── load-on-demand.md
│ ├── multi-tabs.md
│ └── webpack-bundle-analyzer.md
├── jest.config.js
├── jsconfig.json
├── package-lock.json
├── package.json
├── postcss.config.js
├── public
│ ├── avatar2.jpg
│ ├── css
│ │ └── asciinema-player.css
│ ├── index.html
│ ├── js
│ │ └── asciinema-player.js
│ ├── loading
│ │ ├── loading.css
│ │ ├── loading.html
│ │ └── option2
│ │ │ ├── html_code_segment.html
│ │ │ ├── loading.css
│ │ │ └── loading.svg
│ └── logo.png
├── run-server.bat
├── src
│ ├── App.vue
│ ├── api
│ │ ├── access-strategy.js
│ │ ├── agent.js
│ │ ├── command-group.js
│ │ ├── command-strategy.js
│ │ ├── command.js
│ │ ├── credential.js
│ │ ├── dataBase.js
│ │ ├── group.js
│ │ ├── home.js
│ │ ├── host-group-console.js
│ │ ├── host.js
│ │ ├── link-check.js
│ │ ├── linuxfile.js
│ │ ├── login.js
│ │ ├── menu.js
│ │ ├── messageManage.js
│ │ ├── navSetting.js
│ │ ├── networkProxy.js
│ │ ├── page-auth.js
│ │ ├── resource-credential.js
│ │ ├── session.js
│ │ ├── user-admin.js
│ │ ├── user-group-admin.js
│ │ ├── user.js
│ │ └── windowsfile.js
│ ├── assets
│ │ ├── background.svg
│ │ ├── home_smile.png
│ │ ├── icons
│ │ │ └── bx-analyse.svg
│ │ ├── image
│ │ │ ├── authorization_expired.png
│ │ │ ├── conversation.png
│ │ │ ├── function_not_authorized.png
│ │ │ ├── not_authorized.png
│ │ │ ├── platform_not_authorized.png
│ │ │ ├── resources.png
│ │ │ ├── strategy.png
│ │ │ └── voucher.png
│ │ ├── left_close.png
│ │ ├── left_open.png
│ │ ├── logo-reverse.png
│ │ ├── logo.png
│ │ ├── logo.svg
│ │ ├── nav.png
│ │ ├── no-auth.png
│ │ ├── ops-logo.png
│ │ ├── remote_host.png
│ │ ├── right_close.png
│ │ └── right_open.png
│ ├── components
│ │ ├── ArticleListContent
│ │ │ ├── ArticleListContent.vue
│ │ │ └── index.js
│ │ ├── AvatarList
│ │ │ ├── Item.jsx
│ │ │ ├── List.jsx
│ │ │ ├── index.js
│ │ │ ├── index.less
│ │ │ └── index.md
│ │ ├── Charts
│ │ │ ├── Bar.vue
│ │ │ ├── ChartCard.vue
│ │ │ ├── Liquid.vue
│ │ │ ├── MiniArea.vue
│ │ │ ├── MiniBar.vue
│ │ │ ├── MiniProgress.vue
│ │ │ ├── MiniSmoothArea.vue
│ │ │ ├── Radar.vue
│ │ │ ├── RankList.vue
│ │ │ ├── TagCloud.vue
│ │ │ ├── TransferBar.vue
│ │ │ ├── Trend.vue
│ │ │ ├── chart.less
│ │ │ └── smooth.area.less
│ │ ├── Dialog.js
│ │ ├── Editor
│ │ │ ├── QuillEditor.vue
│ │ │ └── WangEditor.vue
│ │ ├── Ellipsis
│ │ │ ├── Ellipsis.vue
│ │ │ ├── index.js
│ │ │ └── index.md
│ │ ├── Exception
│ │ │ ├── ExceptionPage.vue
│ │ │ ├── index.js
│ │ │ └── type.js
│ │ ├── FooterToolbar
│ │ │ ├── FooterToolBar.vue
│ │ │ ├── index.js
│ │ │ ├── index.less
│ │ │ └── index.md
│ │ ├── GlobalFooter
│ │ │ └── index.vue
│ │ ├── GlobalHeader
│ │ │ ├── AvatarDropdown.vue
│ │ │ ├── BtnGroup.vue
│ │ │ ├── NavMenu.vue
│ │ │ └── RightContent.vue
│ │ ├── IconSelector
│ │ │ ├── IconSelector.vue
│ │ │ ├── README.md
│ │ │ ├── icons.js
│ │ │ └── index.js
│ │ ├── MultiTab
│ │ │ ├── MultiTab.vue
│ │ │ ├── events.js
│ │ │ ├── index.js
│ │ │ └── index.less
│ │ ├── NProgress
│ │ │ └── nprogress.less
│ │ ├── NoticeIcon
│ │ │ ├── NoticeIcon.vue
│ │ │ └── index.js
│ │ ├── NumberInfo
│ │ │ ├── NumberInfo.vue
│ │ │ ├── index.js
│ │ │ ├── index.less
│ │ │ └── index.md
│ │ ├── PageLoading
│ │ │ └── index.jsx
│ │ ├── Search
│ │ │ ├── GlobalSearch.jsx
│ │ │ └── index.less
│ │ ├── SelectLang
│ │ │ ├── index.jsx
│ │ │ └── index.less
│ │ ├── SelectTime
│ │ │ ├── index.js
│ │ │ └── index.vue
│ │ ├── SettingDrawer
│ │ │ ├── SettingDrawer.vue
│ │ │ ├── SettingItem.vue
│ │ │ ├── index.js
│ │ │ ├── settingConfig.js
│ │ │ └── themeColor.js
│ │ ├── StandardFormRow
│ │ │ ├── StandardFormRow.vue
│ │ │ └── index.js
│ │ ├── Table
│ │ │ ├── README.md
│ │ │ └── index.js
│ │ ├── TagSelect
│ │ │ ├── TagSelectOption.jsx
│ │ │ └── index.jsx
│ │ ├── TextArea
│ │ │ ├── index.jsx
│ │ │ └── style.less
│ │ ├── Tree
│ │ │ └── Tree.jsx
│ │ ├── Trend
│ │ │ ├── Trend.vue
│ │ │ ├── index.js
│ │ │ ├── index.less
│ │ │ └── index.md
│ │ ├── _util
│ │ │ ├── BaseMenu.js
│ │ │ └── util.js
│ │ ├── index.js
│ │ ├── index.less
│ │ ├── searchBox
│ │ │ ├── index.js
│ │ │ └── index.vue
│ │ └── tools
│ │ │ └── TwoStepCaptcha.vue
│ ├── config
│ │ ├── defaultSettings.js
│ │ ├── router.config.js
│ │ └── themeColor.js
│ ├── core
│ │ ├── bootstrap.js
│ │ ├── directives
│ │ │ └── action.js
│ │ ├── icons.js
│ │ ├── lazy_use.js
│ │ └── use.js
│ ├── global.less
│ ├── layouts
│ │ ├── BasicLayout.less
│ │ ├── BasicLayout.vue
│ │ ├── BlankLayout.vue
│ │ ├── PageView.vue
│ │ ├── RouteView.vue
│ │ ├── UserLayout.vue
│ │ └── index.js
│ ├── locales
│ │ ├── index.js
│ │ └── lang
│ │ │ ├── en-US.js
│ │ │ └── zh-CN.js
│ ├── main.js
│ ├── permission.js
│ ├── router
│ │ ├── README.md
│ │ ├── generator-routers.js
│ │ └── index.js
│ ├── store
│ │ ├── app-mixin.js
│ │ ├── device-mixin.js
│ │ ├── getters.js
│ │ ├── i18n-mixin.js
│ │ ├── index.js
│ │ ├── modules
│ │ │ ├── app.js
│ │ │ ├── async-router.js
│ │ │ ├── btnAuth.js
│ │ │ ├── permission.js
│ │ │ └── user.js
│ │ └── mutation-types.js
│ ├── utils
│ │ ├── axios.js
│ │ ├── domUtil.js
│ │ ├── filter.js
│ │ ├── helper
│ │ │ └── permission.js
│ │ ├── pageAuth.js
│ │ ├── permissions.js
│ │ ├── request.js
│ │ ├── routeConvert.js
│ │ ├── screenArr.js
│ │ ├── screenLog.js
│ │ ├── util.js
│ │ ├── utils.less
│ │ └── zmodem_browser.js
│ └── views
│ │ ├── accessPolicy
│ │ ├── commandPolicy
│ │ │ ├── components
│ │ │ │ ├── CommandGroup
│ │ │ │ │ ├── components
│ │ │ │ │ │ └── ControlCommandGroup.vue
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── index.vue
│ │ │ │ ├── CommandList
│ │ │ │ │ ├── components
│ │ │ │ │ │ └── ControlCommand.vue
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── index.vue
│ │ │ │ └── PolicyList
│ │ │ │ │ ├── components
│ │ │ │ │ ├── ControlPolicy.vue
│ │ │ │ │ └── components
│ │ │ │ │ │ ├── Step1
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ └── Step2
│ │ │ │ │ │ ├── components
│ │ │ │ │ │ ├── Command.vue
│ │ │ │ │ │ └── CommandGroup.vue
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── index.vue
│ │ │ │ │ └── policyListInfo
│ │ │ │ │ ├── components
│ │ │ │ │ ├── Command.vue
│ │ │ │ │ └── CommandGroup.vue
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── index.vue
│ │ │ ├── index.js
│ │ │ └── index.vue
│ │ └── visitPolicy
│ │ │ ├── components
│ │ │ ├── ControlVisitPolicy.vue
│ │ │ └── components
│ │ │ │ ├── Step1.vue
│ │ │ │ ├── Step2
│ │ │ │ ├── components
│ │ │ │ │ ├── Group.vue
│ │ │ │ │ └── User.vue
│ │ │ │ ├── index.js
│ │ │ │ └── index.vue
│ │ │ │ └── Step3
│ │ │ │ ├── components
│ │ │ │ ├── PasswordVoucher.vue
│ │ │ │ ├── SSHKey.vue
│ │ │ │ └── VoucherGroup.vue
│ │ │ │ ├── index.js
│ │ │ │ └── index.vue
│ │ │ ├── index.js
│ │ │ ├── index.vue
│ │ │ └── visitPolicyInfo
│ │ │ ├── components
│ │ │ ├── Group.vue
│ │ │ ├── PasswordVoucher.vue
│ │ │ ├── SSHKey.vue
│ │ │ ├── User.vue
│ │ │ └── VoucherGroup.vue
│ │ │ ├── index.js
│ │ │ └── index.vue
│ │ ├── auditManagement
│ │ ├── auditHistory.vue
│ │ ├── components
│ │ │ ├── playerModel.vue
│ │ │ └── windowsPlayer.vue
│ │ ├── historical.vue
│ │ ├── historicalDetails.vue
│ │ ├── online.vue
│ │ └── operationLog.vue
│ │ ├── components
│ │ ├── AuthModal
│ │ │ ├── index.js
│ │ │ └── index.vue
│ │ └── ContentHeader
│ │ │ ├── index.js
│ │ │ └── index.vue
│ │ ├── console
│ │ ├── components
│ │ │ ├── ControlFontSize.vue
│ │ │ ├── FileSend.vue
│ │ │ ├── Linux.vue
│ │ │ ├── TreeNodeChild.vue
│ │ │ └── uploadModal.vue
│ │ ├── console.vue
│ │ ├── remoteLinux.vue
│ │ └── webWindows.vue
│ │ ├── exception
│ │ ├── 403.vue
│ │ ├── 404.vue
│ │ ├── 500.vue
│ │ ├── error.vue
│ │ └── noAuth.vue
│ │ ├── home
│ │ └── home.vue
│ │ ├── resources
│ │ ├── dataBase.vue
│ │ ├── dataBaseDetails.vue
│ │ ├── host.vue
│ │ ├── hostDetails.vue
│ │ └── modal
│ │ │ ├── LoginHostModal.vue
│ │ │ ├── addDataBase.vue
│ │ │ ├── addDataBaseGroup.vue
│ │ │ ├── addFromCmdb.vue
│ │ │ ├── addGroup.vue
│ │ │ ├── addHost.vue
│ │ │ ├── addHostFromCmdb.vue
│ │ │ └── batchAddition.vue
│ │ ├── safe
│ │ ├── authorizationDatabase.vue
│ │ └── authorizationHost.vue
│ │ ├── setting
│ │ ├── networkProxy
│ │ │ ├── model
│ │ │ │ ├── addNetworkProxy.vue
│ │ │ │ ├── relationDataBase.vue
│ │ │ │ └── relationHost.vue
│ │ │ ├── networkProxy.vue
│ │ │ └── networkProxyDetails.vue
│ │ └── userManage
│ │ │ ├── components
│ │ │ ├── Group
│ │ │ │ ├── components
│ │ │ │ │ ├── ControlGroup.vue
│ │ │ │ │ ├── PreviewUser.vue
│ │ │ │ │ └── importUser.vue
│ │ │ │ ├── index.js
│ │ │ │ └── index.vue
│ │ │ └── User
│ │ │ │ ├── components
│ │ │ │ └── ImportUser.vue
│ │ │ │ ├── index.js
│ │ │ │ └── index.vue
│ │ │ ├── index.js
│ │ │ └── index.vue
│ │ └── voucher
│ │ ├── group.vue
│ │ ├── groupDetails.vue
│ │ ├── model
│ │ ├── addGroup.vue
│ │ ├── addPassword.vue
│ │ ├── addSsh.vue
│ │ ├── addvoucher.vue
│ │ └── associatedResources.vue
│ │ ├── password.vue
│ │ ├── passwordDetails.vue
│ │ ├── ssh.vue
│ │ └── sshDetails.vue
├── tests
│ └── unit
│ │ └── .eslintrc.js
├── vue.config.js
└── yarn.lock
├── index
├── __init__.py
├── admin.py
├── apps.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
├── urls.py
└── views.py
├── install
├── add_env_blueking.py
├── auto_add.py
├── bastion-install.sh
├── bastion_esb
│ ├── __init__.py
│ ├── bastion
│ │ ├── __init__.py
│ │ ├── get_cache_token.py
│ │ └── toolkit
│ │ │ ├── __init__.py
│ │ │ ├── configs.py
│ │ │ └── tools.py
│ └── esb_doc
│ │ ├── __init__.py
│ │ └── get_link_token.md
├── build.sh
├── conf
│ ├── settings_production.py.websocket
│ └── settings_production.py.websocket.init
├── init_iam
│ ├── __init__.py
│ ├── init_action.py
│ └── init_iam_system.py
└── install.config.example
├── manage.py
├── opsany-bastion.png
├── package-lock.json
├── requirements.txt
├── runtime.txt
├── settings.py
├── static
├── assets
│ ├── background.5825f033.svg
│ ├── background.a568162c.svg
│ ├── logo.b36f7a7f.svg
│ └── logo.f3103225.svg
├── avatar2.jpg
├── css
│ ├── app.019e6117.css.gz
│ ├── app.1fecc41d.css.gz
│ ├── app.285c40bb.css.gz
│ ├── app.37081288.css.gz
│ ├── app.5d7df5aa.css.gz
│ ├── app.61a78f4d.css.gz
│ ├── app.98ed4a23.css
│ ├── app.98ed4a23.css.gz
│ ├── app.d50e69db.css.gz
│ ├── app.ea92f5a9.css.gz
│ ├── app.ebf33190.css
│ ├── app.ebf33190.css.gz
│ ├── asciinema-player.css
│ ├── asciinema-player.css.gz
│ ├── chunk-011e82c5.77bca524.css
│ ├── chunk-01624106.4b006a95.css
│ ├── chunk-02633ef1.f5f66bb2.css
│ ├── chunk-05fa21f6.adf7a6d6.css
│ ├── chunk-090964d8.d14c2167.css
│ ├── chunk-0b17f900.55242fa7.css
│ ├── chunk-0b207afe.00d9204e.css
│ ├── chunk-0bfd1d3b.8cf73e6f.css.gz
│ ├── chunk-0d9f612a.d3437ec2.css
│ ├── chunk-0e1c3f6c.0c94e852.css
│ ├── chunk-12d51ddd.1ad558e5.css
│ ├── chunk-12ec570e.b953c688.css
│ ├── chunk-1a0b2b5c.a8a68973.css
│ ├── chunk-1a7b3b92.14ebf83b.css
│ ├── chunk-2abf4a79.364510c0.css
│ ├── chunk-2bfdc242.e06f2390.css
│ ├── chunk-2df1b604.f3367566.css
│ ├── chunk-30758dfc.cf2771ec.css
│ ├── chunk-31241ef2.eeaeef32.css
│ ├── chunk-3168254b.f9920608.css
│ ├── chunk-33e99cce.16644974.css
│ ├── chunk-3455b73a.a117a340.css
│ ├── chunk-3888ae3e.eb3eddc0.css
│ ├── chunk-40aea158.9b6183bc.css
│ ├── chunk-430c3000.b4a69e88.css
│ ├── chunk-44658e0c.bf712af1.css
│ ├── chunk-48659421.4142f3e4.css
│ ├── chunk-50dd65dd.738aae87.css
│ ├── chunk-55cec527.8cf73e6f.css.gz
│ ├── chunk-58ec3541.e2fa8469.css
│ ├── chunk-5cc48762.430cebac.css
│ ├── chunk-5cc48762.430cebac.css.gz
│ ├── chunk-60eda19b.5f706984.css
│ ├── chunk-624a048b.ff186017.css
│ ├── chunk-62dd3c96.b3e549d3.css
│ ├── chunk-63f37384.8cf73e6f.css.gz
│ ├── chunk-64bedeae.310d3ae5.css
│ ├── chunk-64c39154.9cb2bf59.css
│ ├── chunk-66929e3b.34313ec6.css
│ ├── chunk-68d3718b.b7557ece.css
│ ├── chunk-6938f9b8.be2db2f8.css
│ ├── chunk-6a65e99e.94417bf8.css
│ ├── chunk-6a709f79.82654e3e.css
│ ├── chunk-6af86718.46a17afc.css
│ ├── chunk-6c510798.99901381.css
│ ├── chunk-6ce6de1e.0a336615.css
│ ├── chunk-73df7949.9de63886.css
│ ├── chunk-740dd5c8.8cf73e6f.css
│ ├── chunk-740dd5c8.8cf73e6f.css.gz
│ ├── chunk-74e0d0a6.504da865.css
│ ├── chunk-78db90a6.846c0066.css
│ ├── chunk-795bb688.6a1e5818.css
│ ├── chunk-7b6ca736.d7babba0.css
│ ├── chunk-7b6dfdbc.cd3459f2.css
│ ├── chunk-7daab5f9.389c1bf0.css
│ ├── chunk-81aa5316.ef463902.css
│ ├── chunk-9585a008.0cd9633e.css
│ ├── chunk-9aefbc4c.d0619e25.css
│ ├── chunk-a2f2d7fa.6d3e7fde.css
│ ├── chunk-c01e793a.385433c7.css
│ ├── chunk-c26aaecc.e7c0d219.css
│ ├── chunk-d5dec398.8cf73e6f.css.gz
│ ├── chunk-d68bb5ce.055f4115.css
│ ├── chunk-e58265d8.8cf73e6f.css.gz
│ ├── chunk-e6df9160.ab8c2474.css
│ ├── chunk-e8f2939e.57b8fff5.css
│ ├── chunk-vendors.995993b1.css.gz
│ ├── chunk-vendors.a7631610.css
│ ├── chunk-vendors.a7631610.css.gz
│ ├── error.135d66d6.css
│ ├── error.1c40ccb7.css
│ ├── fail.b63ee882.css
│ └── fail.fdb673e0.css
├── img
│ ├── authorization_expired.3d95508f.png
│ ├── function_not_authorized.5a8ed9c3.png
│ ├── no-auth.cea6aff4.png
│ ├── not_authorized.7d30926b.png
│ ├── ops-logo.d35433bb.png
│ └── platform_not_authorized.8e05bf34.png
├── index.html
├── js
│ ├── app.03462b4a.js.gz
│ ├── app.0d467df0.js.gz
│ ├── app.0f167e7a.js.gz
│ ├── app.0fb5feb2.js.gz
│ ├── app.0fc4bc66.js.gz
│ ├── app.16090c8f.js.gz
│ ├── app.1de42670.js.gz
│ ├── app.246f93c4.js.gz
│ ├── app.253bc463.js.gz
│ ├── app.27453d83.js.gz
│ ├── app.27fcddae.js.gz
│ ├── app.2b9a7041.js.gz
│ ├── app.326114e0.js.gz
│ ├── app.331e4af2.js.gz
│ ├── app.401a20c7.js.gz
│ ├── app.43babfe2.js.gz
│ ├── app.481b93eb.js.gz
│ ├── app.4c0e6a2e.js.gz
│ ├── app.58e71f87.js.gz
│ ├── app.68563477.js.gz
│ ├── app.6b6e82cc.js.gz
│ ├── app.6e59fdf3.js.gz
│ ├── app.73ee0b83.js.gz
│ ├── app.75eb4fe8.js.gz
│ ├── app.7aa77404.js.gz
│ ├── app.7e774167.js.gz
│ ├── app.7f75ad31.js.gz
│ ├── app.81754102.js.gz
│ ├── app.8ac04f93.js.gz
│ ├── app.8acab021.js.gz
│ ├── app.8c3ba6c4.js.gz
│ ├── app.8cb9d572.js.gz
│ ├── app.8d854b3e.js.gz
│ ├── app.95c43bf2.js.gz
│ ├── app.967ef477.js.gz
│ ├── app.9681f36c.js.gz
│ ├── app.9b3484c4.js.gz
│ ├── app.9e24ea21.js.gz
│ ├── app.9e6c4e21.js.gz
│ ├── app.a317a640.js
│ ├── app.a317a640.js.gz
│ ├── app.a5dbe4b2.js.gz
│ ├── app.a6cc2131.js.gz
│ ├── app.ae2cf56b.js.gz
│ ├── app.b0504c39.js.gz
│ ├── app.b1e02108.js.gz
│ ├── app.b21ed608.js.gz
│ ├── app.b7e0f467.js.gz
│ ├── app.c1ba643f.js.gz
│ ├── app.c5785fb1.js.gz
│ ├── app.ca6215d0.js.gz
│ ├── app.ccba7ea2.js.gz
│ ├── app.d391194e.js.gz
│ ├── app.d7244fd8.js.gz
│ ├── app.d78a8294.js.gz
│ ├── app.d8b1f42f.js.gz
│ ├── app.d949850e.js.gz
│ ├── app.dccb3197.js.gz
│ ├── app.e3d4e8c2.js.gz
│ ├── app.e9d77e87.js.gz
│ ├── app.ee5afbda.js.gz
│ ├── app.efec4820.js.gz
│ ├── app.f071a45a.js
│ ├── app.f071a45a.js.gz
│ ├── app.f2605cf7.js.gz
│ ├── app.f4d970bb.js.gz
│ ├── app.fed4f572.js.gz
│ ├── asciinema-player.js
│ ├── asciinema-player.js.gz
│ ├── chunk-011e82c5.0ad1e9f7.js
│ ├── chunk-011e82c5.0ad1e9f7.js.gz
│ ├── chunk-01624106.f1a6e58c.js
│ ├── chunk-01ec29fd.d6d994cf.js.gz
│ ├── chunk-02633ef1.9ab47fce.js
│ ├── chunk-02633ef1.9ab47fce.js.gz
│ ├── chunk-02633ef1.a680d19e.js
│ ├── chunk-02633ef1.a680d19e.js.gz
│ ├── chunk-02633ef1.b6b8a773.js.gz
│ ├── chunk-0349ce9e.263e07e7.js.gz
│ ├── chunk-0349ce9e.740736b0.js.gz
│ ├── chunk-0349ce9e.ab0d7396.js.gz
│ ├── chunk-0349ce9e.b0660ff1.js.gz
│ ├── chunk-0349ce9e.d18de7f8.js.gz
│ ├── chunk-05fa21f6.743f1a9a.js
│ ├── chunk-05fa21f6.743f1a9a.js.gz
│ ├── chunk-08284dd4.6bd6d639.js.gz
│ ├── chunk-090964d8.4ecbfe5e.js
│ ├── chunk-09484404.2074e4e3.js.gz
│ ├── chunk-0a5aa114.26dbe387.js.gz
│ ├── chunk-0a8658f8.51ac2bd7.js.gz
│ ├── chunk-0b17f900.a4667cf2.js
│ ├── chunk-0b207afe.596ed78f.js
│ ├── chunk-0b207afe.596ed78f.js.gz
│ ├── chunk-0bfd1d3b.47c9ef3d.js.gz
│ ├── chunk-0bfd1d3b.882cff25.js.gz
│ ├── chunk-0bfd1d3b.c5788b02.js.gz
│ ├── chunk-0bfd1d3b.cb727fbc.js.gz
│ ├── chunk-0c5e241d.01c799a2.js.gz
│ ├── chunk-0d9f612a.72255313.js
│ ├── chunk-0e1c3f6c.4f30c59b.js
│ ├── chunk-0edbadb3.5be93e2a.js.gz
│ ├── chunk-0fefdb7c.13ff7107.js.gz
│ ├── chunk-10908d7f.2a59da90.js.gz
│ ├── chunk-10908d7f.f14bcb1c.js.gz
│ ├── chunk-112e279e.8334a83e.js
│ ├── chunk-112e279e.8334a83e.js.gz
│ ├── chunk-12d51ddd.e2df24e3.js
│ ├── chunk-12ec570e.7789408d.js
│ ├── chunk-12ec570e.7789408d.js.gz
│ ├── chunk-13403366.c54f247a.js.gz
│ ├── chunk-14cd8511.1a9140e0.js.gz
│ ├── chunk-14cd8511.51445ad9.js.gz
│ ├── chunk-1a0b2b5c.cf0de628.js
│ ├── chunk-1a7b3b92.2b063395.js
│ ├── chunk-1bb0e80c.aa324237.js.gz
│ ├── chunk-1ce91c43.39951165.js.gz
│ ├── chunk-1ce91c43.d94f8d25.js.gz
│ ├── chunk-1d40cac5.16e4e852.js.gz
│ ├── chunk-1dae0a5d.02b66d32.js.gz
│ ├── chunk-1db14380.cb299650.js.gz
│ ├── chunk-1e119f10.8114f16e.js.gz
│ ├── chunk-1fa0d614.3b68fb0b.js.gz
│ ├── chunk-21311082.ce1360fe.js.gz
│ ├── chunk-2267bdc2.62f2ba1a.js.gz
│ ├── chunk-2431c2b6.a5c9b473.js.gz
│ ├── chunk-2472b8ba.555416f3.js.gz
│ ├── chunk-24a93f69.7f69db2b.js.gz
│ ├── chunk-261a2018.fa89e7b6.js.gz
│ ├── chunk-29dff3bb.b058b9bd.js.gz
│ ├── chunk-2abf4a79.4a9714cb.js
│ ├── chunk-2b185ec5.0c36549c.js.gz
│ ├── chunk-2b185ec5.5d5d42c6.js.gz
│ ├── chunk-2b185ec5.6514cb1c.js.gz
│ ├── chunk-2b1a2474.14f72d40.js
│ ├── chunk-2b1a2474.da73487a.js
│ ├── chunk-2bfdc242.f82bcd90.js
│ ├── chunk-2d209b21.9fd5e548.js.gz
│ ├── chunk-2d20fa8d.9e51d467.js.gz
│ ├── chunk-2da89e80.60b223c7.js.gz
│ ├── chunk-2df1b604.acec3504.js
│ ├── chunk-2df2825a.fdec68c9.js.gz
│ ├── chunk-30758dfc.c3d5d0f3.js
│ ├── chunk-30c8d119.02715029.js.gz
│ ├── chunk-31241ef2.0bf39a37.js
│ ├── chunk-3168254b.fa96f893.js
│ ├── chunk-33e99cce.4d37ad1d.js
│ ├── chunk-344cc402.100a4754.js.gz
│ ├── chunk-344cc402.e18796fc.js.gz
│ ├── chunk-3455b73a.813c7539.js
│ ├── chunk-3455b73a.813c7539.js.gz
│ ├── chunk-347c31d1.5f6a5e30.js.gz
│ ├── chunk-36650146.d7e70752.js
│ ├── chunk-3888ae3e.2301e4ce.js
│ ├── chunk-38a4603b.ca89dcc1.js.gz
│ ├── chunk-3b7b7e50.14cb864e.js.gz
│ ├── chunk-3b8391a7.7ebd6c81.js.gz
│ ├── chunk-3b8391a7.8e572d15.js.gz
│ ├── chunk-3b8391a7.a72a41c3.js.gz
│ ├── chunk-3b8391a7.d95ee1f0.js.gz
│ ├── chunk-40aea158.89446653.js
│ ├── chunk-430c3000.c473120e.js
│ ├── chunk-43d8e85c.69fd1cc1.js.gz
│ ├── chunk-44658e0c.b4b44053.js
│ ├── chunk-48659421.cb0ab8aa.js
│ ├── chunk-49e0a490.944bc1da.js.gz
│ ├── chunk-4c0ecb98.b2a17298.js.gz
│ ├── chunk-50dd65dd.c53939ba.js
│ ├── chunk-51933dcd.39e4838a.js.gz
│ ├── chunk-53fdf1bf.20e79a51.js.gz
│ ├── chunk-55cec527.7f28f3ab.js.gz
│ ├── chunk-58ec3541.60237bc1.js
│ ├── chunk-5a2189bb.02d7f264.js.gz
│ ├── chunk-5c3ae606.ba13e40c.js.gz
│ ├── chunk-5cc48762.211b32b4.js
│ ├── chunk-5cc48762.211b32b4.js.gz
│ ├── chunk-5f7fa5c2.b4c09aee.js.gz
│ ├── chunk-60eda19b.cecee11a.js
│ ├── chunk-60eda19b.cecee11a.js.gz
│ ├── chunk-624a048b.73ce56d5.js
│ ├── chunk-624c336a.1ef61051.js.gz
│ ├── chunk-62dd3c96.57660860.js
│ ├── chunk-63f37384.31d816c5.js.gz
│ ├── chunk-63f37384.3403dc39.js.gz
│ ├── chunk-63f37384.5cae8755.js.gz
│ ├── chunk-64b4540c.7de5ead5.js.gz
│ ├── chunk-64bedeae.4835d608.js
│ ├── chunk-64bedeae.4835d608.js.gz
│ ├── chunk-64c39154.5f43080f.js
│ ├── chunk-64eb4f4c.44109589.js.gz
│ ├── chunk-6679e19e.5ec84af8.js.gz
│ ├── chunk-66929e3b.3c95111f.js
│ ├── chunk-672bcd2c.3f0ae9ae.js.gz
│ ├── chunk-67712dd2.9c43fd4e.js.gz
│ ├── chunk-68ba6051.b27b9632.js.gz
│ ├── chunk-68caa1f1.aa3251f3.js.gz
│ ├── chunk-68d3718b.fc12d2dd.js
│ ├── chunk-6938f9b8.555d5b72.js
│ ├── chunk-699f1385.7aea2788.js.gz
│ ├── chunk-6a65e99e.b2077492.js
│ ├── chunk-6a65e99e.b2077492.js.gz
│ ├── chunk-6a709f79.57afaf81.js
│ ├── chunk-6a709f79.57afaf81.js.gz
│ ├── chunk-6a950ac5.c1267fbf.js.gz
│ ├── chunk-6af86718.827abeb9.js
│ ├── chunk-6c510798.c26d6425.js
│ ├── chunk-6ce6de1e.3bcfe6ba.js
│ ├── chunk-6ef8885f.1d18f32d.js.gz
│ ├── chunk-6f161320.befd821b.js.gz
│ ├── chunk-72eaece6.9147f8a1.js.gz
│ ├── chunk-739ab948.39138336.js.gz
│ ├── chunk-739ab948.7fdb93f5.js.gz
│ ├── chunk-739ab948.f218951e.js.gz
│ ├── chunk-73df7949.c04a2fa6.js
│ ├── chunk-740dd5c8.3728d269.js
│ ├── chunk-740dd5c8.3728d269.js.gz
│ ├── chunk-740dd5c8.397cad7c.js.gz
│ ├── chunk-74e0d0a6.e6edf665.js
│ ├── chunk-7798706e.73e67971.js.gz
│ ├── chunk-788cfa89.52aec264.js.gz
│ ├── chunk-78db90a6.0c535a56.js
│ ├── chunk-795bb688.65c24cd2.js
│ ├── chunk-7b6ca736.794aac47.js
│ ├── chunk-7b6dfdbc.044d6021.js
│ ├── chunk-7c5ee4b6.a34768d1.js.gz
│ ├── chunk-7daab5f9.82d161e4.js
│ ├── chunk-7e8c4e64.6f97e3c2.js.gz
│ ├── chunk-7f7412be.98bf8f7d.js.gz
│ ├── chunk-81aa5316.ed9d79e7.js
│ ├── chunk-8f4c8070.1a1675f3.js.gz
│ ├── chunk-91e4d73e.d3769a81.js.gz
│ ├── chunk-9585a008.0954ee22.js
│ ├── chunk-95d3ed08.7846ba4a.js.gz
│ ├── chunk-95d3ed08.968a16f5.js.gz
│ ├── chunk-9644b8b2.34bf0c85.js.gz
│ ├── chunk-98775768.3e6862d6.js.gz
│ ├── chunk-9aefbc4c.2f358119.js
│ ├── chunk-a2f2d7fa.9a0ca599.js
│ ├── chunk-ad58d1dc.07dc9a4e.js
│ ├── chunk-ad58d1dc.ffe99d59.js
│ ├── chunk-b7db2b34.13597ce2.js.gz
│ ├── chunk-c01e793a.5c710cb8.js
│ ├── chunk-c26aaecc.364d7128.js
│ ├── chunk-c26aaecc.364d7128.js.gz
│ ├── chunk-c54ca3ca.324f30e2.js.gz
│ ├── chunk-c68890a8.97ad7d33.js.gz
│ ├── chunk-d1b3d51c.f2d73cfb.js.gz
│ ├── chunk-d5dec398.15587e1b.js.gz
│ ├── chunk-d5dec398.1819df82.js.gz
│ ├── chunk-d68bb5ce.8a296df4.js
│ ├── chunk-db0e83f0.f115908f.js.gz
│ ├── chunk-dd3d8a14.232c99b5.js.gz
│ ├── chunk-dd3d8a14.48b014fc.js.gz
│ ├── chunk-dd3d8a14.4ab595fc.js.gz
│ ├── chunk-dd3d8a14.6bc45f3a.js.gz
│ ├── chunk-dd3d8a14.be4e896a.js.gz
│ ├── chunk-dd3d8a14.c8617372.js.gz
│ ├── chunk-dff0a482.25abdca6.js.gz
│ ├── chunk-e1da80e8.75564fe6.js.gz
│ ├── chunk-e58265d8.8f39092f.js.gz
│ ├── chunk-e6df9160.40c5ebf9.js
│ ├── chunk-e6df9160.40c5ebf9.js.gz
│ ├── chunk-e8f2939e.6c67c7f2.js
│ ├── chunk-e8f2939e.6c67c7f2.js.gz
│ ├── chunk-ed57deb0.d984dfaf.js.gz
│ ├── chunk-f14de8f8.4fde624c.js.gz
│ ├── chunk-f57c8b94.950823d4.js.gz
│ ├── chunk-f57c8b94.b53250c4.js.gz
│ ├── chunk-f57c8b94.f8757fcb.js.gz
│ ├── chunk-f6b5184c.bc640806.js.gz
│ ├── chunk-fe62f1ae.edfa0eee.js.gz
│ ├── chunk-fe62f1ae.f594444f.js.gz
│ ├── chunk-vendors.05ba0f99.js.gz
│ ├── chunk-vendors.2fabffc9.js.gz
│ ├── chunk-vendors.af9f0a86.js
│ ├── chunk-vendors.af9f0a86.js.gz
│ ├── chunk-vendors.b00c409f.js.gz
│ ├── chunk-vendors.c6aad1c7.js
│ ├── chunk-vendors.c6aad1c7.js.gz
│ ├── chunk-vendors.efdf40cf.js.gz
│ ├── error.6854266d.js
│ ├── error.ddd82941.js
│ ├── fail.2d32b7c2.js
│ ├── fail.8d555f56.js
│ ├── lang-zh-CN.67e0935d.js
│ └── lang-zh-CN.8bc91e27.js
├── loading
│ ├── loading.css
│ ├── loading.html
│ └── option2
│ │ ├── html_code_segment.html
│ │ ├── loading.css
│ │ └── loading.svg
└── logo.png
├── templates
└── index.html
├── urls.py
├── websocket-requirements.txt
└── wsgi.py
/README.md:
--------------------------------------------------------------------------------
1 | # OpsAny开源堡垒机
2 |
3 | opsany-bastion是OpsAny产品系列中首个开源的项目,使用Apache2.0开源协议,兼容腾讯蓝鲸社区版6.x。使用腾讯蓝鲸社区版和企业版用户可以快速通过【生产环境部署】文档进行安装。
4 |
5 | ## 优势
6 |
7 | - 开源:Apache 2.0开源协议,商用无限制。
8 | - 兼容腾讯蓝鲸社区版和企业版,线上快速部署和安装。
9 | - 无插件:仅需浏览器即可使用,推荐使用Google Chrome。
10 | - 持续改进: 每4周一个版本迭代,持续维护。
11 |
12 | ## 系统组成
13 |
14 | - Websocket服务:8004端口,需要独立使用Docker部署一个Websocket服务,用于连接主机和网络设备等。
15 | - Guacd服务:4822端口,需要独立使用Docker部署一个guacd服务,用于连接Windows主机。
16 | - bastion应用: 需要构建一个SaaS的压缩包,然后在蓝鲸开发者中心,Smart应用进行上传部署即可。
17 |
18 | > 注意:蓝鲸6.0自带的Docker无NAT网卡,需要独立的主机部署websocket和guacd服务。
19 |
20 | ## 开发和部署
21 |
22 | - [生产环境部署](docs/blueking.md)
23 | - [生产环境更新](docs/update.md)
24 | - [开发环境部署](docs/develop.md)
25 |
26 | ## 社区支持
27 |
28 | 请访问[OpsAny官方网站](https://www.opsany.com/) 自行寻找入口。
29 |
30 | > 我们推崇熟人社交,我们坚信技术人就应该相互学习,彼此协作。所以最新消息以社区微信群为第一通知渠道。没有找到社区群入口?在官网下载申请后,收到的邮件中有二维码哦。当然也可能是因为缘分还未到,把问题留给时间吧。
31 |
32 |
--------------------------------------------------------------------------------
/VERSION:
--------------------------------------------------------------------------------
1 | 3.1.0.75
2 |
--------------------------------------------------------------------------------
/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/__init__.py
--------------------------------------------------------------------------------
/asgi.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | ASGI entrypoint. Configures Django and then runs the application
4 | defined in the ASGI_APPLICATION setting.
5 | """
6 |
7 | import os
8 | import django
9 | from channels.routing import get_default_application
10 |
11 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
12 | django.setup()
13 | application = get_default_application()
--------------------------------------------------------------------------------
/bastion/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/bastion/__init__.py
--------------------------------------------------------------------------------
/bastion/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 |
3 | # Register your models here.
4 |
--------------------------------------------------------------------------------
/bastion/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class BastionConfig(AppConfig):
5 | name = 'bastion'
6 |
--------------------------------------------------------------------------------
/bastion/audit/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/bastion/audit/__init__.py
--------------------------------------------------------------------------------
/bastion/component/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/bastion/component/__init__.py
--------------------------------------------------------------------------------
/bastion/constant.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/bastion/constant.py
--------------------------------------------------------------------------------
/bastion/core/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/bastion/core/__init__.py
--------------------------------------------------------------------------------
/bastion/core/guacamole/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/bastion/core/guacamole/__init__.py
--------------------------------------------------------------------------------
/bastion/core/guacamole/exceptions.py:
--------------------------------------------------------------------------------
1 | """
2 | The MIT License (MIT)
3 |
4 | Copyright (c) 2014 - 2016 Mohab Usama
5 | """
6 |
7 |
8 | class GuacamoleError(Exception):
9 | def __init__(self, message):
10 | super(GuacamoleError, self).__init__(
11 | 'Guacamole Protocol Error. %s' % message
12 | )
13 |
14 |
15 | class InvalidInstruction(Exception):
16 | def __init__(self, message):
17 | super(InvalidInstruction, self).__init__(
18 | 'Invalid Guacamole Instruction! %s' % message
19 | )
20 |
--------------------------------------------------------------------------------
/bastion/core/terminal/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/bastion/core/terminal/__init__.py
--------------------------------------------------------------------------------
/bastion/credential/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/bastion/credential/__init__.py
--------------------------------------------------------------------------------
/bastion/forms/__init__.py:
--------------------------------------------------------------------------------
1 | def first_error_message(form):
2 | error_data = form.errors.as_data()
3 | error_data_list = list(error_data.items())
4 | error_message = error_data_list[0][1][0].message
5 | message = "{}".format(error_message)
6 | return message
7 |
8 |
--------------------------------------------------------------------------------
/bastion/migrations/0002_init_script.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.6 on 2020-10-09 10:25
2 |
3 | from django.db import migrations
4 | from bastion.utils.init_script import init_default_group
5 |
6 |
7 | def run_init(apps, schema_editor):
8 | pass
9 | # init_default_group()
10 |
11 |
12 | class Migration(migrations.Migration):
13 |
14 | dependencies = [
15 | ('bastion', '0001_initial'),
16 | ]
17 |
18 | operations = [
19 | migrations.RunPython(run_init)
20 | ]
--------------------------------------------------------------------------------
/bastion/migrations/0003_init_command_script.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.6 on 2020-10-09 10:25
2 |
3 | from django.db import migrations
4 |
5 | from bastion.utils.init_command_script import init_command
6 |
7 |
8 | def run_init(apps, schema_editor):
9 | init_command()
10 |
11 |
12 | class Migration(migrations.Migration):
13 |
14 | dependencies = [
15 | ('bastion', '0002_init_script'),
16 | ]
17 |
18 | operations = [
19 | migrations.RunPython(run_init)
20 | ]
--------------------------------------------------------------------------------
/bastion/migrations/0004_init_iam_system.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.6 on 2020-10-09 10:25
2 |
3 | from django.db import migrations
4 |
5 | from bastion.utils.create_iam import init_system_to_iam
6 |
7 |
8 | def run_init(apps, schema_editor):
9 | init_system_to_iam()
10 |
11 |
12 | class Migration(migrations.Migration):
13 |
14 | dependencies = [
15 | ('bastion', '0003_init_command_script'),
16 | ]
17 |
18 | operations = [
19 | migrations.RunPython(run_init)
20 | ]
--------------------------------------------------------------------------------
/bastion/migrations/0005_init_iam_action.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.6 on 2020-10-09 10:25
2 |
3 | from django.db import migrations
4 |
5 | from bastion.utils.init_action import add_action_to_system
6 |
7 |
8 | def run_init(apps, schema_editor):
9 | add_action_to_system()
10 |
11 |
12 | class Migration(migrations.Migration):
13 |
14 | dependencies = [
15 | ('bastion', '0004_init_iam_system'),
16 | ]
17 |
18 | operations = [
19 | migrations.RunPython(run_init)
20 | ]
--------------------------------------------------------------------------------
/bastion/migrations/0006_init_iam_action_v2.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.6 on 2020-10-09 10:25
2 |
3 | from django.db import migrations
4 | from bastion.utils.init_action_v2 import add_action_to_system
5 |
6 |
7 | def run_init(apps, schema_editor):
8 | add_action_to_system()
9 |
10 |
11 | class Migration(migrations.Migration):
12 |
13 | dependencies = [
14 | ('bastion', '0005_init_iam_action'),
15 | ]
16 |
17 | operations = [
18 | migrations.RunPython(run_init)
19 | ]
--------------------------------------------------------------------------------
/bastion/migrations/0007_init_iam_action_v3.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.6 on 2020-10-09 10:25
2 |
3 | from django.db import migrations
4 | from bastion.utils.init_action_v3 import add_action_to_system
5 |
6 |
7 | def run_init(apps, schema_editor):
8 | add_action_to_system()
9 |
10 |
11 | class Migration(migrations.Migration):
12 |
13 | dependencies = [
14 | ('bastion', '0006_init_iam_action_v2'),
15 | ]
16 |
17 | operations = [
18 | migrations.RunPython(run_init)
19 | ]
--------------------------------------------------------------------------------
/bastion/migrations/0009_init_default_group.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.6 on 2020-10-09 10:25
2 |
3 | from django.db import migrations
4 | from bastion.utils.init_default_group import init_default_group
5 |
6 |
7 | def run_init(apps, schema_editor):
8 | init_default_group()
9 |
10 |
11 | class Migration(migrations.Migration):
12 |
13 | dependencies = [
14 | ('bastion', '0008_auto_20211126_1238'),
15 | ]
16 |
17 | operations = [
18 | migrations.RunPython(run_init)
19 | ]
--------------------------------------------------------------------------------
/bastion/migrations/0010_init_iam_action_v4.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.6 on 2020-10-09 10:25
2 |
3 | from django.db import migrations
4 | from bastion.utils.init_action_v4 import add_action_to_system
5 |
6 |
7 | def run_init(apps, schema_editor):
8 | add_action_to_system()
9 |
10 |
11 | class Migration(migrations.Migration):
12 |
13 | dependencies = [
14 | ('bastion', '0009_init_default_group'),
15 | ]
16 |
17 | operations = [
18 | migrations.RunPython(run_init)
19 | ]
--------------------------------------------------------------------------------
/bastion/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/bastion/migrations/__init__.py
--------------------------------------------------------------------------------
/bastion/resource/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/bastion/resource/__init__.py
--------------------------------------------------------------------------------
/bastion/routing.py:
--------------------------------------------------------------------------------
1 | from bastion.core.consumers import WebSSH, GuacamoleWebsocket
2 | from django.urls import re_path
3 |
4 | from channels.auth import AuthMiddlewareStack
5 | from channels.routing import ProtocolTypeRouter, URLRouter
6 |
7 | websocket_urlpatterns = [
8 | re_path(r'^ws/bastion/terminalchannel/$', WebSSH),
9 | re_path(r'^ws/bastion/guacamole/$', GuacamoleWebsocket),
10 | ]
11 | application = ProtocolTypeRouter({
12 | # (http->django views is added by default)
13 | 'websocket': AuthMiddlewareStack(
14 | URLRouter(
15 | websocket_urlpatterns
16 | )
17 | ),
18 | })
--------------------------------------------------------------------------------
/bastion/strategy/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/bastion/strategy/__init__.py
--------------------------------------------------------------------------------
/bastion/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
5 |
--------------------------------------------------------------------------------
/bastion/utils/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/bastion/utils/__init__.py
--------------------------------------------------------------------------------
/bastion/utils/constants.py:
--------------------------------------------------------------------------------
1 | import re
2 |
3 | # 内网正则校验
4 | PRIVATE_IP_PATTERN = re.compile(r'^(127\.0\.0\.1)|(localhost)|(10\.\d{1,3}\.\d{1,3}\.\d{1,3})|(172\.((1[6-9])|(2\d)|(3[01]))\.\d{1,3}\.\d{1,3})|(192\.168\.\d{1,3}\.\d{1,3})$')
5 | # IP正则校验
6 | IP_PATTERN = re.compile(r'((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}')
7 | # 英文正则校验
8 | ENGLISH_PATTERN = re.compile(r'[a-zA-Z]+')
9 |
10 | # Model config
11 | BLOCK_TYPE = [1, 2]
12 | # IP限制类型 1 无 2 黑名单 3 白名单
13 | IP_LIMIT = [1, 2, 3]
14 |
--------------------------------------------------------------------------------
/bastion/utils/init_command_script.py:
--------------------------------------------------------------------------------
1 | from bastion.models import CommandGroupModel, CommandModel, CommandGroupRelationshipModel
2 |
3 |
4 | def init_command():
5 | command_list = ["rm", "reboot", "shutdown", "init", "mkfs", "fdisk", "dd"]
6 | command_group, _ = CommandGroupModel.objects.update_or_create(
7 | name="危险命令",
8 | defaults={
9 | "description": "System default command group: Danger Command"
10 | }
11 | )
12 | for command in command_list:
13 | command_query, _ = CommandModel.objects.update_or_create(
14 | command=command,
15 | defaults={
16 | "block_type": 1
17 | }
18 | )
19 | CommandGroupRelationshipModel.objects.update_or_create(command=command_query, command_group=command_group)
20 |
--------------------------------------------------------------------------------
/bastion/utils/init_script.py:
--------------------------------------------------------------------------------
1 | from bastion.models import HostGroupModel
2 |
3 |
4 | def init_default_group():
5 | dic = {
6 | "id": 1,
7 | "name": "默认分组",
8 | "description": "默认分组",
9 | "create_time": "2008-08-08 10:10:10.888888",
10 | "update_time": "2008-08-08 10:10:10.888888"
11 | }
12 |
13 | obj = HostGroupModel.fetch_all(id=1)
14 | if obj:
15 | obj.update(**dic)
16 | else:
17 | HostGroupModel.create(**dic)
18 |
19 |
--------------------------------------------------------------------------------
/bastion/utils/middleware.py:
--------------------------------------------------------------------------------
1 | from django.utils.deprecation import MiddlewareMixin
2 |
3 |
4 | ENV = {"dev": "", "prod": "o", "stag": "t"}
5 |
6 |
7 | class LocalLoginDebugMiddleware(MiddlewareMixin):
8 | def process_view(self, request, view, arg, kwarg):
9 |
10 | import platform
11 | # print("platform.system()", platform.system())
12 | if (not request.COOKIES.get("bk_token")) and (platform.system() == "Windows"):
13 | request.COOKIES.update(**{"bk_token": "7g42UwSWOJdx-Rxp9N3Vv9zA1BbL6gnu2lmGn1iWX18"})
14 | return None
15 |
--------------------------------------------------------------------------------
/blueapps/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | VERSION = '3.1.0'
3 | __version__ = VERSION
4 |
5 |
6 | RUN_VER = ""
7 |
8 |
9 | def get_run_ver():
10 | from django.conf import settings
11 | try:
12 | return settings.RUN_VER
13 | except AttributeError:
14 | return RUN_VER
15 |
--------------------------------------------------------------------------------
/blueapps/account/apps.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from django.apps import AppConfig
3 | from django.utils.translation import ugettext_lazy as _
4 |
5 |
6 | class AccountConfig(AppConfig):
7 |
8 | name = 'blueapps.account'
9 | verbose_name = _('account')
10 |
--------------------------------------------------------------------------------
/blueapps/account/backends.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from blueapps.account.conf import ConfFixture
3 | from blueapps.account.utils import load_backend
4 |
5 | if hasattr(ConfFixture, 'USER_BACKEND'):
6 | UserBackend = load_backend(ConfFixture.USER_BACKEND)
7 |
8 | if hasattr(ConfFixture, 'WEIXIN_BACKEND'):
9 | WeixinBackend = load_backend(ConfFixture.WEIXIN_BACKEND)
10 |
11 | if hasattr(ConfFixture, 'RIO_BACKEND'):
12 | RioBackend = load_backend(ConfFixture.RIO_BACKEND)
13 |
14 | if hasattr(ConfFixture, 'BK_JWT_BACKEND'):
15 | BkJwtBackend = load_backend(ConfFixture.BK_JWT_BACKEND)
16 |
--------------------------------------------------------------------------------
/blueapps/account/components/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueapps/account/components/__init__.py
--------------------------------------------------------------------------------
/blueapps/account/components/bk_jwt/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueapps/account/components/bk_jwt/__init__.py
--------------------------------------------------------------------------------
/blueapps/account/components/bk_token/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueapps/account/components/bk_token/__init__.py
--------------------------------------------------------------------------------
/blueapps/account/components/bk_token/forms.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from django import forms
3 |
4 |
5 | class AuthenticationForm(forms.Form):
6 | # bk_token format: KH7P4-VSFi_nOEoV3kj0ytcs0uZnGOegIBLV-eM3rw8
7 | bk_token = forms.CharField()
8 |
--------------------------------------------------------------------------------
/blueapps/account/components/bk_token/models.py:
--------------------------------------------------------------------------------
1 | # -*- coding=utf-8 -*-
2 | from blueapps.account.models import (
3 | User as BaseUser,
4 | UserManager as BaseUserManager
5 | )
6 |
7 |
8 | class UserProxyManager(BaseUserManager):
9 | pass
10 |
11 |
12 | class UserProxy(BaseUser):
13 | objects = UserProxyManager()
14 |
15 | class Meta:
16 | proxy = True
17 |
--------------------------------------------------------------------------------
/blueapps/account/components/null/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from django.utils.deprecation import MiddlewareMixin
3 |
4 |
5 | class NullMiddleware(MiddlewareMixin):
6 | pass
7 |
8 |
9 | class NullBackend(object):
10 |
11 | def authenticate(self, **kwargs):
12 | return None
13 |
--------------------------------------------------------------------------------
/blueapps/account/components/weixin/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueapps/account/components/weixin/__init__.py
--------------------------------------------------------------------------------
/blueapps/account/components/weixin/forms.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from django import forms
3 |
4 |
5 | class WeixinAuthenticationForm(forms.Form):
6 |
7 | # code 格式: ...
8 | code = forms.CharField()
9 | state = forms.CharField()
10 |
--------------------------------------------------------------------------------
/blueapps/account/decorators.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from functools import wraps
3 |
4 |
5 | def login_exempt(view_func):
6 | """"Mark a view function as being exempt from login view protection"""
7 | def wrapped_view(*args, **kwargs):
8 | return view_func(*args, **kwargs)
9 | wrapped_view.login_exempt = True
10 | return wraps(view_func)(wrapped_view)
11 |
12 |
13 | def login_exempt_v2(view_func):
14 | """"Mark a view function as being exempt from login view protection"""
15 | def wrapped_view(*args, **kwargs):
16 | return view_func(*args, **kwargs)
17 | wrapped_view.login_exempt_v2 = True
18 | return wraps(view_func)(wrapped_view)
--------------------------------------------------------------------------------
/blueapps/account/forms.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from django import forms
3 |
4 | from blueapps.account.models import User
5 |
6 |
7 | class UserCreationForm(forms.ModelForm):
8 |
9 | class Meta:
10 | model = User
11 | fields = ('username',)
12 |
--------------------------------------------------------------------------------
/blueapps/account/handlers/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueapps/account/handlers/__init__.py
--------------------------------------------------------------------------------
/blueapps/account/migrations/0002_init_superuser.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from django.db import migrations
3 | from django.conf import settings
4 |
5 |
6 | def load_data(apps, schema_editor):
7 | """
8 | 添加用户为管理员
9 | """
10 | User = apps.get_model("account", "User")
11 | for name in settings.INIT_SUPERUSER:
12 | User.objects.update_or_create(
13 | username=name,
14 | defaults={'is_staff': True, 'is_active': True, 'is_superuser': True}
15 | )
16 |
17 |
18 | class Migration(migrations.Migration):
19 | dependencies = [
20 | ('account', '0001_initial')
21 | ]
22 | operations = [
23 | migrations.RunPython(load_data)
24 | ]
25 |
--------------------------------------------------------------------------------
/blueapps/account/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueapps/account/migrations/__init__.py
--------------------------------------------------------------------------------
/blueapps/account/sites/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
--------------------------------------------------------------------------------
/blueapps/account/sites/open/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueapps/account/sites/open/__init__.py
--------------------------------------------------------------------------------
/blueapps/account/urls.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from django.conf.urls import url
3 |
4 | from blueapps.account import views
5 |
6 | app_name = 'account'
7 |
8 | urlpatterns = [
9 | url(r'^login_success/$', views.login_success, name="login_success"),
10 | url(r'^login_page/$', views.login_page, name="login_page"),
11 | url(r'^send_code/$', views.send_code_view, name="send_code"),
12 | url(r'^get_user_info/$', views.get_user_info, name="get_user_info")
13 | ]
14 |
--------------------------------------------------------------------------------
/blueapps/account/utils/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from django.utils.module_loading import import_string
3 |
4 |
5 | def load_backend(backend):
6 | path = 'blueapps.account.components.{backend}'.format(backend=backend)
7 | return import_string(path)
8 |
--------------------------------------------------------------------------------
/blueapps/conf/__init__.py:
--------------------------------------------------------------------------------
1 | """
2 | blueapps.conf
3 | =============
4 | """
5 |
6 |
7 | class BlueSettings(object):
8 |
9 | def __init__(self):
10 | from django.conf import settings as django_settings
11 | from blueapps.conf import default_settings
12 |
13 | self._django_settings = django_settings
14 | self._default_settings = default_settings
15 |
16 | def __getattr__(self, key):
17 | if key == key.upper():
18 | if hasattr(self._django_settings, key):
19 | return getattr(self._django_settings, key)
20 | elif hasattr(self._default_settings, key):
21 | return getattr(self._default_settings, key)
22 |
23 | raise AttributeError("%r object has no attribute %r"
24 | % (self.__class__.__name__, key))
25 |
26 |
27 | settings = BlueSettings()
28 |
--------------------------------------------------------------------------------
/blueapps/conf/sites/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueapps/conf/sites/__init__.py
--------------------------------------------------------------------------------
/blueapps/conf/sites/open/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
--------------------------------------------------------------------------------
/blueapps/contrib/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueapps/contrib/__init__.py
--------------------------------------------------------------------------------
/blueapps/contrib/bk_commands/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | @created: 2017/6/7
4 | @desc:
5 | """
6 | from django.conf import settings
7 | from django.core.management import execute_from_command_line
8 |
9 |
10 | def bk_admin(argv=None):
11 | if not settings.configured:
12 | settings.configure()
13 | settings.INSTALLED_APPS += ("blueapps.contrib.bk_commands",)
14 | return execute_from_command_line(argv)
15 |
--------------------------------------------------------------------------------
/blueapps/contrib/bk_commands/management/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueapps/contrib/bk_commands/management/__init__.py
--------------------------------------------------------------------------------
/blueapps/contrib/bk_commands/management/commands/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueapps/contrib/bk_commands/management/commands/__init__.py
--------------------------------------------------------------------------------
/blueapps/contrib/bk_commands/test.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | @author: 蓝鲸
4 | @created: 2017/6/14
5 | @desc:
6 | """
7 | import sys
8 |
9 | from blueapps.contrib.bk_commands import bk_admin
10 |
11 | bk_admin(sys.argv)
12 |
--------------------------------------------------------------------------------
/blueapps/core/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueapps/core/__init__.py
--------------------------------------------------------------------------------
/blueapps/core/celery/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from blueapps.core.celery.celery import app as celery_app # noqa
3 |
--------------------------------------------------------------------------------
/blueapps/core/exceptions/__init__.py:
--------------------------------------------------------------------------------
1 | from blueapps.core.exceptions.base import * # noqa
2 |
--------------------------------------------------------------------------------
/blueapps/core/handler/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueapps/core/handler/__init__.py
--------------------------------------------------------------------------------
/blueapps/core/handler/wsgi.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from django.core.handlers.wsgi import WSGIHandler
3 | from django.conf import settings
4 |
5 |
6 | class BkWSGIHandler(WSGIHandler):
7 | def __call__(self, environ, start_response):
8 | script_name = environ.get('HTTP_X_SCRIPT_NAME')
9 | if script_name is not None:
10 | if script_name == '/':
11 | # '/'的含义:独立域名,不启用script_name
12 | script_name = ''
13 | environ['SCRIPT_NAME'] = script_name
14 | settings.FORCE_SCRIPT_NAME = settings.SITE_URL = '%s/' % script_name
15 |
16 | # 如果没有独立域名的配置,需要不断的适配,否则可以直接使用
17 | if not settings.STATIC_URL.startswith("http"):
18 | settings.STATIC_URL = '%sstatic/' % settings.SITE_URL
19 | return super(BkWSGIHandler, self).__call__(environ, start_response)
20 |
--------------------------------------------------------------------------------
/blueapps/core/sites/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueapps/core/sites/__init__.py
--------------------------------------------------------------------------------
/blueapps/core/wsgi.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | import django
3 | from blueapps.core.handler.wsgi import BkWSGIHandler
4 |
5 |
6 | def get_wsgi_application():
7 | """
8 | The public interface to Django's WSGI support. Should return a WSGI
9 | callable.
10 |
11 | Allows us to avoid making django.core.handlers.WSGIHandler public API, in
12 | case the internal WSGI implementation changes or moves in the future.
13 | """
14 | django.setup(set_prefix=False)
15 | return BkWSGIHandler()
16 |
--------------------------------------------------------------------------------
/blueapps/middleware/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueapps/middleware/__init__.py
--------------------------------------------------------------------------------
/blueapps/middleware/bkui/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueapps/middleware/bkui/__init__.py
--------------------------------------------------------------------------------
/blueapps/middleware/bkui/middlewares.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | from __future__ import unicode_literals
4 |
5 | from django.urls import resolve
6 | from django.conf import settings
7 |
8 |
9 | class BkuiPageMiddleware(object):
10 |
11 | def __init__(self, get_response):
12 | self.get_response = get_response
13 |
14 | def __call__(self, request):
15 | response = self.get_response(request)
16 |
17 | # 判断是否发生404的问题,及BKUI的
18 | if response.status_code == 404 and settings.IS_BKUI_HISTORY_MODE:
19 | home_view_func = resolve('/')
20 | return home_view_func.func(request)
21 |
22 | return response
23 |
--------------------------------------------------------------------------------
/blueapps/middleware/request_provider.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from blueapps.utils.request_provider import RequestProvider
3 |
4 | __all__ = ["RequestProvider"]
5 |
--------------------------------------------------------------------------------
/blueapps/middleware/xss/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueapps/middleware/xss/__init__.py
--------------------------------------------------------------------------------
/blueapps/patch/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueapps/patch/__init__.py
--------------------------------------------------------------------------------
/blueapps/template/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueapps/template/__init__.py
--------------------------------------------------------------------------------
/blueapps/template/backends/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueapps/template/backends/__init__.py
--------------------------------------------------------------------------------
/blueapps/utils/logger.py:
--------------------------------------------------------------------------------
1 | import logging
2 |
3 | __all__ = ['logger', 'logger_celery']
4 |
5 | logger = logging.getLogger('app')
6 | logger_celery = logging.getLogger('celery')
7 |
--------------------------------------------------------------------------------
/blueapps/utils/sites/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueapps/utils/sites/__init__.py
--------------------------------------------------------------------------------
/blueapps/utils/sites/clouds/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | import logging
3 | from bkoauth import get_access_token_by_user
4 |
5 | from blueapps.account import get_user_model
6 |
7 | logger = logging.getLogger('blueapps')
8 |
9 |
10 | def get_component_client_common_args():
11 | """
12 | 获取ComponentClient需要的common_args
13 | @return:
14 | {
15 | access_token = 'xxx'
16 | }
17 | @rtype: dict
18 | """
19 | try:
20 | last_login_user = \
21 | get_user_model().objects.all().order_by("-last_login")[0]
22 | except IndexError:
23 | logger.exception("There is not a last_login_user")
24 | raise IndexError("There is not a last_login_user")
25 | access_token = get_access_token_by_user(
26 | last_login_user.username).access_token
27 | return dict(access_token=access_token)
28 |
--------------------------------------------------------------------------------
/blueapps/utils/sites/ieod/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | import logging
3 | from bkoauth import get_access_token_by_user
4 | from blueapps.account import get_user_model
5 |
6 | logger = logging.getLogger('blueapps')
7 |
8 |
9 | def get_component_client_common_args():
10 | """
11 | 获取ComponentClient需要的common_args
12 | @return:
13 | {
14 | access_token = 'xxx'
15 | }
16 | @rtype: dict
17 | """
18 | try:
19 | last_login_user = \
20 | get_user_model().objects.all().order_by("-last_login")[0]
21 | except IndexError:
22 | logger.exception("There is not a last_login_user")
23 | raise IndexError("There is not a last_login_user")
24 | access_token = get_access_token_by_user(
25 | last_login_user.username).access_token
26 | return dict(access_token=access_token)
27 |
--------------------------------------------------------------------------------
/blueapps/utils/sites/open/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | import logging
3 | from blueapps.account import get_user_model
4 |
5 | logger = logging.getLogger('blueapps')
6 |
7 |
8 | def get_component_client_common_args():
9 | """
10 | 获取ComponentClient需要的common_args
11 | @return:
12 | {
13 | bk_username = 'xxx'
14 | }
15 | @rtype: dict
16 | """
17 | try:
18 | last_login_user = \
19 | get_user_model().objects.all().order_by("-last_login")[0]
20 | except IndexError:
21 | logger.exception("There is not a last_login_user")
22 | raise IndexError("There is not a last_login_user")
23 | username = last_login_user.username
24 | return dict(bk_username=username)
25 |
--------------------------------------------------------------------------------
/blueapps/utils/sites/qcloud/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | import logging
3 | from bkoauth import get_access_token_by_user
4 | from blueapps.account import get_user_model
5 |
6 | logger = logging.getLogger('blueapps')
7 |
8 |
9 | def get_component_client_common_args():
10 | """
11 | 获取ComponentClient需要的common_args
12 | @return:
13 | {
14 | access_token = 'xxx'
15 | }
16 | @rtype: dict
17 | """
18 | try:
19 | last_login_user = \
20 | get_user_model().objects.all().order_by("-last_login")[0]
21 | except IndexError:
22 | logger.exception("There is not a last_login_user")
23 | raise IndexError("There is not a last_login_user")
24 | access_token = get_access_token_by_user(
25 | last_login_user.username).access_token
26 | return dict(access_token=access_token)
27 |
--------------------------------------------------------------------------------
/blueapps/utils/sites/tencent/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | import logging
3 | from bkoauth import get_access_token_by_user
4 | from blueapps.account import get_user_model
5 |
6 | logger = logging.getLogger('blueapps')
7 |
8 |
9 | def get_component_client_common_args():
10 | """
11 | 获取ComponentClient需要的common_args
12 | @return:
13 | {
14 | access_token = 'xxx'
15 | }
16 | @rtype: dict
17 | """
18 | try:
19 | last_login_user = \
20 | get_user_model().objects.all().order_by("-last_login")[0]
21 | except IndexError:
22 | logger.warn("There is not a last_login_user")
23 | raise IndexError("There is not a last_login_user")
24 | access_token = get_access_token_by_user(
25 | last_login_user.username).access_token
26 | return dict(access_token=access_token)
27 |
--------------------------------------------------------------------------------
/blueapps/utils/unique.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | import uuid
4 |
5 |
6 | def uniqid():
7 | return uuid.uuid3(
8 | uuid.uuid1(),
9 | uuid.uuid4().hex
10 | ).hex
11 |
--------------------------------------------------------------------------------
/blueking/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | __author__ = u"蓝鲸智云"
3 |
--------------------------------------------------------------------------------
/blueking/component/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
--------------------------------------------------------------------------------
/blueking/component/apis/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
--------------------------------------------------------------------------------
/blueking/component/apis/bk_paas.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from ..base import ComponentAPI
3 |
4 |
5 | class CollectionsBkPaas(object):
6 | """Collections of BK_PAAS APIS"""
7 |
8 | def __init__(self, client):
9 | self.client = client
10 |
11 | self.get_app_info = ComponentAPI(
12 | client=self.client, method='GET',
13 | path='/api/c/compapi{bk_api_ver}/bk_paas/get_app_info/',
14 | description=u'获取应用信息'
15 | )
16 |
--------------------------------------------------------------------------------
/blueking/component/collections.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """Collections for component client"""
3 | from .apis.bk_login import CollectionsBkLogin
4 | from .apis.bk_paas import CollectionsBkPaas
5 | from .apis.cc import CollectionsCC
6 | from .apis.cmsi import CollectionsCMSI
7 | from .apis.gse import CollectionsGSE
8 | from .apis.job import CollectionsJOB
9 | from .apis.sops import CollectionsSOPS
10 |
11 |
12 | # Available components
13 | AVAILABLE_COLLECTIONS = {
14 | 'bk_login': CollectionsBkLogin,
15 | 'bk_paas': CollectionsBkPaas,
16 | 'cc': CollectionsCC,
17 | 'cmsi': CollectionsCMSI,
18 | 'gse': CollectionsGSE,
19 | 'job': CollectionsJOB,
20 | 'sops': CollectionsSOPS,
21 | }
22 |
--------------------------------------------------------------------------------
/blueking/component/compat.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | import sys
3 |
4 | _ver = sys.version_info
5 |
6 | is_py2 = (_ver[0] == 2)
7 |
8 | is_py3 = (_ver[0] == 3)
9 |
10 |
11 | if is_py2:
12 | from urlparse import urlparse
13 |
14 | str = unicode
15 |
16 | elif is_py3:
17 | from urllib.parse import urlparse # noqa
18 |
19 | str = str
20 |
--------------------------------------------------------------------------------
/blueking/component/conf.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """Django project settings
3 | """
4 |
5 |
6 | try:
7 | from django.conf import settings
8 |
9 | APP_CODE = settings.APP_ID
10 | SECRET_KEY = settings.APP_TOKEN
11 | COMPONENT_SYSTEM_HOST = getattr(settings, 'BK_PAAS_INNER_HOST', settings.BK_PAAS_HOST)
12 | DEFAULT_BK_API_VER = getattr(settings, 'DEFAULT_BK_API_VER', 'v2')
13 | except Exception:
14 | APP_CODE = ''
15 | SECRET_KEY = ''
16 | COMPONENT_SYSTEM_HOST = ''
17 | DEFAULT_BK_API_VER = 'v2'
18 |
19 | CLIENT_ENABLE_SIGNATURE = False
20 |
--------------------------------------------------------------------------------
/blueking/component/exceptions.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 |
4 | class ComponentBaseException(Exception):
5 | pass
6 |
7 |
8 | class ComponentAPIException(ComponentBaseException):
9 | """Exception for Component API"""
10 |
11 | def __init__(self, api_obj, error_message, resp=None):
12 | self.api_obj = api_obj
13 | self.error_message = error_message
14 | self.resp = resp
15 |
16 | if self.resp is not None:
17 | error_message = '%s, resp=%s' % (error_message, self.resp.text)
18 | super(ComponentAPIException, self).__init__(error_message)
19 |
--------------------------------------------------------------------------------
/blueking/tests/README.md:
--------------------------------------------------------------------------------
1 | # 完善测试数据
2 |
3 | - 更新 blueking/tests/utils/utils.py 中 load_tests_settings 返回的数据为有效值
4 | - 更新 conf/default.py 中 APP_ID、APP_TOKEN、BK_PAAS_HOST 为有效值
5 |
6 | # 执行测试
7 |
8 | ```
9 | python manage.py test --keepdb blueking.tests.test_client
10 | python manage.py test --keepdb blueking.tests.test_shortcuts
11 | python manage.py test --keepdb blueking.tests.test_utils
12 | ```
13 |
--------------------------------------------------------------------------------
/blueking/tests/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueking/tests/__init__.py
--------------------------------------------------------------------------------
/blueking/tests/utils/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/blueking/tests/utils/__init__.py
--------------------------------------------------------------------------------
/blueking/tests/utils/utils.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 |
4 | def get_user_model():
5 | try:
6 | from account.models import BkUser as User
7 | except Exception:
8 | from django.contrib.auth.models import User
9 | return User
10 |
11 |
12 | def load_tests_settings():
13 | return {
14 | 'valid_app': {
15 | 'bk_app_code': '',
16 | 'bk_app_secret': '',
17 | },
18 | 'bk_user': {
19 | 'bk_username': 'admin',
20 | 'bk_token': '',
21 | }
22 | }
23 |
24 |
25 | tests_settings = load_tests_settings()
26 |
--------------------------------------------------------------------------------
/docker/README.md:
--------------------------------------------------------------------------------
1 | # 使用说明
2 |
3 | Websocket镜像和Bastion堡垒机的代码是一致的,只需要删除掉无用的静态文件即可。
4 |
5 | ## 构建镜像
6 |
7 | docker build -t opsany/opsany-paas-websocket:v3.2.8 .
8 |
--------------------------------------------------------------------------------
/docker/websocket.ini:
--------------------------------------------------------------------------------
1 | [program:websocket]
2 | command=uvicorn --proxy-headers --host 0.0.0.0 --port 8004 asgi:application --workers 4
3 | directory=/opt/opsany/websocket
4 | environment=BK_ENV="production",BK_LOG_DIR="/opt/opsany/logs",APP_ID="opsany-bastion"
5 | startsecs=0
6 | stopwaitsecs=0
7 | autostart=true
8 | autorestart=true
9 | redirect_stderr=true
10 | stdout_logfile=/opt/opsany/logs/paas_websocket.log
11 |
--------------------------------------------------------------------------------
/docs/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/docs/.gitkeep
--------------------------------------------------------------------------------
/docs/static/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/docs/static/.gitkeep
--------------------------------------------------------------------------------
/docs/static/bastion-deploy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/docs/static/bastion-deploy.png
--------------------------------------------------------------------------------
/docs/static/bastion-update.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/docs/static/bastion-update.png
--------------------------------------------------------------------------------
/frontend/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not ie <= 10
4 |
--------------------------------------------------------------------------------
/frontend/.editorconfig:
--------------------------------------------------------------------------------
1 | [*]
2 | charset=utf-8
3 | end_of_line=lf
4 | insert_final_newline=false
5 | indent_style=space
6 | indent_size=4
7 |
8 | [{*.ng,*.sht,*.html,*.shtm,*.shtml,*.htm}]
9 | indent_style=space
10 | indent_size=2
11 |
12 | [{*.jhm,*.xslt,*.xul,*.rng,*.xsl,*.xsd,*.ant,*.tld,*.fxml,*.jrxml,*.xml,*.jnlp,*.wsdl}]
13 | indent_style=space
14 | indent_size=2
15 |
16 | [{.babelrc,.stylelintrc,jest.config,.eslintrc,.prettierrc,*.json,*.jsb3,*.jsb2,*.bowerrc}]
17 | indent_style=space
18 | indent_size=2
19 |
20 | [*.svg]
21 | indent_style=space
22 | indent_size=2
23 |
24 | [*.js.map]
25 | indent_style=space
26 | indent_size=2
27 |
28 | [*.less]
29 | indent_style=space
30 | indent_size=2
31 |
32 | [*.vue]
33 | indent_style=space
34 | indent_size=2
35 |
36 | [{.analysis_options,*.yml,*.yaml}]
37 | indent_style=space
38 | indent_size=2
39 |
40 |
--------------------------------------------------------------------------------
/frontend/.env.development:
--------------------------------------------------------------------------------
1 | NODE_ENV=development
2 | VUE_APP_PREVIEW=true
3 | VUE_APP_API_BASE_URL=/api
--------------------------------------------------------------------------------
/frontend/.env.preview:
--------------------------------------------------------------------------------
1 | NODE_ENV=production
2 | VUE_APP_PREVIEW=true
3 | VUE_APP_API_BASE_URL=/api
--------------------------------------------------------------------------------
/frontend/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 |
3 | }
4 |
--------------------------------------------------------------------------------
/frontend/.gitattributes:
--------------------------------------------------------------------------------
1 | public/* linguist-vendored
--------------------------------------------------------------------------------
/frontend/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 | # local env files
6 | .env.local
7 | .env.*.local
8 |
9 | # Log files
10 | npm-debug.log*
11 | yarn-debug.log*
12 | yarn-error.log*
13 |
14 | # Editor directories and files
15 | .idea
16 | .vscode
17 | *.suo
18 | *.ntvs*
19 | *.njsproj
20 | *.sln
21 | *.sw*
22 |
--------------------------------------------------------------------------------
/frontend/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "printWidth": 120,
3 | "semi": false,
4 | "singleQuote": true
5 | }
6 |
--------------------------------------------------------------------------------
/frontend/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - 10.15.0
4 | cache: yarn
5 | script:
6 | - yarn
7 | - yarn run lint --no-fix && yarn run build
8 |
--------------------------------------------------------------------------------
/frontend/babel.config.js:
--------------------------------------------------------------------------------
1 | const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV)
2 |
3 | const plugins = []
4 | if (IS_PROD) {
5 | plugins.push('transform-remove-console')
6 | }
7 |
8 | // lazy load ant-design-vue
9 | // if your use import on Demand, Use this code
10 | plugins.push(['import', {
11 | 'libraryName': 'ant-design-vue',
12 | 'libraryDirectory': 'es',
13 | 'style': true // `style: true` 会加载 less 文件
14 | }])
15 |
16 | module.exports = {
17 | presets: [
18 | '@vue/cli-plugin-babel/preset',
19 | [
20 | '@babel/preset-env',
21 | {
22 | 'useBuiltIns': 'entry',
23 | 'corejs': 3
24 | }
25 | ]
26 | ],
27 | plugins
28 | }
29 |
--------------------------------------------------------------------------------
/frontend/docs/add-page-loading-animate.md:
--------------------------------------------------------------------------------
1 | 为首屏增加 加载动画
2 | ====
3 |
4 |
5 |
6 | ## 需求
7 |
8 | > 为了缓解用户第一次访问时,加载 JS 过大所导致用户等待白屏时间过长导致的用户体验不好,进行的一个优化动效。
9 |
10 |
11 |
12 | ## 实现方案
13 |
14 | 1. 将 动画加载 dom 元素放在 #app 内,Vue 生命周期开始时,会自动清掉 #app 下的所有元素。
15 | 2. 将 动画加载 dom 元素放在 body 下,Vue 生命周期开始时 App.vue (created, mounted) 调用 `@/utils/utll` 下的 removeLoadingAnimate(#id, timeout) 则会移除加载动画
16 |
17 | 最后一步:
18 | 将样式插入到 `public/index.html` 文件的 `
` 最好写成内联 ``
19 |
20 |
21 |
22 | ----
23 |
24 | 目前提供有两个样式,均在 `public/loading` 文件夹内。且 pro 已经默认使用了一套 loading 动画方案,可以直接参考 `public/index.html`
25 |
26 |
27 | ## 写在最后
28 |
29 | 目前 pro 有页面 overflow 显示出浏览器滚动条时,页面会抖动一下的问题。
30 |
31 | 欢迎各位提供能解决的方案和实现 demo。如果在条件允许的情况下,建议请直接使用 pro 进行改造,也欢迎直接 PR 到 pro 的仓库
32 |
--------------------------------------------------------------------------------
/frontend/docs/multi-tabs.md:
--------------------------------------------------------------------------------
1 | 多(页签)标签 模式
2 | ====
3 |
4 |
5 | ## 让框架支持打开的页面增加多标签,可随时切换
6 |
7 | ### 关于如何移除该功能 组件
8 | 1. 移除 `/src/layouts/BasicLayout.vue` L44, L69, L80
9 | ```vue
10 | // L44
11 |
12 |
13 | // L69
14 | import MultiTab from '@/components/MultiTab'
15 |
16 | // L80
17 | MultiTab,
18 | ```
19 | 2. 移除 `/src/config/defaultSettings.js` L25
20 |
21 | 3. 移除 `src/store/modules/app.js` L27, L76-L79, L118-L120
22 |
23 | 4. 移除 `src/utils/mixin.js` L21
24 |
25 | 5. 删除组件目录 `src/components/MultiTab`
26 |
27 | > 以上 `L x` 均代表行N ,如 L3 = 行3
28 |
29 |
--------------------------------------------------------------------------------
/frontend/docs/webpack-bundle-analyzer.md:
--------------------------------------------------------------------------------
1 | 先增加依赖
2 |
3 | ```bash
4 | // npm
5 | $ npm install --save-dev webpack-bundle-analyzer
6 |
7 | // or yarn
8 | $ yarn add webpack-bundle-analyzer -D
9 | ```
10 |
11 | 配置文件 `vue.config.js` 增加 `configureWebpack.plugins` 参数
12 |
13 | ```
14 | const path = require('path')
15 | const webpack = require('webpack')
16 | const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
17 |
18 | function resolve (dir) {
19 | return path.join(__dirname, dir)
20 | }
21 |
22 | // vue.config.js
23 | module.exports = {
24 | configureWebpack: {
25 | plugins: [
26 | // Ignore all locale files of moment.js
27 | new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
28 | // 依赖大小分析工具
29 | new BundleAnalyzerPlugin(),
30 | ]
31 | },
32 |
33 |
34 | ...
35 | }
36 | ```
37 |
38 |
39 |
40 | 启动 `cli` 的 `build` 命令进行项目编译,编译完成时,会自动运行一个 http://localhost:8888 的地址,完整显示了支持库依赖
--------------------------------------------------------------------------------
/frontend/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | moduleFileExtensions: [
3 | 'js',
4 | 'jsx',
5 | 'json',
6 | 'vue'
7 | ],
8 | transform: {
9 | '^.+\\.vue$': 'vue-jest',
10 | '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub',
11 | '^.+\\.jsx?$': 'babel-jest'
12 | },
13 | moduleNameMapper: {
14 | '^@/(.*)$': '/src/$1'
15 | },
16 | snapshotSerializers: [
17 | 'jest-serializer-vue'
18 | ],
19 | testMatch: [
20 | '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'
21 | ],
22 | testURL: 'http://localhost/'
23 | }
24 |
--------------------------------------------------------------------------------
/frontend/jsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es6",
4 | "baseUrl": ".",
5 | "paths": {
6 | "@/*": ["src/*"]
7 | }
8 | },
9 | "exclude": ["node_modules", "dist"],
10 | "include": ["src/**/*"]
11 | }
12 |
--------------------------------------------------------------------------------
/frontend/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | autoprefixer: {}
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/frontend/public/avatar2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/frontend/public/avatar2.jpg
--------------------------------------------------------------------------------
/frontend/public/loading/loading.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/frontend/public/loading/option2/loading.css:
--------------------------------------------------------------------------------
1 | .preloading-animate{background:#ffffff;width:100%;height:100%;position:fixed;left:0;top:0;z-index:299;}.preloading-animate .preloading-wrapper{position:absolute;width:5rem;height:5rem;left:50%;top:50%;transform:translate(-50%,-50%);}.preloading-animate .preloading-wrapper .preloading-balls{font-size:5rem;}
--------------------------------------------------------------------------------
/frontend/public/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/frontend/public/logo.png
--------------------------------------------------------------------------------
/frontend/run-server.bat:
--------------------------------------------------------------------------------
1 | npm run serve
--------------------------------------------------------------------------------
/frontend/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
35 |
--------------------------------------------------------------------------------
/frontend/src/api/access-strategy.js:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 | const url = 'access-strategy-v2/' //访问策略
3 | export const getAccessStrategy = (data = {}) => {
4 | return request({
5 | url,
6 | method: "get",
7 | params: data
8 | })
9 | }
10 | export const addAccessStrategy = (data = {}) => {
11 | return request({
12 | url,
13 | method: "post",
14 | data
15 | })
16 | }
17 | export const editAccessStrategy = (data = {}) => {
18 | return request({
19 | url,
20 | method: "put",
21 | data
22 | })
23 | }
24 | export const delAccessStrategy = (data = {}) => {
25 | return request({
26 | url,
27 | method: "delete",
28 | data
29 | })
30 | }
31 |
32 | export const editAccessStrategyStatus = (data = {}) => {
33 | return request({
34 | url: 'strategy-status/',
35 | method: "put",
36 | data
37 | })
38 | }
--------------------------------------------------------------------------------
/frontend/src/api/agent.js:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 |
3 | // 从cmdb获取主机数据
4 | export const getAgent = (data = {}) => {
5 | return request({
6 | url: "get-agent/",
7 | method: "get",
8 | params: data
9 | })
10 | }
--------------------------------------------------------------------------------
/frontend/src/api/command-group.js:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 | const url = 'command-group/' //命令组
3 | export const getCommandGroup = (data = {}) => {
4 | return request({
5 | url,
6 | method: "get",
7 | params: data
8 | })
9 | }
10 | export const addCommandGroup = (data = {}) => {
11 | return request({
12 | url,
13 | method: "post",
14 | data
15 | })
16 | }
17 | export const editCommandGroup = (data = {}) => {
18 | return request({
19 | url,
20 | method: "put",
21 | data
22 | })
23 | }
24 | export const delCommandGroup = (data = {}) => {
25 | return request({
26 | url,
27 | method: "delete",
28 | data
29 | })
30 | }
31 |
--------------------------------------------------------------------------------
/frontend/src/api/command-strategy.js:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 | const url = 'command-strategy-v2/' //访问策略
3 | export const getCommandStrategy = (data = {}) => {
4 | return request({
5 | url,
6 | method: "get",
7 | params: data
8 | })
9 | }
10 | export const addCommandStrategy = (data = {}) => {
11 | return request({
12 | url,
13 | method: "post",
14 | data
15 | })
16 | }
17 | export const editCommandStrategy = (data = {}) => {
18 | return request({
19 | url,
20 | method: "put",
21 | data
22 | })
23 | }
24 | export const delCommandStrategy = (data = {}) => {
25 | return request({
26 | url,
27 | method: "delete",
28 | data
29 | })
30 | }
31 |
--------------------------------------------------------------------------------
/frontend/src/api/command.js:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 | const url = 'command/' //命令
3 | export const getCommand = (data = {}) => {
4 | return request({
5 | url,
6 | method: "get",
7 | params: data
8 | })
9 | }
10 | export const addCommand = (data = {}) => {
11 | return request({
12 | url,
13 | method: "post",
14 | data
15 | })
16 | }
17 | export const editCommand = (data = {}) => {
18 | return request({
19 | url,
20 | method: "put",
21 | data
22 | })
23 | }
24 | export const delCommand = (data = {}) => {
25 | return request({
26 | url,
27 | method: "delete",
28 | data
29 | })
30 | }
31 |
--------------------------------------------------------------------------------
/frontend/src/api/credential.js:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 | // 获取凭证数据
3 | export const getCredential = (data = {}) => {
4 | return request({
5 | url: "credential/",
6 | method: "get",
7 | params: data
8 | })
9 | }
10 | // 新建凭证
11 | export const addCredential = (data = {}) => {
12 | return request({
13 | url: "credential/",
14 | method: "post",
15 | data
16 | })
17 | }
18 | // 修改凭证
19 | export const editCredential = (data = {}) => {
20 | return request({
21 | url: "credential/",
22 | method: "put",
23 | data
24 | })
25 | }
26 | // 删除凭证
27 | export const delCredential = (data = {}) => {
28 | return request({
29 | url: "credential/",
30 | method: "delete",
31 | data
32 | })
33 | }
--------------------------------------------------------------------------------
/frontend/src/api/home.js:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 | // 获取凭证数据
3 | export const getHome = (data = {}) => {
4 | return request({
5 | url: "home-page/",
6 | method: "get",
7 | params: data
8 | })
9 | }
--------------------------------------------------------------------------------
/frontend/src/api/host-group-console.js:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 |
3 | // 获取主机列表(树类型)
4 | export const getHostGroupList = (data = {}) => {
5 | return request({
6 | url: "host-group-console/",
7 | method: "get",
8 | params: data
9 | })
10 | }
11 |
12 |
--------------------------------------------------------------------------------
/frontend/src/api/link-check.js:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 |
3 | // 获取凭证数据
4 | export const linkCheck = (data = {}) => {
5 | return request({
6 | url: "link-check-v2/",
7 | method: "post",
8 | data
9 | })
10 | }
11 |
12 | // 获取凭证数据
13 | export const getLinkCheck = (data = {}) => {
14 | return request({
15 | url: "link-check-v2/",
16 | method: "get",
17 | params: data
18 | })
19 | }
20 |
--------------------------------------------------------------------------------
/frontend/src/api/linuxfile.js:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 | import config from '@/config/defaultSettings'
3 | import { stringifyUrl } from '@/utils/util'
4 | const url = 'linux-file/'
5 | export const getLinuxFileInfo = (data = {}) => {
6 | return request({
7 | url,
8 | method: "get",
9 | params: data
10 | })
11 | }
12 | export const downLoadFile = (data = {}) => {
13 | return config.baseUrl + url + stringifyUrl(data)
14 | }
15 | export const uploadLinuxFile = (data = {}) => {
16 | return request({
17 | url,
18 | method: "post",
19 | data
20 | })
21 | }
22 | export const delLinuxFile = (data = {}) => {
23 | return request({
24 | url,
25 | method: "delete",
26 | data
27 | })
28 | }
29 |
--------------------------------------------------------------------------------
/frontend/src/api/menu.js:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 |
3 | /**
4 | * @deprecated 获取菜单列表
5 | * @param {data} Object
6 | * @returns Promise
7 | */
8 |
9 | export const getMenuList = (data = {}) => {
10 | return request({
11 | url: "get-menu/",
12 | method: "get",
13 | params: data
14 | })
15 | }
--------------------------------------------------------------------------------
/frontend/src/api/messageManage.js:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request';
2 |
3 |
4 | /**
5 | * @deprecated 消息管理
6 | * @param {data} Object
7 | * @returns Promise
8 | */
9 |
10 | //获取消息列表 --头部导航
11 | export const getUserMessageList = (data = {}) => {
12 | return request({
13 | url: "get-user-message/",
14 | method: "get",
15 | params: data
16 | })
17 | }
18 |
19 | //全部已读
20 | export const readAllMessage = (data = {}) => {
21 | return request({
22 | url: "read-all-message/",
23 | method: "get",
24 | params: data
25 | })
26 | }
27 |
--------------------------------------------------------------------------------
/frontend/src/api/navSetting.js:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request';
2 |
3 | /**
4 | * @deprecated 获取收藏的导航
5 | * @param {data} Object
6 | * @returns Promise
7 | */
8 | export const getNavList = (data = {}) => {
9 | return request({
10 | url: "get-nav-and-collection/",
11 | method: "get",
12 | params: data
13 | })
14 | }
15 |
16 |
17 | /**
18 | * @deprecated 收藏/取消收藏
19 | * @param {data} Object
20 | * @returns Promise
21 | */
22 | //上传图标
23 | export const collection = (data = {}) => {
24 | return request({
25 | url: "collection/",
26 | method: "post",
27 | data
28 | })
29 | }
30 |
--------------------------------------------------------------------------------
/frontend/src/api/page-auth.js:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request';
2 |
3 | export const getPageAuth = (data = {}) => {
4 | return request({
5 | url: "authentication/",
6 | method: "get",
7 | params: data
8 | })
9 | }
10 |
--------------------------------------------------------------------------------
/frontend/src/api/resource-credential.js:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 | // 获取凭证数据 --新版
3 | // GET获取资源凭证
4 | // ?data_type=ssh
5 | // ?data_type=password
6 | // ?data_type=group
7 | // ?data_type=host&host_id=
8 | export const getResourceCredential = (data = {}) => {
9 | return request({
10 | url: "resource-credential/",
11 | method: "get",
12 | params: data
13 | })
14 | }
15 |
--------------------------------------------------------------------------------
/frontend/src/api/user-admin.js:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request';
2 | const url = 'bk-user-admin/'
3 |
4 | //获取用户列表
5 | export const getUserAdmin = (data = {}) => {
6 | return request({
7 | url,
8 | method: "get",
9 | params: data
10 | })
11 | }
12 |
13 | //删除某个用户
14 | export const delUserAdmin = (data = {}) => {
15 | return request({
16 | url,
17 | method: "delete",
18 | data
19 | })
20 | }
21 |
22 | //导入用户
23 | export const addUserAdmin = (data = {}) => {
24 | return request({
25 | url,
26 | method: "post",
27 | data
28 | })
29 | }
30 |
31 |
--------------------------------------------------------------------------------
/frontend/src/api/user-group-admin.js:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request';
2 | const url = 'bk-user-group-admin/'
3 |
4 | //获取用户组列表
5 | export const getUserGroupAdmin = (data = {}) => {
6 | return request({
7 | url,
8 | method: "get",
9 | params: data
10 | })
11 | }
12 |
13 | //删除某个用户组
14 | export const delUserGroupAdmin = (data = {}) => {
15 | return request({
16 | url,
17 | method: "delete",
18 | data
19 | })
20 | }
21 |
22 | //新增用户组
23 | export const addUserGroupAdmin = (data = {}) => {
24 | return request({
25 | url,
26 | method: "post",
27 | data
28 | })
29 | }
30 |
31 | //编辑用户组
32 | export const editUserGroupAdmin = (data = {}) => {
33 | return request({
34 | url,
35 | method: "put",
36 | data
37 | })
38 | }
39 |
40 |
--------------------------------------------------------------------------------
/frontend/src/api/user.js:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request';
2 |
3 | /**
4 | * @deprecated 用户信息相关
5 | * @param {data} Object
6 | * @returns Promise
7 | */
8 | //获取用户信息
9 | export const getUserInfo = (data = {}) => {
10 | return request({
11 | url: "user-info/",
12 | method: "get",
13 | params: data
14 | })
15 | }
16 |
17 |
18 | /**
19 | * @deprecated 上传头像
20 | * @param {data} Object
21 | * @returns Promise
22 | */
23 | //上传图标
24 | export const uploadHeadImg = (data = {}) => {
25 | return request({
26 | url: "user-icon/",
27 | method: "post",
28 | data
29 | })
30 | }
31 |
32 | //获取所有用户列表
33 | export const getUserList = (data = {}) => {
34 | return request({
35 | url: "user/",
36 | method: "get",
37 | params: data
38 | })
39 | }
40 |
41 | //获取所有用户组列表
42 | export const getUserGroupList = (data = {}) => {
43 | return request({
44 | url: "group/",
45 | method: "get",
46 | params: data
47 | })
48 | }
49 |
--------------------------------------------------------------------------------
/frontend/src/api/windowsfile.js:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 | import config from '@/config/defaultSettings'
3 | import { stringifyUrl } from '@/utils/util'
4 | const url = 'windows-file/'
5 | export const getWinFileInfo = (data = {}) => {
6 | return request({
7 | url,
8 | method: "get",
9 | params: data
10 | })
11 | }
12 | export const downLoadWinFile = (data = {}) => {
13 | return config.baseUrl + url + stringifyUrl(data)
14 | }
15 | export const uploadWinFile = (data = {}) => {
16 | return request({
17 | url,
18 | method: "post",
19 | data
20 | })
21 | }
22 | export const delWinFile = (data = {}) => {
23 | return request({
24 | url,
25 | method: "delete",
26 | data
27 | })
28 | }
29 |
--------------------------------------------------------------------------------
/frontend/src/assets/home_smile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/frontend/src/assets/home_smile.png
--------------------------------------------------------------------------------
/frontend/src/assets/image/authorization_expired.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/frontend/src/assets/image/authorization_expired.png
--------------------------------------------------------------------------------
/frontend/src/assets/image/conversation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/frontend/src/assets/image/conversation.png
--------------------------------------------------------------------------------
/frontend/src/assets/image/function_not_authorized.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/frontend/src/assets/image/function_not_authorized.png
--------------------------------------------------------------------------------
/frontend/src/assets/image/not_authorized.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/frontend/src/assets/image/not_authorized.png
--------------------------------------------------------------------------------
/frontend/src/assets/image/platform_not_authorized.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/frontend/src/assets/image/platform_not_authorized.png
--------------------------------------------------------------------------------
/frontend/src/assets/image/resources.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/frontend/src/assets/image/resources.png
--------------------------------------------------------------------------------
/frontend/src/assets/image/strategy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/frontend/src/assets/image/strategy.png
--------------------------------------------------------------------------------
/frontend/src/assets/image/voucher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/frontend/src/assets/image/voucher.png
--------------------------------------------------------------------------------
/frontend/src/assets/left_close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/frontend/src/assets/left_close.png
--------------------------------------------------------------------------------
/frontend/src/assets/left_open.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/frontend/src/assets/left_open.png
--------------------------------------------------------------------------------
/frontend/src/assets/logo-reverse.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/frontend/src/assets/logo-reverse.png
--------------------------------------------------------------------------------
/frontend/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/frontend/src/assets/logo.png
--------------------------------------------------------------------------------
/frontend/src/assets/nav.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/frontend/src/assets/nav.png
--------------------------------------------------------------------------------
/frontend/src/assets/no-auth.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/frontend/src/assets/no-auth.png
--------------------------------------------------------------------------------
/frontend/src/assets/ops-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/frontend/src/assets/ops-logo.png
--------------------------------------------------------------------------------
/frontend/src/assets/remote_host.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/frontend/src/assets/remote_host.png
--------------------------------------------------------------------------------
/frontend/src/assets/right_close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/frontend/src/assets/right_close.png
--------------------------------------------------------------------------------
/frontend/src/assets/right_open.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/frontend/src/assets/right_open.png
--------------------------------------------------------------------------------
/frontend/src/components/ArticleListContent/index.js:
--------------------------------------------------------------------------------
1 | import ArticleListContent from './ArticleListContent'
2 |
3 | export default ArticleListContent
4 |
--------------------------------------------------------------------------------
/frontend/src/components/AvatarList/Item.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'ant-design-vue/es/_util/vue-types'
2 | import { Tooltip, Avatar } from 'ant-design-vue'
3 | import { getSlotOptions } from 'ant-design-vue/lib/_util/props-util'
4 | import { warning } from 'ant-design-vue/lib/vc-util/warning'
5 |
6 | export const AvatarListItemProps = {
7 | tips: PropTypes.string.def(null),
8 | src: PropTypes.string.def('')
9 | }
10 |
11 | const Item = {
12 | __ANT_AVATAR_CHILDREN: true,
13 | name: 'AvatarListItem',
14 | props: AvatarListItemProps,
15 | created () {
16 | warning(getSlotOptions(this.$parent).__ANT_AVATAR_LIST, 'AvatarListItem must be a subcomponent of AvatarList')
17 | },
18 | render () {
19 | const AvatarDom =
20 | return this.tips && {AvatarDom} ||
21 | }
22 | }
23 |
24 | export default Item
25 |
--------------------------------------------------------------------------------
/frontend/src/components/AvatarList/index.js:
--------------------------------------------------------------------------------
1 | import AvatarList from './List'
2 | import Item from './Item'
3 |
4 | export {
5 | AvatarList,
6 | Item as AvatarListItem
7 | }
8 |
9 | export default AvatarList
10 |
--------------------------------------------------------------------------------
/frontend/src/components/Charts/chart.less:
--------------------------------------------------------------------------------
1 | .antv-chart-mini {
2 | position: relative;
3 | width: 100%;
4 |
5 | .chart-wrapper {
6 | position: absolute;
7 | bottom: -28px;
8 | width: 100%;
9 |
10 | /* margin: 0 -5px;
11 | overflow: hidden;*/
12 | }
13 | }
--------------------------------------------------------------------------------
/frontend/src/components/Charts/smooth.area.less:
--------------------------------------------------------------------------------
1 | @import "../index";
2 |
3 | @smoothArea-prefix-cls: ~"@{ant-pro-prefix}-smooth-area";
4 |
5 | .@{smoothArea-prefix-cls} {
6 | position: relative;
7 | width: 100%;
8 |
9 | .chart-wrapper {
10 | position: absolute;
11 | bottom: -28px;
12 | width: 100%;
13 | }
14 | }
--------------------------------------------------------------------------------
/frontend/src/components/Ellipsis/index.js:
--------------------------------------------------------------------------------
1 | import Ellipsis from './Ellipsis'
2 |
3 | export default Ellipsis
4 |
--------------------------------------------------------------------------------
/frontend/src/components/Ellipsis/index.md:
--------------------------------------------------------------------------------
1 | # Ellipsis 文本自动省略号
2 |
3 | 文本过长自动处理省略号,支持按照文本长度和最大行数两种方式截取。
4 |
5 |
6 |
7 | 引用方式:
8 |
9 | ```javascript
10 | import Ellipsis from '@/components/Ellipsis'
11 |
12 | export default {
13 | components: {
14 | Ellipsis
15 | }
16 | }
17 | ```
18 |
19 |
20 |
21 | ## 代码演示 [demo](https://pro.loacg.com/test/home)
22 |
23 | ```html
24 |
25 | There were injuries alleged in three cases in 2015, and a
26 | fourth incident in September, according to the safety recall report. After meeting with US regulators in October, the firm decided to issue a voluntary recall.
27 |
28 | ```
29 |
30 |
31 |
32 | ## API
33 |
34 |
35 | 参数 | 说明 | 类型 | 默认值
36 | ----|------|-----|------
37 | tooltip | 移动到文本展示完整内容的提示 | boolean | -
38 | length | 在按照长度截取下的文本最大字符数,超过则截取省略 | number | -
--------------------------------------------------------------------------------
/frontend/src/components/Exception/index.js:
--------------------------------------------------------------------------------
1 | import ExceptionPage from './ExceptionPage.vue'
2 | export default ExceptionPage
3 |
--------------------------------------------------------------------------------
/frontend/src/components/Exception/type.js:
--------------------------------------------------------------------------------
1 | const types = {
2 | 403: {
3 | img: 'https://gw.alipayobjects.com/zos/rmsportal/wZcnGqRDyhPOEYFcZDnb.svg',
4 | title: '403',
5 | desc: '抱歉,你无权访问该页面'
6 | },
7 | 404: {
8 | img: 'https://gw.alipayobjects.com/zos/rmsportal/KpnpchXsobRgLElEozzI.svg',
9 | title: '404',
10 | desc: '抱歉,你访问的页面不存在或仍在开发中'
11 | },
12 | 500: {
13 | img: 'https://gw.alipayobjects.com/zos/rmsportal/RVRUAYdCGeYNBWoKiIwB.svg',
14 | title: '500',
15 | desc: '抱歉,服务器出错了'
16 | }
17 | }
18 |
19 | export default types
20 |
--------------------------------------------------------------------------------
/frontend/src/components/FooterToolbar/index.js:
--------------------------------------------------------------------------------
1 | import FooterToolBar from './FooterToolBar'
2 | import './index.less'
3 |
4 | export default FooterToolBar
5 |
--------------------------------------------------------------------------------
/frontend/src/components/FooterToolbar/index.less:
--------------------------------------------------------------------------------
1 | @import "../index";
2 |
3 | @footer-toolbar-prefix-cls: ~"@{ant-pro-prefix}-footer-toolbar";
4 |
5 | .@{footer-toolbar-prefix-cls} {
6 | position: fixed;
7 | width: 100%;
8 | bottom: 0;
9 | right: 0;
10 | height: 56px;
11 | line-height: 56px;
12 | box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.03);
13 | background: #fff;
14 | border-top: 1px solid #e8e8e8;
15 | padding: 0 24px;
16 | z-index: 9;
17 |
18 | &:after {
19 | content: "";
20 | display: block;
21 | clear: both;
22 | }
23 | }
--------------------------------------------------------------------------------
/frontend/src/components/FooterToolbar/index.md:
--------------------------------------------------------------------------------
1 | # FooterToolbar 底部工具栏
2 |
3 | 固定在底部的工具栏。
4 |
5 |
6 |
7 | ## 何时使用
8 |
9 | 固定在内容区域的底部,不随滚动条移动,常用于长页面的数据搜集和提交工作。
10 |
11 |
12 |
13 | 引用方式:
14 |
15 | ```javascript
16 | import FooterToolBar from '@/components/FooterToolbar'
17 |
18 | export default {
19 | components: {
20 | FooterToolBar
21 | }
22 | }
23 | ```
24 |
25 |
26 |
27 | ## 代码演示
28 |
29 | ```html
30 |
31 | 提交
32 |
33 | ```
34 | 或
35 | ```html
36 |
37 | 提交
38 |
39 | ```
40 |
41 |
42 | ## API
43 |
44 | 参数 | 说明 | 类型 | 默认值
45 | ----|------|-----|------
46 | children (slot) | 工具栏内容,向右对齐 | - | -
47 | extra | 额外信息,向左对齐 | String, Object | -
48 |
49 |
--------------------------------------------------------------------------------
/frontend/src/components/GlobalFooter/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
18 |
--------------------------------------------------------------------------------
/frontend/src/components/IconSelector/README.md:
--------------------------------------------------------------------------------
1 | IconSelector
2 | ====
3 |
4 | > 图标选择组件,常用于为某一个数据设定一个图标时使用
5 | > eg: 设定菜单列表时,为每个菜单设定一个图标
6 |
7 | 该组件由 [@Saraka](https://github.com/saraka-tsukai) 封装
8 |
9 |
10 |
11 | ### 使用方式
12 |
13 | ```vue
14 |
15 |
16 |
17 |
18 |
19 |
20 |
39 | ```
40 |
41 |
42 |
43 | ### 事件
44 |
45 |
46 | | 名称 | 说明 | 类型 | 默认值 |
47 | | ------ | -------------------------- | ------ | ------ |
48 | | change | 当改变了 `icon` 选中项触发 | String | - |
49 |
--------------------------------------------------------------------------------
/frontend/src/components/IconSelector/index.js:
--------------------------------------------------------------------------------
1 | import IconSelector from './IconSelector'
2 | export default IconSelector
3 |
--------------------------------------------------------------------------------
/frontend/src/components/MultiTab/events.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | export default new Vue()
3 |
--------------------------------------------------------------------------------
/frontend/src/components/MultiTab/index.less:
--------------------------------------------------------------------------------
1 | @import '../index';
2 |
3 | @multi-tab-prefix-cls: ~"@{ant-pro-prefix}-multi-tab";
4 | @multi-tab-wrapper-prefix-cls: ~"@{ant-pro-prefix}-multi-tab-wrapper";
5 |
6 | /*
7 | .topmenu .@{multi-tab-prefix-cls} {
8 | max-width: 1200px;
9 | margin: -23px auto 24px auto;
10 | }
11 | */
12 | .@{multi-tab-prefix-cls} {
13 | margin: -23px -24px 24px -24px;
14 | background: #fff;
15 | }
16 |
17 | .topmenu .@{multi-tab-wrapper-prefix-cls} {
18 | max-width: 1200px;
19 | margin: 0 auto;
20 | }
21 |
22 | .topmenu.content-width-Fluid .@{multi-tab-wrapper-prefix-cls} {
23 | max-width: 100%;
24 | margin: 0 auto;
25 | }
26 |
--------------------------------------------------------------------------------
/frontend/src/components/NoticeIcon/index.js:
--------------------------------------------------------------------------------
1 | import NoticeIcon from './NoticeIcon'
2 | export default NoticeIcon
3 |
--------------------------------------------------------------------------------
/frontend/src/components/NumberInfo/index.js:
--------------------------------------------------------------------------------
1 | import NumberInfo from './NumberInfo'
2 |
3 | export default NumberInfo
4 |
--------------------------------------------------------------------------------
/frontend/src/components/NumberInfo/index.md:
--------------------------------------------------------------------------------
1 | # NumberInfo 数据文本
2 |
3 | 常用在数据卡片中,用于突出展示某个业务数据。
4 |
5 |
6 |
7 | 引用方式:
8 |
9 | ```javascript
10 | import NumberInfo from '@/components/NumberInfo'
11 |
12 | export default {
13 | components: {
14 | NumberInfo
15 | }
16 | }
17 | ```
18 |
19 |
20 |
21 | ## 代码演示 [demo](https://pro.loacg.com/test/home)
22 |
23 | ```html
24 |
29 | ```
30 |
31 |
32 |
33 | ## API
34 |
35 | 参数 | 说明 | 类型 | 默认值
36 | ----|------|-----|------
37 | title | 标题 | ReactNode\|string | -
38 | subTitle | 子标题 | ReactNode\|string | -
39 | total | 总量 | ReactNode\|string | -
40 | subTotal | 子总量 | ReactNode\|string | -
41 | status | 增加状态 | 'up \| down' | -
42 | theme | 状态样式 | string | 'light'
43 | gap | 设置数字和描述之间的间距(像素)| number | 8
44 |
--------------------------------------------------------------------------------
/frontend/src/components/Search/index.less:
--------------------------------------------------------------------------------
1 | @import "~ant-design-vue/es/style/themes/default";
2 |
3 | .global-search-wrapper {
4 | position: fixed;
5 | top: 0;
6 | left: 0;
7 | right: 0;
8 | bottom: 0;
9 | z-index: @zindex-modal-mask;
10 | background: @modal-mask-bg;
11 |
12 | .global-search-box {
13 | position: absolute;
14 | top: 20%;
15 | left: 50%;
16 | width: 450px;
17 | transform: translate(-50%, -50%);
18 |
19 | .global-search-tips {
20 | color: @white;
21 | font-size: @font-size-lg;
22 | text-align: right;
23 | }
24 | }
25 | }
--------------------------------------------------------------------------------
/frontend/src/components/SelectLang/index.less:
--------------------------------------------------------------------------------
1 | @import "~ant-design-vue/es/style/themes/default";
2 |
3 | @header-menu-prefix-cls: ~'@{ant-prefix}-pro-header-menu';
4 | @header-drop-down-prefix-cls: ~'@{ant-prefix}-pro-drop-down';
5 |
6 | .@{header-menu-prefix-cls} {
7 |
8 | .anticon {
9 | margin-right: 8px;
10 | }
11 | .ant-dropdown-menu-item {
12 | min-width: 160px;
13 | }
14 | }
15 |
16 | .@{header-drop-down-prefix-cls} {
17 |
18 | line-height: @layout-header-height;
19 | vertical-align: top;
20 | cursor: pointer;
21 |
22 | > i {
23 | font-size: 16px !important;
24 | transform: none !important;
25 |
26 | svg {
27 | position: relative;
28 | top: -1px;
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/frontend/src/components/SelectTime/index.js:
--------------------------------------------------------------------------------
1 | import moduleName from './index.vue'
2 | export default moduleName;
--------------------------------------------------------------------------------
/frontend/src/components/SettingDrawer/SettingItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{ title }}
4 |
5 |
6 |
7 |
8 |
9 |
24 |
25 |
39 |
--------------------------------------------------------------------------------
/frontend/src/components/SettingDrawer/index.js:
--------------------------------------------------------------------------------
1 | import SettingDrawer from './SettingDrawer'
2 | export default SettingDrawer
3 |
--------------------------------------------------------------------------------
/frontend/src/components/StandardFormRow/index.js:
--------------------------------------------------------------------------------
1 | import StandardFormRow from './StandardFormRow'
2 |
3 | export default StandardFormRow
4 |
--------------------------------------------------------------------------------
/frontend/src/components/TextArea/style.less:
--------------------------------------------------------------------------------
1 | .ant-textarea-limit {
2 | position: relative;
3 |
4 | .limit {
5 | position: absolute;
6 | color: #909399;
7 | background: #fff;
8 | font-size: 12px;
9 | bottom: 5px;
10 | right: 10px;
11 | }
12 | }
--------------------------------------------------------------------------------
/frontend/src/components/Trend/Trend.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
38 |
39 |
42 |
--------------------------------------------------------------------------------
/frontend/src/components/Trend/index.js:
--------------------------------------------------------------------------------
1 | import Trend from './Trend.vue'
2 |
3 | export default Trend
4 |
--------------------------------------------------------------------------------
/frontend/src/components/Trend/index.less:
--------------------------------------------------------------------------------
1 | @import "../index";
2 |
3 | @trend-prefix-cls: ~"@{ant-pro-prefix}-trend";
4 |
5 | .@{trend-prefix-cls} {
6 | display: inline-block;
7 | font-size: @font-size-base;
8 | line-height: 22px;
9 |
10 | .up,
11 | .down {
12 | margin-left: 4px;
13 | position: relative;
14 | top: 1px;
15 |
16 | i {
17 | font-size: 12px;
18 | transform: scale(0.83);
19 | }
20 | }
21 |
22 | .item-text {
23 | display: inline-block;
24 | margin-left: 8px;
25 | color: rgba(0,0,0,.85);
26 | }
27 |
28 | .up {
29 | color: @red-6;
30 | }
31 | .down {
32 | color: @green-6;
33 | top: -1px;
34 | }
35 |
36 | &.reverse-color .up {
37 | color: @green-6;
38 | }
39 | &.reverse-color .down {
40 | color: @red-6;
41 | }
42 | }
--------------------------------------------------------------------------------
/frontend/src/components/Trend/index.md:
--------------------------------------------------------------------------------
1 | # Trend 趋势标记
2 |
3 | 趋势符号,标记上升和下降趋势。通常用绿色代表“好”,红色代表“不好”,股票涨跌场景除外。
4 |
5 |
6 |
7 | 引用方式:
8 |
9 | ```javascript
10 | import Trend from '@/components/Trend'
11 |
12 | export default {
13 | components: {
14 | Trend
15 | }
16 | }
17 | ```
18 |
19 |
20 |
21 | ## 代码演示 [demo](https://pro.loacg.com/test/home)
22 |
23 | ```html
24 | 5%
25 | ```
26 | 或
27 | ```html
28 |
29 | 工资
30 | 5%
31 |
32 | ```
33 | 或
34 | ```html
35 | 5%
36 | ```
37 |
38 |
39 | ## API
40 |
41 | | 参数 | 说明 | 类型 | 默认值 |
42 | |----------|------------------------------------------|-------------|-------|
43 | | flag | 上升下降标识:`up|down` | string | - |
44 | | reverseColor | 颜色反转 | Boolean | false |
45 |
46 |
--------------------------------------------------------------------------------
/frontend/src/components/index.less:
--------------------------------------------------------------------------------
1 | @import "~ant-design-vue/lib/style/index";
2 |
3 | // The prefix to use on all css classes from ant-pro.
4 | @ant-pro-prefix : ant-pro;
5 | @ant-global-sider-zindex : 106;
6 | @ant-global-header-zindex : 105;
--------------------------------------------------------------------------------
/frontend/src/components/searchBox/index.js:
--------------------------------------------------------------------------------
1 | import moduleName from './index.vue'
2 | export default moduleName
--------------------------------------------------------------------------------
/frontend/src/components/searchBox/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
23 |
--------------------------------------------------------------------------------
/frontend/src/config/themeColor.js:
--------------------------------------------------------------------------------
1 | const themeColor = {
2 | 'primary-color': '#0ba360',
3 | // #0d9257, //primary-color按下之后的颜色
4 | 'table-header-bg': "#e6f6ef",
5 | 'table-row-hover-bg': "#f6fcfa",
6 | 'border-radius-base':'2px',
7 | }
8 |
9 | module.exports = themeColor
--------------------------------------------------------------------------------
/frontend/src/core/icons.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Custom icon list
3 | * All icons are loaded here for easy management
4 | * @see https://vue.ant.design/components/icon/#Custom-Font-Icon
5 | *
6 | * 自定义图标加载表
7 | * 所有图标均从这里加载,方便管理
8 | */
9 | import bxAnaalyse from '@/assets/icons/bx-analyse.svg?inline' // path to your '*.svg?inline' file.
10 |
11 | export { bxAnaalyse }
12 |
--------------------------------------------------------------------------------
/frontend/src/core/use.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 |
3 | // base library
4 | import Antd from 'ant-design-vue'
5 | import Viser from 'viser-vue'
6 | import VueCropper from 'vue-cropper'
7 | import 'ant-design-vue/dist/antd.less'
8 |
9 | // ext library
10 | import VueClipboard from 'vue-clipboard2'
11 | import MultiTab from '@/components/MultiTab'
12 | import PageLoading from '@/components/PageLoading'
13 | import PermissionHelper from '@/utils/helper/permission'
14 | // import '@/components/use'
15 | import './directives/action'
16 |
17 | VueClipboard.config.autoSetContainer = true
18 |
19 | Vue.use(Antd)
20 | Vue.use(Viser)
21 | Vue.use(MultiTab)
22 | Vue.use(PageLoading)
23 | Vue.use(VueClipboard)
24 | Vue.use(PermissionHelper)
25 | Vue.use(VueCropper)
26 |
--------------------------------------------------------------------------------
/frontend/src/layouts/BlankLayout.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
13 |
14 |
17 |
--------------------------------------------------------------------------------
/frontend/src/layouts/PageView.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
13 |
--------------------------------------------------------------------------------
/frontend/src/layouts/RouteView.vue:
--------------------------------------------------------------------------------
1 |
33 |
--------------------------------------------------------------------------------
/frontend/src/layouts/index.js:
--------------------------------------------------------------------------------
1 | import UserLayout from './UserLayout'
2 | import BlankLayout from './BlankLayout'
3 | import BasicLayout from './BasicLayout'
4 | import RouteView from './RouteView'
5 | import PageView from './PageView'
6 |
7 | export { UserLayout, BasicLayout, BlankLayout, RouteView, PageView }
8 |
--------------------------------------------------------------------------------
/frontend/src/locales/lang/zh-CN.js:
--------------------------------------------------------------------------------
1 | import antd from 'ant-design-vue/es/locale-provider/zh_CN'
2 | import momentCN from 'moment/locale/zh-cn'
3 |
4 | const components = {
5 | antLocale: antd,
6 | momentName: 'zh-cn',
7 | momentLocale: momentCN
8 | }
9 |
10 | const locale = {
11 | 'message': '-',
12 | 'menu.home': '主页',
13 | 'menu.dashboard': '仪表盘',
14 | 'menu.dashboard.analysis': '分析页',
15 | 'menu.dashboard.monitor': '监控页',
16 | 'menu.dashboard.workplace': '工作台'
17 | }
18 |
19 | export default {
20 | ...components,
21 | ...locale
22 | }
23 |
--------------------------------------------------------------------------------
/frontend/src/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Router from 'vue-router'
3 | import { constantRouterMap, asyncRouterMap, detailRouterMap } from '@/config/router.config'
4 |
5 | Vue.use(Router)
6 |
7 | export default new Router({
8 | mode: 'hash',
9 | scrollBehavior: () => ({ y: 0 }),
10 | routes: constantRouterMap,
11 | // routes: constantRouterMap.concat(asyncRouterMap), // -- 若不是服务器返回的菜单 可改为.concat(asyncRouterMap) 注意detailRouterMap要放在父级路由下
12 |
13 | })
--------------------------------------------------------------------------------
/frontend/src/store/app-mixin.js:
--------------------------------------------------------------------------------
1 | import { mapState } from 'vuex'
2 |
3 | const baseMixin = {
4 | computed: {
5 | ...mapState({
6 | layout: state => state.app.layout,
7 | navTheme: state => state.app.theme,
8 | primaryColor: state => state.app.color,
9 | colorWeak: state => state.app.weak,
10 | fixedHeader: state => state.app.fixedHeader,
11 | fixedSidebar: state => state.app.fixedSidebar,
12 | contentWidth: state => state.app.contentWidth,
13 | autoHideHeader: state => state.app.autoHideHeader,
14 |
15 | isMobile: state => state.app.isMobile,
16 | sideCollapsed: state => state.app.sideCollapsed,
17 | multiTab: state => state.app.multiTab
18 | }),
19 | isTopMenu () {
20 | return this.layout === 'topmenu'
21 | }
22 | },
23 | methods: {
24 | isSideMenu () {
25 | return !this.isTopMenu
26 | }
27 | }
28 | }
29 |
30 | export {
31 | baseMixin
32 | }
33 |
--------------------------------------------------------------------------------
/frontend/src/store/device-mixin.js:
--------------------------------------------------------------------------------
1 | import { mapState } from 'vuex'
2 |
3 | const deviceMixin = {
4 | computed: {
5 | ...mapState({
6 | isMobile: state => state.app.isMobile
7 | })
8 | }
9 | }
10 |
11 | export { deviceMixin }
12 |
--------------------------------------------------------------------------------
/frontend/src/store/getters.js:
--------------------------------------------------------------------------------
1 | const getters = {
2 | isMobile: state => state.app.isMobile,
3 | lang: state => state.app.lang,
4 | theme: state => state.app.theme,
5 | color: state => state.app.color,
6 | token: state => state.user.token,
7 | avatar: state => state.user.avatar,
8 | nickname: state => state.user.name,
9 | welcome: state => state.user.welcome,
10 | roles: state => state.user.roles,
11 | userInfo: state => state.user.info,
12 | addRouters: state => state.permission.addRouters,
13 | multiTab: state => state.app.multiTab
14 | }
15 |
16 | export default getters
17 |
--------------------------------------------------------------------------------
/frontend/src/store/i18n-mixin.js:
--------------------------------------------------------------------------------
1 | import { mapState } from 'vuex'
2 |
3 | const i18nMixin = {
4 | computed: {
5 | ...mapState({
6 | currentLang: state => state.app.lang
7 | })
8 | },
9 | methods: {
10 | setLang (lang) {
11 | this.$store.dispatch('setLang', lang)
12 | }
13 | }
14 | }
15 |
16 | export default i18nMixin
17 |
--------------------------------------------------------------------------------
/frontend/src/store/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Vuex from 'vuex'
3 |
4 | import app from './modules/app'
5 | import user from './modules/user'
6 | import btnAuth from './modules/btnAuth'
7 | // import permission from './modules/permission'
8 |
9 | import permission from './modules/async-router' //后端返回的菜单
10 | import getters from './getters'
11 |
12 | Vue.use(Vuex)
13 |
14 | export default new Vuex.Store({
15 | modules: {
16 | app,
17 | user,
18 | permission,
19 | btnAuth,
20 | },
21 | state: {
22 |
23 | },
24 | mutations: {
25 |
26 | },
27 | actions: {
28 |
29 | },
30 | getters
31 | })
--------------------------------------------------------------------------------
/frontend/src/store/modules/async-router.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 向后端请求用户的菜单,动态生成路由
3 | */
4 | import { constantRouterMap } from '@/config/router.config'
5 | import { generatorDynamicRouter } from '@/router/generator-routers'
6 |
7 | const permission = {
8 | state: {
9 | routers: constantRouterMap,
10 | addRouters: []
11 | },
12 | mutations: {
13 | SET_ROUTERS: (state, routers) => {
14 | state.addRouters = routers
15 | state.routers = constantRouterMap.concat(routers)
16 | }
17 | },
18 | actions: {
19 | GenerateRoutes({ commit }) {
20 | return new Promise(resolve => {
21 | generatorDynamicRouter().then(routers => {
22 | commit('SET_ROUTERS', routers)
23 | resolve()
24 | })
25 | })
26 | }
27 | }
28 | }
29 |
30 | export default permission
--------------------------------------------------------------------------------
/frontend/src/store/modules/btnAuth.js:
--------------------------------------------------------------------------------
1 | const btnAuth = {
2 | state: {
3 | btnAuth: {},
4 | },
5 | mutations: {
6 | SET_BTNAUTH: (state, data) => {
7 | state.btnAuth = data
8 | }
9 | },
10 | actions: {
11 | GenerateBtnAuth({ commit },data) {
12 | commit('SET_BTNAUTH', data)
13 | }
14 | }
15 | }
16 |
17 | export default btnAuth
18 |
--------------------------------------------------------------------------------
/frontend/src/store/mutation-types.js:
--------------------------------------------------------------------------------
1 | export const ACCESS_TOKEN = 'Access-Token'
2 |
3 | export const SIDEBAR_TYPE = 'sidebar_type'
4 | export const TOGGLE_MOBILE_TYPE = 'is_mobile'
5 | export const TOGGLE_NAV_THEME = 'nav_theme'
6 | export const TOGGLE_LAYOUT = 'layout'
7 | export const TOGGLE_FIXED_HEADER = 'fixed_header'
8 | export const TOGGLE_FIXED_SIDEBAR = 'fixed_sidebar'
9 | export const TOGGLE_CONTENT_WIDTH = 'content_width'
10 | export const TOGGLE_HIDE_HEADER = 'auto_hide_header'
11 | export const TOGGLE_COLOR = 'color'
12 | export const TOGGLE_WEAK = 'weak'
13 | export const TOGGLE_MULTI_TAB = 'multi_tab'
14 | export const APP_LANGUAGE = 'app_language'
15 |
16 | export const CONTENT_WIDTH_TYPE = {
17 | Fluid: 'Fluid',
18 | Fixed: 'Fixed'
19 | }
20 |
21 | export const NAV_THEME = {
22 | LIGHT: 'light',
23 | DARK: 'dark'
24 | }
25 |
--------------------------------------------------------------------------------
/frontend/src/utils/axios.js:
--------------------------------------------------------------------------------
1 | const VueAxios = {
2 | vm: {},
3 | // eslint-disable-next-line no-unused-vars
4 | install (Vue, instance) {
5 | if (this.installed) {
6 | return
7 | }
8 | this.installed = true
9 |
10 | if (!instance) {
11 | // eslint-disable-next-line no-console
12 | console.error('You have to install axios')
13 | return
14 | }
15 |
16 | Vue.axios = instance
17 |
18 | Object.defineProperties(Vue.prototype, {
19 | axios: {
20 | get: function get () {
21 | return instance
22 | }
23 | },
24 | $http: {
25 | get: function get () {
26 | return instance
27 | }
28 | }
29 | })
30 | }
31 | }
32 |
33 | export {
34 | VueAxios
35 | }
36 |
--------------------------------------------------------------------------------
/frontend/src/utils/domUtil.js:
--------------------------------------------------------------------------------
1 | import config from '@/config/defaultSettings'
2 |
3 | export const setDocumentTitle = function (title) {
4 | document.title = title
5 | const ua = navigator.userAgent
6 | // eslint-disable-next-line
7 | const regex = /\bMicroMessenger\/([\d\.]+)/
8 | if (regex.test(ua) && /ip(hone|od|ad)/i.test(ua)) {
9 | const i = document.createElement('iframe')
10 | i.src = '/favicon.ico'
11 | i.style.display = 'none'
12 | i.onload = function () {
13 | setTimeout(function () {
14 | i.remove()
15 | }, 9)
16 | }
17 | document.body.appendChild(i)
18 | }
19 | }
20 |
21 | export const domTitle = config.title
22 |
--------------------------------------------------------------------------------
/frontend/src/utils/filter.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import moment from 'moment'
3 | import 'moment/locale/zh-cn'
4 | moment.locale('zh-cn')
5 |
6 | Vue.filter('NumberFormat', function (value) {
7 | if (!value) {
8 | return '0'
9 | }
10 | const intPartFormat = value.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,') // 将整数部分逢三一断
11 | return intPartFormat
12 | })
13 |
14 | Vue.filter('dayjs', function (dataStr, pattern = 'YYYY-MM-DD HH:mm:ss') {
15 | return moment(dataStr).format(pattern)
16 | })
17 |
18 | Vue.filter('moment', function (dataStr, pattern = 'YYYY-MM-DD HH:mm:ss') {
19 | return moment(dataStr).format(pattern)
20 | })
21 |
--------------------------------------------------------------------------------
/frontend/src/utils/pageAuth.js:
--------------------------------------------------------------------------------
1 | import router from '@/router'
2 | import { getPageAuth as getPageAuthApi } from '@/api/page-auth'
3 |
4 | const replaceRouter = () => {
5 | router.push({ name: 'noAuth' })
6 | }
7 |
8 | export const getPageAuth = (vm, action_id = "") => {
9 | return new Promise((resolve, reject) => {
10 | setTimeout(() => {
11 | vm.$loading.show()
12 | }, 0);
13 | getPageAuthApi({ action_id }).then(res => {
14 | if (!res.data) replaceRouter()
15 | return resolve(res.data)
16 | }).catch(() => {
17 | replaceRouter()
18 | return resolve(false)
19 | }).finally(() => {
20 | setTimeout(() => {
21 | vm.$loading.hide()
22 | }, 0);
23 | })
24 | })
25 | }
--------------------------------------------------------------------------------
/frontend/src/utils/permissions.js:
--------------------------------------------------------------------------------
1 | export function actionToObject (json) {
2 | try {
3 | return JSON.parse(json)
4 | } catch (e) {
5 | console.log('err', e.message)
6 | }
7 | return []
8 | }
9 |
--------------------------------------------------------------------------------
/frontend/src/utils/routeConvert.js:
--------------------------------------------------------------------------------
1 | import cloneDeep from 'lodash.clonedeep'
2 |
3 | export function convertRoutes (nodes) {
4 | if (!nodes) return null
5 |
6 | nodes = cloneDeep(nodes)
7 |
8 | let queue = Array.isArray(nodes) ? nodes.concat() : [nodes]
9 |
10 | while (queue.length) {
11 | const levelSize = queue.length
12 |
13 | for (let i = 0; i < levelSize; i++) {
14 | const node = queue.shift()
15 |
16 | if (!node.children || !node.children.length) continue
17 |
18 | node.children.forEach(child => {
19 | // 转化相对路径
20 | if (child.path[0] !== '/' && !child.path.startsWith('http')) {
21 | child.path = node.path.replace(/(\w*)[/]*$/, `$1/${child.path}`)
22 | }
23 | })
24 |
25 | queue = queue.concat(node.children)
26 | }
27 | }
28 |
29 | return nodes
30 | }
31 |
--------------------------------------------------------------------------------
/frontend/src/utils/screenArr.js:
--------------------------------------------------------------------------------
1 | export default [
2 | { width: 800, height: 600, key: 1 },
3 | { width: 1024, height: 768, key: 2 },
4 | { width: 1280, height: 720, key: 3 },
5 | { width: 1280, height: 800, key: 4 },
6 | { width: 1280, height: 1024, key: 5 },
7 | { width: 1366, height: 768, key: 6 },
8 | { width: 1440, height: 900, key: 7 },
9 | { width: 1920, height: 1080, key: 8 },
10 | { width: 1920, height: 1200, key: 9 },
11 | { width: 2160, height: 1440, key: 10 },
12 | { width: 2560, height: 1600, key: 11 },
13 | { width: 2880, height: 1800, key: 12 },
14 | ]
--------------------------------------------------------------------------------
/frontend/src/utils/screenLog.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | export const printANSI = () => {
3 | console.warn('[app]: app is opend')
4 | }
5 |
--------------------------------------------------------------------------------
/frontend/src/views/accessPolicy/commandPolicy/components/CommandGroup/index.js:
--------------------------------------------------------------------------------
1 | import moduleName from './index.vue'
2 | export default moduleName;
--------------------------------------------------------------------------------
/frontend/src/views/accessPolicy/commandPolicy/components/CommandList/index.js:
--------------------------------------------------------------------------------
1 | import moduleName from './index.vue'
2 | export default moduleName;
--------------------------------------------------------------------------------
/frontend/src/views/accessPolicy/commandPolicy/components/PolicyList/components/components/Step1/index.js:
--------------------------------------------------------------------------------
1 | import moduleName from './index.vue'
2 | export default moduleName;
--------------------------------------------------------------------------------
/frontend/src/views/accessPolicy/commandPolicy/components/PolicyList/components/components/Step2/index.js:
--------------------------------------------------------------------------------
1 | import moduleName from './index.vue'
2 | export default moduleName;
--------------------------------------------------------------------------------
/frontend/src/views/accessPolicy/commandPolicy/components/PolicyList/index.js:
--------------------------------------------------------------------------------
1 | import moduleName from './index.vue'
2 | export default moduleName;
--------------------------------------------------------------------------------
/frontend/src/views/accessPolicy/commandPolicy/components/PolicyList/policyListInfo/index.js:
--------------------------------------------------------------------------------
1 | import moduleName from './index.vue'
2 | export default moduleName;
--------------------------------------------------------------------------------
/frontend/src/views/accessPolicy/commandPolicy/index.js:
--------------------------------------------------------------------------------
1 | import moduleName from './index.vue'
2 | export default moduleName;
--------------------------------------------------------------------------------
/frontend/src/views/accessPolicy/visitPolicy/components/components/Step2/index.js:
--------------------------------------------------------------------------------
1 | import moduleName from './index.vue'
2 | export default moduleName;
--------------------------------------------------------------------------------
/frontend/src/views/accessPolicy/visitPolicy/components/components/Step3/index.js:
--------------------------------------------------------------------------------
1 | import moduleName from './index.vue'
2 | export default moduleName;
--------------------------------------------------------------------------------
/frontend/src/views/accessPolicy/visitPolicy/index.js:
--------------------------------------------------------------------------------
1 | import moduleName from './index.vue'
2 | export default moduleName;
--------------------------------------------------------------------------------
/frontend/src/views/accessPolicy/visitPolicy/visitPolicyInfo/index.js:
--------------------------------------------------------------------------------
1 | import moduleName from './index.vue'
2 | export default moduleName;
--------------------------------------------------------------------------------
/frontend/src/views/components/AuthModal/index.js:
--------------------------------------------------------------------------------
1 | import moduleName from './index.vue';
2 | export default moduleName;
--------------------------------------------------------------------------------
/frontend/src/views/components/ContentHeader/index.js:
--------------------------------------------------------------------------------
1 | import moduleName from './index.vue';
2 | export default moduleName;
--------------------------------------------------------------------------------
/frontend/src/views/exception/403.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |

5 |
您暂未授权此平台,请联系管理员授权
6 |
7 |
8 |
9 |
10 |
19 |
20 |
38 |
--------------------------------------------------------------------------------
/frontend/src/views/exception/404.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |

5 |
您暂未授权此功能,请联系管理员授权
6 |
7 |
8 |
9 |
10 |
19 |
20 |
38 |
--------------------------------------------------------------------------------
/frontend/src/views/exception/500.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
14 |
15 |
18 |
--------------------------------------------------------------------------------
/frontend/src/views/setting/userManage/components/Group/index.js:
--------------------------------------------------------------------------------
1 | import moduleName from './index.vue';
2 | export default moduleName;
--------------------------------------------------------------------------------
/frontend/src/views/setting/userManage/components/User/index.js:
--------------------------------------------------------------------------------
1 | import moduleName from './index.vue';
2 | export default moduleName;
--------------------------------------------------------------------------------
/frontend/src/views/setting/userManage/index.js:
--------------------------------------------------------------------------------
1 | import moduleName from './index.vue';
2 | export default moduleName;
--------------------------------------------------------------------------------
/frontend/tests/unit/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | env: {
3 | jest: true
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/index/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/index/__init__.py
--------------------------------------------------------------------------------
/index/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 |
3 | # Register your models here.
4 |
--------------------------------------------------------------------------------
/index/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class IndexConfig(AppConfig):
5 | name = 'index'
6 |
--------------------------------------------------------------------------------
/index/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/index/migrations/__init__.py
--------------------------------------------------------------------------------
/index/models.py:
--------------------------------------------------------------------------------
1 | from django.db import models
2 |
3 | # Create your models here.
4 |
--------------------------------------------------------------------------------
/index/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
5 |
--------------------------------------------------------------------------------
/index/urls.py:
--------------------------------------------------------------------------------
1 | from django.urls import path
2 | from index.views import *
3 |
4 | urlpatterns = [
5 | path("", vue),
6 | ]
--------------------------------------------------------------------------------
/index/views.py:
--------------------------------------------------------------------------------
1 | from django.shortcuts import render
2 |
3 | # Create your views here.
4 | from blueapps.account.decorators import login_exempt_v2
5 |
6 |
7 | @login_exempt_v2
8 | def vue(request):
9 | return render(request, 'index.html')
10 | # SITE_URL = "http://127.0.0.1:8000"
11 | # return render(request, 'index.html', {"SITE_URL": SITE_URL})
12 |
--------------------------------------------------------------------------------
/install/bastion_esb/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/install/bastion_esb/__init__.py
--------------------------------------------------------------------------------
/install/bastion_esb/bastion/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/install/bastion_esb/bastion/__init__.py
--------------------------------------------------------------------------------
/install/bastion_esb/bastion/toolkit/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/install/bastion_esb/bastion/toolkit/__init__.py
--------------------------------------------------------------------------------
/install/bastion_esb/bastion/toolkit/configs.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from esb.utils import SmartHost
3 |
4 |
5 | # 系统名的小写形式,与系统包名保持一致
6 | SYSTEM_NAME = 'BASTION'
7 |
8 | host = SmartHost(
9 | # 需要填入系统正式环境的域名地址
10 | host_prod='paas.bksingle.com',
11 | )
12 |
--------------------------------------------------------------------------------
/install/bastion_esb/bastion/toolkit/tools.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
--------------------------------------------------------------------------------
/install/bastion_esb/esb_doc/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/install/bastion_esb/esb_doc/__init__.py
--------------------------------------------------------------------------------
/install/init_iam/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/install/init_iam/__init__.py
--------------------------------------------------------------------------------
/install/install.config.example:
--------------------------------------------------------------------------------
1 | # config file for opsany bastion -- https://www.opsany.com/
2 | # =================================================
3 |
4 | # Install Path
5 | INSTALL_PATH="/data/bkce/opsany-bastion"
6 |
7 | # Paas Domain
8 | PAAS_DOMAIN_NAME="ce.bktencent.com"
9 | BASTION_APP_TOKEN=b7d83351-0f0a-4918-adaa-a4860bc2fced
10 |
11 | # For Docker Hub
12 | #PAAS_DOCKER_REG="opsany"
13 |
14 | #For Aliyun
15 | PAAS_DOCKER_REG="registry.cn-beijing.aliyuncs.com/opsany"
16 | #PAAS_DOCKER_REG="registry-vpc.cn-beijing.aliyuncs.com/opsany"
17 |
18 | # PAAS Config
19 | UPLOAD_PATH="${INSTALL_PATH}/uploads"
20 |
21 | # MySQL
22 | MYSQL_HOST=mysql-default.service.consul
23 | MYSQL_PORT=3306
24 | MYSQL_PASSWORD=OpsAny@2020
25 | MYSQL_BASTION_PASSWORD=OpsAny@2020
26 |
27 | # Redis
28 | REDIS_HOST=REDIS_HOST=redis.service.consul
29 | REDIS_PORT=6379
30 | REDIS_PASSWORD=OpsAny@2020
31 |
32 | # Websocket
33 | WEBSOCKET_GUACD_HOST="192.168.56.11"
34 |
--------------------------------------------------------------------------------
/manage.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | import os
3 | import sys
4 |
5 | if __name__ == "__main__":
6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
7 |
8 | from django.core.management import execute_from_command_line
9 |
10 | execute_from_command_line(sys.argv)
11 |
--------------------------------------------------------------------------------
/opsany-bastion.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/opsany-bastion.png
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "opsany-bastion",
3 | "lockfileVersion": 2,
4 | "requires": true,
5 | "packages": {}
6 | }
7 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # 工程预装模块
3 | # 需要额外的python包,可直接在文件后面添加
4 | # 请确保指定的包和版本号,可通过pip安装
5 |
6 | # blueapps requirement
7 | Django==2.2.6
8 | mysqlclient==1.4.4
9 | MarkupSafe==1.1
10 | Mako==1.0.6
11 | requests==2.25.0
12 | urllib3==1.26.2
13 | redis==2.10.6
14 | celery==3.1.25
15 | django-celery==3.2.1
16 | python-json-logger==0.1.7
17 | whitenoise==3.3.0
18 | six==1.11.0
19 | uwsgi==2.0.19.1
20 | #daphne==2.2.1
21 |
22 | #v2 requirement
23 | httplib2==0.9.1
24 |
25 | # terminal
26 | bcrypt==3.2.0
27 | pycrypto==2.6.1
28 | cryptography==3.3.1
29 | django-cors-headers==3.2.1
30 | paramiko==2.7.2
31 | #channels==2.1.4
32 | #channels-redis==2.3.1
33 | django_redis==4.11.0
34 | gunicorn==19.9.0
35 | gevent==21.1.2
36 | XlsxWriter==1.2.8
37 | xlrd==1.2.0
38 | bk-iam==1.1.20
39 | #uvicorn==0.11.8
40 |
--------------------------------------------------------------------------------
/runtime.txt:
--------------------------------------------------------------------------------
1 | python-3.6.7
2 |
--------------------------------------------------------------------------------
/static/avatar2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/avatar2.jpg
--------------------------------------------------------------------------------
/static/css/app.019e6117.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/css/app.019e6117.css.gz
--------------------------------------------------------------------------------
/static/css/app.1fecc41d.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/css/app.1fecc41d.css.gz
--------------------------------------------------------------------------------
/static/css/app.285c40bb.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/css/app.285c40bb.css.gz
--------------------------------------------------------------------------------
/static/css/app.37081288.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/css/app.37081288.css.gz
--------------------------------------------------------------------------------
/static/css/app.5d7df5aa.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/css/app.5d7df5aa.css.gz
--------------------------------------------------------------------------------
/static/css/app.61a78f4d.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/css/app.61a78f4d.css.gz
--------------------------------------------------------------------------------
/static/css/app.98ed4a23.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/css/app.98ed4a23.css.gz
--------------------------------------------------------------------------------
/static/css/app.d50e69db.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/css/app.d50e69db.css.gz
--------------------------------------------------------------------------------
/static/css/app.ea92f5a9.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/css/app.ea92f5a9.css.gz
--------------------------------------------------------------------------------
/static/css/app.ebf33190.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/css/app.ebf33190.css.gz
--------------------------------------------------------------------------------
/static/css/asciinema-player.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/css/asciinema-player.css.gz
--------------------------------------------------------------------------------
/static/css/chunk-0b17f900.55242fa7.css:
--------------------------------------------------------------------------------
1 | h3[data-v-007d7773]{font-weight:1000;font-size:14px}footer[data-v-007d7773]{position:absolute;bottom:0;z-index:3;background:#fff;width:100%;left:0;padding:15px;border-top:1px solid #e8e8e8}.drawer_title[data-v-007d7773]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;font-size:1.17em}[data-v-007d7773] .ant-alert{padding:1px 30px 2px 37px}[data-v-007d7773] .ant-alert-icon{top:5.5px}[data-v-007d7773] .ant-alert-close-icon{top:1px}.top_search[data-v-717e8236]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding-bottom:12px}.table_cell[data-v-717e8236]{margin:-10px}.table_cell p[data-v-717e8236]{margin:0;padding:10px;height:42px}.table_cell p[data-v-717e8236]:nth-of-type(2){border-top:1px solid #e8e8e8}
--------------------------------------------------------------------------------
/static/css/chunk-0bfd1d3b.8cf73e6f.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/css/chunk-0bfd1d3b.8cf73e6f.css.gz
--------------------------------------------------------------------------------
/static/css/chunk-0d9f612a.d3437ec2.css:
--------------------------------------------------------------------------------
1 | .center[data-v-484260f7]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}img[data-v-484260f7]{width:360px;height:360px;margin:-100px 0 50px 0}p[data-v-484260f7]{font-size:24px;color:#333}
--------------------------------------------------------------------------------
/static/css/chunk-12d51ddd.1ad558e5.css:
--------------------------------------------------------------------------------
1 | footer[data-v-0de4ef22]{position:absolute;right:0;bottom:0;width:100%;border-top:1px solid #e9e9e9;padding:10px 16px;background:#fff;text-align:right;z-index:2}.password_main[data-v-f2a41fb8]{background:#fff}.search_box[data-v-f2a41fb8]{height:52px}
--------------------------------------------------------------------------------
/static/css/chunk-1a0b2b5c.a8a68973.css:
--------------------------------------------------------------------------------
1 | footer[data-v-0bf39215]{position:absolute;right:0;bottom:0;width:100%;border-top:1px solid #e9e9e9;padding:10px 16px;background:#fff;text-align:right;z-index:2}.password_main[data-v-25027e0f]{background:#fff}.search_box[data-v-25027e0f]{height:52px}
--------------------------------------------------------------------------------
/static/css/chunk-1a7b3b92.14ebf83b.css:
--------------------------------------------------------------------------------
1 | .content[data-v-73c487fc]{padding-top:80px;margin:0 auto;text-align:center}.content img[data-v-73c487fc]{width:340px;height:340px}.content div[data-v-73c487fc]{padding-left:50px}
--------------------------------------------------------------------------------
/static/css/chunk-2bfdc242.e06f2390.css:
--------------------------------------------------------------------------------
1 | .auditHistory_main[data-v-0247b3e4]{background:#fff}.auditHistory_main .search_box[data-v-0247b3e4]{height:60px}
--------------------------------------------------------------------------------
/static/css/chunk-2df1b604.f3367566.css:
--------------------------------------------------------------------------------
1 | [data-v-21c9ba51] .ant-modal{margin:0;padding:0}[data-v-21c9ba51] .ant-modal /deep/ .ant-modal-body{padding:0}#player_box[data-v-21c9ba51]{width:100%;height:calc(100vh - 108px);z-index:0;overflow-y:scroll;position:relative;background:#000}#player_box>div[data-v-21c9ba51]{width:100%;height:calc(100vh - 108px);margin:0 auto}.icons[data-v-21c9ba51]{font-size:100px;opacity:0;color:#0ba360;position:fixed;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transition:all .2s;transition:all .2s}.history_main[data-v-47ee15e6]{background:#fff}.history_main .search_box[data-v-47ee15e6]{height:60px}
--------------------------------------------------------------------------------
/static/css/chunk-31241ef2.eeaeef32.css:
--------------------------------------------------------------------------------
1 | footer[data-v-2bfcd38d]{position:absolute;right:0;bottom:0;width:100%;border-top:1px solid #e9e9e9;padding:10px 16px;background:#fff;text-align:right;z-index:2}.group_main[data-v-5053d367]{background:#fff}.search_box[data-v-5053d367]{height:52px}
--------------------------------------------------------------------------------
/static/css/chunk-3168254b.f9920608.css:
--------------------------------------------------------------------------------
1 | [data-v-68d08ea0] .ant-modal{margin:0;padding:0}[data-v-68d08ea0] .ant-modal /deep/ .ant-modal-body{padding:0}#player_box[data-v-68d08ea0]{width:100%;height:calc(100vh - 108px);z-index:0;overflow-y:scroll;position:relative;background:#000}#player_box>div[data-v-68d08ea0]{width:100%;height:calc(100vh - 108px);margin:0 auto}.icons[data-v-68d08ea0]{font-size:100px;opacity:0;color:#0ba360;position:fixed;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transition:all .2s;transition:all .2s}.history_main[data-v-402dc2d7]{background:#fff}.history_main .search_box[data-v-402dc2d7]{height:60px}
--------------------------------------------------------------------------------
/static/css/chunk-33e99cce.16644974.css:
--------------------------------------------------------------------------------
1 | .block[data-v-4880a658]{display:-webkit-box;display:-ms-flexbox;display:flex;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.block img[data-v-4880a658]{width:360px;height:360px}.block .block_right[data-v-4880a658]{margin:0 0 0 100px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.block .block_right p[data-v-4880a658]{margin:0 0 30px 0;color:#333;font-size:24px}
--------------------------------------------------------------------------------
/static/css/chunk-430c3000.b4a69e88.css:
--------------------------------------------------------------------------------
1 | .content[data-v-24dd4a8e]{padding-top:80px;margin:0 auto;text-align:center}.content img[data-v-24dd4a8e]{width:340px;height:340px}.content div[data-v-24dd4a8e]{padding-left:50px}
--------------------------------------------------------------------------------
/static/css/chunk-44658e0c.bf712af1.css:
--------------------------------------------------------------------------------
1 | .auditHistory_main[data-v-f4191668]{background:#fff}.auditHistory_main .search_box[data-v-f4191668]{height:60px}
--------------------------------------------------------------------------------
/static/css/chunk-48659421.4142f3e4.css:
--------------------------------------------------------------------------------
1 | footer[data-v-0d9b3e0d]{position:absolute;right:0;bottom:0;width:100%;border-top:1px solid #e9e9e9;padding:10px 16px;background:#fff;text-align:right;z-index:2}.password_main[data-v-3607fda5]{background:#fff}.search_box[data-v-3607fda5]{height:52px}
--------------------------------------------------------------------------------
/static/css/chunk-50dd65dd.738aae87.css:
--------------------------------------------------------------------------------
1 | .operationLog_main[data-v-10e044f8]{background:#fff}.operationLog_main .search_box[data-v-10e044f8]{height:60px}
--------------------------------------------------------------------------------
/static/css/chunk-55cec527.8cf73e6f.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/css/chunk-55cec527.8cf73e6f.css.gz
--------------------------------------------------------------------------------
/static/css/chunk-5cc48762.430cebac.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/css/chunk-5cc48762.430cebac.css.gz
--------------------------------------------------------------------------------
/static/css/chunk-63f37384.8cf73e6f.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/css/chunk-63f37384.8cf73e6f.css.gz
--------------------------------------------------------------------------------
/static/css/chunk-64c39154.9cb2bf59.css:
--------------------------------------------------------------------------------
1 | .online_main[data-v-77ef36cc]{background:#fff}.online_main .search_box[data-v-77ef36cc]{height:60px}
--------------------------------------------------------------------------------
/static/css/chunk-66929e3b.34313ec6.css:
--------------------------------------------------------------------------------
1 | h3[data-v-0691ba2e]{font-weight:1000;font-size:14px}footer[data-v-0691ba2e]{position:absolute;bottom:0;z-index:3;background:#fff;width:100%;left:0;padding:15px;border-top:1px solid #e8e8e8}.drawer_title[data-v-0691ba2e]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;font-size:1.17em}[data-v-0691ba2e] .ant-alert{padding:1px 30px 2px 37px}[data-v-0691ba2e] .ant-alert-icon{top:5.5px}[data-v-0691ba2e] .ant-alert-close-icon{top:1px}.top_search[data-v-69529706]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding-bottom:12px}.table_cell[data-v-69529706]{margin:-10px}.table_cell p[data-v-69529706]{margin:0;padding:10px;height:42px}.table_cell p[data-v-69529706]:nth-of-type(2){border-top:1px solid #e8e8e8}
--------------------------------------------------------------------------------
/static/css/chunk-68d3718b.b7557ece.css:
--------------------------------------------------------------------------------
1 | .operationLog_main[data-v-c2c4bc90]{background:#fff}.operationLog_main .search_box[data-v-c2c4bc90]{height:60px}
--------------------------------------------------------------------------------
/static/css/chunk-6938f9b8.be2db2f8.css:
--------------------------------------------------------------------------------
1 | .main[data-v-f1c4ca3e]{background:#fff}.search_box[data-v-f1c4ca3e]{margin:0 0 20px 0}.content[data-v-f1c4ca3e]{padding:20px}.content .infomation[data-v-f1c4ca3e]{margin:0 0 20px 0}.content .infomation .info[data-v-f1c4ca3e]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.content .infomation .info span[data-v-f1c4ca3e]{-webkit-box-flex:0px;-ms-flex:0px 1 1;flex:0px 1 1}
--------------------------------------------------------------------------------
/static/css/chunk-6af86718.46a17afc.css:
--------------------------------------------------------------------------------
1 | .block[data-v-0ca2af12]{display:-webkit-box;display:-ms-flexbox;display:flex;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.block img[data-v-0ca2af12]{width:360px;height:360px}.block .block_right[data-v-0ca2af12]{margin:0 0 0 100px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.block .block_right p[data-v-0ca2af12]{margin:0 0 30px 0;color:#333;font-size:24px}
--------------------------------------------------------------------------------
/static/css/chunk-6c510798.99901381.css:
--------------------------------------------------------------------------------
1 | .online_main[data-v-363a394c]{background:#fff}.online_main .search_box[data-v-363a394c]{height:60px}
--------------------------------------------------------------------------------
/static/css/chunk-740dd5c8.8cf73e6f.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/css/chunk-740dd5c8.8cf73e6f.css.gz
--------------------------------------------------------------------------------
/static/css/chunk-78db90a6.846c0066.css:
--------------------------------------------------------------------------------
1 | .time_item[data-v-76785c1b] .ant-form-item-control{line-height:normal!important;margin-top:10px}.bottom_btns[data-v-57270630]{position:absolute;right:0;bottom:0;width:100%;border-top:1px solid #e9e9e9;padding:10px 16px;background:#fff;text-align:right;z-index:1}.top_search[data-v-764a3795]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding-bottom:10px}.search_box[data-v-764a3795]{margin-bottom:10px}
--------------------------------------------------------------------------------
/static/css/chunk-795bb688.6a1e5818.css:
--------------------------------------------------------------------------------
1 | footer[data-v-5381b1ac]{position:absolute;right:0;bottom:0;width:100%;border-top:1px solid #e9e9e9;padding:10px 16px;background:#fff;text-align:right;z-index:2}.password_main[data-v-4dcf551b]{background:#fff}.search_box[data-v-4dcf551b]{height:52px}
--------------------------------------------------------------------------------
/static/css/chunk-7b6dfdbc.cd3459f2.css:
--------------------------------------------------------------------------------
1 | .center[data-v-59389742]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}img[data-v-59389742]{width:360px;height:360px;margin:-100px 0 50px 0}p[data-v-59389742]{font-size:24px;color:#333}
--------------------------------------------------------------------------------
/static/css/chunk-9aefbc4c.d0619e25.css:
--------------------------------------------------------------------------------
1 | footer[data-v-84d02bce]{position:absolute;right:0;bottom:0;width:100%;border-top:1px solid #e9e9e9;padding:10px 16px;background:#fff;text-align:right;z-index:2}.group_main[data-v-aa827eb0]{background:#fff}.search_box[data-v-aa827eb0]{height:52px}
--------------------------------------------------------------------------------
/static/css/chunk-c01e793a.385433c7.css:
--------------------------------------------------------------------------------
1 | .time_item[data-v-da59ef10] .ant-form-item-control{line-height:normal!important;margin-top:10px}.bottom_btns[data-v-524c2771]{position:absolute;right:0;bottom:0;width:100%;border-top:1px solid #e9e9e9;padding:10px 16px;background:#fff;text-align:right;z-index:1}.top_search[data-v-2f222dea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding-bottom:10px}.search_box[data-v-2f222dea]{margin-bottom:10px}
--------------------------------------------------------------------------------
/static/css/chunk-d5dec398.8cf73e6f.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/css/chunk-d5dec398.8cf73e6f.css.gz
--------------------------------------------------------------------------------
/static/css/chunk-d68bb5ce.055f4115.css:
--------------------------------------------------------------------------------
1 | .main[data-v-61634e02]{background:#fff}.search_box[data-v-61634e02]{margin:0 0 20px 0}.content[data-v-61634e02]{padding:20px}.content .infomation[data-v-61634e02]{margin:0 0 20px 0}.content .infomation .info[data-v-61634e02]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.content .infomation .info span[data-v-61634e02]{-webkit-box-flex:0px;-ms-flex:0px 1 1;flex:0px 1 1}
--------------------------------------------------------------------------------
/static/css/chunk-e58265d8.8cf73e6f.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/css/chunk-e58265d8.8cf73e6f.css.gz
--------------------------------------------------------------------------------
/static/css/chunk-vendors.995993b1.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/css/chunk-vendors.995993b1.css.gz
--------------------------------------------------------------------------------
/static/css/chunk-vendors.a7631610.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/css/chunk-vendors.a7631610.css.gz
--------------------------------------------------------------------------------
/static/css/error.135d66d6.css:
--------------------------------------------------------------------------------
1 | .center[data-v-59389742]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}img[data-v-59389742]{width:360px;height:360px;margin:-100px 0 50px 0}p[data-v-59389742]{font-size:24px;color:#333}.center[data-v-0c49e004]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}img[data-v-0c49e004]{width:360px;height:360px;margin:-100px 0 50px 0}p[data-v-0c49e004]{font-size:24px;color:#333}
--------------------------------------------------------------------------------
/static/css/error.1c40ccb7.css:
--------------------------------------------------------------------------------
1 | .center[data-v-484260f7]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}img[data-v-484260f7]{width:360px;height:360px;margin:-100px 0 50px 0}p[data-v-484260f7]{font-size:24px;color:#333}.center[data-v-3bc4021a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}img[data-v-3bc4021a]{width:360px;height:360px;margin:-100px 0 50px 0}p[data-v-3bc4021a]{font-size:24px;color:#333}
--------------------------------------------------------------------------------
/static/css/fail.b63ee882.css:
--------------------------------------------------------------------------------
1 | .center[data-v-0c49e004]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}img[data-v-0c49e004]{width:360px;height:360px;margin:-100px 0 50px 0}p[data-v-0c49e004]{font-size:24px;color:#333}
--------------------------------------------------------------------------------
/static/css/fail.fdb673e0.css:
--------------------------------------------------------------------------------
1 | .center[data-v-3bc4021a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}img[data-v-3bc4021a]{width:360px;height:360px;margin:-100px 0 50px 0}p[data-v-3bc4021a]{font-size:24px;color:#333}
--------------------------------------------------------------------------------
/static/img/authorization_expired.3d95508f.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/img/authorization_expired.3d95508f.png
--------------------------------------------------------------------------------
/static/img/function_not_authorized.5a8ed9c3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/img/function_not_authorized.5a8ed9c3.png
--------------------------------------------------------------------------------
/static/img/no-auth.cea6aff4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/img/no-auth.cea6aff4.png
--------------------------------------------------------------------------------
/static/img/not_authorized.7d30926b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/img/not_authorized.7d30926b.png
--------------------------------------------------------------------------------
/static/img/ops-logo.d35433bb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/img/ops-logo.d35433bb.png
--------------------------------------------------------------------------------
/static/img/platform_not_authorized.8e05bf34.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/img/platform_not_authorized.8e05bf34.png
--------------------------------------------------------------------------------
/static/js/app.03462b4a.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.03462b4a.js.gz
--------------------------------------------------------------------------------
/static/js/app.0d467df0.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.0d467df0.js.gz
--------------------------------------------------------------------------------
/static/js/app.0f167e7a.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.0f167e7a.js.gz
--------------------------------------------------------------------------------
/static/js/app.0fb5feb2.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.0fb5feb2.js.gz
--------------------------------------------------------------------------------
/static/js/app.0fc4bc66.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.0fc4bc66.js.gz
--------------------------------------------------------------------------------
/static/js/app.16090c8f.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.16090c8f.js.gz
--------------------------------------------------------------------------------
/static/js/app.1de42670.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.1de42670.js.gz
--------------------------------------------------------------------------------
/static/js/app.246f93c4.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.246f93c4.js.gz
--------------------------------------------------------------------------------
/static/js/app.253bc463.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.253bc463.js.gz
--------------------------------------------------------------------------------
/static/js/app.27453d83.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.27453d83.js.gz
--------------------------------------------------------------------------------
/static/js/app.27fcddae.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.27fcddae.js.gz
--------------------------------------------------------------------------------
/static/js/app.2b9a7041.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.2b9a7041.js.gz
--------------------------------------------------------------------------------
/static/js/app.326114e0.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.326114e0.js.gz
--------------------------------------------------------------------------------
/static/js/app.331e4af2.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.331e4af2.js.gz
--------------------------------------------------------------------------------
/static/js/app.401a20c7.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.401a20c7.js.gz
--------------------------------------------------------------------------------
/static/js/app.43babfe2.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.43babfe2.js.gz
--------------------------------------------------------------------------------
/static/js/app.481b93eb.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.481b93eb.js.gz
--------------------------------------------------------------------------------
/static/js/app.4c0e6a2e.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.4c0e6a2e.js.gz
--------------------------------------------------------------------------------
/static/js/app.58e71f87.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.58e71f87.js.gz
--------------------------------------------------------------------------------
/static/js/app.68563477.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.68563477.js.gz
--------------------------------------------------------------------------------
/static/js/app.6b6e82cc.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.6b6e82cc.js.gz
--------------------------------------------------------------------------------
/static/js/app.6e59fdf3.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.6e59fdf3.js.gz
--------------------------------------------------------------------------------
/static/js/app.73ee0b83.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.73ee0b83.js.gz
--------------------------------------------------------------------------------
/static/js/app.75eb4fe8.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.75eb4fe8.js.gz
--------------------------------------------------------------------------------
/static/js/app.7aa77404.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.7aa77404.js.gz
--------------------------------------------------------------------------------
/static/js/app.7e774167.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.7e774167.js.gz
--------------------------------------------------------------------------------
/static/js/app.7f75ad31.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.7f75ad31.js.gz
--------------------------------------------------------------------------------
/static/js/app.81754102.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.81754102.js.gz
--------------------------------------------------------------------------------
/static/js/app.8ac04f93.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.8ac04f93.js.gz
--------------------------------------------------------------------------------
/static/js/app.8acab021.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.8acab021.js.gz
--------------------------------------------------------------------------------
/static/js/app.8c3ba6c4.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.8c3ba6c4.js.gz
--------------------------------------------------------------------------------
/static/js/app.8cb9d572.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.8cb9d572.js.gz
--------------------------------------------------------------------------------
/static/js/app.8d854b3e.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.8d854b3e.js.gz
--------------------------------------------------------------------------------
/static/js/app.95c43bf2.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.95c43bf2.js.gz
--------------------------------------------------------------------------------
/static/js/app.967ef477.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.967ef477.js.gz
--------------------------------------------------------------------------------
/static/js/app.9681f36c.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.9681f36c.js.gz
--------------------------------------------------------------------------------
/static/js/app.9b3484c4.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.9b3484c4.js.gz
--------------------------------------------------------------------------------
/static/js/app.9e24ea21.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.9e24ea21.js.gz
--------------------------------------------------------------------------------
/static/js/app.9e6c4e21.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.9e6c4e21.js.gz
--------------------------------------------------------------------------------
/static/js/app.a317a640.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.a317a640.js.gz
--------------------------------------------------------------------------------
/static/js/app.a5dbe4b2.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.a5dbe4b2.js.gz
--------------------------------------------------------------------------------
/static/js/app.a6cc2131.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.a6cc2131.js.gz
--------------------------------------------------------------------------------
/static/js/app.ae2cf56b.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.ae2cf56b.js.gz
--------------------------------------------------------------------------------
/static/js/app.b0504c39.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.b0504c39.js.gz
--------------------------------------------------------------------------------
/static/js/app.b1e02108.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.b1e02108.js.gz
--------------------------------------------------------------------------------
/static/js/app.b21ed608.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.b21ed608.js.gz
--------------------------------------------------------------------------------
/static/js/app.b7e0f467.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.b7e0f467.js.gz
--------------------------------------------------------------------------------
/static/js/app.c1ba643f.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.c1ba643f.js.gz
--------------------------------------------------------------------------------
/static/js/app.c5785fb1.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.c5785fb1.js.gz
--------------------------------------------------------------------------------
/static/js/app.ca6215d0.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.ca6215d0.js.gz
--------------------------------------------------------------------------------
/static/js/app.ccba7ea2.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.ccba7ea2.js.gz
--------------------------------------------------------------------------------
/static/js/app.d391194e.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.d391194e.js.gz
--------------------------------------------------------------------------------
/static/js/app.d7244fd8.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.d7244fd8.js.gz
--------------------------------------------------------------------------------
/static/js/app.d78a8294.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.d78a8294.js.gz
--------------------------------------------------------------------------------
/static/js/app.d8b1f42f.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.d8b1f42f.js.gz
--------------------------------------------------------------------------------
/static/js/app.d949850e.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.d949850e.js.gz
--------------------------------------------------------------------------------
/static/js/app.dccb3197.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.dccb3197.js.gz
--------------------------------------------------------------------------------
/static/js/app.e3d4e8c2.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.e3d4e8c2.js.gz
--------------------------------------------------------------------------------
/static/js/app.e9d77e87.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.e9d77e87.js.gz
--------------------------------------------------------------------------------
/static/js/app.ee5afbda.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.ee5afbda.js.gz
--------------------------------------------------------------------------------
/static/js/app.efec4820.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.efec4820.js.gz
--------------------------------------------------------------------------------
/static/js/app.f071a45a.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.f071a45a.js.gz
--------------------------------------------------------------------------------
/static/js/app.f2605cf7.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.f2605cf7.js.gz
--------------------------------------------------------------------------------
/static/js/app.f4d970bb.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.f4d970bb.js.gz
--------------------------------------------------------------------------------
/static/js/app.fed4f572.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/app.fed4f572.js.gz
--------------------------------------------------------------------------------
/static/js/asciinema-player.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/asciinema-player.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-011e82c5.0ad1e9f7.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-011e82c5.0ad1e9f7.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-01ec29fd.d6d994cf.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-01ec29fd.d6d994cf.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-02633ef1.9ab47fce.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-02633ef1.9ab47fce.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-02633ef1.a680d19e.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-02633ef1.a680d19e.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-02633ef1.b6b8a773.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-02633ef1.b6b8a773.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-0349ce9e.263e07e7.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-0349ce9e.263e07e7.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-0349ce9e.740736b0.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-0349ce9e.740736b0.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-0349ce9e.ab0d7396.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-0349ce9e.ab0d7396.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-0349ce9e.b0660ff1.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-0349ce9e.b0660ff1.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-0349ce9e.d18de7f8.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-0349ce9e.d18de7f8.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-05fa21f6.743f1a9a.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-05fa21f6.743f1a9a.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-08284dd4.6bd6d639.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-08284dd4.6bd6d639.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-09484404.2074e4e3.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-09484404.2074e4e3.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-0a5aa114.26dbe387.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-0a5aa114.26dbe387.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-0a8658f8.51ac2bd7.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-0a8658f8.51ac2bd7.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-0b207afe.596ed78f.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-0b207afe.596ed78f.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-0bfd1d3b.47c9ef3d.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-0bfd1d3b.47c9ef3d.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-0bfd1d3b.882cff25.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-0bfd1d3b.882cff25.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-0bfd1d3b.c5788b02.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-0bfd1d3b.c5788b02.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-0bfd1d3b.cb727fbc.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-0bfd1d3b.cb727fbc.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-0c5e241d.01c799a2.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-0c5e241d.01c799a2.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-0d9f612a.72255313.js:
--------------------------------------------------------------------------------
1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-0d9f612a"],{2161:function(t,e,n){t.exports=n.p+"img/platform_not_authorized.8e05bf34.png"},"3a01":function(t,e,n){},"887e":function(t,e,n){"use strict";var a=n("3a01"),c=n.n(a);c.a},e409:function(t,e,n){"use strict";n.r(e);var a=function(){var t=this,e=t.$createElement;t._self._c;return t._m(0)},c=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"center"},[a("img",{attrs:{src:n("2161"),alt:""}}),a("p",[t._v("您暂未授权此平台,请联系管理员授权")])])}],r=n("2af9"),s={components:{ExceptionPage:r["a"]}},i=s,o=(n("887e"),n("2877")),u=Object(o["a"])(i,a,c,!1,null,"484260f7",null);e["default"]=u.exports}}]);
--------------------------------------------------------------------------------
/static/js/chunk-0edbadb3.5be93e2a.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-0edbadb3.5be93e2a.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-0fefdb7c.13ff7107.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-0fefdb7c.13ff7107.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-10908d7f.2a59da90.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-10908d7f.2a59da90.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-10908d7f.f14bcb1c.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-10908d7f.f14bcb1c.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-112e279e.8334a83e.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-112e279e.8334a83e.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-12ec570e.7789408d.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-12ec570e.7789408d.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-13403366.c54f247a.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-13403366.c54f247a.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-14cd8511.1a9140e0.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-14cd8511.1a9140e0.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-14cd8511.51445ad9.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-14cd8511.51445ad9.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-1a7b3b92.2b063395.js:
--------------------------------------------------------------------------------
1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-1a7b3b92"],{"2bcc":function(n,t,o){},"431f":function(n,t,o){"use strict";var c=o("2bcc"),i=o.n(c);i.a},"9a3c":function(n,t,o){"use strict";o.r(t);var c=function(){var n=this,t=n.$createElement,c=n._self._c||t;return c("div",[c("div",{staticClass:"content"},[c("img",{attrs:{src:o("eb2b"),alt:""}}),c("div",[n._v(" 您没有权限访问或操作此资源,请联系管理员申请权限。"),c("a-button",{attrs:{type:"link"},on:{click:n.pushRouter}},[n._v("去申请")])],1)])])},i=[],a={data:function(){return{}},methods:{pushRouter:function(){var n=window.location.origin;window.open(n+"/o/bk_iam/apply-join-user-group")}},mounted:function(){}},e=a,u=(o("431f"),o("2877")),r=Object(u["a"])(e,c,i,!1,null,"73c487fc",null);t["default"]=r.exports},eb2b:function(n,t,o){n.exports=o.p+"img/no-auth.cea6aff4.png"}}]);
--------------------------------------------------------------------------------
/static/js/chunk-1bb0e80c.aa324237.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-1bb0e80c.aa324237.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-1ce91c43.39951165.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-1ce91c43.39951165.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-1ce91c43.d94f8d25.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-1ce91c43.d94f8d25.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-1d40cac5.16e4e852.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-1d40cac5.16e4e852.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-1dae0a5d.02b66d32.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-1dae0a5d.02b66d32.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-1db14380.cb299650.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-1db14380.cb299650.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-1e119f10.8114f16e.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-1e119f10.8114f16e.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-1fa0d614.3b68fb0b.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-1fa0d614.3b68fb0b.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-21311082.ce1360fe.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-21311082.ce1360fe.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-2267bdc2.62f2ba1a.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-2267bdc2.62f2ba1a.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-2431c2b6.a5c9b473.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-2431c2b6.a5c9b473.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-2472b8ba.555416f3.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-2472b8ba.555416f3.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-24a93f69.7f69db2b.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-24a93f69.7f69db2b.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-261a2018.fa89e7b6.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-261a2018.fa89e7b6.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-29dff3bb.b058b9bd.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-29dff3bb.b058b9bd.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-2b185ec5.0c36549c.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-2b185ec5.0c36549c.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-2b185ec5.5d5d42c6.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-2b185ec5.5d5d42c6.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-2b185ec5.6514cb1c.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-2b185ec5.6514cb1c.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-2d209b21.9fd5e548.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-2d209b21.9fd5e548.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-2d20fa8d.9e51d467.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-2d20fa8d.9e51d467.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-2da89e80.60b223c7.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-2da89e80.60b223c7.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-2df2825a.fdec68c9.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-2df2825a.fdec68c9.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-30c8d119.02715029.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-30c8d119.02715029.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-344cc402.100a4754.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-344cc402.100a4754.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-344cc402.e18796fc.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-344cc402.e18796fc.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-3455b73a.813c7539.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-3455b73a.813c7539.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-347c31d1.5f6a5e30.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-347c31d1.5f6a5e30.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-38a4603b.ca89dcc1.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-38a4603b.ca89dcc1.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-3b7b7e50.14cb864e.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-3b7b7e50.14cb864e.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-3b8391a7.7ebd6c81.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-3b8391a7.7ebd6c81.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-3b8391a7.8e572d15.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-3b8391a7.8e572d15.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-3b8391a7.a72a41c3.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-3b8391a7.a72a41c3.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-3b8391a7.d95ee1f0.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-3b8391a7.d95ee1f0.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-430c3000.c473120e.js:
--------------------------------------------------------------------------------
1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-430c3000"],{"51e6":function(n,t,o){"use strict";var e=o("d893"),i=o.n(e);i.a},"9a3c":function(n,t,o){"use strict";o.r(t);var e=function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",[e("div",{staticClass:"content"},[e("img",{attrs:{src:o("eb2b"),alt:""}}),e("div",[n._v(" 您没有权限访问或操作此资源,请联系管理员申请权限。"),e("a-button",{attrs:{type:"link"},on:{click:n.pushRouter}},[n._v("去申请")])],1)])])},i=[],a={data:function(){return{}},methods:{pushRouter:function(){var n=window.location.origin;window.open(n+"/o/bk_iam/apply-join-user-group")}},mounted:function(){}},u=a,c=(o("51e6"),o("2877")),r=Object(c["a"])(u,e,i,!1,null,"24dd4a8e",null);t["default"]=r.exports},d893:function(n,t,o){},eb2b:function(n,t,o){n.exports=o.p+"img/no-auth.cea6aff4.png"}}]);
--------------------------------------------------------------------------------
/static/js/chunk-43d8e85c.69fd1cc1.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-43d8e85c.69fd1cc1.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-49e0a490.944bc1da.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-49e0a490.944bc1da.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-4c0ecb98.b2a17298.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-4c0ecb98.b2a17298.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-51933dcd.39e4838a.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-51933dcd.39e4838a.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-53fdf1bf.20e79a51.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-53fdf1bf.20e79a51.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-55cec527.7f28f3ab.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-55cec527.7f28f3ab.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-5a2189bb.02d7f264.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-5a2189bb.02d7f264.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-5c3ae606.ba13e40c.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-5c3ae606.ba13e40c.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-5cc48762.211b32b4.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-5cc48762.211b32b4.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-5f7fa5c2.b4c09aee.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-5f7fa5c2.b4c09aee.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-60eda19b.cecee11a.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-60eda19b.cecee11a.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-624c336a.1ef61051.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-624c336a.1ef61051.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-63f37384.31d816c5.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-63f37384.31d816c5.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-63f37384.3403dc39.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-63f37384.3403dc39.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-63f37384.5cae8755.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-63f37384.5cae8755.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-64b4540c.7de5ead5.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-64b4540c.7de5ead5.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-64bedeae.4835d608.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-64bedeae.4835d608.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-64eb4f4c.44109589.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-64eb4f4c.44109589.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-6679e19e.5ec84af8.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-6679e19e.5ec84af8.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-672bcd2c.3f0ae9ae.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-672bcd2c.3f0ae9ae.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-67712dd2.9c43fd4e.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-67712dd2.9c43fd4e.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-68ba6051.b27b9632.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-68ba6051.b27b9632.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-68caa1f1.aa3251f3.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-68caa1f1.aa3251f3.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-699f1385.7aea2788.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-699f1385.7aea2788.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-6a65e99e.b2077492.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-6a65e99e.b2077492.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-6a709f79.57afaf81.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-6a709f79.57afaf81.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-6a950ac5.c1267fbf.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-6a950ac5.c1267fbf.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-6ef8885f.1d18f32d.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-6ef8885f.1d18f32d.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-6f161320.befd821b.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-6f161320.befd821b.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-72eaece6.9147f8a1.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-72eaece6.9147f8a1.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-739ab948.39138336.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-739ab948.39138336.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-739ab948.7fdb93f5.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-739ab948.7fdb93f5.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-739ab948.f218951e.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-739ab948.f218951e.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-740dd5c8.3728d269.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-740dd5c8.3728d269.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-740dd5c8.397cad7c.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-740dd5c8.397cad7c.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-7798706e.73e67971.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-7798706e.73e67971.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-788cfa89.52aec264.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-788cfa89.52aec264.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-7b6dfdbc.044d6021.js:
--------------------------------------------------------------------------------
1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-7b6dfdbc"],{2161:function(t,n,e){t.exports=e.p+"img/platform_not_authorized.8e05bf34.png"},"703d":function(t,n,e){},af30:function(t,n,e){"use strict";var a=e("703d"),c=e.n(a);c.a},e409:function(t,n,e){"use strict";e.r(n);var a=function(){var t=this,n=t.$createElement;t._self._c;return t._m(0)},c=[function(){var t=this,n=t.$createElement,a=t._self._c||n;return a("div",{staticClass:"center"},[a("img",{attrs:{src:e("2161"),alt:""}}),a("p",[t._v("您暂未授权此平台,请联系管理员授权")])])}],r=e("2af9"),s={components:{ExceptionPage:r["a"]}},i=s,o=(e("af30"),e("2877")),u=Object(o["a"])(i,a,c,!1,null,"59389742",null);n["default"]=u.exports}}]);
--------------------------------------------------------------------------------
/static/js/chunk-7c5ee4b6.a34768d1.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-7c5ee4b6.a34768d1.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-7e8c4e64.6f97e3c2.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-7e8c4e64.6f97e3c2.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-7f7412be.98bf8f7d.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-7f7412be.98bf8f7d.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-8f4c8070.1a1675f3.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-8f4c8070.1a1675f3.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-91e4d73e.d3769a81.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-91e4d73e.d3769a81.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-95d3ed08.7846ba4a.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-95d3ed08.7846ba4a.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-95d3ed08.968a16f5.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-95d3ed08.968a16f5.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-9644b8b2.34bf0c85.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-9644b8b2.34bf0c85.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-98775768.3e6862d6.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-98775768.3e6862d6.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-b7db2b34.13597ce2.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-b7db2b34.13597ce2.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-c26aaecc.364d7128.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-c26aaecc.364d7128.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-c54ca3ca.324f30e2.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-c54ca3ca.324f30e2.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-c68890a8.97ad7d33.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-c68890a8.97ad7d33.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-d1b3d51c.f2d73cfb.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-d1b3d51c.f2d73cfb.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-d5dec398.15587e1b.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-d5dec398.15587e1b.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-d5dec398.1819df82.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-d5dec398.1819df82.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-db0e83f0.f115908f.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-db0e83f0.f115908f.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-dd3d8a14.232c99b5.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-dd3d8a14.232c99b5.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-dd3d8a14.48b014fc.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-dd3d8a14.48b014fc.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-dd3d8a14.4ab595fc.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-dd3d8a14.4ab595fc.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-dd3d8a14.6bc45f3a.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-dd3d8a14.6bc45f3a.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-dd3d8a14.be4e896a.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-dd3d8a14.be4e896a.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-dd3d8a14.c8617372.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-dd3d8a14.c8617372.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-dff0a482.25abdca6.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-dff0a482.25abdca6.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-e1da80e8.75564fe6.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-e1da80e8.75564fe6.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-e58265d8.8f39092f.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-e58265d8.8f39092f.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-e6df9160.40c5ebf9.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-e6df9160.40c5ebf9.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-e8f2939e.6c67c7f2.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-e8f2939e.6c67c7f2.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-ed57deb0.d984dfaf.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-ed57deb0.d984dfaf.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-f14de8f8.4fde624c.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-f14de8f8.4fde624c.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-f57c8b94.950823d4.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-f57c8b94.950823d4.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-f57c8b94.b53250c4.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-f57c8b94.b53250c4.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-f57c8b94.f8757fcb.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-f57c8b94.f8757fcb.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-f6b5184c.bc640806.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-f6b5184c.bc640806.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-fe62f1ae.edfa0eee.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-fe62f1ae.edfa0eee.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-fe62f1ae.f594444f.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-fe62f1ae.f594444f.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-vendors.05ba0f99.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-vendors.05ba0f99.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-vendors.2fabffc9.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-vendors.2fabffc9.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-vendors.af9f0a86.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-vendors.af9f0a86.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-vendors.b00c409f.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-vendors.b00c409f.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-vendors.c6aad1c7.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-vendors.c6aad1c7.js.gz
--------------------------------------------------------------------------------
/static/js/chunk-vendors.efdf40cf.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/js/chunk-vendors.efdf40cf.js.gz
--------------------------------------------------------------------------------
/static/js/fail.2d32b7c2.js:
--------------------------------------------------------------------------------
1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["fail"],{"576b":function(t,n,e){t.exports=e.p+"img/function_not_authorized.5a8ed9c3.png"},"7fa6":function(t,n,e){},cc89:function(t,n,e){"use strict";e.r(n);var c=function(){var t=this,n=t.$createElement;t._self._c;return t._m(0)},a=[function(){var t=this,n=t.$createElement,c=t._self._c||n;return c("div",{staticClass:"center"},[c("img",{attrs:{src:e("576b"),alt:""}}),c("p",[t._v("您暂未授权此功能,请联系管理员授权")])])}],i=e("2af9"),r={components:{ExceptionPage:i["a"]}},s=r,o=(e("fe8d"),e("2877")),f=Object(o["a"])(s,c,a,!1,null,"3bc4021a",null);n["default"]=f.exports},fe8d:function(t,n,e){"use strict";var c=e("7fa6"),a=e.n(c);a.a}}]);
--------------------------------------------------------------------------------
/static/js/fail.8d555f56.js:
--------------------------------------------------------------------------------
1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["fail"],{"54bb":function(t,n,e){},"576b":function(t,n,e){t.exports=e.p+"img/function_not_authorized.5a8ed9c3.png"},"909f":function(t,n,e){"use strict";var c=e("54bb"),a=e.n(c);a.a},cc89:function(t,n,e){"use strict";e.r(n);var c=function(){var t=this,n=t.$createElement;t._self._c;return t._m(0)},a=[function(){var t=this,n=t.$createElement,c=t._self._c||n;return c("div",{staticClass:"center"},[c("img",{attrs:{src:e("576b"),alt:""}}),c("p",[t._v("您暂未授权此功能,请联系管理员授权")])])}],i=e("2af9"),r={components:{ExceptionPage:i["a"]}},s=r,o=(e("909f"),e("2877")),u=Object(o["a"])(s,c,a,!1,null,"0c49e004",null);n["default"]=u.exports}}]);
--------------------------------------------------------------------------------
/static/loading/loading.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/static/loading/option2/loading.css:
--------------------------------------------------------------------------------
1 | .preloading-animate{background:#ffffff;width:100%;height:100%;position:fixed;left:0;top:0;z-index:299;}.preloading-animate .preloading-wrapper{position:absolute;width:5rem;height:5rem;left:50%;top:50%;transform:translate(-50%,-50%);}.preloading-animate .preloading-wrapper .preloading-balls{font-size:5rem;}
--------------------------------------------------------------------------------
/static/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unixhot/opsany-bastion/f84e9a1aa567f9bf6e50939d761d8ec2e26915fb/static/logo.png
--------------------------------------------------------------------------------
/urls.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | from django.conf.urls import include, url
4 | from django.contrib import admin
5 |
6 | urlpatterns = [
7 | url(r'^admin/', admin.site.urls),
8 | url(r'^account/', include('blueapps.account.urls')),
9 | url(r'^', include('index.urls')),
10 | url(r'^api/bastion/v0_1/', include('bastion.urls')),
11 | ]
12 |
--------------------------------------------------------------------------------
/websocket-requirements.txt:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # 工程预装模块
3 | # 需要额外的python包,可直接在文件后面添加
4 | # 请确保指定的包和版本号,可通过pip安装
5 |
6 | # blueapps requirement
7 | Django==2.2.6
8 | mysqlclient==1.4.4
9 | MarkupSafe==1.1
10 | Mako==1.0.6
11 | requests==2.25.0
12 | urllib3==1.26.2
13 | redis==2.10.6
14 | celery==3.1.25
15 | django-celery==3.2.1
16 | python-json-logger==0.1.7
17 | whitenoise==3.3.0
18 | six==1.11.0
19 | uwsgi==2.0.19.1
20 | daphne==2.2.1
21 |
22 | #v2 requirement
23 | httplib2==0.9.1
24 |
25 | # terminal
26 | bcrypt==3.2.0
27 | pycrypto==2.6.1
28 | cryptography==3.3.1
29 | django-cors-headers==3.2.1
30 | paramiko==2.7.2
31 | channels==2.1.4
32 | channels-redis==2.3.1
33 | django_redis==4.11.0
34 | gunicorn==19.9.0
35 | gevent==21.1.2
36 | XlsxWriter==1.2.8
37 | xlrd==1.2.0
38 | bk-iam==1.1.20
39 | uvicorn==0.11.8
40 |
--------------------------------------------------------------------------------
/wsgi.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | WSGI config for project.
4 |
5 | It exposes the WSGI callable as a module-level variable named ``application``.
6 |
7 | For more information on this file, see
8 | https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/
9 | """
10 |
11 | import os
12 |
13 | from blueapps.core.wsgi import get_wsgi_application
14 |
15 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
16 |
17 | application = get_wsgi_application()
18 |
--------------------------------------------------------------------------------