1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-13 23:03:32 +00:00

Merge branch 'master' into ac/ac-1139/deprecate-custom-collection-perm

This commit is contained in:
Rui Tome
2023-12-05 11:06:43 +00:00
1311 changed files with 9826 additions and 7438 deletions

View File

@@ -22,3 +22,6 @@
193434461dbd9c48fe5dcbad95693470aec422ac 193434461dbd9c48fe5dcbad95693470aec422ac
# Jslib: Monorepository https://github.com/bitwarden/clients/pull/2824/commits/d7492e3cf320410e74ebd0e0675ab994e64bd01a # Jslib: Monorepository https://github.com/bitwarden/clients/pull/2824/commits/d7492e3cf320410e74ebd0e0675ab994e64bd01a
d7492e3cf320410e74ebd0e0675ab994e64bd01a d7492e3cf320410e74ebd0e0675ab994e64bd01a
# All Clients: Apply Prettier https://github.com/bitwarden/clients/pull/7014
28de9439beb87133c8683434df952a0c0be94100

View File

@@ -40,14 +40,6 @@
./apps/browser/README.md ./apps/browser/README.md
./apps/browser/store/windows/AppxManifest.xml ./apps/browser/store/windows/AppxManifest.xml
./apps/browser/src/background/nativeMessaging.background.ts ./apps/browser/src/background/nativeMessaging.background.ts
./apps/browser/src/background/models/addLoginRuntimeMessage.ts
./apps/browser/src/background/models/addChangePasswordQueueMessage.ts
./apps/browser/src/background/models/addLoginQueueMessage.ts
./apps/browser/src/background/models/changePasswordRuntimeMessage.ts
./apps/browser/src/background/models/notificationQueueMessage.ts
./apps/browser/src/background/models/notificationQueueMessageType.ts
./apps/browser/src/background/models/lockedVaultPendingNotificationsItem.ts
./apps/browser/src/background/webRequest.background.ts
./apps/browser/src/popup/services/debounceNavigationService.ts ./apps/browser/src/popup/services/debounceNavigationService.ts
./apps/browser/src/models/browserComponentState.ts ./apps/browser/src/models/browserComponentState.ts
./apps/browser/src/models/browserSendComponentState.ts ./apps/browser/src/models/browserSendComponentState.ts

View File

@@ -136,16 +136,10 @@ jobs:
cache-dependency-path: '**/package-lock.json' cache-dependency-path: '**/package-lock.json'
node-version: ${{ env._NODE_VERSION }} node-version: ${{ env._NODE_VERSION }}
- name: Install node-gyp
run: |
npm install -g node-gyp
node-gyp install $(node -v)
- name: Print environment - name: Print environment
run: | run: |
node --version node --version
npm --version npm --version
node-gyp --version
- name: Build sources for reviewers - name: Build sources for reviewers
run: | run: |

View File

@@ -104,11 +104,6 @@ jobs:
cache-dependency-path: '**/package-lock.json' cache-dependency-path: '**/package-lock.json'
node-version: ${{ env._NODE_VERSION }} node-version: ${{ env._NODE_VERSION }}
- name: Install node-gyp
run: |
npm install -g node-gyp
node-gyp install $(node -v)
- name: Install - name: Install
run: npm ci run: npm ci
working-directory: ./ working-directory: ./
@@ -179,11 +174,6 @@ jobs:
cache-dependency-path: '**/package-lock.json' cache-dependency-path: '**/package-lock.json'
node-version: ${{ env._NODE_VERSION }} node-version: ${{ env._NODE_VERSION }}
- name: Install node-gyp
run: |
npm install -g node-gyp
node-gyp install $(node -v)
- name: Get pkg-fetch - name: Get pkg-fetch
shell: pwsh shell: pwsh
run: | run: |

View File

@@ -162,11 +162,6 @@ jobs:
- name: Set Node options - name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
- name: Install node-gyp
run: |
npm install -g node-gyp
node-gyp install $(node -v)
- name: Set up environment - name: Set up environment
run: | run: |
sudo apt-get update sudo apt-get update
@@ -279,11 +274,6 @@ jobs:
- name: Set Node options - name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append run: echo "NODE_OPTIONS=--max_old_space_size=4096" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
- name: Install node-gyp
run: |
npm install -g node-gyp
node-gyp install $(node -v)
- name: Install AST - name: Install AST
run: dotnet tool install --global AzureSignTool --version 4.0.1 run: dotnet tool install --global AzureSignTool --version 4.0.1
@@ -493,11 +483,6 @@ jobs:
- name: Set Node options - name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
- name: Install node-gyp
run: |
npm install -g node-gyp
node-gyp install $(node -v)
- name: Rust - name: Rust
shell: pwsh shell: pwsh
run: rustup target install aarch64-apple-darwin run: rustup target install aarch64-apple-darwin
@@ -646,11 +631,6 @@ jobs:
- name: Set Node options - name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
- name: Install node-gyp
run: |
npm install -g node-gyp
node-gyp install $(node -v)
- name: Rust - name: Rust
shell: pwsh shell: pwsh
run: rustup target install aarch64-apple-darwin run: rustup target install aarch64-apple-darwin
@@ -844,11 +824,6 @@ jobs:
- name: Set Node options - name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
- name: Install node-gyp
run: |
npm install -g node-gyp
node-gyp install $(node -v)
- name: Rust - name: Rust
shell: pwsh shell: pwsh
run: rustup target install aarch64-apple-darwin run: rustup target install aarch64-apple-darwin
@@ -1034,11 +1009,6 @@ jobs:
- name: Set Node options - name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
- name: Install node-gyp
run: |
npm install -g node-gyp
node-gyp install $(node -v)
- name: Print environment - name: Print environment
run: | run: |
node --version node --version

View File

@@ -11,6 +11,21 @@ on:
default: master default: master
jobs: jobs:
notify-start:
name: Notify Slack with start message
runs-on: ubuntu-22.04
if: always()
steps:
- uses: bitwarden/gh-actions/report-deployment-status-to-slack@main
with:
project: Web
environment: EU QA Cloud
tag: ${{ github.ref_name }}
slack-channel: team-eng-qa-devops
event: 'start'
url: https://github.com/bitwarden/clients/actions/runs/${{ github.run_id }}
AZURE_KV_CI_SERVICE_PRINCIPAL: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
azure-deploy: azure-deploy:
name: Deploy to Azure name: Deploy to Azure
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
@@ -71,5 +86,6 @@ jobs:
environment: EU QA Cloud environment: EU QA Cloud
tag: ${{ github.event.inputs.tag }} tag: ${{ github.event.inputs.tag }}
slack-channel: team-eng-qa-devops slack-channel: team-eng-qa-devops
failure: ${{ needs.azure-deploy.result == 'failure' }} event: ${{ needs.azure-deploy.result }}
url: https://github.com/bitwarden/devops/actions/runs/${{ github.run_id }}
AZURE_KV_CI_SERVICE_PRINCIPAL: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} AZURE_KV_CI_SERVICE_PRINCIPAL: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}

View File

@@ -57,6 +57,21 @@ jobs:
echo "environment-artifact=web-*-cloud-COMMERCIAL.zip" >> $GITHUB_OUTPUT echo "environment-artifact=web-*-cloud-COMMERCIAL.zip" >> $GITHUB_OUTPUT
fi fi
notify-start:
name: Notify Slack with start message
runs-on: ubuntu-22.04
if: always()
steps:
- uses: bitwarden/gh-actions/report-deployment-status-to-slack@main
with:
project: Web
environment: US ${{ inputs.environment }} Cloud
tag: ${{ github.ref_name }}
slack-channel: team-eng-qa-devops
event: 'start'
url: https://github.com/bitwarden/clients/actions/runs/${{ github.run_id }}
AZURE_KV_CI_SERVICE_PRINCIPAL: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
artifact-check: artifact-check:
name: Check if Web artifact is present name: Check if Web artifact is present
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
@@ -253,5 +268,6 @@ jobs:
environment: US ${{ inputs.environment }} Cloud environment: US ${{ inputs.environment }} Cloud
tag: ${{ github.ref_name }} tag: ${{ github.ref_name }}
slack-channel: team-eng-qa-devops slack-channel: team-eng-qa-devops
failure: ${{ needs.cfpages-deploy.result == 'failure' }} event: ${{ needs.cfpages-deploy.result }}
url: https://github.com/bitwarden/clients/actions/runs/${{ github.run_id }}
AZURE_KV_CI_SERVICE_PRINCIPAL: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} AZURE_KV_CI_SERVICE_PRINCIPAL: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}

View File

@@ -138,11 +138,6 @@ jobs:
- name: Set Node options - name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
- name: Install node-gyp
run: |
npm install -g node-gyp
node-gyp install $(node -v)
- name: Set up environment - name: Set up environment
run: | run: |
sudo apt-get update sudo apt-get update
@@ -235,11 +230,6 @@ jobs:
- name: Set Node options - name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append run: echo "NODE_OPTIONS=--max_old_space_size=4096" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
- name: Install node-gyp
run: |
npm install -g node-gyp
node-gyp install $(node -v)
- name: Install AST - name: Install AST
run: dotnet tool install --global AzureSignTool --version 4.0.1 run: dotnet tool install --global AzureSignTool --version 4.0.1
@@ -431,11 +421,6 @@ jobs:
- name: Set Node options - name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
- name: Install node-gyp
run: |
npm install -g node-gyp
node-gyp install $(node -v)
- name: Print environment - name: Print environment
run: | run: |
node --version node --version
@@ -561,11 +546,6 @@ jobs:
- name: Set Node options - name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
- name: Install node-gyp
run: |
npm install -g node-gyp
node-gyp install $(node -v)
- name: Print environment - name: Print environment
run: | run: |
node --version node --version
@@ -764,11 +744,6 @@ jobs:
- name: Set Node options - name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
- name: Install node-gyp
run: |
npm install -g node-gyp
node-gyp install $(node -v)
- name: Print environment - name: Print environment
run: | run: |
node --version node --version

View File

@@ -48,7 +48,7 @@ const decorator = componentWrapperDecorator(
}, },
({ globals }) => { ({ globals }) => {
return { theme: `${globals["theme"]}` }; return { theme: `${globals["theme"]}` };
} },
); );
const preview: Preview = { const preview: Preview = {

View File

@@ -1,13 +1,11 @@
const child = require("child_process"); const child = require("child_process");
const fs = require("fs"); const fs = require("fs");
const del = require("del"); const { rimraf } = require("rimraf");
const gulp = require("gulp"); const gulp = require("gulp");
const filter = require("gulp-filter");
const gulpif = require("gulp-if"); const gulpif = require("gulp-if");
const jeditor = require("gulp-json-editor"); const jeditor = require("gulp-json-editor");
const replace = require("gulp-replace"); const replace = require("gulp-replace");
const zip = require("gulp-zip");
const manifest = require("./src/manifest.json"); const manifest = require("./src/manifest.json");
@@ -47,7 +45,10 @@ function distFileName(browserName, ext) {
return `dist-${browserName}${buildString()}.${ext}`; return `dist-${browserName}${buildString()}.${ext}`;
} }
function dist(browserName, manifest) { async function dist(browserName, manifest) {
const { default: zip } = await import("gulp-zip");
const { default: filter } = await import("gulp-filter");
return gulp return gulp
.src(paths.build + "**/*") .src(paths.build + "**/*")
.pipe(filter(["**"].concat(filters.fonts).concat(filters.safari))) .pipe(filter(["**"].concat(filters.fonts).concat(filters.safari)))
@@ -130,7 +131,7 @@ function distSafariApp(cb, subBuildPath) {
]; ];
} }
return del([buildPath + "**/*"]) return rimraf([buildPath + "**/*"], { glob: true })
.then(() => safariCopyAssets(paths.safari + "**/*", buildPath)) .then(() => safariCopyAssets(paths.safari + "**/*", buildPath))
.then(() => safariCopyBuild(paths.build + "**/*", buildPath + "safari/app")) .then(() => safariCopyBuild(paths.build + "**/*", buildPath + "safari/app"))
.then(() => { .then(() => {
@@ -144,7 +145,9 @@ function distSafariApp(cb, subBuildPath) {
stdOutProc(proc); stdOutProc(proc);
return new Promise((resolve) => proc.on("close", resolve)); return new Promise((resolve) => proc.on("close", resolve));
}) })
.then(() => { .then(async () => {
const { default: filter } = await import("gulp-filter");
const libs = fs const libs = fs
.readdirSync(builtAppexFrameworkPath) .readdirSync(builtAppexFrameworkPath)
.filter((p) => p.endsWith(".dylib")) .filter((p) => p.endsWith(".dylib"))
@@ -168,7 +171,7 @@ function distSafariApp(cb, subBuildPath) {
}, },
() => { () => {
return cb; return cb;
} },
); );
} }
@@ -179,7 +182,7 @@ function safariCopyAssets(source, dest) {
.on("error", reject) .on("error", reject)
.pipe(gulpif("safari/Info.plist", replace("0.0.1", manifest.version))) .pipe(gulpif("safari/Info.plist", replace("0.0.1", manifest.version)))
.pipe( .pipe(
gulpif("safari/Info.plist", replace("0.0.2", process.env.BUILD_NUMBER || manifest.version)) gulpif("safari/Info.plist", replace("0.0.2", process.env.BUILD_NUMBER || manifest.version)),
) )
.pipe(gulpif("desktop.xcodeproj/project.pbxproj", replace("../../../build", "../safari/app"))) .pipe(gulpif("desktop.xcodeproj/project.pbxproj", replace("../../../build", "../safari/app")))
.pipe(gulp.dest(dest)) .pipe(gulp.dest(dest))
@@ -187,7 +190,9 @@ function safariCopyAssets(source, dest) {
}); });
} }
function safariCopyBuild(source, dest) { async function safariCopyBuild(source, dest) {
const { default: filter } = await import("gulp-filter");
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
gulp gulp
.src(source) .src(source)
@@ -203,8 +208,8 @@ function safariCopyBuild(source, dest) {
delete manifest.optional_permissions; delete manifest.optional_permissions;
manifest.permissions.push("nativeMessaging"); manifest.permissions.push("nativeMessaging");
return manifest; return manifest;
}) }),
) ),
) )
.pipe(gulp.dest(dest)) .pipe(gulp.dest(dest))
.on("end", resolve); .on("end", resolve);
@@ -216,7 +221,10 @@ function stdOutProc(proc) {
proc.stderr.on("data", (data) => console.error(data.toString())); proc.stderr.on("data", (data) => console.error(data.toString()));
} }
function ciCoverage(cb) { async function ciCoverage(cb) {
const { default: zip } = await import("gulp-zip");
const { default: filter } = await import("gulp-filter");
return gulp return gulp
.src(paths.coverage + "**/*") .src(paths.coverage + "**/*")
.pipe(filter(["**", "!coverage/coverage*.zip"])) .pipe(filter(["**", "!coverage/coverage*.zip"]))

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Fayl parolunu təsdiqlə" "message": "Fayl parolunu təsdiqlə"
}, },
"typePasskey": {
"message": "Keçid açarı"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Keçid açarı kopyalanmır" "message": "Keçid açarı kopyalanmır"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Пацвердзіць пароль файла" "message": "Пацвердзіць пароль файла"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2264,7 +2264,7 @@
"message": "Как се ползва автоматичното попълване" "message": "Как се ползва автоматичното попълване"
}, },
"autofillSelectInfoWithCommand": { "autofillSelectInfoWithCommand": {
"message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "message": "Изберете елемент на този екран, използвайте комбинацията $COMMAND$ или разгледайте други опции в настройките.",
"placeholders": { "placeholders": {
"command": { "command": {
"content": "$1", "content": "$1",
@@ -2273,7 +2273,7 @@
} }
}, },
"autofillSelectInfoWithoutCommand": { "autofillSelectInfoWithoutCommand": {
"message": "Select an item from this screen, or explore other options in settings." "message": "Изберете елемент на този екран или разгледайте други опции в настройките."
}, },
"gotIt": { "gotIt": {
"message": "Разбрано" "message": "Разбрано"
@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Потвърждаване на паролата на файла" "message": "Потвърждаване на паролата на файла"
}, },
"typePasskey": {
"message": "Секретен ключ"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Секретният ключ няма да бъде копиран" "message": "Секретният ключ няма да бъде копиран"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2264,7 +2264,7 @@
"message": "Com emplenar automàticament" "message": "Com emplenar automàticament"
}, },
"autofillSelectInfoWithCommand": { "autofillSelectInfoWithCommand": {
"message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "message": "Seleccioneu un element d'aquesta pantalla, utilitzeu la drecera $COMMAND$ o exploreu altres opcions a la configuració.",
"placeholders": { "placeholders": {
"command": { "command": {
"content": "$1", "content": "$1",
@@ -2273,7 +2273,7 @@
} }
}, },
"autofillSelectInfoWithoutCommand": { "autofillSelectInfoWithoutCommand": {
"message": "Select an item from this screen, or explore other options in settings." "message": "Seleccioneu un element d'aquesta pantalla, o exploreu altres opcions a la configuració."
}, },
"gotIt": { "gotIt": {
"message": "D'acord" "message": "D'acord"
@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirma la contrasenya del fitxer" "message": "Confirma la contrasenya del fitxer"
}, },
"typePasskey": {
"message": "Clau de pas"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "La clau de pas no es copiarà" "message": "La clau de pas no es copiarà"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Potvrzení hesla souboru" "message": "Potvrzení hesla souboru"
}, },
"typePasskey": {
"message": "Přístupový klíč"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Přístupový klíč nebude zkopírován" "message": "Přístupový klíč nebude zkopírován"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Bekræft filadgangskode" "message": "Bekræft filadgangskode"
}, },
"typePasskey": {
"message": "Adgangsnøgle"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Adgangsnøglen kopieres ikke" "message": "Adgangsnøglen kopieres ikke"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Dateipasswort bestätigen" "message": "Dateipasswort bestätigen"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey wird nicht kopiert" "message": "Passkey wird nicht kopiert"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Επιβεβαίωση κωδικού πρόσβασης αρχείου" "message": "Επιβεβαίωση κωδικού πρόσβασης αρχείου"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirmar contraseña del archivo" "message": "Confirmar contraseña del archivo"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "La clave de acceso no se copiará" "message": "La clave de acceso no se copiará"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Pääsukoodi ei kopeerita" "message": "Pääsukoodi ei kopeerita"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "کلید عبور کپی نمی‌شود" "message": "کلید عبور کپی نمی‌شود"
}, },

View File

@@ -658,10 +658,10 @@
"message": "Ask to update a login's password when a change is detected on a website. Applies to all logged in accounts." "message": "Ask to update a login's password when a change is detected on a website. Applies to all logged in accounts."
}, },
"enableUsePasskeys": { "enableUsePasskeys": {
"message": "Ask to save and use passkeys" "message": "Pyydä tallentamaan ja käyttämään salausavaimia"
}, },
"usePasskeysDesc": { "usePasskeysDesc": {
"message": "Ask to save new passkeys or log in with passkeys stored in your vault. Applies to all logged in accounts." "message": "Pyydä tallentamaan uusia salausavaimia tai kirjaudu sisään holviisi tallennetuilla salausavaimilla. Koskee kaikkia sisäänkirjautuneita tilejä."
}, },
"notificationChangeDesc": { "notificationChangeDesc": {
"message": "Haluatko päivittää salasanan Bitwardeniin?" "message": "Haluatko päivittää salasanan Bitwardeniin?"
@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Vahvista tiedoston salasana" "message": "Vahvista tiedoston salasana"
}, },
"typePasskey": {
"message": "Suojausavain"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Suojausavainta ei kopioida" "message": "Suojausavainta ei kopioida"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirmez le mot de passe du fichier" "message": "Confirmez le mot de passe du fichier"
}, },
"typePasskey": {
"message": "Clé d'accès"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "La clé d'accès ne sera pas copiée" "message": "La clé d'accès ne sera pas copiée"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Potvrdi lozinku datoteke" "message": "Potvrdi lozinku datoteke"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Pristupni ključ neće biti kopiran" "message": "Pristupni ključ neće biti kopiran"
}, },

View File

@@ -658,10 +658,10 @@
"message": "A bejelentkezési jelszó frissítésének kérése, ha változást lett érzékelve egy webhelyen. Minden bejelentkezett fiókra vonatkozik." "message": "A bejelentkezési jelszó frissítésének kérése, ha változást lett érzékelve egy webhelyen. Minden bejelentkezett fiókra vonatkozik."
}, },
"enableUsePasskeys": { "enableUsePasskeys": {
"message": "Kérés a jelszó mentésére és használatára" "message": "Kérés a jhozzáférési kulcs mentésére és használatára"
}, },
"usePasskeysDesc": { "usePasskeysDesc": {
"message": "Kérés az új jelszavak mentésére vagy bejelentkezés a széfben tárolt jelszavakkal. Minden bejelentkezett fiókra vonatkozik." "message": "Kérés az új hozzáféréi kulcsok mentésére vagy bejelentkezés a széfben tárolt hozzáférési kulcsokkal. Minden bejelentkezett fiókra vonatkozik."
}, },
"notificationChangeDesc": { "notificationChangeDesc": {
"message": "Frissítésre kerüljön a jelszó a Bitwardenben?" "message": "Frissítésre kerüljön a jelszó a Bitwardenben?"
@@ -1021,14 +1021,14 @@
"message": "A környezeti webcímek mentésre kerültek." "message": "A környezeti webcímek mentésre kerültek."
}, },
"showAutoFillMenuOnFormFields": { "showAutoFillMenuOnFormFields": {
"message": "Show auto-fill menu on form fields", "message": "Automatikus kitöltés menü megjelenítése az űrlapmezőkön",
"description": "Represents the message for allowing the user to enable the auto-fill overlay" "description": "Represents the message for allowing the user to enable the auto-fill overlay"
}, },
"showAutoFillMenuOnFormFieldsDescAlt": { "showAutoFillMenuOnFormFieldsDescAlt": {
"message": "Minden bejelentkezett fiókra vonatkozik." "message": "Minden bejelentkezett fiókra vonatkozik."
}, },
"autofillOverlayVisibilityOff": { "autofillOverlayVisibilityOff": {
"message": "Off", "message": "Ki",
"description": "Overlay setting select option for disabling autofill overlay" "description": "Overlay setting select option for disabling autofill overlay"
}, },
"autofillOverlayVisibilityOnFieldFocus": { "autofillOverlayVisibilityOnFieldFocus": {
@@ -1036,7 +1036,7 @@
"description": "Overlay appearance select option for showing the field on focus of the input element" "description": "Overlay appearance select option for showing the field on focus of the input element"
}, },
"autofillOverlayVisibilityOnButtonClick": { "autofillOverlayVisibilityOnButtonClick": {
"message": "When auto-fill icon is selected", "message": "Ha az automatikus kitöltés menü került kiválasztásra",
"description": "Overlay appearance select option for showing the field on click of the overlay icon" "description": "Overlay appearance select option for showing the field on click of the overlay icon"
}, },
"enableAutoFillOnPageLoad": { "enableAutoFillOnPageLoad": {
@@ -2503,7 +2503,7 @@
"description": "Screen reader and tool tip label for the overlay button" "description": "Screen reader and tool tip label for the overlay button"
}, },
"bitwardenVault": { "bitwardenVault": {
"message": "Bitwarden auto-fill menu", "message": "Bitwarden automatikus kitöltési menü",
"description": "Page title in overlay" "description": "Page title in overlay"
}, },
"unlockYourAccountToViewMatchingLogins": { "unlockYourAccountToViewMatchingLogins": {
@@ -2511,27 +2511,27 @@
"description": "Text to display in overlay when the account is locked." "description": "Text to display in overlay when the account is locked."
}, },
"unlockAccount": { "unlockAccount": {
"message": "Unlock account", "message": "Fiók feloldása",
"description": "Button text to display in overlay when the account is locked." "description": "Button text to display in overlay when the account is locked."
}, },
"fillCredentialsFor": { "fillCredentialsFor": {
"message": "Fill credentials for", "message": "Töltse kia hitelesítő adatokat",
"description": "Screen reader text for when overlay item is in focused" "description": "Screen reader text for when overlay item is in focused"
}, },
"partialUsername": { "partialUsername": {
"message": "Partial username", "message": "Részleges felhasználónév",
"description": "Screen reader text for when a login item is focused where a partial username is displayed. SR will announce this phrase before reading the text of the partial username" "description": "Screen reader text for when a login item is focused where a partial username is displayed. SR will announce this phrase before reading the text of the partial username"
}, },
"noItemsToShow": { "noItemsToShow": {
"message": "No items to show", "message": "Nincsenek megjeleníthető elemek",
"description": "Text to show in overlay if there are no matching items" "description": "Text to show in overlay if there are no matching items"
}, },
"newItem": { "newItem": {
"message": "New item", "message": "Új elem",
"description": "Button text to display in overlay when there are no matching items" "description": "Button text to display in overlay when there are no matching items"
}, },
"addNewVaultItem": { "addNewVaultItem": {
"message": "Add new vault item", "message": "Elem hozzáadása",
"description": "Screen reader text (aria-label) for new item button in overlay" "description": "Screen reader text (aria-label) for new item button in overlay"
}, },
"bitwardenOverlayMenuAvailable": { "bitwardenOverlayMenuAvailable": {
@@ -2551,21 +2551,21 @@
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior" "description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
}, },
"turnOn": { "turnOn": {
"message": "Turn on" "message": "Bekapcsolás"
}, },
"ignore": { "ignore": {
"message": "Ignore" "message": "Mellőz"
}, },
"overrideBrowserAutoFillSettings": { "overrideBrowserAutoFillSettings": {
"message": "Override browser auto-fill settings", "message": "A böngésző automatikus kitöltési beállításainak felülbírálása",
"description": "Label for the setting that allows overriding the default browser autofill settings" "description": "Label for the setting that allows overriding the default browser autofill settings"
}, },
"extensionPrivacyPermissionNotGrantedTitle": { "extensionPrivacyPermissionNotGrantedTitle": {
"message": "Unable to override browser auto-fill", "message": "Nem lehet felülbírálni a böngésző automatikus kitöltését",
"description": "Title for the dialog that appears when the user has not granted the extension permission to set privacy settings" "description": "Title for the dialog that appears when the user has not granted the extension permission to set privacy settings"
}, },
"extensionPrivacyPermissionNotGrantedDescription": { "extensionPrivacyPermissionNotGrantedDescription": {
"message": "Bitwarden must have access to the extension's privacy permission to override browser auto-fill settings.", "message": "A Bitwardennek hozzáféréssel kell rendelkeznie a bővítmény adatvédelmi engedélyéhez, hogy felülbírálhassa a böngésző automatikus kitöltési beállításait.",
"description": "Description for the dialog that appears when the user has not granted the extension permission to set privacy settings" "description": "Description for the dialog that appears when the user has not granted the extension permission to set privacy settings"
}, },
"importData": { "importData": {
@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Fájl jelszó megerősítés" "message": "Fájl jelszó megerősítés"
}, },
"typePasskey": {
"message": "Hozzáférési kulcs"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "A hozzáférési kulcs nem kerül másolásra." "message": "A hozzáférési kulcs nem kerül másolásra."
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Conferma password del file" "message": "Conferma password del file"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "La passkey non sarà copiata" "message": "La passkey non sarà copiata"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "ファイルパスワードの確認" "message": "ファイルパスワードの確認"
}, },
"typePasskey": {
"message": "パスキー"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "パスキーはコピーされません" "message": "パスキーはコピーされません"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Prieigos raktas"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Apstiprināt datnes paroli" "message": "Apstiprināt datnes paroli"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Piekļuves atslēga netiks ievietota starpliktuvē" "message": "Piekļuves atslēga netiks ievietota starpliktuvē"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Bestandswachtwoord bevestigen" "message": "Bestandswachtwoord bevestigen"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey wordt niet gekopieerd" "message": "Passkey wordt niet gekopieerd"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Potwierdź hasło pliku" "message": "Potwierdź hasło pliku"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey nie zostanie skopiowany" "message": "Passkey nie zostanie skopiowany"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirmar a palavra-passe do ficheiro" "message": "Confirmar a palavra-passe do ficheiro"
}, },
"typePasskey": {
"message": "Chave de acesso"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "A chave de acesso não será copiada" "message": "A chave de acesso não será copiada"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Подтвердите пароль к файлу" "message": "Подтвердите пароль к файлу"
}, },
"typePasskey": {
"message": "Ключ доступа"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Ключ доступа не будет скопирован" "message": "Ключ доступа не будет скопирован"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Potvrdiť heslo súboru" "message": "Potvrdiť heslo súboru"
}, },
"typePasskey": {
"message": "Prístupový kľúč"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Prístupový kód sa neskopíruje" "message": "Prístupový kód sa neskopíruje"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Потврдити лозинку датотеке" "message": "Потврдити лозинку датотеке"
}, },
"typePasskey": {
"message": "Приступачни кључ"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Приступачни кључ неће бити копиран" "message": "Приступачни кључ неће бити копиран"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2499,7 +2499,7 @@
"description": "Page title for the iframe containing the overlay button" "description": "Page title for the iframe containing the overlay button"
}, },
"toggleBitwardenVaultOverlay": { "toggleBitwardenVaultOverlay": {
"message": "Toggle Bitwarden auto-fill menu", "message": "Bitwarden otomatik doldurma menüsünü aç/kapat",
"description": "Screen reader and tool tip label for the overlay button" "description": "Screen reader and tool tip label for the overlay button"
}, },
"bitwardenVault": { "bitwardenVault": {
@@ -2507,15 +2507,15 @@
"description": "Page title in overlay" "description": "Page title in overlay"
}, },
"unlockYourAccountToViewMatchingLogins": { "unlockYourAccountToViewMatchingLogins": {
"message": "Eşleşen giriş bilgilerini görüntülemek için hesabınızın kilidini açın", "message": "Eşleşen hesaplarınızı görmek için hesabınızın kilidini açın",
"description": "Text to display in overlay when the account is locked." "description": "Text to display in overlay when the account is locked."
}, },
"unlockAccount": { "unlockAccount": {
"message": "Hesabın kilidini açın", "message": "Hesap kilidini aç",
"description": "Button text to display in overlay when the account is locked." "description": "Button text to display in overlay when the account is locked."
}, },
"fillCredentialsFor": { "fillCredentialsFor": {
"message": "Kimlik bilgilerini doldurun", "message": "Bilgileri doldur",
"description": "Screen reader text for when overlay item is in focused" "description": "Screen reader text for when overlay item is in focused"
}, },
"partialUsername": { "partialUsername": {
@@ -2523,15 +2523,15 @@
"description": "Screen reader text for when a login item is focused where a partial username is displayed. SR will announce this phrase before reading the text of the partial username" "description": "Screen reader text for when a login item is focused where a partial username is displayed. SR will announce this phrase before reading the text of the partial username"
}, },
"noItemsToShow": { "noItemsToShow": {
"message": "Gösterilecek öğe yok", "message": "Gösterilecek kayıt yok",
"description": "Text to show in overlay if there are no matching items" "description": "Text to show in overlay if there are no matching items"
}, },
"newItem": { "newItem": {
"message": "Yeni öge", "message": "Yeni kayıt",
"description": "Button text to display in overlay when there are no matching items" "description": "Button text to display in overlay when there are no matching items"
}, },
"addNewVaultItem": { "addNewVaultItem": {
"message": "Add new vault item", "message": "Kasaya yeni kayıt ekle",
"description": "Screen reader text (aria-label) for new item button in overlay" "description": "Screen reader text (aria-label) for new item button in overlay"
}, },
"bitwardenOverlayMenuAvailable": { "bitwardenOverlayMenuAvailable": {
@@ -2543,7 +2543,7 @@
"description": "Dialog title facilitating the ability to override a chrome browser's default autofill behavior" "description": "Dialog title facilitating the ability to override a chrome browser's default autofill behavior"
}, },
"overrideBrowserAutofillDescription": { "overrideBrowserAutofillDescription": {
"message": "Bu ayarı kapalı bırakmak, Bitwarden otomatik doldurma menüsü ile tarayıcınızınki arasında çakışmalara neden olabilir.", "message": "Bu ayarı kapalı bırakırsanız Bitwarden otomatik doldurma menüsüyle tarayıcınızınki arasında çakışma yaşanabilir.",
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior" "description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
}, },
"overrideBrowserAutofillPrivacyRequiredDescription": { "overrideBrowserAutofillPrivacyRequiredDescription": {
@@ -2551,10 +2551,10 @@
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior" "description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
}, },
"turnOn": { "turnOn": {
"message": "Turn on" "message": ""
}, },
"ignore": { "ignore": {
"message": "Yoksay" "message": "Yok say"
}, },
"overrideBrowserAutoFillSettings": { "overrideBrowserAutoFillSettings": {
"message": "Tarayıcının otomatik doldurma ayarlarını geçersiz kıl", "message": "Tarayıcının otomatik doldurma ayarlarını geçersiz kıl",
@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Dosya parolasını onaylayın" "message": "Dosya parolasını onaylayın"
}, },
"typePasskey": {
"message": "Geçiş anahtarı"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Підтвердьте пароль файлу" "message": "Підтвердьте пароль файлу"
}, },
"typePasskey": {
"message": "Ключ доступу"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Ключ доступу не буде скопійовано" "message": "Ключ доступу не буде скопійовано"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "Confirm file password" "message": "Confirm file password"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey will not be copied" "message": "Passkey will not be copied"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "确认文件密码" "message": "确认文件密码"
}, },
"typePasskey": {
"message": "通行密钥"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "通行密钥不会被复制" "message": "通行密钥不会被复制"
}, },

View File

@@ -2679,6 +2679,9 @@
"confirmFilePassword": { "confirmFilePassword": {
"message": "確認檔案密碼" "message": "確認檔案密碼"
}, },
"typePasskey": {
"message": "Passkey"
},
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "密碼金鑰不會被複製" "message": "密碼金鑰不會被複製"
}, },

View File

@@ -18,12 +18,12 @@ export type OrganizationServiceInitOptions = OrganizationServiceFactoryOptions &
export function organizationServiceFactory( export function organizationServiceFactory(
cache: { organizationService?: AbstractOrganizationService } & CachedServices, cache: { organizationService?: AbstractOrganizationService } & CachedServices,
opts: OrganizationServiceInitOptions opts: OrganizationServiceInitOptions,
): Promise<AbstractOrganizationService> { ): Promise<AbstractOrganizationService> {
return factory( return factory(
cache, cache,
"organizationService", "organizationService",
opts, opts,
async () => new BrowserOrganizationService(await stateServiceFactory(cache, opts)) async () => new BrowserOrganizationService(await stateServiceFactory(cache, opts)),
); );
} }

View File

@@ -24,7 +24,7 @@ export type PolicyServiceInitOptions = PolicyServiceFactoryOptions &
export function policyServiceFactory( export function policyServiceFactory(
cache: { policyService?: AbstractPolicyService } & CachedServices, cache: { policyService?: AbstractPolicyService } & CachedServices,
opts: PolicyServiceInitOptions opts: PolicyServiceInitOptions,
): Promise<AbstractPolicyService> { ): Promise<AbstractPolicyService> {
return factory( return factory(
cache, cache,
@@ -33,7 +33,7 @@ export function policyServiceFactory(
async () => async () =>
new BrowserPolicyService( new BrowserPolicyService(
await stateServiceFactory(cache, opts), await stateServiceFactory(cache, opts),
await organizationServiceFactory(cache, opts) await organizationServiceFactory(cache, opts),
) ),
); );
} }

View File

@@ -38,7 +38,7 @@ export class BrowserPolicyService extends PolicyService {
if (activated === undefined) { if (activated === undefined) {
this.stateService.setActivateAutoFillOnPageLoadFromPolicy(!autofillEnabled); this.stateService.setActivateAutoFillOnPageLoadFromPolicy(!autofillEnabled);
} }
}) }),
); );
} }
} }

View File

@@ -28,7 +28,7 @@ export type AccountServiceInitOptions = AccountServiceFactoryOptions &
export function accountServiceFactory( export function accountServiceFactory(
cache: { accountService?: AccountService } & CachedServices, cache: { accountService?: AccountService } & CachedServices,
opts: AccountServiceInitOptions opts: AccountServiceInitOptions,
): Promise<AccountService> { ): Promise<AccountService> {
return factory( return factory(
cache, cache,
@@ -38,7 +38,7 @@ export function accountServiceFactory(
new AccountServiceImplementation( new AccountServiceImplementation(
await messagingServiceFactory(cache, opts), await messagingServiceFactory(cache, opts),
await logServiceFactory(cache, opts), await logServiceFactory(cache, opts),
await globalStateProviderFactory(cache, opts) await globalStateProviderFactory(cache, opts),
) ),
); );
} }

View File

@@ -18,12 +18,12 @@ export type AuthRequestCryptoServiceInitOptions = AuthRequestCryptoServiceFactor
export function authRequestCryptoServiceFactory( export function authRequestCryptoServiceFactory(
cache: { authRequestCryptoService?: AuthRequestCryptoServiceAbstraction } & CachedServices, cache: { authRequestCryptoService?: AuthRequestCryptoServiceAbstraction } & CachedServices,
opts: AuthRequestCryptoServiceInitOptions opts: AuthRequestCryptoServiceInitOptions,
): Promise<AuthRequestCryptoServiceAbstraction> { ): Promise<AuthRequestCryptoServiceAbstraction> {
return factory( return factory(
cache, cache,
"authRequestCryptoService", "authRequestCryptoService",
opts, opts,
async () => new AuthRequestCryptoServiceImplementation(await cryptoServiceFactory(cache, opts)) async () => new AuthRequestCryptoServiceImplementation(await cryptoServiceFactory(cache, opts)),
); );
} }

View File

@@ -89,7 +89,7 @@ export type AuthServiceInitOptions = AuthServiceFactoyOptions &
export function authServiceFactory( export function authServiceFactory(
cache: { authService?: AbstractAuthService } & CachedServices, cache: { authService?: AbstractAuthService } & CachedServices,
opts: AuthServiceInitOptions opts: AuthServiceInitOptions,
): Promise<AbstractAuthService> { ): Promise<AbstractAuthService> {
return factory( return factory(
cache, cache,
@@ -113,7 +113,7 @@ export function authServiceFactory(
await passwordStrengthServiceFactory(cache, opts), await passwordStrengthServiceFactory(cache, opts),
await policyServiceFactory(cache, opts), await policyServiceFactory(cache, opts),
await deviceTrustCryptoServiceFactory(cache, opts), await deviceTrustCryptoServiceFactory(cache, opts),
await authRequestCryptoServiceFactory(cache, opts) await authRequestCryptoServiceFactory(cache, opts),
) ),
); );
} }

View File

@@ -53,7 +53,7 @@ export type DeviceTrustCryptoServiceInitOptions = DeviceTrustCryptoServiceFactor
export function deviceTrustCryptoServiceFactory( export function deviceTrustCryptoServiceFactory(
cache: { deviceTrustCryptoService?: DeviceTrustCryptoServiceAbstraction } & CachedServices, cache: { deviceTrustCryptoService?: DeviceTrustCryptoServiceAbstraction } & CachedServices,
opts: DeviceTrustCryptoServiceInitOptions opts: DeviceTrustCryptoServiceInitOptions,
): Promise<DeviceTrustCryptoServiceAbstraction> { ): Promise<DeviceTrustCryptoServiceAbstraction> {
return factory( return factory(
cache, cache,
@@ -68,7 +68,7 @@ export function deviceTrustCryptoServiceFactory(
await appIdServiceFactory(cache, opts), await appIdServiceFactory(cache, opts),
await devicesApiServiceFactory(cache, opts), await devicesApiServiceFactory(cache, opts),
await i18nServiceFactory(cache, opts), await i18nServiceFactory(cache, opts),
await platformUtilsServiceFactory(cache, opts) await platformUtilsServiceFactory(cache, opts),
) ),
); );
} }

View File

@@ -50,7 +50,7 @@ export type KeyConnectorServiceInitOptions = KeyConnectorServiceFactoryOptions &
export function keyConnectorServiceFactory( export function keyConnectorServiceFactory(
cache: { keyConnectorService?: AbstractKeyConnectorService } & CachedServices, cache: { keyConnectorService?: AbstractKeyConnectorService } & CachedServices,
opts: KeyConnectorServiceInitOptions opts: KeyConnectorServiceInitOptions,
): Promise<AbstractKeyConnectorService> { ): Promise<AbstractKeyConnectorService> {
return factory( return factory(
cache, cache,
@@ -65,7 +65,7 @@ export function keyConnectorServiceFactory(
await logServiceFactory(cache, opts), await logServiceFactory(cache, opts),
await organizationServiceFactory(cache, opts), await organizationServiceFactory(cache, opts),
await cryptoFunctionServiceFactory(cache, opts), await cryptoFunctionServiceFactory(cache, opts),
opts.keyConnectorServiceOptions.logoutCallback opts.keyConnectorServiceOptions.logoutCallback,
) ),
); );
} }

View File

@@ -17,12 +17,12 @@ export type TokenServiceInitOptions = TokenServiceFactoryOptions & StateServiceI
export function tokenServiceFactory( export function tokenServiceFactory(
cache: { tokenService?: AbstractTokenService } & CachedServices, cache: { tokenService?: AbstractTokenService } & CachedServices,
opts: TokenServiceInitOptions opts: TokenServiceInitOptions,
): Promise<AbstractTokenService> { ): Promise<AbstractTokenService> {
return factory( return factory(
cache, cache,
"tokenService", "tokenService",
opts, opts,
async () => new TokenService(await stateServiceFactory(cache, opts)) async () => new TokenService(await stateServiceFactory(cache, opts)),
); );
} }

View File

@@ -23,7 +23,7 @@ export type TwoFactorServiceInitOptions = TwoFactorServiceFactoryOptions &
export async function twoFactorServiceFactory( export async function twoFactorServiceFactory(
cache: { twoFactorService?: AbstractTwoFactorService } & CachedServices, cache: { twoFactorService?: AbstractTwoFactorService } & CachedServices,
opts: TwoFactorServiceInitOptions opts: TwoFactorServiceInitOptions,
): Promise<AbstractTwoFactorService> { ): Promise<AbstractTwoFactorService> {
const service = await factory( const service = await factory(
cache, cache,
@@ -32,8 +32,8 @@ export async function twoFactorServiceFactory(
async () => async () =>
new TwoFactorService( new TwoFactorService(
await i18nServiceFactory(cache, opts), await i18nServiceFactory(cache, opts),
await platformUtilsServiceFactory(cache, opts) await platformUtilsServiceFactory(cache, opts),
) ),
); );
service.init(); service.init();
return service; return service;

View File

@@ -18,12 +18,12 @@ export type UserVerificationApiServiceInitOptions = UserVerificationApiServiceFa
export function userVerificationApiServiceFactory( export function userVerificationApiServiceFactory(
cache: { userVerificationApiService?: UserVerificationApiServiceAbstraction } & CachedServices, cache: { userVerificationApiService?: UserVerificationApiServiceAbstraction } & CachedServices,
opts: UserVerificationApiServiceInitOptions opts: UserVerificationApiServiceInitOptions,
): Promise<UserVerificationApiServiceAbstraction> { ): Promise<UserVerificationApiServiceAbstraction> {
return factory( return factory(
cache, cache,
"userVerificationApiService", "userVerificationApiService",
opts, opts,
async () => new UserVerificationApiService(await apiServiceFactory(cache, opts)) async () => new UserVerificationApiService(await apiServiceFactory(cache, opts)),
); );
} }

View File

@@ -34,7 +34,7 @@ export type UserVerificationServiceInitOptions = UserVerificationServiceFactoryO
export function userVerificationServiceFactory( export function userVerificationServiceFactory(
cache: { userVerificationService?: AbstractUserVerificationService } & CachedServices, cache: { userVerificationService?: AbstractUserVerificationService } & CachedServices,
opts: UserVerificationServiceInitOptions opts: UserVerificationServiceInitOptions,
): Promise<AbstractUserVerificationService> { ): Promise<AbstractUserVerificationService> {
return factory( return factory(
cache, cache,
@@ -45,7 +45,7 @@ export function userVerificationServiceFactory(
await stateServiceFactory(cache, opts), await stateServiceFactory(cache, opts),
await cryptoServiceFactory(cache, opts), await cryptoServiceFactory(cache, opts),
await i18nServiceFactory(cache, opts), await i18nServiceFactory(cache, opts),
await userVerificationApiServiceFactory(cache, opts) await userVerificationApiServiceFactory(cache, opts),
) ),
); );
} }

View File

@@ -17,7 +17,7 @@ import { BrowserRouterService } from "../../platform/popup/services/browser-rout
*/ */
export const fido2AuthGuard: CanActivateFn = async ( export const fido2AuthGuard: CanActivateFn = async (
route: ActivatedRouteSnapshot, route: ActivatedRouteSnapshot,
state: RouterStateSnapshot state: RouterStateSnapshot,
) => { ) => {
const routerService = inject(BrowserRouterService); const routerService = inject(BrowserRouterService);
const authService = inject(AuthService); const authService = inject(AuthService);

View File

@@ -1,13 +1,18 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
import { Router } from "@angular/router"; import { Router } from "@angular/router";
import { BrowserRouterService } from "../../../platform/popup/services/browser-router.service";
import { AccountSwitcherService } from "../services/account-switcher.service"; import { AccountSwitcherService } from "../services/account-switcher.service";
@Component({ @Component({
templateUrl: "account-switcher.component.html", templateUrl: "account-switcher.component.html",
}) })
export class AccountSwitcherComponent { export class AccountSwitcherComponent {
constructor(private accountSwitcherService: AccountSwitcherService, private router: Router) {} constructor(
private accountSwitcherService: AccountSwitcherService,
private router: Router,
private routerService: BrowserRouterService,
) {}
get accountOptions$() { get accountOptions$() {
return this.accountSwitcherService.accountOptions$; return this.accountSwitcherService.accountOptions$;
@@ -15,6 +20,6 @@ export class AccountSwitcherComponent {
async selectAccount(id: string) { async selectAccount(id: string) {
await this.accountSwitcherService.selectAccount(id); await this.accountSwitcherService.selectAccount(id);
this.router.navigate(["/home"]); this.router.navigate([this.routerService.getPreviousUrl() ?? "/home"]);
} }
} }

View File

@@ -1,5 +1,5 @@
<div *ngIf="currentAccount$ | async as currentAccount"> <div *ngIf="currentAccount$ | async as currentAccount">
<div (click)="currentAccountClicked()" class="tw-mr-1 tw-mt-1"> <div (click)="currentAccountClicked()" class="tw-mr-1 tw-mt-1">
<bit-avatar [id]="currentAccount.id" [text]="currentAccount.name"></bit-avatar> <bit-avatar [id]="currentAccount.id" [text]="currentAccountName$ | async"></bit-avatar>
</div> </div>
</div> </div>

View File

@@ -1,20 +1,33 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
import { Router } from "@angular/router"; import { Router } from "@angular/router";
import { map } from "rxjs";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { Utils } from "@bitwarden/common/platform/misc/utils";
@Component({ @Component({
selector: "app-current-account", selector: "app-current-account",
templateUrl: "current-account.component.html", templateUrl: "current-account.component.html",
}) })
export class CurrentAccountComponent { export class CurrentAccountComponent {
constructor(private accountService: AccountService, private router: Router) {} constructor(
private accountService: AccountService,
private router: Router,
) {}
get currentAccount$() { get currentAccount$() {
return this.accountService.activeAccount$; return this.accountService.activeAccount$;
} }
currentAccountClicked() { get currentAccountName$() {
this.router.navigate(["/account-switcher"]); return this.currentAccount$.pipe(
map((a) => {
return Utils.isNullOrWhitespace(a.name) ? a.email : a.name;
}),
);
}
async currentAccountClicked() {
await this.router.navigate(["/account-switcher"]);
} }
} }

View File

@@ -20,7 +20,7 @@ export class EnvironmentComponent extends BaseEnvironmentComponent implements On
public environmentService: BrowserEnvironmentService, public environmentService: BrowserEnvironmentService,
i18nService: I18nService, i18nService: I18nService,
private router: Router, private router: Router,
modalService: ModalService modalService: ModalService,
) { ) {
super(platformUtilsService, environmentService, i18nService, modalService); super(platformUtilsService, environmentService, i18nService, modalService);
this.showCustom = true; this.showCustom = true;

View File

@@ -20,7 +20,7 @@ export class HintComponent extends BaseHintComponent {
apiService: ApiService, apiService: ApiService,
logService: LogService, logService: LogService,
private route: ActivatedRoute, private route: ActivatedRoute,
loginService: LoginService loginService: LoginService,
) { ) {
super(router, i18nService, apiService, platformUtilsService, logService, loginService); super(router, i18nService, apiService, platformUtilsService, logService, loginService);

View File

@@ -32,7 +32,7 @@ export class HomeComponent implements OnInit, OnDestroy {
private router: Router, private router: Router,
private i18nService: I18nService, private i18nService: I18nService,
private environmentService: EnvironmentService, private environmentService: EnvironmentService,
private loginService: LoginService private loginService: LoginService,
) {} ) {}
async ngOnInit(): Promise<void> { async ngOnInit(): Promise<void> {
@@ -73,7 +73,7 @@ export class HomeComponent implements OnInit, OnDestroy {
this.platformUtilsService.showToast( this.platformUtilsService.showToast(
"error", "error",
this.i18nService.t("errorOccured"), this.i18nService.t("errorOccured"),
this.i18nService.t("invalidEmail") this.i18nService.t("invalidEmail"),
); );
return; return;
} }

View File

@@ -70,7 +70,7 @@
: ("yourVaultIsLocked" | i18n) : ("yourVaultIsLocked" | i18n)
}} }}
</p> </p>
{{ "loggedInAsOn" | i18n : email : webVaultHostname }} {{ "loggedInAsOn" | i18n: email : webVaultHostname }}
</div> </div>
</div> </div>
<div class="box" *ngIf="biometricLock"> <div class="box" *ngIf="biometricLock">

View File

@@ -56,7 +56,7 @@ export class LockComponent extends BaseLockComponent {
dialogService: DialogService, dialogService: DialogService,
deviceTrustCryptoService: DeviceTrustCryptoServiceAbstraction, deviceTrustCryptoService: DeviceTrustCryptoServiceAbstraction,
userVerificationService: UserVerificationService, userVerificationService: UserVerificationService,
private routerService: BrowserRouterService private routerService: BrowserRouterService,
) { ) {
super( super(
router, router,
@@ -76,7 +76,7 @@ export class LockComponent extends BaseLockComponent {
passwordStrengthService, passwordStrengthService,
dialogService, dialogService,
deviceTrustCryptoService, deviceTrustCryptoService,
userVerificationService userVerificationService,
); );
this.successRoute = "/tabs/current"; this.successRoute = "/tabs/current";
this.isInitialLockScreen = (window as any).previousPopupUrl == null; this.isInitialLockScreen = (window as any).previousPopupUrl == null;

View File

@@ -48,7 +48,7 @@ export class LoginViaAuthRequestComponent
syncService: SyncService, syncService: SyncService,
deviceTrustCryptoService: DeviceTrustCryptoServiceAbstraction, deviceTrustCryptoService: DeviceTrustCryptoServiceAbstraction,
authReqCryptoService: AuthRequestCryptoServiceAbstraction, authReqCryptoService: AuthRequestCryptoServiceAbstraction,
private location: Location private location: Location,
) { ) {
super( super(
router, router,
@@ -67,7 +67,7 @@ export class LoginViaAuthRequestComponent
stateService, stateService,
loginService, loginService,
deviceTrustCryptoService, deviceTrustCryptoService,
authReqCryptoService authReqCryptoService,
); );
super.onSuccessfulLogin = async () => { super.onSuccessfulLogin = async () => {
await syncService.fullSync(true); await syncService.fullSync(true);

View File

@@ -45,7 +45,7 @@ export class LoginComponent extends BaseLoginComponent {
formValidationErrorService: FormValidationErrorsService, formValidationErrorService: FormValidationErrorsService,
route: ActivatedRoute, route: ActivatedRoute,
loginService: LoginService, loginService: LoginService,
webAuthnLoginService: WebAuthnLoginServiceAbstraction webAuthnLoginService: WebAuthnLoginServiceAbstraction,
) { ) {
super( super(
devicesApiService, devicesApiService,
@@ -64,7 +64,7 @@ export class LoginComponent extends BaseLoginComponent {
formValidationErrorService, formValidationErrorService,
route, route,
loginService, loginService,
webAuthnLoginService webAuthnLoginService,
); );
super.onSuccessfulLogin = async () => { super.onSuccessfulLogin = async () => {
await syncService.fullSync(true); await syncService.fullSync(true);
@@ -123,7 +123,7 @@ export class LoginComponent extends BaseLoginComponent {
"&codeChallenge=" + "&codeChallenge=" +
codeChallenge + codeChallenge +
"&email=" + "&email=" +
encodeURIComponent(this.formGroup.controls.email.value) encodeURIComponent(this.formGroup.controls.email.value),
); );
} }
} }

View File

@@ -38,7 +38,7 @@ export class RegisterComponent extends BaseRegisterComponent {
environmentService: EnvironmentService, environmentService: EnvironmentService,
logService: LogService, logService: LogService,
auditService: AuditService, auditService: AuditService,
dialogService: DialogService dialogService: DialogService,
) { ) {
super( super(
formValidationErrorService, formValidationErrorService,
@@ -54,7 +54,7 @@ export class RegisterComponent extends BaseRegisterComponent {
environmentService, environmentService,
logService, logService,
auditService, auditService,
dialogService dialogService,
); );
} }
} }

View File

@@ -10,7 +10,7 @@
<div class="box"> <div class="box">
<div class="box-content"> <div class="box-content">
<div class="box-content-row" appBoxRow> <div class="box-content-row" appBoxRow>
<p>{{ "convertOrganizationEncryptionDesc" | i18n : organization.name }}</p> <p>{{ "convertOrganizationEncryptionDesc" | i18n: organization.name }}</p>
</div> </div>
<div class="box-content-row"> <div class="box-content-row">
<button <button

View File

@@ -26,7 +26,7 @@ describe("AccountSwitcherService", () => {
accountSwitcherService = new AccountSwitcherService( accountSwitcherService = new AccountSwitcherService(
accountService, accountService,
stateService, stateService,
messagingService messagingService,
); );
}); });
@@ -45,7 +45,7 @@ describe("AccountSwitcherService", () => {
activeAccountSubject.next(Object.assign(user1AccountInfo, { id: "1" as UserId })); activeAccountSubject.next(Object.assign(user1AccountInfo, { id: "1" as UserId }));
const accounts = await firstValueFrom( const accounts = await firstValueFrom(
accountSwitcherService.accountOptions$.pipe(timeout(20)) accountSwitcherService.accountOptions$.pipe(timeout(20)),
); );
expect(accounts).toHaveLength(2); expect(accounts).toHaveLength(2);
expect(accounts[0].id).toBe("1"); expect(accounts[0].id).toBe("1");
@@ -68,7 +68,7 @@ describe("AccountSwitcherService", () => {
} }
accountsSubject.next(seedAccounts); accountsSubject.next(seedAccounts);
activeAccountSubject.next( activeAccountSubject.next(
Object.assign(seedAccounts["1" as UserId], { id: "1" as UserId }) Object.assign(seedAccounts["1" as UserId], { id: "1" as UserId }),
); );
const accounts = await firstValueFrom(accountSwitcherService.accountOptions$); const accounts = await firstValueFrom(accountSwitcherService.accountOptions$);
@@ -77,7 +77,7 @@ describe("AccountSwitcherService", () => {
accounts.forEach((account) => { accounts.forEach((account) => {
expect(account.id).not.toBe("addAccount"); expect(account.id).not.toBe("addAccount");
}); });
} },
); );
}); });
@@ -99,7 +99,7 @@ describe("AccountSwitcherService", () => {
"switchAccount", "switchAccount",
matches((payload) => { matches((payload) => {
return payload.userId === "1"; return payload.userId === "1";
}) }),
); );
}); });
}); });

View File

@@ -15,7 +15,7 @@ export class AccountSwitcherService {
constructor( constructor(
private accountService: AccountService, private accountService: AccountService,
private stateService: StateService, private stateService: StateService,
private messagingService: MessagingService private messagingService: MessagingService,
) {} ) {}
get accountOptions$() { get accountOptions$() {
@@ -31,7 +31,7 @@ export class AccountSwitcherService {
id: id, id: id,
isSelected: id === activeAccount?.id, isSelected: id === activeAccount?.id,
}; };
} },
); );
if (!hasMaxAccounts) { if (!hasMaxAccounts) {
@@ -43,7 +43,7 @@ export class AccountSwitcherService {
} }
return options; return options;
}) }),
); );
} }
@@ -54,7 +54,7 @@ export class AccountSwitcherService {
return; return;
} }
this.accountService.switchAccount(id as UserId); await this.accountService.switchAccount(id as UserId);
this.messagingService.send("switchAccount", { userId: id }); this.messagingService.send("switchAccount", { userId: id });
} }
} }

View File

@@ -36,7 +36,7 @@ export class SetPasswordComponent extends BaseSetPasswordComponent {
route: ActivatedRoute, route: ActivatedRoute,
organizationApiService: OrganizationApiServiceAbstraction, organizationApiService: OrganizationApiServiceAbstraction,
organizationUserService: OrganizationUserService, organizationUserService: OrganizationUserService,
dialogService: DialogService dialogService: DialogService,
) { ) {
super( super(
i18nService, i18nService,
@@ -53,7 +53,7 @@ export class SetPasswordComponent extends BaseSetPasswordComponent {
stateService, stateService,
organizationApiService, organizationApiService,
organizationUserService, organizationUserService,
dialogService dialogService,
); );
} }
} }

View File

@@ -37,7 +37,7 @@ export class SsoComponent extends BaseSsoComponent {
environmentService: EnvironmentService, environmentService: EnvironmentService,
logService: LogService, logService: LogService,
configService: ConfigServiceAbstraction, configService: ConfigServiceAbstraction,
@Inject(WINDOW) private win: Window @Inject(WINDOW) private win: Window,
) { ) {
super( super(
authService, authService,
@@ -51,7 +51,7 @@ export class SsoComponent extends BaseSsoComponent {
environmentService, environmentService,
passwordGenerationService, passwordGenerationService,
logService, logService,
configService configService,
); );
const url = this.environmentService.getWebVaultUrl(); const url = this.environmentService.getWebVaultUrl();

View File

@@ -16,7 +16,7 @@ export class TwoFactorOptionsComponent extends BaseTwoFactorOptionsComponent {
router: Router, router: Router,
i18nService: I18nService, i18nService: I18nService,
platformUtilsService: PlatformUtilsService, platformUtilsService: PlatformUtilsService,
private activatedRoute: ActivatedRoute private activatedRoute: ActivatedRoute,
) { ) {
super(twoFactorService, router, i18nService, platformUtilsService, window); super(twoFactorService, router, i18nService, platformUtilsService, window);
} }

Some files were not shown because too many files have changed in this diff Show More