From e87c4b69036e32b4fcf3df89e8158fb52df6a4e0 Mon Sep 17 00:00:00 2001 From: vnugent Date: Thu, 4 Jan 2024 11:13:31 -0500 Subject: package updates & partial account page added --- .../src/NVault.Crypto.Secp256k1.csproj | 4 +- .../src/NVault.VaultExtensions.csproj | 2 +- back-end/plugins/nvault/src/NVault.csproj | 8 +- extension/package-lock.json | 33 +++ extension/package.json | 4 +- extension/src/assets/modals.scss | 4 +- extension/src/components/ConfirmPrompt.vue | 67 ++++++ extension/src/components/PasswordPrompt.vue | 110 ++++++++++ extension/src/entries/background/main.ts | 6 +- .../src/entries/contentScript/renderContent.js | 6 +- extension/src/entries/options/App.vue | 23 +- .../src/entries/options/components/Account.vue | 34 +++ .../src/entries/options/components/Identities.vue | 23 +- extension/src/entries/options/components/Pki.vue | 237 +++++++++++++++++++++ .../src/entries/options/components/Privacy.vue | 19 +- .../entries/options/components/SiteSettings.vue | 6 +- extension/src/entries/options/components/Totp.vue | 234 ++++++++++++++++++++ extension/src/entries/options/main.js | 7 +- .../entries/popup/Components/IdentitySelection.vue | 16 +- extension/src/entries/popup/Components/Login.vue | 64 +++--- .../src/entries/popup/Components/OtpLogin.vue | 51 +++++ .../src/entries/popup/Components/PageContent.vue | 2 +- .../src/entries/popup/Components/PassLogin.vue | 89 ++++++++ extension/src/entries/popup/main.js | 4 +- extension/src/entries/store/features.ts | 25 ++- extension/src/entries/store/identity.ts | 18 +- extension/src/entries/store/index.ts | 9 +- extension/src/entries/store/mfaconfig.ts | 67 ++++++ extension/src/features/account-api.ts | 190 ----------------- extension/src/features/auth-api.ts | 106 +++++++-- extension/src/features/framework/index.ts | 6 +- extension/src/features/identity-api.ts | 46 ++-- extension/src/features/index.ts | 7 +- extension/src/features/mfa-api.ts | 87 ++++++++ extension/src/features/pki-api.ts | 208 ++++++++++++++++++ extension/src/features/types.ts | 9 + 36 files changed, 1517 insertions(+), 314 deletions(-) create mode 100644 extension/src/components/ConfirmPrompt.vue create mode 100644 extension/src/components/PasswordPrompt.vue create mode 100644 extension/src/entries/options/components/Account.vue create mode 100644 extension/src/entries/options/components/Pki.vue create mode 100644 extension/src/entries/options/components/Totp.vue create mode 100644 extension/src/entries/popup/Components/OtpLogin.vue create mode 100644 extension/src/entries/popup/Components/PassLogin.vue create mode 100644 extension/src/entries/store/mfaconfig.ts delete mode 100644 extension/src/features/account-api.ts create mode 100644 extension/src/features/mfa-api.ts create mode 100644 extension/src/features/pki-api.ts diff --git a/back-end/libs/NVault.Crypto.Secp256k1/src/NVault.Crypto.Secp256k1.csproj b/back-end/libs/NVault.Crypto.Secp256k1/src/NVault.Crypto.Secp256k1.csproj index 3a9f9f4..59ff06e 100644 --- a/back-end/libs/NVault.Crypto.Secp256k1/src/NVault.Crypto.Secp256k1.csproj +++ b/back-end/libs/NVault.Crypto.Secp256k1/src/NVault.Crypto.Secp256k1.csproj @@ -20,8 +20,8 @@ - - + + diff --git a/back-end/libs/NVault.VaultExtensions/src/NVault.VaultExtensions.csproj b/back-end/libs/NVault.VaultExtensions/src/NVault.VaultExtensions.csproj index e42f37d..3783c83 100644 --- a/back-end/libs/NVault.VaultExtensions/src/NVault.VaultExtensions.csproj +++ b/back-end/libs/NVault.VaultExtensions/src/NVault.VaultExtensions.csproj @@ -21,7 +21,7 @@ - + diff --git a/back-end/plugins/nvault/src/NVault.csproj b/back-end/plugins/nvault/src/NVault.csproj index d4b0776..fa82c90 100644 --- a/back-end/plugins/nvault/src/NVault.csproj +++ b/back-end/plugins/nvault/src/NVault.csproj @@ -1,4 +1,4 @@ - + net6.0 @@ -21,9 +21,9 @@ - - - + + + diff --git a/extension/package-lock.json b/extension/package-lock.json index dec73f0..bf558a0 100644 --- a/extension/package-lock.json +++ b/extension/package-lock.json @@ -26,12 +26,14 @@ "jose": "^5.0.x", "lodash-es": "^4.17.21", "nanoid": "^5.0.4", + "otpauth": "^9.2.1", "pinia": "^2.1.7", "sass": "^1.56.1", "serialize-error": "^11.0.0", "universal-cookie": "^7.0.x", "vite-plugin-web-extension": "^4.1.1", "vue": "^3.2.47", + "vue3-otp-input": "^0.4.1", "webextension-polyfill": "^0.10.0" }, "devDependencies": { @@ -5186,6 +5188,14 @@ "node": ">=0.6.0" } }, + "node_modules/jssha": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jssha/-/jssha-3.3.1.tgz", + "integrity": "sha512-VCMZj12FCFMQYcFLPRm/0lOBbLi8uM2BhXPTqw3U4YAfs4AZfiApOoBLoN8cQE60Z50m1MYMTQVCfgF/KaCVhQ==", + "engines": { + "node": "*" + } + }, "node_modules/jszip": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", @@ -5932,6 +5942,17 @@ "node": ">= 0.4.0" } }, + "node_modules/otpauth": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/otpauth/-/otpauth-9.2.1.tgz", + "integrity": "sha512-/MRvcm63pzK20NCsIOe8Btun42/yWNylPbUo/h5dMpSRJpoAJstWodEUjm4zUDeT1+Vbqif2E8IcP4trl1U4gQ==", + "dependencies": { + "jssha": "~3.3.1" + }, + "funding": { + "url": "https://github.com/hectorm/otpauth?sponsor=1" + } + }, "node_modules/p-cancelable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", @@ -8382,6 +8403,18 @@ "typescript": "*" } }, + "node_modules/vue3-otp-input": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/vue3-otp-input/-/vue3-otp-input-0.4.1.tgz", + "integrity": "sha512-wVl9i3DcWlO0C7fBI9V+RIP3crm/1tY72fuhvb3YM2JfbLoYofB96aPl5AgFhA0Cse5bQEMYtIvOeiqW3rfbAw==", + "engines": { + "node": ">=16.0.0", + "npm": ">=8.0.0" + }, + "peerDependencies": { + "vue": "^3.0.*" + } + }, "node_modules/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", diff --git a/extension/package.json b/extension/package.json index 2ba409a..806d54f 100644 --- a/extension/package.json +++ b/extension/package.json @@ -52,13 +52,15 @@ "base32-encode": "^2.0.0", "jose": "^5.0.x", "lodash-es": "^4.17.21", + "nanoid": "^5.0.4", + "otpauth": "^9.2.1", "pinia": "^2.1.7", "sass": "^1.56.1", "serialize-error": "^11.0.0", - "nanoid": "^5.0.4", "universal-cookie": "^7.0.x", "vite-plugin-web-extension": "^4.1.1", "vue": "^3.2.47", + "vue3-otp-input": "^0.4.1", "webextension-polyfill": "^0.10.0" } } diff --git a/extension/src/assets/modals.scss b/extension/src/assets/modals.scss index 254b8e1..b201073 100644 --- a/extension/src/assets/modals.scss +++ b/extension/src/assets/modals.scss @@ -3,8 +3,8 @@ @apply fixed z-50 flex w-full px-6; .modal-content-container { - @apply w-full max-w-md p-5 m-auto rounded-md shadow-2xl mt-44; - @apply bg-white border border-transparent dark:bg-dark-600 dark:border-primary-500 dark:text-white; + @apply w-full max-w-md p-5 m-auto rounded shadow-2xl mt-44; + @apply bg-white border border-transparent dark:bg-dark-600 dark:border-dark-200 dark:text-white; .modal-title { @apply text-xl font-bold; diff --git a/extension/src/components/ConfirmPrompt.vue b/extension/src/components/ConfirmPrompt.vue new file mode 100644 index 0000000..fa8601b --- /dev/null +++ b/extension/src/components/ConfirmPrompt.vue @@ -0,0 +1,67 @@ + + + + \ No newline at end of file diff --git a/extension/src/components/PasswordPrompt.vue b/extension/src/components/PasswordPrompt.vue new file mode 100644 index 0000000..ae29358 --- /dev/null +++ b/extension/src/components/PasswordPrompt.vue @@ -0,0 +1,110 @@ + + + \ No newline at end of file diff --git a/extension/src/entries/background/main.ts b/extension/src/entries/background/main.ts index 1d74f26..85e358a 100644 --- a/extension/src/entries/background/main.ts +++ b/extension/src/entries/background/main.ts @@ -23,7 +23,8 @@ import { useAppSettings, usePkiApi, useEventTagFilterApi, - useInjectAllowList + useInjectAllowList, + useMfaConfigApi, } from "../../features"; import { useBackgroundFeatures } from "../../features/framework"; @@ -40,5 +41,6 @@ register([ useLocalPki, usePkiApi, useEventTagFilterApi, - useInjectAllowList + useInjectAllowList, + useMfaConfigApi ]) \ No newline at end of file diff --git a/extension/src/entries/contentScript/renderContent.js b/extension/src/entries/contentScript/renderContent.js index 293bdd5..ca45c4f 100644 --- a/extension/src/entries/contentScript/renderContent.js +++ b/extension/src/entries/contentScript/renderContent.js @@ -20,7 +20,11 @@ export default async function renderContent( cssPaths, render = (_appRoot) => {} ) { + + //insert a div into the top of the body const appContainer = document.createElement("div"); + document.body.insertBefore(appContainer, document.body.firstChild); + const shadowRoot = appContainer.attachShadow({ mode: 'closed' }); const appRoot = document.createElement("div"); @@ -40,7 +44,5 @@ export default async function renderContent( } shadowRoot.appendChild(appRoot); - document.body.appendChild(appContainer); - render(appRoot, shadowRoot); } \ No newline at end of file diff --git a/extension/src/entries/options/App.vue b/extension/src/entries/options/App.vue index dd71209..d1da48e 100644 --- a/extension/src/entries/options/App.vue +++ b/extension/src/entries/options/App.vue @@ -1,5 +1,9 @@