mirror of
https://github.com/veops/cmdb.git
synced 2025-08-09 22:26:09 +08:00
174 lines
4.7 KiB
Python
174 lines
4.7 KiB
Python
<template>
|
|
<a-tabs type="card" class="ops-tab" v-model="activeKey" @change="changeActiveKey">
|
|
<a-tab-pane v-for="item in authList" :key="item.value">
|
|
<span slot="tab">
|
|
{{ item.label }}
|
|
<a-icon
|
|
v-if="enable_list.find((en) => en.auth_type === item.value)"
|
|
type="check-circle"
|
|
theme="filled"
|
|
style="color:#2f54eb"
|
|
/>
|
|
</span>
|
|
<div class="setting-auth">
|
|
<components :ref="item.value" :is="item.value === 'OIDC' ? 'OAUTH2' : item.value" :data_type="item.value" />
|
|
<a-row>
|
|
<a-col :offset="item.value === 'AuthCommonConfig' ? 5 : 3">
|
|
<a-space>
|
|
<a-button :loading="loading" type="primary" @click="handleSave">{{ $t('save') }}</a-button>
|
|
<template v-if="item.value === 'LDAP'">
|
|
<a-button :loading="loading" ghost type="primary" @click="handleTest('connect')">{{
|
|
$t('cs.auth.testConnect')
|
|
}}</a-button>
|
|
<a-button :loading="loading" ghost type="primary" @click="handleTest('login')">{{
|
|
$t('cs.auth.testLogin')
|
|
}}</a-button>
|
|
</template>
|
|
<a-button :loading="loading" @click="handleReset">{{ $t('reset') }}</a-button>
|
|
</a-space>
|
|
</a-col>
|
|
</a-row>
|
|
</div>
|
|
<LoginModal v-if="item.value === 'LDAP'" ref="loginModal" @handleOK="(values) => handleTest('login', values)" />
|
|
</a-tab-pane>
|
|
</a-tabs>
|
|
</template>
|
|
|
|
<script>
|
|
import _ from 'lodash'
|
|
import LDAP from './ldap.vue'
|
|
import CAS from './cas.vue'
|
|
import AuthCommonConfig from './common.vue'
|
|
import OAUTH2 from './oauth2.vue'
|
|
import LoginModal from './loginModal.vue'
|
|
import { getAuthData, postAuthData, putAuthData, getAuthDataEnable, testLDAP } from '@/api/auth'
|
|
export default {
|
|
name: 'Auth',
|
|
components: { LDAP, CAS, AuthCommonConfig, OAUTH2, LoginModal },
|
|
data() {
|
|
return {
|
|
activeKey: 'LDAP',
|
|
dataTypeId: null,
|
|
loading: false,
|
|
enable_list: [],
|
|
}
|
|
},
|
|
mounted() {
|
|
this.changeActiveKey()
|
|
this.getAuthDataEnable()
|
|
},
|
|
computed: {
|
|
authList() {
|
|
return [
|
|
{
|
|
value: 'LDAP',
|
|
label: 'LDAP',
|
|
},
|
|
{
|
|
value: 'CAS',
|
|
label: 'CAS',
|
|
},
|
|
{
|
|
value: 'OAUTH2',
|
|
label: 'OAUTH2',
|
|
},
|
|
{
|
|
value: 'OIDC',
|
|
label: 'OIDC',
|
|
},
|
|
{
|
|
value: 'AuthCommonConfig',
|
|
label: this.$t('cs.auth.common'),
|
|
},
|
|
]
|
|
},
|
|
},
|
|
methods: {
|
|
getAuthDataEnable() {
|
|
getAuthDataEnable().then((res) => {
|
|
this.enable_list = res.enable_list
|
|
})
|
|
},
|
|
changeActiveKey() {
|
|
getAuthData(this.activeKey).then((res) => {
|
|
const _res = _.cloneDeep(res)
|
|
this.$refs[this.activeKey][0].setData(_res?.data ?? null)
|
|
if (_res && JSON.stringify(_res) !== '{}') {
|
|
this.dataTypeId = _res.id
|
|
} else {
|
|
this.dataTypeId = null
|
|
}
|
|
})
|
|
},
|
|
handleSave() {
|
|
this.$refs[this.activeKey][0].getData(async (data) => {
|
|
this.loading = true
|
|
if (this.dataTypeId) {
|
|
await putAuthData(this.activeKey, this.dataTypeId, { data }).finally(() => {
|
|
this.loading = false
|
|
})
|
|
} else {
|
|
await postAuthData(this.activeKey, { data }).finally(() => {
|
|
this.loading = false
|
|
})
|
|
}
|
|
this.$message.success(this.$t('saveSuccess'))
|
|
this.changeActiveKey()
|
|
this.getAuthDataEnable()
|
|
})
|
|
},
|
|
handleReset() {
|
|
this.changeActiveKey()
|
|
},
|
|
handleTest(type, values = null) {
|
|
this.$refs[this.activeKey][0].getData(async (data) => {
|
|
if (type === 'login' && !values) {
|
|
this.$refs.loginModal[0].open()
|
|
} else {
|
|
this.loading = true
|
|
let _data = _.cloneDeep(data)
|
|
if (values) {
|
|
_data = {
|
|
..._data,
|
|
...values,
|
|
}
|
|
}
|
|
testLDAP({ data: _data, test_type: type })
|
|
.then((res) => {
|
|
this.$message.success(this.$t('cs.auth.testSuccess'))
|
|
})
|
|
.finally(() => {
|
|
this.loading = false
|
|
})
|
|
}
|
|
})
|
|
},
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style lang="less" scoped>
|
|
.setting-auth {
|
|
background-color: #fff;
|
|
height: calc(100vh - 128px);
|
|
overflow: auto;
|
|
border-radius: 0 5px 5px 5px;
|
|
padding-top: 24px;
|
|
}
|
|
</style>
|
|
|
|
<style lang="less">
|
|
.setting-auth {
|
|
.jsoneditor-outer {
|
|
height: var(--custom-height) !important;
|
|
border: 1px solid #2f54eb;
|
|
}
|
|
div.jsoneditor-menu {
|
|
background-color: #2f54eb;
|
|
}
|
|
.jsoneditor-modes {
|
|
display: none;
|
|
}
|
|
}
|
|
</style>
|