diff --git a/dump.rdb b/dump.rdb new file mode 100644 index 000000000..f245254c5 Binary files /dev/null and b/dump.rdb differ diff --git a/package.json b/package.json index aa56d6b7d..f9a85af28 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "lodash.set": "^4.3.2", "lodash.topairs": "^4.3.0", "lodash.values": "^4.3.0", + "moment": "^2.29.1", "moment-parseformat": "^3.0.0", "normalize.css": "7.0.0", "npm": "^7.8.0", diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index 266c07166..000000000 Binary files a/public/favicon.ico and /dev/null differ diff --git a/public/index.html b/public/index.html index 5a63fd379..081580329 100644 --- a/public/index.html +++ b/public/index.html @@ -8,7 +8,6 @@ - <%= webpackConfig.name %> diff --git a/src/assets/img/logo-text.png b/src/assets/img/logo-text.png deleted file mode 100644 index 0e27e3318..000000000 Binary files a/src/assets/img/logo-text.png and /dev/null differ diff --git a/src/assets/img/logo.png b/src/assets/img/logo.png deleted file mode 100644 index f3cf2d261..000000000 Binary files a/src/assets/img/logo.png and /dev/null differ diff --git a/src/components/AssetUserTable/index.vue b/src/components/AssetUserTable/index.vue index 6524a4c87..5ab436116 100644 --- a/src/components/AssetUserTable/index.vue +++ b/src/components/AssetUserTable/index.vue @@ -1,7 +1,7 @@ diff --git a/src/components/Dialog/index.vue b/src/components/Dialog/index.vue index 1c569f19c..99f6f8a67 100644 --- a/src/components/Dialog/index.vue +++ b/src/components/Dialog/index.vue @@ -74,7 +74,7 @@ export default { } .dialog-footer { - padding-right: 50px; + padding-right: 20px; } diff --git a/src/components/ListTable/TableAction/ImportTable.vue b/src/components/ListTable/TableAction/ImportTable.vue index 450eecc6c..96ca990dd 100644 --- a/src/components/ListTable/TableAction/ImportTable.vue +++ b/src/components/ListTable/TableAction/ImportTable.vue @@ -207,7 +207,7 @@ export default { if (!d) { return 0 } - if (!itemColData || !itemColData.length) { + if (typeof itemColData !== 'number' && (!itemColData || !itemColData.length)) { return 0 } return itemColData.length diff --git a/src/components/TableFormatters/ActionsFormatter.vue b/src/components/TableFormatters/ActionsFormatter.vue index 96c0542c9..8eaea0666 100644 --- a/src/components/TableFormatters/ActionsFormatter.vue +++ b/src/components/TableFormatters/ActionsFormatter.vue @@ -144,10 +144,11 @@ export default { let actions = [...this.defaultActions, ...this.extraActions] actions = _.cloneDeep(actions) actions = actions.map((v) => { - v.has = this.cleanBoolean(v, 'has') - v.can = this.cleanBoolean(v, 'can') - v.callback = this.cleanCallback(v) + v.has = this.cleanBoolean(v, 'has', true) + v.can = this.cleanBoolean(v, 'can', true) + v.callback = this.cleanCallback(v, 'callback') v.order = v.order || 100 + v.tip = this.cleanValue(v, 'tip') return v }) actions = actions.filter((v) => v.has) @@ -168,15 +169,15 @@ export default { } }, methods: { - cleanBoolean(item, attr) { + cleanBoolean(item, attr, defaults) { const ok = item[attr] if (typeof ok !== 'function') { - return ok === undefined ? true : ok + return ok === undefined ? defaults : ok } - return ok(this.row, this.cellValue) + return this.cleanValue(item, attr) }, - cleanCallback(item) { - const callback = item.callback + cleanCallback(item, attr) { + const callback = item[attr] const attrs = { reload: this.reload, row: this.row, @@ -185,6 +186,20 @@ export default { tableData: this.tableData } return () => { return callback.bind(this)(attrs) } + }, + cleanValue(item, attr) { + const value = item[attr] + if (!value || typeof value !== 'function') { + return value + } + const attrs = { + reload: this.reload, + row: this.row, + col: this.col, + cellValue: this.cellValue, + tableData: this.tableData + } + return value(attrs) } } } diff --git a/src/i18n/langs/cn.json b/src/i18n/langs/cn.json index 1a363ca73..4f42a6262 100644 --- a/src/i18n/langs/cn.json +++ b/src/i18n/langs/cn.json @@ -522,6 +522,9 @@ }, "route": { "": "", + "Accounts": "账号管理", + "AssetAccount": "资产账号", + "ApplicationAccount": "应用账号", "Ticket":"工单", "CommandConfirm": "命令复核", "AdminUserCreate": "创建管理用户", @@ -646,7 +649,8 @@ "Users": "用户管理", "WebFTP": "文件管理", "WebTerminal": "Web终端", - "Notifications": "通知" + "Notifications": "通知", + "SiteMessageList": "站内信" }, "sessions": { "StorageConfiguration": "存储配置", @@ -709,6 +713,7 @@ "common": "普通" }, "Monitor": "监控", + "XRDPNotSupport": "RDP 客户端会话, 暂不支持监控", "sessionMonitor": "监控", "TerminateTaskSendSuccessMsg": "终断任务已下发,请稍后刷新查看", "helpText": { @@ -1031,7 +1036,15 @@ "MessageType": "消息类型", "Receivers": "接收人", "Subscription": "消息订阅", - "ChangeReceiver": "修改消息接收人" + "ChangeReceiver": "修改消息接收人", + "Subject": "主题", + "Message": "消息", + "DeliveryTime": "发送时间", + "HasRead": "是否已读", + "Sender": "发送人", + "MarkAsRead": "标记已读", + "NoUnreadMsg": "暂无未读消息", + "SiteMessage": "站内信" }, "xpack": { "Admin": "管理员", diff --git a/src/i18n/langs/en.json b/src/i18n/langs/en.json index cd7e931fe..a29f36cc8 100644 --- a/src/i18n/langs/en.json +++ b/src/i18n/langs/en.json @@ -520,6 +520,9 @@ }, "route": { "": "", + "Accounts": "Accounts", + "AssetAccount": "Asset account", + "ApplicationAccount": "Application account", "Ticket": "Tickets", "CommandConfirm": "Command confirm", "AdminUserCreate": "Admin user create", @@ -644,7 +647,8 @@ "Users": "Users", "WebFTP": "WebFTP", "WebTerminal": "Web Terminal", - "Notifications": "Notifications" + "Notifications": "Notifications", + "SiteMessageList": "Site message" }, "sessions": { "StorageConfiguration": "Storage configuration", @@ -708,6 +712,7 @@ }, "Monitor": "Monitor", "sessionMonitor": "Session Monitor", + "XRDPNotSupport": "RDP Client session not support now", "TerminateTaskSendSuccessMsg": "Terminate task has been send, Please check later", "helpText": { "esUrl": "Tip: If you have multiple hosts, use comma (,) to split (eg: http://www.jumpserver.a.com,http://www.jumpserver.b.com)", @@ -1025,7 +1030,15 @@ "MessageType": "Message Type", "Receivers": "Receivers", "Subscription": "Subscription", - "ChangeReceiver": "Change Receivers" + "ChangeReceiver": "Change Receivers", + "Subject": "Subject", + "Message": "Message", + "DeliveryTime": "Delivery time", + "HasRead": "Has read", + "Sender": "Sender", + "MarkAsRead": "Mark as read", + "NoUnreadMsg": "No unread messages", + "SiteMessage": "Site messages" }, "xpack": { "Admin": "Admin", diff --git a/src/layout/components/NavBar/Logo.vue b/src/layout/components/NavBar/Logo.vue index 08bbec43a..b85e3ee71 100644 --- a/src/layout/components/NavBar/Logo.vue +++ b/src/layout/components/NavBar/Logo.vue @@ -2,13 +2,10 @@ @@ -26,10 +23,6 @@ export default { }, data() { return { - title: 'JumpServer', - logoText: require('@/assets/img/logo-text.png'), - logo: require('@/assets/img/logo.png'), - xpackData: {} } }, computed: { @@ -37,16 +30,14 @@ export default { 'publicSettings' ]), // eslint-disable-next-line vue/return-in-computed-property + logoTextSrc() { + return this.publicSettings.LOGO_URLS.logo_index + }, logoSrc() { - if (this.publicSettings.LOGO_URLS.logo_index !== '/static/img/logo_text.png') { - return this.publicSettings.LOGO_URLS.logo_index - } else { - return this.logoText - } + return this.publicSettings.LOGO_URLS.logo_logout } }, created() { - } } diff --git a/src/layout/components/NavHeader/Language.vue b/src/layout/components/NavHeader/Language.vue index 945ab13af..909babeae 100644 --- a/src/layout/components/NavHeader/Language.vue +++ b/src/layout/components/NavHeader/Language.vue @@ -10,7 +10,6 @@ + + diff --git a/src/layout/components/NavHeader/index.vue b/src/layout/components/NavHeader/index.vue index 8a490108c..04182ca2c 100644 --- a/src/layout/components/NavHeader/index.vue +++ b/src/layout/components/NavHeader/index.vue @@ -3,30 +3,26 @@ - + + @@ -34,6 +30,7 @@ import { mapGetters } from 'vuex' import Hamburger from '@/components/Hamburger' import AccountDropdown from './AccountDropdown' +import SiteMessages from './SiteMessages' import Help from './Help' import Language from './Language' import WebTerminal from './WebTerminal' @@ -48,7 +45,8 @@ export default { Language, Help, Tickets, - WebTerminal + WebTerminal, + SiteMessages }, data() { return { @@ -60,13 +58,17 @@ export default { ]), isOrgAuditor() { return rolc.getRolesDisplay(this.currentOrgRoles).includes('OrgAuditor') || rolc.getRolesDisplay(this.currentOrgRoles).includes('Auditor') + }, + showTickets() { + return this.publicSettings.TICKETS_ENABLED && + this.publicSettings.XPACK_LICENSE_IS_VALID && + !this.isOrgAuditor } }, methods: { toggleSideBar() { this.$store.dispatch('app/toggleSideBar') } - } } @@ -91,12 +93,19 @@ export default { .navbar-right { float: right; margin-right: 10px; - } - .header-item { - line-height: 50px; - display: inline-block; - padding-right: 20px; + .header-item { + line-height: 50px; + display: inline-block; + padding-right: 10px; + padding-left: 10px; + } + + .header-icon { + &:hover { + background-color: #e6e6e6; + } + } } .breadcrumb-container { @@ -108,5 +117,9 @@ export default { .el-header { background-color: #ffffff; } + + ul { + margin: 0; + } diff --git a/src/main.js b/src/main.js index b77c4340e..9919009ca 100644 --- a/src/main.js +++ b/src/main.js @@ -40,8 +40,13 @@ Vue.config.productionTip = false import VueCookie from 'vue-cookie' Vue.use(VueCookie) window.$cookie = VueCookie -import VueMoment from 'vue-moment' -Vue.use(VueMoment) + +const moment = require('moment') +require('moment/locale/zh-cn') +Vue.use(require('vue-moment'), { + moment +}) + // logger import VueLogger from 'vuejs-logger' import loggerOptions from './utils/logger' diff --git a/src/router/accounts.js b/src/router/accounts.js new file mode 100644 index 000000000..01b20ccb1 --- /dev/null +++ b/src/router/accounts.js @@ -0,0 +1,120 @@ +import i18n from '@/i18n/i18n' +import empty from '@/layout/empty' +export default [ + { + path: 'asset-accounts', + component: empty, + meta: { title: i18n.t('route.AssetAccount') }, + children: [ + { + path: '', + name: 'AssetAccountList', + component: () => import('@/views/accounts/AssetAccount/AssetAccountList'), + meta: { title: i18n.t('route.AssetAccount') } + } + ] + }, + { + path: 'application-accounts', + component: empty, + meta: { title: i18n.t('route.AssetAccount') }, + children: [ + { + path: '', + name: 'ApplicationAccountList', + component: () => import('@/views/accounts/ApplicationAccount/ApplicationAccountList'), + meta: { title: i18n.t('route.ApplicationAccount') } + } + ] + }, + { + path: 'gathered-user', + component: empty, + redirect: '', + meta: { title: i18n.t('xpack.GatherUser.GatherUserList') }, + children: [ + { + path: '', + component: () => import('@/views/accounts/GatheredUser/index'), + name: 'GatherUserListIndex', + meta: { title: i18n.t('xpack.GatherUser.GatherUser'), activeMenu: '/accounts/gathered-user' } + }, + { + path: '', + component: () => import('@/views/accounts/GatheredUser/GatheredUserList'), + name: 'GatherUserList', + hidden: true, + meta: { title: i18n.t('xpack.GatherUser.GatherUserList'), activeMenu: '/accounts/gathered-user' } + }, + { + path: 'tasks', + component: () => import('@/views/accounts/GatheredUser/TaskList'), + name: 'GatherUserTaskList', + meta: { title: i18n.t('xpack.GatherUser.GatherUserTaskList'), activeMenu: '/accounts/gathered-user' }, + hidden: true + }, + { + path: 'tasks/:id', + component: () => import('@/views/accounts/GatheredUser/TaskDetail/index'), + name: 'GatherUserTaskDetail', + meta: { title: i18n.t('xpack.GatherUser.GatherUserTaskDetail'), activeMenu: '/accounts/gathered-user' }, + hidden: true + }, + { + path: 'tasks/create', + component: () => import('@/views/accounts/GatheredUser/TaskCreateUpdate'), + name: 'GatherUserTaskCreate', + meta: { title: i18n.t('xpack.GatherUser.GatherUserTaskCreate'), activeMenu: '/accounts/gathered-user' }, + hidden: true + }, + { + path: 'tasks/:id/update', + component: () => import('@/views/accounts/GatheredUser/TaskCreateUpdate'), + name: 'GatherUserTaskUpdate', + meta: { title: i18n.t('xpack.GatherUser.GatherUserTaskUpdate'), action: 'update', activeMenu: '/accounts/gathered-user' }, + hidden: true + } + ] + }, + { + path: 'change-auth-plan', + component: empty, + meta: { title: i18n.t('xpack.ChangeAuthPlan.ChangeAuthPlan'), activeMenu: '/accounts/change-auth-plan/plan' }, + children: [ + { + path: 'plan', + component: () => import('@/views/accounts/ChangeAuthPlan/ChangeAuthPlanList.vue'), + name: 'ChangeAuthPlanList', + meta: { title: i18n.t('xpack.ChangeAuthPlan.ChangeAuthPlan'), activeMenu: '/accounts/change-auth-plan/plan' } + }, + { + path: 'plan/create', + component: () => import('@/views/accounts/ChangeAuthPlan/ChangeAuthPlanCreateUpdate.vue'), + name: 'ChangeAuthPlanCreate', + meta: { title: i18n.t('xpack.ChangeAuthPlan.ChangeAuthPlanCreate'), activeMenu: '/accounts/change-auth-plan/plan', action: 'create' }, + hidden: true + }, + { + path: 'plan/:id/update', + component: () => import('@/views/accounts/ChangeAuthPlan/ChangeAuthPlanCreateUpdate.vue'), + name: 'ChangeAuthPlanUpdate', + meta: { title: i18n.t('xpack.ChangeAuthPlan.ChangeAuthPlanUpdate'), activeMenu: '/accounts/change-auth-plan/plan', action: 'update' }, + hidden: true + }, + { + path: 'plan/:id', + component: () => import('@/views/accounts/ChangeAuthPlan/ChangeAuthPlanDetail/index.vue'), + name: 'ChangeAuthPlanDetail', + meta: { title: i18n.t('xpack.ChangeAuthPlan.ChangeAuthPlan'), activeMenu: '/accounts/change-auth-plan/plan' }, + hidden: true + }, + { + path: 'plan-execution/:id', + component: () => import('@/views/accounts/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionDetail/index.vue'), + name: 'ChangeAuthPlanExecutionDetail', + meta: { title: i18n.t('xpack.ChangeAuthPlan.ExecutionDetail'), activeMenu: '/accounts/change-auth-plan/plan' }, + hidden: true + } + ] + } +] diff --git a/src/router/index.js b/src/router/index.js index d95d091a4..479f4c9b6 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -37,6 +37,7 @@ import TicketsRoutes from './tickets' import AuditsRoutes from './audits' import commonRoutes from './common' import aclRoutes from './acl' +import AccountRoutes from './accounts' /** * constantRoutes @@ -110,6 +111,18 @@ export const allRoleRoutes = [ meta: { title: i18n.t('route.Applications'), icon: 'th' }, children: ApplicationsRoute }, + { + path: '/accounts', + component: Layout, + redirect: '/accounts/asset-accounts/', + name: 'Accounts', + meta: { + licenseRequired: true, + title: i18n.t('route.Accounts'), + icon: 'address-book' + }, + children: AccountRoutes + }, { path: '/perms/', component: Layout, diff --git a/src/settings.js b/src/settings.js index 1f68ff904..f3efa61eb 100644 --- a/src/settings.js +++ b/src/settings.js @@ -1,6 +1,5 @@ module.exports = { - - title: 'JumpServer', + title: '.', /** * @type {boolean} true | false diff --git a/src/store/modules/settings.js b/src/store/modules/settings.js index 1d8c272a4..491bbaf3c 100644 --- a/src/store/modules/settings.js +++ b/src/store/modules/settings.js @@ -35,15 +35,18 @@ const actions = { getPublicSettings({ commit, state }) { return new Promise((resolve, reject) => { getPublicSettings().then(response => { - const link = document.querySelector("link[rel*='icon']") || document.createElement('link') - link.type = 'image/x-icon' - link.rel = 'shortcut icon' - link.href = response.data.LOGO_URLS.favicon - document.getElementsByTagName('head')[0].appendChild(link) + const faviconURL = response.data.LOGO_URLS.favicon + let link = document.querySelector("link[rel*='icon']") + if (!link) { + link = document.createElement('link') + link.type = 'image/x-icon' + link.rel = 'shortcut icon' + document.getElementsByTagName('head')[0].appendChild(link) + } + link.href = faviconURL // 动态修改Title - if (response.data.LOGIN_TITLE) { document.title = response.data.LOGIN_TITLE } - + document.title = response.data.LOGIN_TITLE commit('SET_PUBLIC_SETTINGS', response.data) resolve(response) }).catch(error => { diff --git a/src/userviews/assets/index.vue b/src/userviews/assets/index.vue index bed525f3c..68b2cc748 100644 --- a/src/userviews/assets/index.vue +++ b/src/userviews/assets/index.vue @@ -117,7 +117,7 @@ export default { name: 'connect', fa: 'fa-terminal', type: 'primary', - can: (row, cellValue) => { + can: ({ row, cellValue }) => { return row.is_active }, callback: function({ row, col, cellValue, reload }) { diff --git a/src/utils/common.js b/src/utils/common.js index bc67400d5..65b2ca79c 100644 --- a/src/utils/common.js +++ b/src/utils/common.js @@ -88,11 +88,14 @@ export function toSafeLocalDateStr(d) { } export function getApiPath(that) { - const pagePath = that.$route.path - const isOrgPath = pagePath.split('/').indexOf('orgs') !== -1 - if (isOrgPath) { - return `/api/v1/orgs/orgs/${pagePath.split('/').pop()}/` + let pagePath = that.$route.path + const pagePathArray = pagePath.split('/') + if (pagePathArray.indexOf('orgs') !== -1) { + pagePathArray[pagePathArray.indexOf('xpack')] = 'orgs' + } else if (pagePathArray.indexOf('gathered-user') !== -1 || pagePathArray.indexOf('change-auth-plan') !== -1) { + pagePathArray[pagePathArray.indexOf('accounts')] = 'xpack' } + pagePath = pagePathArray.join('/') return `/api/v1${pagePath}/` } diff --git a/src/utils/startup.js b/src/utils/startup.js index 696c03ef6..cdd486582 100644 --- a/src/utils/startup.js +++ b/src/utils/startup.js @@ -1,4 +1,4 @@ -import getPageTitle from '@/utils/get-page-title' +// import getPageTitle from '@/utils/get-page-title' import store from '@/store' import router from '@/router' import { Message } from 'element-ui' @@ -15,9 +15,9 @@ function reject(msg) { return new Promise((resolve, reject) => reject(msg)) } -function setHeadTitle({ to, from, next }) { - document.title = getPageTitle(to.meta.title) -} +// function setHeadTitle({ to, from, next }) { +// document.title = getPageTitle(to.meta.title) +// } async function checkLogin({ to, from, next }) { if (whiteList.indexOf(to.path) !== -1) { @@ -145,7 +145,7 @@ export async function startup({ to, from, next }) { // set page title await getPublicSetting({ to, from, next }) - await setHeadTitle({ to, from, next }) + // await setHeadTitle({ to, from, next }) await checkLogin({ to, from, next }) await changeCurrentOrgIfNeed({ to, from, next }) await changeCurrentRoleIfNeed({ to, from, next }) diff --git a/src/views/accounts/ApplicationAccount/ApplicationAccountList.vue b/src/views/accounts/ApplicationAccount/ApplicationAccountList.vue new file mode 100644 index 000000000..27f5a80ca --- /dev/null +++ b/src/views/accounts/ApplicationAccount/ApplicationAccountList.vue @@ -0,0 +1,247 @@ + + + + + diff --git a/src/views/accounts/AssetAccount/AssetAccountList.vue b/src/views/accounts/AssetAccount/AssetAccountList.vue new file mode 100644 index 000000000..55e938c9a --- /dev/null +++ b/src/views/accounts/AssetAccount/AssetAccountList.vue @@ -0,0 +1,176 @@ + + + + + diff --git a/src/views/xpack/ChangeAuthPlan/ChangeAuthPlanCreateUpdate.vue b/src/views/accounts/ChangeAuthPlan/ChangeAuthPlanCreateUpdate.vue similarity index 100% rename from src/views/xpack/ChangeAuthPlan/ChangeAuthPlanCreateUpdate.vue rename to src/views/accounts/ChangeAuthPlan/ChangeAuthPlanCreateUpdate.vue diff --git a/src/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanAsset/index.vue b/src/views/accounts/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanAsset/index.vue similarity index 100% rename from src/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanAsset/index.vue rename to src/views/accounts/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanAsset/index.vue diff --git a/src/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionDetail/ChangeAuthPlanExecutionInfo.vue b/src/views/accounts/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionDetail/ChangeAuthPlanExecutionInfo.vue similarity index 100% rename from src/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionDetail/ChangeAuthPlanExecutionInfo.vue rename to src/views/accounts/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionDetail/ChangeAuthPlanExecutionInfo.vue diff --git a/src/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionDetail/ChangeAuthPlanExecutionTaskList.vue b/src/views/accounts/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionDetail/ChangeAuthPlanExecutionTaskList.vue similarity index 100% rename from src/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionDetail/ChangeAuthPlanExecutionTaskList.vue rename to src/views/accounts/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionDetail/ChangeAuthPlanExecutionTaskList.vue diff --git a/src/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionDetail/index.vue b/src/views/accounts/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionDetail/index.vue similarity index 100% rename from src/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionDetail/index.vue rename to src/views/accounts/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionDetail/index.vue diff --git a/src/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionList.vue b/src/views/accounts/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionList.vue similarity index 100% rename from src/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionList.vue rename to src/views/accounts/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionList.vue diff --git a/src/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanInfo.vue b/src/views/accounts/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanInfo.vue similarity index 100% rename from src/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanInfo.vue rename to src/views/accounts/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanInfo.vue diff --git a/src/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/index.vue b/src/views/accounts/ChangeAuthPlan/ChangeAuthPlanDetail/index.vue similarity index 100% rename from src/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/index.vue rename to src/views/accounts/ChangeAuthPlan/ChangeAuthPlanDetail/index.vue diff --git a/src/views/xpack/ChangeAuthPlan/ChangeAuthPlanList.vue b/src/views/accounts/ChangeAuthPlan/ChangeAuthPlanList.vue similarity index 100% rename from src/views/xpack/ChangeAuthPlan/ChangeAuthPlanList.vue rename to src/views/accounts/ChangeAuthPlan/ChangeAuthPlanList.vue diff --git a/src/views/accounts/GatheredUser/GatheredUserList.vue b/src/views/accounts/GatheredUser/GatheredUserList.vue new file mode 100644 index 000000000..6ef967467 --- /dev/null +++ b/src/views/accounts/GatheredUser/GatheredUserList.vue @@ -0,0 +1,203 @@ + + + + + diff --git a/src/views/xpack/GatheredUser/TaskCreateUpdate.vue b/src/views/accounts/GatheredUser/TaskCreateUpdate.vue similarity index 100% rename from src/views/xpack/GatheredUser/TaskCreateUpdate.vue rename to src/views/accounts/GatheredUser/TaskCreateUpdate.vue diff --git a/src/views/xpack/GatheredUser/TaskDetail/Detail.vue b/src/views/accounts/GatheredUser/TaskDetail/Detail.vue similarity index 100% rename from src/views/xpack/GatheredUser/TaskDetail/Detail.vue rename to src/views/accounts/GatheredUser/TaskDetail/Detail.vue diff --git a/src/views/xpack/GatheredUser/TaskDetail/TaskExecutionList.vue b/src/views/accounts/GatheredUser/TaskDetail/TaskExecutionList.vue similarity index 100% rename from src/views/xpack/GatheredUser/TaskDetail/TaskExecutionList.vue rename to src/views/accounts/GatheredUser/TaskDetail/TaskExecutionList.vue diff --git a/src/views/xpack/GatheredUser/TaskDetail/index.vue b/src/views/accounts/GatheredUser/TaskDetail/index.vue similarity index 100% rename from src/views/xpack/GatheredUser/TaskDetail/index.vue rename to src/views/accounts/GatheredUser/TaskDetail/index.vue diff --git a/src/views/xpack/GatheredUser/TaskList.vue b/src/views/accounts/GatheredUser/TaskList.vue similarity index 100% rename from src/views/xpack/GatheredUser/TaskList.vue rename to src/views/accounts/GatheredUser/TaskList.vue diff --git a/src/views/xpack/GatheredUser/index.vue b/src/views/accounts/GatheredUser/index.vue similarity index 100% rename from src/views/xpack/GatheredUser/index.vue rename to src/views/accounts/GatheredUser/index.vue diff --git a/src/views/sessions/CommandList.vue b/src/views/sessions/CommandList.vue index 45902b475..277627518 100644 --- a/src/views/sessions/CommandList.vue +++ b/src/views/sessions/CommandList.vue @@ -1,16 +1,16 @@ - diff --git a/src/views/sessions/SessionList/OfflineList.vue b/src/views/sessions/SessionList/OfflineList.vue index 4850cb419..dcfcfc595 100644 --- a/src/views/sessions/SessionList/OfflineList.vue +++ b/src/views/sessions/SessionList/OfflineList.vue @@ -17,7 +17,7 @@ export default { name: 'replay', title: this.$t('sessions.replay'), type: 'warning', - can: (row, cellValue) => { + can: ({ row, cellValue }) => { return row.can_replay }, callback: function({ row, tableData }) { @@ -30,7 +30,7 @@ export default { name: 'download', title: this.$t('sessions.download'), type: 'primary', - can: (row, cellValue) => { + can: ({ row, cellValue }) => { return row.can_replay }, callback: function({ row, tableData }) { diff --git a/src/views/sessions/SessionList/OnlineList.vue b/src/views/sessions/SessionList/OnlineList.vue index cd547a21d..53dabd151 100644 --- a/src/views/sessions/SessionList/OnlineList.vue +++ b/src/views/sessions/SessionList/OnlineList.vue @@ -19,7 +19,7 @@ export default { name: 'terminate', title: this.$t('sessions.terminate'), type: 'danger', - can: (row, cellValue) => { + can: ({ row, cellValue }) => { return row.can_terminate }, callback: function({ reload, row }) { @@ -39,13 +39,15 @@ export default { name: 'join', title: this.$t('sessions.Monitor'), type: 'primary', - can: (row, cellValue) => { - if (row.protocol === 'rdp' || - row.protocol === 'vnc') { - return true - } + can: ({ row, cellValue }) => { return row.can_join }, + tip: ({ row }) => { + if (row.login_from === 'RT') { + return this.$t('sessions.XRDPNotSupport') + } + return '' + }, callback: function({ row, tableData }) { // 跳转到luna页面 if (row.protocol === 'rdp' || row.protocol === 'vnc') { diff --git a/src/views/settings/Basic.vue b/src/views/settings/Basic.vue index 01f65a755..a72e5ac40 100644 --- a/src/views/settings/Basic.vue +++ b/src/views/settings/Basic.vue @@ -27,7 +27,8 @@ export default { fields: [ [ this.$t('common.BasicInfo'), [ - 'SITE_URL', 'USER_GUIDE_URL', 'FORGOT_PASSWORD_URL', globalOrgName + 'SITE_URL', 'USER_GUIDE_URL', + 'FORGOT_PASSWORD_URL', globalOrgName ] ] ], diff --git a/src/views/settings/SystemMessageSubscription/SelectDialog.vue b/src/views/settings/SystemMessageSubscription/SelectDialog.vue index 49f4f8c86..fa3ab34f9 100644 --- a/src/views/settings/SystemMessageSubscription/SelectDialog.vue +++ b/src/views/settings/SystemMessageSubscription/SelectDialog.vue @@ -64,7 +64,7 @@ export default { const selectedUsers = this.selectedUsers.map(item => { return { id: item.id, - label: `${item.name}(${item.username})` + label: item.name } }) setTimeout(() => { diff --git a/src/views/settings/SystemMessageSubscription/Subscription.vue b/src/views/settings/SystemMessageSubscription/Subscription.vue index c096276be..230669393 100644 --- a/src/views/settings/SystemMessageSubscription/Subscription.vue +++ b/src/views/settings/SystemMessageSubscription/Subscription.vue @@ -67,7 +67,7 @@ export default { } this.$axios.patch( - `/api/v1/notifications/system/subscriptions/${sub.id}/`, + `/api/v1/notifications/system-msg-subscription/${sub.id}/`, { receive_backends: backends } ).catch(err => { this.$log.error(err) @@ -78,11 +78,10 @@ export default { onDialogSelectSubmit(userIds) { this.dialogVisible = false this.$axios.patch( - `/api/v1/notifications/system/subscriptions/${this.currentEditSub.id}/`, + `/api/v1/notifications/system-msg-subscription/${this.currentEditSub.id}/`, { users: userIds } ).then(newSub => { - const msgType = this.idMessageTypeMapper[newSub.id] - msgType.users = newSub.users + const msgType = this.idMessageTypeMapper[newSub.message_type] msgType.receivers = newSub.receivers }).catch(err => { console.log(err) @@ -97,40 +96,37 @@ export default { this.receiveBackends = await this.$axios.get('/api/v1/notifications/backends/') }, async initSubscriptions() { - const subscriptions = await this.$axios.get('/api/v1/notifications/system/subscriptions/') + const subscriptions = await this.$axios.get('/api/v1/notifications/system-msg-subscription/') - // 根据 app 分组 - const appMessageTypesMapper = {} - subscriptions.forEach(sub => { - if (!(sub.message_category in appMessageTypesMapper)) { - appMessageTypesMapper[sub.message_category] = { - id: sub.message_category, - value: sub.message_category_label, - children: [sub] - } - } else { - appMessageTypesMapper[sub.message_category].children.push(sub) - } - }) + const trans_subscriptions = [] - // sub 改成需要的数据结构 - for (const app of Object.values(appMessageTypesMapper)) { - app.children = app.children.map(sub => { + for (const category of subscriptions) { + const children = [] + trans_subscriptions.push({ + id: category.category, + value: category.category_label, + children: children + }) + + for (const sub of category.children) { const backendsChecked = {} this.receiveBackends.forEach(backend => { backendsChecked[backend.name] = sub.receive_backends.indexOf(backend.name) > -1 }) - const subObj = { - id: sub.id, - value: sub.message_label, + + const trans_sub = { + id: sub.message_type, + value: sub.message_type_label, receivers: sub.receivers, receive_backends: backendsChecked } - this.idMessageTypeMapper[sub.id] = subObj - return subObj - }) + children.push(trans_sub) + + this.idMessageTypeMapper[trans_sub.id] = trans_sub + } } - this.tableData = Object.values(appMessageTypesMapper) + + this.tableData = trans_subscriptions } } } diff --git a/src/views/settings/Terminal.vue b/src/views/settings/Terminal.vue index 1a2ebfd35..bdba9e5d4 100644 --- a/src/views/settings/Terminal.vue +++ b/src/views/settings/Terminal.vue @@ -43,11 +43,22 @@ export default { url: '/api/v1/settings/setting/?category=terminal' } }, + mounted() { + if (this.$store.getters.hasValidLicense) { + const xRDPFields = [ + 'XRDP', [ + 'TERMINAL_RDP_ADDR' + ] + ] + this.selectFields.splice(1, 0, xRDPFields) + } + }, methods: { getMethod() { return 'put' } } + } diff --git a/src/views/settings/index.vue b/src/views/settings/index.vue index c03ae1ad5..73db1939b 100644 --- a/src/views/settings/index.vue +++ b/src/views/settings/index.vue @@ -69,6 +69,10 @@ export default { title: this.$t('setting.DingTalk'), name: 'DingTalk' }, + { + title: this.$t('setting.SystemMessageSubscription'), + name: 'SystemMessageSubscription' + }, { title: this.$t('setting.Terminal'), name: 'Terminal' @@ -119,6 +123,9 @@ export default { case 'License': this.activeMenu = 'License' break + case 'SystemMessageSubscription': + this.activeMenu = 'SystemMessageSubscription' + break default: this.activeMenu = 'Basic' break diff --git a/src/views/users/User/UserCreateUpdate.vue b/src/views/users/User/UserCreateUpdate.vue index aa4e43c1a..5a614c9f5 100644 --- a/src/views/users/User/UserCreateUpdate.vue +++ b/src/views/users/User/UserCreateUpdate.vue @@ -59,7 +59,7 @@ export default { password: { component: UserPassword, hidden: (formValue) => { - if (formValue.password_strategy) { + if (formValue.password_strategy === 'custom') { return false } return !formValue.update_password @@ -81,7 +81,7 @@ export default { } ], hidden: (formValue) => { - if (formValue.password_strategy) { + if (formValue.password_strategy === 'custom') { return false } return !formValue.update_password || !this.user.can_public_key_auth @@ -148,7 +148,7 @@ export default { methods: { cleanFormValue(value) { const method = this.getMethod() - if (method === 'post' && !value.password_strategy) { + if (method === 'post' && value.password_strategy === 'email') { delete value['password'] if (this.currentOrgIsRoot) { delete value['groups'] diff --git a/src/views/users/User/UserList.vue b/src/views/users/User/UserList.vue index b5391cbb4..d2d5492bb 100644 --- a/src/views/users/User/UserList.vue +++ b/src/views/users/User/UserList.vue @@ -92,7 +92,7 @@ export default { name: 'remove', type: 'warning', has: hasRemove, - can: function(row, cellValue) { + can: ({ row }) => { return row.can_delete }, callback: this.removeUserFromOrg diff --git a/src/views/xpack/GatheredUser/GatheredUserList.vue b/src/views/xpack/GatheredUser/GatheredUserList.vue deleted file mode 100644 index a2924f5c3..000000000 --- a/src/views/xpack/GatheredUser/GatheredUserList.vue +++ /dev/null @@ -1,78 +0,0 @@ - - - - - diff --git a/src/views/xpack/SystemMonitor/component/MonitorCard.vue b/src/views/xpack/SystemMonitor/component/MonitorCard.vue index 45c5d59a3..99aadae17 100644 --- a/src/views/xpack/SystemMonitor/component/MonitorCard.vue +++ b/src/views/xpack/SystemMonitor/component/MonitorCard.vue @@ -85,9 +85,10 @@ export default { componentName() { const nameMapper = { koko: 'KoKo', - guacamole: 'Guacamole', omnidb: 'OmniDB', - lion: 'Lion' + guacamole: 'Guacamole', + lion: 'Lion', + xrdp: 'XRDP' } return nameMapper[this.componentMetric.type] } diff --git a/src/views/xpack/Vault/VaultCreate.vue b/src/views/xpack/Vault/VaultCreate.vue deleted file mode 100644 index 23fb8f9d7..000000000 --- a/src/views/xpack/Vault/VaultCreate.vue +++ /dev/null @@ -1,60 +0,0 @@ - - - - - diff --git a/src/views/xpack/Vault/VaultList.vue b/src/views/xpack/Vault/VaultList.vue deleted file mode 100644 index cdf21c511..000000000 --- a/src/views/xpack/Vault/VaultList.vue +++ /dev/null @@ -1,340 +0,0 @@ - - - - - diff --git a/src/views/xpack/router.js b/src/views/xpack/router.js index ff309748f..34beaa9ae 100644 --- a/src/views/xpack/router.js +++ b/src/views/xpack/router.js @@ -10,47 +10,6 @@ export default { name: 'Xpack', meta: { title: 'X-Pack', icon: 'sitemap', licenseRequired: true }, children: [ - { - path: 'change-auth-plan', - component: empty, - meta: { title: i18n.t('xpack.ChangeAuthPlan.ChangeAuthPlan'), activeMenu: '/xpack/change-auth-plan/plan' }, - children: [ - { - path: 'plan', - component: () => import('@/views/xpack/ChangeAuthPlan/ChangeAuthPlanList.vue'), - name: 'ChangeAuthPlanList', - meta: { title: i18n.t('xpack.ChangeAuthPlan.ChangeAuthPlan'), activeMenu: '/xpack/change-auth-plan/plan' } - }, - { - path: 'plan/create', - component: () => import('@/views/xpack/ChangeAuthPlan/ChangeAuthPlanCreateUpdate.vue'), - name: 'ChangeAuthPlanCreate', - meta: { title: i18n.t('xpack.ChangeAuthPlan.ChangeAuthPlanCreate'), activeMenu: '/xpack/change-auth-plan/plan', action: 'create' }, - hidden: true - }, - { - path: 'plan/:id/update', - component: () => import('@/views/xpack/ChangeAuthPlan/ChangeAuthPlanCreateUpdate.vue'), - name: 'ChangeAuthPlanUpdate', - meta: { title: i18n.t('xpack.ChangeAuthPlan.ChangeAuthPlanUpdate'), activeMenu: '/xpack/change-auth-plan/plan', action: 'update' }, - hidden: true - }, - { - path: 'plan/:id', - component: () => import('@/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/index.vue'), - name: 'ChangeAuthPlanDetail', - meta: { title: i18n.t('xpack.ChangeAuthPlan.ChangeAuthPlan'), activeMenu: '/xpack/change-auth-plan/plan' }, - hidden: true - }, - { - path: 'plan-execution/:id', - component: () => import('@/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionDetail/index.vue'), - name: 'ChangeAuthPlanExecutionDetail', - meta: { title: i18n.t('xpack.ChangeAuthPlan.ExecutionDetail'), activeMenu: '/xpack/change-auth-plan/plan' }, - hidden: true - } - ] - }, { path: 'cloud', component: empty, @@ -127,55 +86,6 @@ export default { name: 'InterfaceSetting', meta: { title: i18n.t('xpack.InterfaceSettings'), permissions: [rolec.PERM_SUPER] } }, - { - path: 'gathered-user', - component: empty, - redirect: '', - meta: { title: i18n.t('xpack.GatherUser.GatherUserList') }, - children: [ - { - path: '', - component: () => import('@/views/xpack/GatheredUser/index'), - name: 'GatherUserListIndex', - meta: { title: i18n.t('xpack.GatherUser.GatherUser'), activeMenu: '/xpack/gathered-user' } - }, - { - path: '', - component: () => import('@/views/xpack/GatheredUser/GatheredUserList'), - name: 'GatherUserList', - hidden: true, - meta: { title: i18n.t('xpack.GatherUser.GatherUserList'), activeMenu: '/xpack/gathered-user' } - }, - { - path: 'tasks', - component: () => import('@/views/xpack/GatheredUser/TaskList'), - name: 'GatherUserTaskList', - meta: { title: i18n.t('xpack.GatherUser.GatherUserTaskList'), activeMenu: '/xpack/gathered-user' }, - hidden: true - }, - { - path: 'tasks/:id', - component: () => import('@/views/xpack/GatheredUser/TaskDetail/index'), - name: 'GatherUserTaskDetail', - meta: { title: i18n.t('xpack.GatherUser.GatherUserTaskDetail'), activeMenu: '/xpack/gathered-user' }, - hidden: true - }, - { - path: 'tasks/create', - component: () => import('@/views/xpack/GatheredUser/TaskCreateUpdate'), - name: 'GatherUserTaskCreate', - meta: { title: i18n.t('xpack.GatherUser.GatherUserTaskCreate'), activeMenu: '/xpack/gathered-user' }, - hidden: true - }, - { - path: 'tasks/:id/update', - component: () => import('@/views/xpack/GatheredUser/TaskCreateUpdate'), - name: 'GatherUserTaskUpdate', - meta: { title: i18n.t('xpack.GatherUser.GatherUserTaskUpdate'), action: 'update', activeMenu: '/xpack/gathered-user' }, - hidden: true - } - ] - }, { path: 'orgs', component: empty, @@ -211,27 +121,6 @@ export default { } ] }, - { - path: 'vault', - component: empty, - redirect: '', - meta: { }, - children: [ - { - path: '', - component: () => import('@/views/xpack/Vault/VaultList.vue'), - name: 'VaultList', - meta: { title: i18n.t('xpack.Vault.Vault'), activeMenu: '/xpack/vault' } - }, - { - path: 'create', - component: () => import('@/views/xpack/Vault/VaultCreate'), - name: 'VaultCreate', - meta: { title: i18n.t('xpack.Vault.Create'), activeMenu: '/xpack/vault' }, - hidden: true - } - ] - }, { path: 'system-monitor', component: () => import('@/views/xpack/SystemMonitor/index.vue'), diff --git a/vue.config.js b/vue.config.js index 419491b5c..291df6495 100644 --- a/vue.config.js +++ b/vue.config.js @@ -4,12 +4,11 @@ const defaultSettings = require('./src/settings.js') const CompressionWebpackPlugin = require('compression-webpack-plugin') const productionGzipExtensions = /\.(js|css|json|txt|ico|svg)(\?.*)?$/i - function resolve(dir) { return path.join(__dirname, dir) } -const name = defaultSettings.title || 'JumpServer' // page title +const name = '' // page title // If your port is set to 80, // use administrator privileges to execute the command line. diff --git a/yarn.lock b/yarn.lock index 79c785e4c..dce5f44e6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2357,13 +2357,15 @@ browserify-zlib@^0.2.0: pako "~1.0.5" browserslist@^4.0.0, browserslist@^4.3.4, browserslist@^4.5.4, browserslist@^4.8.3: - version "4.10.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.10.0.tgz#f179737913eaf0d2b98e4926ac1ca6a15cbcc6a9" + version "4.16.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" + integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== dependencies: - caniuse-lite "^1.0.30001035" - electron-to-chromium "^1.3.378" - node-releases "^1.1.52" - pkg-up "^3.1.0" + caniuse-lite "^1.0.30001219" + colorette "^1.2.2" + electron-to-chromium "^1.3.723" + escalade "^3.1.1" + node-releases "^1.1.71" bser@2.1.1: version "2.1.1" @@ -2556,9 +2558,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001035: - version "1.0.30001035" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001035.tgz#2bb53b8aa4716b2ed08e088d4dc816a5fe089a1e" +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001219: + version "1.0.30001230" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz#8135c57459854b2240b57a4a6786044bdc5a9f71" + integrity sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ== capture-exit@^1.2.0: version "1.2.0" @@ -2874,6 +2877,11 @@ color@^3.0.0: color-convert "^1.9.1" color-string "^1.5.2" +colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + colors@^1.1.2: version "1.4.0" resolved "https://registry.npm.taobao.org/colors/download/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" @@ -3605,8 +3613,9 @@ dns-equal@^1.0.0: resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" dns-packet@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + version "1.3.4" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f" + integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== dependencies: ip "^1.1.0" safe-buffer "^5.0.1" @@ -3758,9 +3767,10 @@ ejs@^2.6.1: version "2.7.4" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" -electron-to-chromium@^1.3.378: - version "1.3.379" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.379.tgz#81dc5e82a3e72bbb830d93e15bc35eda2bbc910e" +electron-to-chromium@^1.3.723: + version "1.3.739" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.739.tgz#f07756aa92cabd5a6eec6f491525a64fe62f98b9" + integrity sha512-+LPJVRsN7hGZ9EIUUiWCpO7l4E3qBYHNadazlucBfsXBbccDFNKUBAgzE68FnkWGJPwD/AfKhSzL+G+Iqb8A4A== elegant-spinner@^1.0.1: version "1.0.1" @@ -3903,6 +3913,11 @@ es6-object-assign@1.1.0: resolved "https://registry.npm.taobao.org/es6-object-assign/download/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" integrity sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw= +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -7324,6 +7339,11 @@ moment@^2.19.2: resolved "https://registry.yarnpkg.com/moment/-/moment-2.26.0.tgz#5e1f82c6bafca6e83e808b30c8705eed0dcbd39a" integrity sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw== +moment@^2.29.1: + version "2.29.1" + resolved "https://registry.npm.taobao.org/moment/download/moment-2.29.1.tgz?cache=0&sync_timestamp=1601983320283&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmoment%2Fdownload%2Fmoment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" + integrity sha1-sr52n6MZQL6e7qZGnAdeNQBvo9M= + move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -7495,11 +7515,10 @@ node-notifier@^5.2.1: shellwords "^0.1.1" which "^1.3.0" -node-releases@^1.1.52: - version "1.1.52" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.52.tgz#bcffee3e0a758e92e44ecfaecd0a47554b0bcba9" - dependencies: - semver "^6.3.0" +node-releases@^1.1.71: + version "1.1.72" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" + integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== nopt@^5.0.0: version "5.0.0" @@ -8307,12 +8326,6 @@ pkg-up@^2.0.0: dependencies: find-up "^2.1.0" -pkg-up@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" - dependencies: - find-up "^3.0.0" - please-upgrade-node@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" @@ -9372,8 +9385,9 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex@^1.1.0: version "1.1.0"