diff --git a/package.json b/package.json
index bb5f32208..4b24583d1 100644
--- a/package.json
+++ b/package.json
@@ -32,6 +32,7 @@
"install": "^0.13.0",
"jquery": "^3.5.0",
"js-cookie": "2.2.0",
+ "jsencrypt": "^3.2.1",
"krry-transfer": "^1.7.3",
"less": "^3.10.3",
"less-loader": "^5.0.0",
diff --git a/src/components/FormFields/EncryptedPassword.vue b/src/components/FormFields/EncryptedPassword.vue
new file mode 100644
index 000000000..390610a09
--- /dev/null
+++ b/src/components/FormFields/EncryptedPassword.vue
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
diff --git a/src/components/FormFields/PasswordInput.vue b/src/components/FormFields/PasswordInput.vue
index fcf234053..7911f663e 100644
--- a/src/components/FormFields/PasswordInput.vue
+++ b/src/components/FormFields/PasswordInput.vue
@@ -1,5 +1,5 @@
-
import AutoDataForm from '@/components/AutoDataForm'
import { getUpdateObjURL } from '@/utils/common'
+import { encryptPassword } from '@/utils/jms'
+
export default {
name: 'GenericCreateUpdateForm',
components: {
@@ -218,6 +220,10 @@ export default {
hasDetailInMsg: {
type: Boolean,
default: true
+ },
+ encryptedFields: {
+ type: Array,
+ default: () => ['password', 'token']
}
},
data() {
@@ -265,10 +271,23 @@ export default {
isUpdateMethod() {
return ['put', 'patch'].indexOf(this.method.toLowerCase()) > -1
},
+ encryptFields(values) {
+ values = { ...values }
+ for (const field of this.encryptedFields) {
+ let value = values[field]
+ if (!value || typeof value !== 'string') {
+ continue
+ }
+ value = encryptPassword(value)
+ values[field] = value
+ }
+ return values
+ },
handleSubmit(values, formName, addContinue) {
let handler = this.onSubmit || this.defaultOnSubmit
handler = handler.bind(this)
values = this.cleanFormValue(values)
+ values = this.encryptFields(values)
return handler(values, formName, addContinue)
},
defaultOnSubmit(validValues, formName, addContinue) {
diff --git a/src/utils/jms.js b/src/utils/jms.js
index c57b8d35e..1f9cce32b 100644
--- a/src/utils/jms.js
+++ b/src/utils/jms.js
@@ -1,5 +1,7 @@
import store from '@/store'
import { constantRoutes } from '@/router'
+import { JSEncrypt } from 'jsencrypt'
+import VueCookie from 'vue-cookie'
export function openTaskPage(taskId) {
window.open(`/#/ops/celery/task/${taskId}/log/`, '', 'width=900,height=600')
@@ -132,3 +134,16 @@ export function getConstRouteName() {
addRoutes(names, constRoutes)
return names
}
+
+export function encryptPassword(password) {
+ if (!password) {
+ return ''
+ }
+ var rsaPublicKeyText = VueCookie.get('jms_public_key')
+ .replaceAll('"', '')
+ var rsaPublicKey = atob(rsaPublicKeyText)
+ var jsencrypt = new JSEncrypt()
+ jsencrypt.setPublicKey(rsaPublicKey)
+ var value = jsencrypt.encrypt(password)
+ return value
+}
diff --git a/src/views/assets/Asset/TreeMenu.vue b/src/views/assets/Asset/TreeMenu.vue
index fdc847b42..08ab70ed5 100644
--- a/src/views/assets/Asset/TreeMenu.vue
+++ b/src/views/assets/Asset/TreeMenu.vue
@@ -69,7 +69,8 @@ export default {
props: {
tree: {
type: Object,
- require: true
+ require: true,
+ default: () => ({})
}
},
data() {
diff --git a/src/views/assets/SystemUser/SystemUserCreateUpdate/CommonUser/telnet.vue b/src/views/assets/SystemUser/SystemUserCreateUpdate/CommonUser/telnet.vue
index 851e6c890..7894bd97e 100644
--- a/src/views/assets/SystemUser/SystemUserCreateUpdate/CommonUser/telnet.vue
+++ b/src/views/assets/SystemUser/SystemUserCreateUpdate/CommonUser/telnet.vue
@@ -29,6 +29,7 @@ export default {
[this.$t('common.Command filter'), ['cmd_filters']],
[this.$t('common.Other'), ['priority', 'comment']]
],
+ encryptedFields: ['password'],
fieldsMeta: {
login_mode: fields.login_mode,
username: fields.username,
diff --git a/src/views/profile/ProfileUpdate/PasswordUpdate.vue b/src/views/profile/ProfileUpdate/PasswordUpdate.vue
index b0cdb22b2..b6fc6c1b5 100644
--- a/src/views/profile/ProfileUpdate/PasswordUpdate.vue
+++ b/src/views/profile/ProfileUpdate/PasswordUpdate.vue
@@ -2,6 +2,7 @@