UI: Fix Userdata registration from UI (#8791)

* UI: Fix Userdata registration from UI

* add isbase64 checkbox
This commit is contained in:
Pearl Dsilva 2024-06-18 06:11:08 -04:00 committed by GitHub
parent a10eee25b3
commit 7534196361
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 18 additions and 4 deletions

View File

@ -1110,6 +1110,7 @@
"label.ipv6.subnets": "IPv6 Subnets", "label.ipv6.subnets": "IPv6 Subnets",
"label.ip.addresses": "IP Addresses", "label.ip.addresses": "IP Addresses",
"label.iqn": "Target IQN", "label.iqn": "Target IQN",
"label.is.base64.encoded": "Base64 encoded",
"label.is.in.progress": "is in progress", "label.is.in.progress": "is in progress",
"label.is.shared": "Is shared", "label.is.shared": "Is shared",
"label.is2faenabled": "Is 2FA enabled", "label.is2faenabled": "Is 2FA enabled",

View File

@ -486,6 +486,15 @@ export const fileSizeUtilPlugin = {
} }
} }
function isBase64 (str) {
try {
const decoded = new TextDecoder().decode(Uint8Array.from(atob(str), c => c.charCodeAt(0)))
return btoa(decoded) === str
} catch (err) {
return false
}
}
export const genericUtilPlugin = { export const genericUtilPlugin = {
install (app) { install (app) {
app.config.globalProperties.$isValidUuid = function (uuid) { app.config.globalProperties.$isValidUuid = function (uuid) {
@ -494,8 +503,7 @@ export const genericUtilPlugin = {
} }
app.config.globalProperties.$toBase64AndURIEncoded = function (text) { app.config.globalProperties.$toBase64AndURIEncoded = function (text) {
const base64regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/ if (isBase64(text)) {
if (base64regex.test(text)) {
return text return text
} }
return encodeURIComponent(btoa(unescape(encodeURIComponent(text)))) return encodeURIComponent(btoa(unescape(encodeURIComponent(text))))

View File

@ -43,6 +43,9 @@
v-model:value="form.userdata" v-model:value="form.userdata"
:placeholder="apiParams.userdata.description"/> :placeholder="apiParams.userdata.description"/>
</a-form-item> </a-form-item>
<a-form-item name="isbase64" ref="isbase64" :label="$t('label.is.base64.encoded')">
<a-checkbox v-model:checked="form.isbase64"></a-checkbox>
</a-form-item>
<a-form-item name="params" ref="params"> <a-form-item name="params" ref="params">
<template #label> <template #label>
<tooltip-label :title="$t('label.userdataparams')" :tooltip="apiParams.params.description"/> <tooltip-label :title="$t('label.userdataparams')" :tooltip="apiParams.params.description"/>
@ -147,7 +150,9 @@ export default {
methods: { methods: {
initForm () { initForm () {
this.formRef = ref() this.formRef = ref()
this.form = reactive({}) this.form = reactive({
isbase64: false
})
this.rules = reactive({ this.rules = reactive({
name: [{ required: true, message: this.$t('message.error.name') }], name: [{ required: true, message: this.$t('message.error.name') }],
userdata: [{ required: true, message: this.$t('message.error.userdata') }] userdata: [{ required: true, message: this.$t('message.error.userdata') }]
@ -204,7 +209,7 @@ export default {
if (this.isValidValueForKey(values, 'account') && values.account.length > 0) { if (this.isValidValueForKey(values, 'account') && values.account.length > 0) {
params.account = values.account params.account = values.account
} }
params.userdata = this.$toBase64AndURIEncoded(values.userdata) params.userdata = values.isbase64 ? values.userdata : this.$toBase64AndURIEncoded(values.userdata)
if (values.params != null && values.params.length > 0) { if (values.params != null && values.params.length > 0) {
var userdataparams = values.params.join(',') var userdataparams = values.params.join(',')