Compare commits

...

40 Commits

Author SHA1 Message Date
fit2bot
f0f8cc0456 feat: Update v2.28.15 2023-06-08 18:36:38 +08:00
Bai
4e904add32 perf: 优化 API 调用最大超时时间为 2 min 2023-05-25 14:46:03 +08:00
Bai
b85ed8405e perf: 优化忘记密码URL不自动增加 http:// 前缀 2023-05-16 11:28:01 +08:00
“huailei000”
e827deef35 perf: 优化工单消息显示;申请人是自己能关闭工单 2023-05-10 15:18:51 +08:00
Bai
3c2c2ca302 fix: 去掉系统用户列表中资产数量和应用数量的列 2023-03-23 14:15:03 +08:00
Bai
453ca578b5 feat: 支持飞书国际版(lark) 2023-03-10 15:49:18 +08:00
“huailei000”
aa622ff812 perf: 增加license显示信息 2023-03-10 10:45:56 +08:00
Bai
171ceeef3a fix: 修改翻译 2023-03-02 12:25:56 +08:00
吴小白
754e861294 Merge pull request #2370 from jumpserver/pr@v2.28@fix_ticket_create_hasclose
fix: 修复创建工单后没有关闭操作问题;修复工单详情控制台有报错提示问题
2023-01-10 11:48:28 +08:00
“huailei000”
e7b37d43f2 fix: 修复创建工单后没有关闭操作问题;修复工单详情控制台有报错提示问题 2023-01-10 11:22:16 +08:00
jiangweidong
fd749ef211 perf: OpenID支持PKCE方式对接 2022-12-13 16:13:50 +08:00
jiangweidong
5667c39bcb fix: 解决命令过滤获取不到一些应用的系统用户问题 2022-11-24 09:37:57 +08:00
jiangweidong
982ce90a9a fix: 去掉clickhouse改密页面入口 2022-11-22 18:39:40 +08:00
吴小白
86ce758adb feat: 更新 action node 版本 2022-11-17 21:56:54 +08:00
Jiangjie.Bai
582a84178d Merge pull request #2187 from jumpserver/dev
v2.28.0
2022-11-17 17:44:19 +08:00
Jiangjie.Bai
9b9f7c936c Merge pull request #2184 from jumpserver/dev
v2.28.0-rc5
2022-11-17 14:18:15 +08:00
Jiangjie.Bai
2a6100957f Merge pull request #2182 from jumpserver/dev
v2.28.0-rc4
2022-11-16 21:08:55 +08:00
Jiangjie.Bai
16606d6a27 Merge pull request #2176 from jumpserver/dev
v2.28.0-rc2
2022-11-14 10:01:05 +08:00
Jiangjie.Bai
0a612f50e6 Merge pull request #2164 from jumpserver/dev
v2.28.0-rc1
2022-11-10 17:45:47 +08:00
Jiangjie.Bai
fe36fa9390 Merge pull request #2117 from jumpserver/dev
v2.27.0-rc4
2022-10-18 21:02:10 +08:00
Jiangjie.Bai
ba109900ec Merge pull request #2113 from jumpserver/dev
v2.27.0-rc3
2022-10-18 11:20:57 +08:00
Jiangjie.Bai
ec7768267f Merge pull request #2105 from jumpserver/dev
v2.27.0-rc2
2022-10-14 11:01:32 +08:00
Jiangjie.Bai
cc58b374ab Merge pull request #2101 from jumpserver/dev
v2.27.0-rc1
2022-10-13 17:44:53 +08:00
Jiangjie.Bai
04ffbb8fd6 Merge pull request #2097 from jumpserver/dev
v2.27.0-rc1
2022-10-13 15:14:40 +08:00
Jiangjie.Bai
49880f6739 Merge pull request #2059 from jumpserver/dev
v2.26.0
2022-09-15 17:49:44 +08:00
Jiangjie.Bai
e6f98d58c4 Merge pull request #2057 from jumpserver/dev
v2.26.0-rc4
2022-09-15 16:18:03 +08:00
Jiangjie.Bai
fd1f16d43c Merge pull request #2050 from jumpserver/dev
v2.26.0-rc2
2022-09-13 17:41:39 +08:00
Jiangjie.Bai
968b2415b1 Merge pull request #2043 from jumpserver/dev
v2.26.0-rc1
2022-09-08 15:46:44 +08:00
Jiangjie.Bai
776090d6ba Merge pull request #2001 from jumpserver/dev
v2.25.0
2022-08-18 16:12:45 +08:00
Jiangjie.Bai
3a37952288 Merge pull request #1996 from jumpserver/dev
v2.25.0-rc4
2022-08-17 16:53:23 +08:00
Jiangjie.Bai
62b8fc0e3b Merge pull request #1994 from jumpserver/dev
v2.25.0-rc3
2022-08-16 19:08:23 +08:00
Jiangjie.Bai
b2028869cb Merge pull request #1986 from jumpserver/dev
v2.25.0-rc2
2022-08-12 18:06:56 +08:00
Jiangjie.Bai
5277a725f8 Merge pull request #1973 from jumpserver/dev
v2.25.0-rc1
2022-08-11 14:11:59 +08:00
Jiangjie.Bai
f137788c1a Merge pull request #1957 from jumpserver/dev
v2.24.0-rc5
2022-07-20 19:06:03 +08:00
Jiangjie.Bai
f7d17c8de7 Merge pull request #1954 from jumpserver/dev
v2.24.0-rc4
2022-07-19 16:18:13 +08:00
Jiangjie.Bai
feea70b0be Merge pull request #1944 from jumpserver/dev
v2.24.0-rc3
2022-07-18 12:05:42 +08:00
Jiangjie.Bai
04696ef3d6 Merge pull request #1940 from jumpserver/dev
v2.24.0-rc2
2022-07-15 18:07:37 +08:00
Jiangjie.Bai
1731f4f788 Merge pull request #1934 from jumpserver/dev
v2.24.0-rc1
2022-07-14 18:27:51 +08:00
Jiangjie.Bai
6f25d93909 Merge pull request #1931 from jumpserver/dev
v2.24.0-rc1
2022-07-14 17:51:58 +08:00
Jiangjie.Bai
46461ec324 Merge pull request #1925 from jumpserver/dev
v2.24.0-rc1
2022-07-14 15:12:15 +08:00
16 changed files with 132 additions and 75 deletions

View File

@@ -39,7 +39,7 @@ jobs:
steps:
- uses: actions/checkout@v2
- name: Build it and upload
uses: jumpserver/action-build-upload-assets@node10
uses: jumpserver/action-build-upload-assets@node14.16
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:

1
GITSHA Normal file
View File

@@ -0,0 +1 @@
4e904add32bb32432d3453465266b2316632bc24

View File

@@ -63,6 +63,7 @@
"vue-echarts": "^5.0.0-beta.0",
"vue-i18n": "^8.15.5",
"vue-json-editor": "^1.4.3",
"vue-markdown": "^2.2.4",
"vue-moment": "^4.1.0",
"vue-password-strength-meter": "^1.7.2",
"vue-router": "3.0.6",
@@ -92,6 +93,7 @@
"eslint": "^5.15.3",
"eslint-plugin-vue": "5.2.2",
"eslint-plugin-vue-i18n": "^0.3.0",
"github-markdown-css": "^5.2.0",
"html-webpack-plugin": "3.2.0",
"husky": "^4.2.3",
"less-loader": "^5.0.0",

View File

@@ -0,0 +1,37 @@
<template>
<div class="markdown-body">
<VueMarkdown :source="value" />
</div>
</template>
<script>
import VueMarkdown from 'vue-markdown'
import 'github-markdown-css/github-markdown-light.css'
export default {
components: {
VueMarkdown
},
props: {
value: {
type: String,
default: ''
}
},
data() {
return {}
}
}
</script>
<style lang='scss' scoped>
.markdown-body * {
padding: 10px;
background-color: #f3f3f3;
color: #1a1a1a;
font-size: 13px;
//& >>> .table * {
// background-color: #f3f3f3;
//}
}
</style>

View File

@@ -28,3 +28,4 @@ export { default as AssetRelationCard } from './AssetRelationCard'
export { default as UserConfirmDialog } from './UserConfirmDialog'
export { default as Announcement } from './Announcement'
export { default as CronTab } from './CronTab'
export { default as MarkDown } from './MarkDown'

View File

@@ -8,6 +8,7 @@
},
"acl": {
"name": "Name",
"ip_group_help_text": "The format is a comma-separated string, * means match all. Example: 192.168.10.1, 192.168.1.0/24, 10.1.1.1-10.1.1.20, 2001:db8:2de::e13, 2001:db8:1a:1110::/64",
"username": "Username",
"ip_group": "IP group",
"action": "Action",

View File

@@ -14,7 +14,7 @@ import { DEFAULT_ORG_ID } from '@/utils/org'
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
// withCredentials: true, // send cookies when cross-domain requests
timeout: 60 * 1000 // request timeout
timeout: 2 * 60 * 1000 // request timeout
})
function beforeRequestAddToken(config) {

View File

@@ -54,51 +54,54 @@ export const REDIS = 'redis'
export const MONGODB = 'mongodb'
export const CLICKHOUSE = 'clickhouse'
export const DATABASE = [
{
name: MYSQL,
title: i18n.t(`applications.applicationsType.${MYSQL}`),
type: 'primary',
category: DATABASE_CATEGORY,
has: true,
group: i18n.t('applications.RDBProtocol')
},
{
name: MARIADB,
title: i18n.t(`applications.applicationsType.${MARIADB}`),
type: 'primary',
category: DATABASE_CATEGORY,
has: true
},
{
name: ORACLE,
title: i18n.t(`applications.applicationsType.${ORACLE}`),
type: 'primary',
category: DATABASE_CATEGORY,
has: hasLicence
},
{
name: POSTGRESQL,
title: i18n.t(`applications.applicationsType.${POSTGRESQL}`),
type: 'primary',
category: DATABASE_CATEGORY,
has: hasLicence
},
{
name: SQLSERVER,
title: i18n.t(`applications.applicationsType.${SQLSERVER}`),
type: 'primary',
category: DATABASE_CATEGORY,
has: hasLicence
},
{
name: CLICKHOUSE,
title: i18n.t(`applications.applicationsType.${CLICKHOUSE}`),
type: 'primary',
category: DATABASE_CATEGORY,
has: hasLicence
}
]
const MYSQL_ITEM = {
name: MYSQL,
title: i18n.t(`applications.applicationsType.${MYSQL}`),
type: 'primary',
category: DATABASE_CATEGORY,
has: true,
group: i18n.t('applications.RDBProtocol')
}
const MARIADB_ITEM = {
name: MARIADB,
title: i18n.t(`applications.applicationsType.${MARIADB}`),
type: 'primary',
category: DATABASE_CATEGORY,
has: true
}
const ORACLE_ITEM = {
name: ORACLE,
title: i18n.t(`applications.applicationsType.${ORACLE}`),
type: 'primary',
category: DATABASE_CATEGORY,
has: hasLicence
}
const POSTGRESQL_ITEM = {
name: POSTGRESQL,
title: i18n.t(`applications.applicationsType.${POSTGRESQL}`),
type: 'primary',
category: DATABASE_CATEGORY,
has: hasLicence
}
const SQLSERVER_ITEM = {
name: SQLSERVER,
title: i18n.t(`applications.applicationsType.${SQLSERVER}`),
type: 'primary',
category: DATABASE_CATEGORY,
has: hasLicence
}
const CLICKHOUSE_ITEM = {
name: CLICKHOUSE,
title: i18n.t(`applications.applicationsType.${CLICKHOUSE}`),
type: 'primary',
category: DATABASE_CATEGORY,
has: hasLicence
}
const MONGODB_ITEM = {
name: MONGODB,
@@ -116,11 +119,15 @@ const REDIS_ITEM = {
has: true
}
export const DATABASE = [
MYSQL_ITEM, MARIADB_ITEM, ORACLE_ITEM, POSTGRESQL_ITEM, SQLSERVER_ITEM, CLICKHOUSE_ITEM
]
export const KV_DATABASE = [
MONGODB_ITEM, REDIS_ITEM
]
export const AppPlanDatabase = [...DATABASE, MONGODB_ITEM]
export const AppPlanDatabase = [MYSQL_ITEM, MARIADB_ITEM, ORACLE_ITEM, POSTGRESQL_ITEM, SQLSERVER_ITEM, MONGODB_ITEM]
export const KUBERNETES = 'k8s'
export const CLOUD_CATEGORY = 'cloud'

View File

@@ -74,7 +74,7 @@ export default {
el: {
value: [],
ajax: {
url: `/api/v1/assets/system-users/?protocol__in=ssh,telnet,mysql,postgresql,mariadb,oracle,sqlserver,k8s`,
url: `/api/v1/assets/system-users/?protocol__in=ssh,telnet,mysql,postgresql,mariadb,oracle,sqlserver,k8s,redis,mongodb,clickhouse`,
transformOption: (item) => {
if (this.$route.query.type === 'k8s') {
return { label: item.name, value: item.id }

View File

@@ -75,7 +75,7 @@ export default {
icon: 'fa-info-circle',
title: this.$t('assets.SystemUser'),
objectsAjax: {
url: `/api/v1/assets/system-users/?protocol__in=ssh,telnet,mysql,postgresql,mariadb,oracle,sqlserver,k8s`,
url: `/api/v1/assets/system-users/?protocol__in=ssh,telnet,mysql,postgresql,mariadb,oracle,sqlserver,k8s,redis,mongodb,clickhouse`,
transformOption: (item) => defaultTransformOption(item, 'username')
},
hasObjectsId: this.object.system_users,

View File

@@ -23,14 +23,14 @@ export default {
url: '/api/v1/assets/system-users/?type=common',
columns: [
'name', 'username', 'username_same_with_user', 'protocol', 'login_mode',
'assets_amount', 'applications_amount', 'priority',
'priority',
'created_by', 'date_created', 'date_updated', 'comment', 'org_name', 'actions'
],
columnsShow: {
min: ['name', 'actions'],
default: [
'name', 'username', 'protocol', 'login_mode', 'assets_amount',
'applications_amount', 'comment', 'actions'
'name', 'username', 'protocol', 'login_mode',
'comment', 'actions'
]
},
columnsMeta: {
@@ -49,12 +49,6 @@ export default {
login_mode: {
width: '120px'
},
assets_amount: {
width: '80px'
},
applications_amount: {
width: '80px'
},
actions: {
formatterArgs: {
onUpdate: ({ row }) => {

View File

@@ -25,17 +25,6 @@ export default {
]
]
],
fieldsMeta: {
FORGOT_PASSWORD_URL: {
on: {
change([value], updateForm) {
if (value && !value.startsWith('http')) {
updateForm({ FORGOT_PASSWORD_URL: 'http://' + value })
}
}
}
}
},
submitMethod() {
return 'patch'
}

View File

@@ -44,7 +44,7 @@ export default {
[
this.$t('common.BasicInfo'),
[
'AUTH_FEISHU', 'FEISHU_APP_ID', 'FEISHU_APP_SECRET'
'AUTH_FEISHU', 'FEISHU_APP_ID', 'FEISHU_APP_SECRET', 'FEISHU_VERSION'
]
]
],

View File

@@ -32,6 +32,7 @@ export default {
'AUTH_OPENID_PROVIDER_TOKEN_ENDPOINT', 'AUTH_OPENID_PROVIDER_JWKS_ENDPOINT',
'AUTH_OPENID_PROVIDER_USERINFO_ENDPOINT', 'AUTH_OPENID_PROVIDER_END_SESSION_ENDPOINT',
'AUTH_OPENID_PROVIDER_SIGNATURE_ALG', 'AUTH_OPENID_PROVIDER_SIGNATURE_KEY',
'AUTH_OPENID_PKCE', 'AUTH_OPENID_CODE_CHALLENGE_METHOD',
'AUTH_OPENID_SCOPES', 'AUTH_OPENID_ID_TOKEN_MAX_AGE', 'AUTH_OPENID_ID_TOKEN_INCLUDE_CLAIMS',
'AUTH_OPENID_USE_STATE', 'AUTH_OPENID_USE_NONCE', 'AUTH_OPENID_ALWAYS_UPDATE_USER',
'AUTH_OPENID_IGNORE_SSL_VERIFICATION', 'AUTH_OPENID_SHARE_SESSION', 'AUTH_OPENID_USER_ATTR_MAP'
@@ -87,6 +88,12 @@ export default {
AUTH_OPENID_PROVIDER_SIGNATURE_KEY: {
hidden: (form) => form['AUTH_OPENID_KEYCLOAK']
},
AUTH_OPENID_PKCE: {
hidden: (form) => form['AUTH_OPENID_KEYCLOAK']
},
AUTH_OPENID_CODE_CHALLENGE_METHOD: {
hidden: (form) => form['AUTH_OPENID_KEYCLOAK'] || !form['AUTH_OPENID_PKCE']
},
'AUTH_OPENID_SCOPES': {
hidden: (form) => form['AUTH_OPENID_KEYCLOAK']
},

View File

@@ -115,6 +115,14 @@ export default {
{
key: this.$t('setting.Edition'),
value: this.licenseData.edition
},
{
key: this.$t('assets.SerialNumber'),
value: this.licenseData?.serial_no || ''
},
{
key: this.$t('common.Comment'),
value: this.licenseData?.remark || ''
}
]
}

View File

@@ -7,13 +7,13 @@
<div v-for="item in comments" :key="item.id" class="feed-activity-list">
<div class="feed-element">
<a href="#" class="pull-left">
<el-avatar :src="imageUrl" size="30" class="header-avatar" />
<el-avatar :src="imageUrl" :size="30" class="header-avatar" />
</a>
<div class="media-body ">
<strong>{{ item.user_display }}</strong> <small class="text-muted">{{ formatTime(item.date_created) }}</small>
<br>
<small class="text-muted">{{ toSafeLocalDateStr(item.date_created) }}</small>
<div style="padding-top: 10px;" v-html="item.body" />
<MarkDown :value="item.body" />
</div>
</div>
</div>
@@ -68,9 +68,11 @@
import IBox from '@/components/IBox'
import { formatTime, getDateTimeStamp } from '@/utils'
import { toSafeLocalDateStr } from '@/utils/common'
import MarkDown from '@/components/MarkDown'
export default {
name: 'Comments',
components: { IBox },
components: { IBox, MarkDown },
props: {
object: {
type: Object,
@@ -105,7 +107,15 @@ export default {
return this.object.process_map[this.object.approval_step - 1].assignees.indexOf(this.$store.state.users.profile.id) !== -1
},
isSelfTicket() {
return this.object.applicant === this.$store.state.users.profile.id
let applicant
if (this.object.applicant.indexOf('(') > -1) {
const applicantName = this.object.applicant.split('(')[1]
applicant = applicantName.substring(0, applicantName.length - 1)
} else {
applicant = this.object.applicant
}
const userName = this.$store.state.users.profile?.username
return applicant === userName
}
},
mounted() {