diff options
-rw-r--r-- | package-lock.json | 35 | ||||
-rw-r--r-- | package.json | 1 | ||||
-rw-r--r-- | src/router/routes.js | 2 | ||||
-rw-r--r-- | src/store/api.js | 15 | ||||
-rw-r--r-- | src/store/modules/Authentication/AuthenticanStore.js | 12 | ||||
-rw-r--r-- | src/store/modules/SecurityAndAccess/CertificatesStore.js | 2 | ||||
-rw-r--r-- | src/views/SecurityAndAccess/Certificates/ModalGenerateCsr.vue | 22 | ||||
-rw-r--r-- | src/views/Settings/PowerRestorePolicy/PowerRestorePolicy.vue | 1 |
8 files changed, 65 insertions, 25 deletions
diff --git a/package-lock.json b/package-lock.json index d482f663..e8b7fdd8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@carbon/icons-vue": "10.28.0", "@novnc/novnc": "1.2.0", "axios": "1.6.0", + "axios-cache-interceptor": "1.5.1", "bootstrap": "4.6.0", "bootstrap-vue": "2.21.2", "core-js": "3.9.1", @@ -5752,6 +5753,25 @@ "proxy-from-env": "^1.1.0" } }, + "node_modules/axios-cache-interceptor": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/axios-cache-interceptor/-/axios-cache-interceptor-1.5.1.tgz", + "integrity": "sha512-1p/rTi7DSqUghJ5Ck8GKNt47X6f3IB8XnJ+TM4PwIdhimmCgh0jEQiwI8mBvf2kIMIl4Kz5idwbf/ouK75nEHA==", + "dependencies": { + "cache-parser": "1.2.4", + "fast-defer": "1.1.8", + "object-code": "1.3.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/arthurfiorette/axios-cache-interceptor?sponsor=1" + }, + "peerDependencies": { + "axios": "^1" + } + }, "node_modules/axios/node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -6827,6 +6847,11 @@ "node": ">=4.0.0" } }, + "node_modules/cache-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/cache-parser/-/cache-parser-1.2.4.tgz", + "integrity": "sha512-O0KwuHuJnbHUrghHi2kGp0SxnWSIBXTYt7M8WVhW0kbPRUNUKoE/Of6e1rRD6AAxmfxFunKnt90yEK09D+sc5g==" + }, "node_modules/cacheable-request": { "version": "6.1.0", "dev": true, @@ -10644,6 +10669,11 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-defer": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/fast-defer/-/fast-defer-1.1.8.tgz", + "integrity": "sha512-lEJeOH5VL5R09j6AA0D4Uvq7AgsHw0dAImQQ+F3iSyHZuAxyQfWobsagGpTcOPvJr3urmKRHrs+Gs9hV+/Qm/Q==" + }, "node_modules/fast-diff": { "version": "1.3.0", "dev": true, @@ -15862,6 +15892,11 @@ "node": ">=0.10.0" } }, + "node_modules/object-code": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/object-code/-/object-code-1.3.2.tgz", + "integrity": "sha512-3CVDmQiru7YYVr+4OpCGrqkVE7GogmWinDcgfno1fXlKgIhtW9FhgHTiV98gMPUjQwWuWvijQDCY8sGnqKrhTw==" + }, "node_modules/object-copy": { "version": "0.1.0", "dev": true, diff --git a/package.json b/package.json index 18f3aded..be2fb417 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "@carbon/icons-vue": "10.28.0", "@novnc/novnc": "1.2.0", "axios": "1.6.0", + "axios-cache-interceptor": "1.5.1", "bootstrap": "4.6.0", "bootstrap-vue": "2.21.2", "core-js": "3.9.1", diff --git a/src/router/routes.js b/src/router/routes.js index eb376aad..5424cab8 100644 --- a/src/router/routes.js +++ b/src/router/routes.js @@ -301,4 +301,4 @@ const routes = [ }, ]; -export default routes; +export { routes as default, roles }; diff --git a/src/store/api.js b/src/store/api.js index 9fd900d2..0bd84e62 100644 --- a/src/store/api.js +++ b/src/store/api.js @@ -1,4 +1,6 @@ import Axios from 'axios'; +import { setupCache, buildWebStorage } from 'axios-cache-interceptor'; + //Do not change store import. //Exact match alias set to support //dotenv customizations. @@ -7,10 +9,21 @@ import store from '../store'; Axios.defaults.headers.common['Accept'] = 'application/json'; Axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; -const api = Axios.create({ +const axiosInstance = Axios.create({ withCredentials: true, }); +const api = setupCache(axiosInstance, { + debug: console.log, + methods: ['get'], + interpretHeader: false, + etag: true, + modifiedSince: false, + staleIfError: false, + ttl: 0, + storage: buildWebStorage(localStorage, 'webui-vue-cache:'), +}); + api.interceptors.response.use(undefined, (error) => { let response = error.response; diff --git a/src/store/modules/Authentication/AuthenticanStore.js b/src/store/modules/Authentication/AuthenticanStore.js index 57270159..2006661b 100644 --- a/src/store/modules/Authentication/AuthenticanStore.js +++ b/src/store/modules/Authentication/AuthenticanStore.js @@ -1,6 +1,7 @@ import api from '@/store/api'; import Cookies from 'js-cookie'; import router from '@/router'; +import { roles } from '@/router/routes'; const AuthenticationStore = { namespaced: true, @@ -68,7 +69,16 @@ const AuthenticationStore = { commit('global/setPrivilege', data.RoleId, { root: true }); return data; }) - .catch((error) => console.log(error)); + .catch((error) => { + if (error.response?.status === 404) { + // We have valid credentials but user isn't known, assume remote + // authentication (e.g. LDAP) and do not restrict the routing + commit('global/setPrivilege', roles.administrator, { root: true }); + return {}; + } else { + console.log(error); + } + }); }, resetStoreState({ state }) { state.authError = false; diff --git a/src/store/modules/SecurityAndAccess/CertificatesStore.js b/src/store/modules/SecurityAndAccess/CertificatesStore.js index 3583d7f1..666f5fd5 100644 --- a/src/store/modules/SecurityAndAccess/CertificatesStore.js +++ b/src/store/modules/SecurityAndAccess/CertificatesStore.js @@ -166,7 +166,6 @@ const CertificatesStore = { keyPairAlgorithm, keyBitLength, keyCurveId, - challengePassword, contactPerson, emailAddress, alternateName, @@ -187,7 +186,6 @@ const CertificatesStore = { if (keyCurveId) data.KeyCurveId = keyCurveId; if (keyBitLength) data.KeyBitLength = keyBitLength; - if (challengePassword) data.ChallengePassword = challengePassword; if (contactPerson) data.ContactPerson = contactPerson; if (emailAddress) data.Email = emailAddress; diff --git a/src/views/SecurityAndAccess/Certificates/ModalGenerateCsr.vue b/src/views/SecurityAndAccess/Certificates/ModalGenerateCsr.vue index 04d23d2f..d9d65912 100644 --- a/src/views/SecurityAndAccess/Certificates/ModalGenerateCsr.vue +++ b/src/views/SecurityAndAccess/Certificates/ModalGenerateCsr.vue @@ -155,24 +155,6 @@ </b-form-group> </b-col> <b-col lg="6"> - <b-form-group label-for="challenge-password"> - <template #label> - {{ $t('pageCertificates.modal.challengePassword') }} - - <span class="form-text d-inline"> - {{ $t('global.form.optional') }} - </span> - </template> - <b-form-input - id="challenge-password" - v-model="form.challengePassword" - type="text" - data-test-id="modalGenerateCsr-input-challengePassword" - /> - </b-form-group> - </b-col> - </b-row> - <b-row> - <b-col lg="6"> <b-form-group label-for="contact-person"> <template #label> {{ $t('pageCertificates.modal.contactPerson') }} - @@ -188,6 +170,8 @@ /> </b-form-group> </b-col> + </b-row> + <b-row> <b-col lg="6"> <b-form-group label-for="email-address"> <template #label> @@ -400,7 +384,6 @@ export default { companyName: null, companyUnit: null, commonName: null, - challengePassword: null, contactPerson: null, emailAddress: null, alternateName: [], @@ -436,7 +419,6 @@ export default { companyName: { required }, companyUnit: { required }, commonName: { required }, - challengePassword: {}, contactPerson: {}, emailAddress: {}, alternateName: {}, diff --git a/src/views/Settings/PowerRestorePolicy/PowerRestorePolicy.vue b/src/views/Settings/PowerRestorePolicy/PowerRestorePolicy.vue index 9f206296..11870a87 100644 --- a/src/views/Settings/PowerRestorePolicy/PowerRestorePolicy.vue +++ b/src/views/Settings/PowerRestorePolicy/PowerRestorePolicy.vue @@ -9,6 +9,7 @@ v-model="currentPowerRestorePolicy" :options="options" name="power-restore-policy" + stacked ></b-form-radio-group> </b-form-group> </b-col> |