Skip to content
This repository was archived by the owner on Jan 20, 2021. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/config/section/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ export default {
label: 'label.configure.ldap',
listView: true,
args: [
'hostname', 'port'
'hostname', 'port', 'domainid'
]
},
{
Expand Down
112 changes: 80 additions & 32 deletions src/views/iam/AddLdapAccount.vue
Original file line number Diff line number Diff line change
Expand Up @@ -48,16 +48,23 @@
<a-form
:form="form"
@submit="handleSubmit"
layout="vertical"
>
layout="vertical" >
<a-form-item :label="$t('label.filterby')">
<a-select @change="fetchListLdapUsers" v-model="selectedFilter" >
<a-select-option v-for="opt in filters" :key="opt.id" >
{{ opt.name }}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item :label="$t('label.domain')">
<a-select
showSearch
v-decorator="['domainid', {
rules: [{ required: true, memessage: `${this.$t('message.error.select')}` }]
}]"
:placeholder="apiParams.domainid.description"
:loading="domainLoading">
:loading="domainLoading"
@change="fetchListLdapUsers($event)" >
<a-select-option v-for="opt in listDomains" :key="opt.name">
{{ opt.name }}
</a-select-option>
Expand Down Expand Up @@ -99,7 +106,7 @@
:placeholder="apiParams.networkdomain.description"
/>
</a-form-item>
<a-form-item :label="$t('label.group')">
<a-form-item :label="$t('label.ldap.group.name')">
<a-input
v-decorator="['group']"
:placeholder="apiParams.group.description"
Expand All @@ -119,6 +126,7 @@
<script>
import { api } from '@/api'
import { timeZone } from '@/utils/timezone'
import store from '@/store'

export default {
name: 'AddLdapAccount',
Expand All @@ -131,6 +139,8 @@ export default {
listDomains: [],
listRoles: [],
timeZoneMap: [],
filters: [],
selectedFilter: '',
listLoading: false,
timeZoneLoading: false,
domainLoading: false,
Expand Down Expand Up @@ -175,41 +185,60 @@ export default {
title: this.$t('label.email'),
dataIndex: 'email',
scopedSlots: { customRender: 'email' }
},
{
title: this.$t('Conflict'),
dataIndex: 'conflictingusersource',
scopedSlots: { customRender: 'conflictingusersource' }
}
]
this.filters = [
{
id: 'NoFilter',
name: 'No filter'
},
{
id: 'LocalDomain',
name: 'Local domain'
},
{
id: 'AnyDomain',
name: 'Any domain'
},
{
id: 'PotentialImport',
name: 'Potential import'
}
]
this.selectedFilter = this.filters[0].id
},
mounted () {
this.fetchData()
},
methods: {
async fetchData () {
this.listLoading = true
this.timeZoneLoading = true
this.domainLoading = true
this.roleLoading = true
this.fetchListLdapUsers()
const [
listTimeZone,
listLdapUsers,
listDomains,
listRoles
] = await Promise.all([
this.fetchTimeZone(),
this.fetchListLdapUsers(),
this.fetchListDomains(),
this.fetchListRoles()
]).catch(error => {
this.$notifyError(error)
}).finally(() => {
this.listLoading = false
this.timeZoneLoading = false
this.domainLoading = false
this.roleLoading = false
})
this.timeZoneMap = listTimeZone && listTimeZone.length > 0 ? listTimeZone : []
this.listDomains = listDomains && listDomains.length > 0 ? listDomains : []
this.listRoles = listRoles && listRoles.length > 0 ? listRoles : []
this.dataSource = listLdapUsers
this.oldDataSource = listLdapUsers
},
fetchTimeZone (value) {
return new Promise((resolve, reject) => {
Expand All @@ -220,22 +249,32 @@ export default {
})
})
},
fetchListLdapUsers () {
return new Promise((resolve, reject) => {
const params = {}
params.listtype = 'new'
api('listLdapUsers', params).then(json => {
const listLdapUsers = json.ldapuserresponse.LdapUser
if (listLdapUsers) {
const ldapUserLength = listLdapUsers.length
for (let i = 0; i < ldapUserLength; i++) {
listLdapUsers[i].name = [listLdapUsers[i].firstname, listLdapUsers[i].lastname].join(' ')
}
fetchListLdapUsers (domain) {
this.listLoading = true
const params = {}
params.listtype = 'new'
params.userfilter = this.selectedFilter
params.domainid = store.getters.userInfo.domainid
if (domain) {
const result = this.listDomains.filter(item => item.name === domain)
if (result) {
params.domainid = result[0].id
}
}
api('listLdapUsers', params).then(json => {
const listLdapUsers = json.ldapuserresponse.LdapUser
if (listLdapUsers) {
const ldapUserLength = listLdapUsers.length
for (let i = 0; i < ldapUserLength; i++) {
listLdapUsers[i].name = [listLdapUsers[i].firstname, listLdapUsers[i].lastname].join(' ')
}
resolve(listLdapUsers)
}).catch(error => {
reject(error)
})
}
this.dataSource = listLdapUsers
this.oldDataSource = listLdapUsers
}).catch(error => {
this.$notifyError(error)
}).finally(() => {
this.listLoading = false
})
},
fetchListDomains () {
Expand Down Expand Up @@ -263,7 +302,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
this.form.validateFields((err, values) => {
if (err || this.selectedRowKeys.length === 0) {
if (err) {
return
}
let apiName = 'ldapCreateAccount'
Expand All @@ -273,22 +312,31 @@ export default {
const params = {}
params.domainid = domain[0].id
params.roleid = role[0].id
params.account = values.account
params.timezone = values.timezone
params.networkdomain = values.networkdomain
params.group = values.group
if (params.group && params.group.trim().length > 0) {
if (values.group && values.group.trim().length > 0) {
params.group = values.group
apiName = 'importLdapUsers'
}
this.selectedRowKeys.forEach(username => {
params.username = username
promises.push(new Promise((resolve, reject) => {
api(apiName, params).then(json => {
resolve(json)
}).catch(error => {
reject(error)
})
}))
})
} else {
this.selectedRowKeys.forEach(username => {
params.username = username
promises.push(new Promise((resolve, reject) => {
api(apiName, params).then(json => {
resolve(json)
}).catch(error => {
reject(error)
})
}))
})
}
this.loading = true
Promise.all(promises).then(response => {
for (let i = 0; i < response.length; i++) {
Expand Down