iam: Fixing ldap form (#444)

Fixes #112

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
This commit is contained in:
davidjumani 2020-06-25 11:42:58 +00:00 committed by Rohit Yadav
parent 68989bd939
commit 0e933a2a84
2 changed files with 81 additions and 33 deletions

View File

@ -42,7 +42,7 @@ export default {
label: 'label.configure.ldap',
listView: true,
args: [
'hostname', 'port'
'hostname', 'port', 'domainid'
]
},
{

View File

@ -48,8 +48,14 @@
<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
@ -57,7 +63,8 @@
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>
@ -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"
@ -119,6 +126,7 @@
<script>
import { api } from '@/api'
import { timeZone } from '@/utils/timezone'
import store from '@/store'
export default {
name: 'AddLdapAccount',
@ -131,6 +139,8 @@ export default {
listDomains: [],
listRoles: [],
timeZoneMap: [],
filters: [],
selectedFilter: '',
listLoading: false,
timeZoneLoading: false,
domainLoading: false,
@ -175,32 +185,53 @@ 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
@ -208,8 +239,6 @@ export default {
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) => {
@ -220,10 +249,18 @@ export default {
})
})
},
fetchListLdapUsers () {
return new Promise((resolve, reject) => {
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) {
@ -232,10 +269,12 @@ export default {
listLdapUsers[i].name = [listLdapUsers[i].firstname, listLdapUsers[i].lastname].join(' ')
}
}
resolve(listLdapUsers)
this.dataSource = listLdapUsers
this.oldDataSource = listLdapUsers
}).catch(error => {
reject(error)
})
this.$notifyError(error)
}).finally(() => {
this.listLoading = false
})
},
fetchListDomains () {
@ -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'
@ -273,12 +312,20 @@ 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
if (values.group && values.group.trim().length > 0) {
params.group = values.group
if (params.group && params.group.trim().length > 0) {
apiName = 'importLdapUsers'
}
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) => {
@ -289,6 +336,7 @@ export default {
})
}))
})
}
this.loading = true
Promise.all(promises).then(response => {
for (let i = 0; i < response.length; i++) {