Skip to content

Commit 21036bf

Browse files
Hoang Nguyenrohityadavcloud
authored andcommitted
iam: Account Cert Tab (#66)
Fixes #46 Signed-off-by: Rohit Yadav <[email protected]>
1 parent c6839a8 commit 21036bf

File tree

8 files changed

+303
-21
lines changed

8 files changed

+303
-21
lines changed

ui/docs/api/apis.remaining

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ deletePrivateGateway
5151
deleteProjectInvitation
5252
deleteSecondaryStagingStore
5353
deleteSnapshotPolicies
54-
deleteSslCert
5554
deleteStaticRoute
5655
deleteStorageNetworkIpRange
5756
deleteVlanIpRange
@@ -101,7 +100,6 @@ listResourceLimits
101100
listSamlAuthorization
102101
listSecondaryStagingStores
103102
listSnapshotPolicies
104-
listSslCerts
105103
listStaticRoutes
106104
listStorageNetworkIpRange
107105
listStorageProviders
@@ -138,4 +136,3 @@ updateResourceLimit
138136
updateTrafficType
139137
updateVmNicIp
140138
updateVpnCustomerGateway
141-
uploadSslCert

ui/src/components/view/DetailSettings.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
<a-list size="large">
4242
<a-list-item :key="index" v-for="(item, index) in details">
4343
<a-list-item-meta>
44-
<span slot="title">{{ item.name }}</span>
44+
<span slot="title"><strong>{{ item.name }}</strong></span>
4545
<span slot="description" style="word-break: break-all">
4646
<span v-if="item.edit" style="display: flex">
4747
<a-auto-complete
@@ -51,7 +51,7 @@
5151
@change="val => handleInputChange(val, index)"
5252
@pressEnter="e => updateDetail(index)" />
5353
</span>
54-
<span v-else>{{ item.value }}</span>
54+
<span v-else @click="showEditDetail(index)">{{ item.value }}</span>
5555
</span>
5656
</a-list-item-meta>
5757
<div slot="actions">

ui/src/components/view/ResourceView.vue

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
:tab="$t(tab.name)"
3838
:key="tab.name"
3939
v-if="'show' in tab ? tab.show(resource, $route) : true">
40-
<component :is="tab.component" :resource="resource" :loading="loading" />
40+
<component :is="tab.component" :resource="resource" :loading="loading" :tab="activeTab" />
4141
</a-tab-pane>
4242
</a-tabs>
4343
</a-card>
@@ -76,6 +76,11 @@ export default {
7676
}
7777
}
7878
},
79+
data () {
80+
return {
81+
activeTab: ''
82+
}
83+
},
7984
methods: {
8085
onTabChange (key) {
8186
this.activeTab = key

ui/src/components/view/SettingsTab.vue

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<a-list size="large" class="list" :loading="loading">
2+
<a-list size="large" class="list" :loading="loading || tabLoading">
33
<a-list-item :key="index" v-for="(item, index) in items" class="item">
44
<a-list-item-meta>
55
<span slot="title" style="word-break: break-all"><strong>{{ item.name }}</strong></span>
@@ -15,7 +15,7 @@
1515
@keydown.esc="editableValueKey = null"
1616
@pressEnter="updateData(item)">
1717
</a-input>
18-
<span v-else class="value">
18+
<span v-else class="value" @click="setEditableSetting(item, index)">
1919
{{ item.value }}
2020
</span>
2121
</div>
@@ -64,7 +64,8 @@ export default {
6464
items: [],
6565
scopeKey: '',
6666
editableValueKey: null,
67-
editableValue: ''
67+
editableValue: '',
68+
tabLoading: false
6869
}
6970
},
7071
beforeMount () {
@@ -95,14 +96,15 @@ export default {
9596
this.fetchData()
9697
},
9798
watch: {
98-
resource: newItem => {
99+
resource: function (newItem, oldItem) {
99100
if (!newItem.id) return
101+
this.resource = newItem
100102
this.fetchData()
101103
}
102104
},
103105
methods: {
104106
fetchData (callback) {
105-
this.loading = true
107+
this.tabLoading = true
106108
api('listConfigurations', {
107109
[this.scopeKey]: this.resource.id,
108110
listAll: true
@@ -112,13 +114,13 @@ export default {
112114
console.error(error)
113115
this.$message.error('There was an error loading these settings.')
114116
}).finally(() => {
115-
this.loading = false
117+
this.tabLoading = false
116118
if (!callback) return
117119
callback()
118120
})
119121
},
120122
updateData (item) {
121-
this.loading = true
123+
this.tabLoading = true
122124
api('updateConfiguration', {
123125
[this.scopeKey]: this.resource.id,
124126
name: item.name,
@@ -133,7 +135,7 @@ export default {
133135
description: 'There was an error saving this setting. Please try again later.'
134136
})
135137
}).finally(() => {
136-
this.loading = false
138+
this.tabLoading = false
137139
this.fetchData(() => {
138140
this.editableValueKey = null
139141
})

ui/src/config/section/iam.js

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,20 @@ export default {
9090
title: 'Users',
9191
param: 'account'
9292
}],
93-
tabs: [{
94-
name: 'details',
95-
component: () => import('@/components/view/DetailsTab.vue')
96-
}, {
97-
name: 'Settings',
98-
component: () => import('@/components/view/SettingsTab.vue')
99-
}],
93+
tabs: [
94+
{
95+
name: 'details',
96+
component: () => import('@/components/view/DetailsTab.vue')
97+
},
98+
{
99+
name: 'certificate',
100+
component: () => import('@/views/iam/SSLCertificateTab.vue')
101+
},
102+
{
103+
name: 'Settings',
104+
component: () => import('@/components/view/SettingsTab.vue')
105+
}
106+
],
100107
actions: [
101108
{
102109
api: 'createAccount',
@@ -161,6 +168,14 @@ export default {
161168
}
162169
}
163170
},
171+
{
172+
api: 'uploadSslCert',
173+
icon: 'safety-certificate',
174+
label: 'Add certificate',
175+
dataView: true,
176+
args: ['name', 'certificate', 'privatekey', 'certchain', 'password'],
177+
show: (record) => { return record.state === 'enabled' }
178+
},
164179
{
165180
api: 'deleteAccount',
166181
icon: 'delete',

ui/src/locales/en.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@
9999
"capacityiops": "IOPS Total",
100100
"certchain": "Chain",
101101
"certificate": "Certificate",
102+
"certificateid": "Certificate ID",
102103
"chassis": "Chassis",
103104
"checksum": "checksum",
104105
"cidr": "Super CIDR for Guest Networks",
@@ -133,6 +134,7 @@
133134
"current": "isCurrent",
134135
"date": "Date",
135136
"dedicated": "Dedicated",
137+
"deleteconfirm": "Please confirm that you would like to delete this {name}",
136138
"deleteprofile": "Delete Profile",
137139
"deploymentPlanner": "Deployment planner",
138140
"deploymentplanner": "Deployment planner",
@@ -435,6 +437,7 @@
435437
"label.add.isolated.network": "Add Isolated Network",
436438
"label.add.l2.guest.network": "Add L2 Guest Network",
437439
"label.add.ldap.account": "Add LDAP account",
440+
"label.add.ldap.list.users": "List LDAP users",
438441
"label.add.netScaler.device": "Add Netscaler device",
439442
"label.add.network.offering": "Add network offering",
440443
"label.add.new.tier": "Add new tier",
@@ -734,6 +737,7 @@
734737
"publicport": "Public Port",
735738
"purpose": "Purpose",
736739
"qosType": "QoS Type",
740+
"quickview": "Quick view",
737741
"quiescevm": "Quiesce VM",
738742
"quietTime": "Quiet Time (in sec)",
739743
"quota": "Quota Value",

ui/src/views/AutogenView.vue

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,15 @@
177177
:placeholder="field.description"
178178
/>
179179
</span>
180+
<span v-else-if="field.name==='certificate' || field.name==='privatekey' || field.name==='certchain'">
181+
<a-textarea
182+
rows="2"
183+
v-decorator="[field.name, {
184+
rules: [{ required: field.required, message: 'Please enter input' }]
185+
}]"
186+
:placeholder="field.description"
187+
/>
188+
</span>
180189
<span v-else>
181190
<a-input
182191
v-decorator="[field.name, {

0 commit comments

Comments
 (0)