mirror of
https://github.com/bitwarden/browser.git
synced 2025-01-07 19:07:45 +01:00
Merge branch 'main' into vault/pm-5273
# Conflicts: # libs/common/src/platform/state/state-definitions.ts # libs/common/src/state-migrations/migrate.ts
This commit is contained in:
commit
b6b7ea283c
1
.github/CODEOWNERS
vendored
1
.github/CODEOWNERS
vendored
@ -88,6 +88,7 @@ libs/common/src/autofill @bitwarden/team-autofill-dev
|
||||
## Component Library ##
|
||||
.storybook @bitwarden/team-component-library
|
||||
libs/components @bitwarden/team-component-library
|
||||
apps/web/src/app/layouts/header
|
||||
|
||||
## Desktop native module ##
|
||||
apps/desktop/desktop_native @bitwarden/team-platform-dev
|
||||
|
BIN
.github/secrets/appstore-app-cert.p12.gpg
vendored
BIN
.github/secrets/appstore-app-cert.p12.gpg
vendored
Binary file not shown.
BIN
.github/secrets/appstore-installer-cert.p12.gpg
vendored
BIN
.github/secrets/appstore-installer-cert.p12.gpg
vendored
Binary file not shown.
BIN
.github/secrets/bitwarden-desktop-key.p12.gpg
vendored
BIN
.github/secrets/bitwarden-desktop-key.p12.gpg
vendored
Binary file not shown.
Binary file not shown.
BIN
.github/secrets/devid-app-cert.p12.gpg
vendored
BIN
.github/secrets/devid-app-cert.p12.gpg
vendored
Binary file not shown.
BIN
.github/secrets/devid-installer-cert.p12.gpg
vendored
BIN
.github/secrets/devid-installer-cert.p12.gpg
vendored
Binary file not shown.
BIN
.github/secrets/macdev-cert.p12.gpg
vendored
BIN
.github/secrets/macdev-cert.p12.gpg
vendored
Binary file not shown.
2
.github/workflows/brew-bump-cli.yml
vendored
2
.github/workflows/brew-bump-cli.yml
vendored
@ -29,7 +29,7 @@ jobs:
|
||||
secrets: "brew-bump-workflow-pat"
|
||||
|
||||
- name: Update Homebrew formula
|
||||
uses: dawidd6/action-homebrew-bump-formula@75ed025ff3ad1d617862838b342b06d613a0ddf3 # v3.10.1
|
||||
uses: dawidd6/action-homebrew-bump-formula@baf2b60c51fc1f8453c884b0c61052668a71bd1d # v3.11.0
|
||||
with:
|
||||
# Required, custom GitHub access token with the 'public_repo' and 'workflow' scopes
|
||||
token: ${{ steps.retrieve-secrets.outputs.brew-bump-workflow-pat }}
|
||||
|
105
.github/workflows/build-browser.yml
vendored
105
.github/workflows/build-browser.yml
vendored
@ -257,58 +257,72 @@ jobs:
|
||||
node --version
|
||||
npm --version
|
||||
|
||||
- name: Decrypt secrets
|
||||
- name: Login to Azure
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
with:
|
||||
creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
|
||||
|
||||
- name: Download Provisioning Profiles secrets
|
||||
env:
|
||||
DECRYPT_FILE_PASSWORD: ${{ secrets.DECRYPT_FILE_PASSWORD }}
|
||||
ACCOUNT_NAME: bitwardenci
|
||||
CONTAINER_NAME: profiles
|
||||
run: |
|
||||
mkdir -p $HOME/secrets
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/bitwarden-desktop-key.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/bitwarden-desktop-key.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/appstore-app-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/appstore-app-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/appstore-installer-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/appstore-installer-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/devid-app-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/devid-app-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/devid-installer-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/devid-installer-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/macdev-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/macdev-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/bitwarden_desktop_appstore.provisionprofile" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/bitwarden_desktop_appstore.provisionprofile.gpg"
|
||||
|
||||
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \
|
||||
--name bitwarden_desktop_appstore.provisionprofile \
|
||||
--file $HOME/secrets/bitwarden_desktop_appstore.provisionprofile \
|
||||
--output none
|
||||
|
||||
- name: Get certificates
|
||||
run: |
|
||||
mkdir -p $HOME/certificates
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/bitwarden-desktop-key |
|
||||
jq -r .value | base64 -d > $HOME/certificates/bitwarden-desktop-key.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/appstore-app-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/appstore-app-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/appstore-installer-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/appstore-installer-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-app-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/devid-app-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-installer-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/devid-installer-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/macdev-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/macdev-cert.p12
|
||||
|
||||
- name: Set up keychain
|
||||
env:
|
||||
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
|
||||
DESKTOP_KEY_PASSWORD: ${{ secrets.DESKTOP_KEY_PASSWORD }}
|
||||
DEVID_CERT_PASSWORD: ${{ secrets.DEVID_CERT_PASSWORD }}
|
||||
APPSTORE_CERT_PASSWORD: ${{ secrets.APPSTORE_CERT_PASSWORD }}
|
||||
MACDEV_CERT_PASSWORD: ${{ secrets.MACDEV_CERT_PASSWORD }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
run: |
|
||||
security create-keychain -p $KEYCHAIN_PASSWORD build.keychain
|
||||
security default-keychain -s build.keychain
|
||||
security unlock-keychain -p $KEYCHAIN_PASSWORD build.keychain
|
||||
security set-keychain-settings -lut 1200 build.keychain
|
||||
security import "$HOME/secrets/bitwarden-desktop-key.p12" -k build.keychain -P $DESKTOP_KEY_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/bitwarden-desktop-key.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/devid-app-cert.p12" -k build.keychain -P $DEVID_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/devid-app-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/devid-installer-cert.p12" -k build.keychain -P $DEVID_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/devid-installer-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/appstore-app-cert.p12" -k build.keychain -P $APPSTORE_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/appstore-app-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/appstore-installer-cert.p12" -k build.keychain -P $APPSTORE_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/appstore-installer-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/macdev-cert.p12" -k build.keychain -P $MACDEV_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/macdev-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
|
||||
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $KEYCHAIN_PASSWORD build.keychain
|
||||
|
||||
- name: NPM setup
|
||||
@ -357,7 +371,7 @@ jobs:
|
||||
secrets: "crowdin-api-token"
|
||||
|
||||
- name: Upload Sources
|
||||
uses: crowdin/github-action@198daeb2d30636c4608d6a6bb96c009dbefc02a2 # v1.18.0
|
||||
uses: crowdin/github-action@c953b17499daa6be3e5afbf7a63616fb02d8b18d # v1.19.0
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }}
|
||||
@ -380,25 +394,8 @@ jobs:
|
||||
- crowdin-push
|
||||
steps:
|
||||
- name: Check if any job failed
|
||||
if: ${{ (github.ref == 'refs/heads/main') || (github.ref == 'refs/heads/rc') }}
|
||||
env:
|
||||
SETUP_STATUS: ${{ needs.setup.result }}
|
||||
LOCALES_TEST_STATUS: ${{ needs.locales-test.result }}
|
||||
BUILD_STATUS: ${{ needs.build.result }}
|
||||
SAFARI_BUILD_STATUS: ${{ needs.build-safari.result }}
|
||||
CROWDIN_PUSH_STATUS: ${{ needs.crowdin-push.result }}
|
||||
run: |
|
||||
if [ "$SETUP_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
elif [ "$LOCALES_TEST_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
elif [ "$BUILD_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
elif [ "$SAFARI_BUILD_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
elif [ "$CROWDIN_PUSH_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
fi
|
||||
if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix-rc') && contains(needs.*.result, 'failure')
|
||||
run: exit 1
|
||||
|
||||
- name: Login to Azure - Prod Subscription
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
|
20
.github/workflows/build-cli.yml
vendored
20
.github/workflows/build-cli.yml
vendored
@ -278,6 +278,9 @@ jobs:
|
||||
|
||||
snap:
|
||||
name: Build Snap
|
||||
# Note, before updating the ubuntu version of the workflow, ensure the snap base image
|
||||
# is equal or greater than the new version. Otherwise there might be GLIBC version issues.
|
||||
# The snap base for CLI is defined in `apps/cli/stores/snap/snapcraft.yaml`
|
||||
runs-on: ubuntu-22.04
|
||||
needs: [setup, cli]
|
||||
env:
|
||||
@ -294,7 +297,7 @@ jobs:
|
||||
echo "BW Package Version: $_PACKAGE_VERSION"
|
||||
|
||||
- name: Get bw linux cli
|
||||
uses: actions/download-artifact@eaceaf801fd36c7dee90939fad912460b18a1ffe # v4.1.2
|
||||
uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4
|
||||
with:
|
||||
name: bw-linux-${{ env._PACKAGE_VERSION }}.zip
|
||||
path: apps/cli/dist/snap
|
||||
@ -362,19 +365,8 @@ jobs:
|
||||
steps:
|
||||
- name: Check if any job failed
|
||||
working-directory: ${{ github.workspace }}
|
||||
if: ${{ (github.ref == 'refs/heads/main') || (github.ref == 'refs/heads/rc') }}
|
||||
env:
|
||||
SETUP_STATUS: ${{ needs.setup.result }}
|
||||
CLI_STATUS: ${{ needs.cli.result }}
|
||||
SNAP_STATUS: ${{ needs.snap.result }}
|
||||
run: |
|
||||
if [ "$SETUP_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
elif [ "$CLI_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
elif [ "$SNAP_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
fi
|
||||
if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix-rc') && contains(needs.*.result, 'failure')
|
||||
run: exit 1
|
||||
|
||||
- name: Login to Azure - Prod Subscription
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
|
400
.github/workflows/build-desktop.yml
vendored
400
.github/workflows/build-desktop.yml
vendored
@ -124,6 +124,9 @@ jobs:
|
||||
|
||||
linux:
|
||||
name: Linux Build
|
||||
# Note, before updating the ubuntu version of the workflow, ensure the snap base image
|
||||
# is equal or greater than the new version. Otherwise there might be GLIBC version issues.
|
||||
# The snap base for desktop is defined in `apps/desktop/electron-builder.json`
|
||||
runs-on: ubuntu-22.04
|
||||
needs: setup
|
||||
env:
|
||||
@ -164,7 +167,7 @@ jobs:
|
||||
working-directory: ./
|
||||
|
||||
- name: Cache Native Module
|
||||
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
|
||||
uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
|
||||
id: cache
|
||||
with:
|
||||
path: |
|
||||
@ -293,7 +296,7 @@ jobs:
|
||||
working-directory: ./
|
||||
|
||||
- name: Cache Native Module
|
||||
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
|
||||
uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
|
||||
id: cache
|
||||
with:
|
||||
path: apps/desktop/desktop_native/*.node
|
||||
@ -473,70 +476,84 @@ jobs:
|
||||
|
||||
- name: Cache Build
|
||||
id: build-cache
|
||||
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
|
||||
uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
|
||||
with:
|
||||
path: apps/desktop/build
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-build
|
||||
|
||||
- name: Cache Safari
|
||||
id: safari-cache
|
||||
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
|
||||
uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
|
||||
with:
|
||||
path: apps/browser/dist/Safari
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-safari-extension
|
||||
|
||||
- name: Decrypt secrets
|
||||
- name: Login to Azure
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
with:
|
||||
creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
|
||||
|
||||
- name: Download Provisioning Profiles secrets
|
||||
env:
|
||||
DECRYPT_FILE_PASSWORD: ${{ secrets.DECRYPT_FILE_PASSWORD }}
|
||||
ACCOUNT_NAME: bitwardenci
|
||||
CONTAINER_NAME: profiles
|
||||
run: |
|
||||
mkdir -p $HOME/secrets
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/bitwarden-desktop-key.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/bitwarden-desktop-key.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/appstore-app-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/appstore-app-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/appstore-installer-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/appstore-installer-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/devid-app-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/devid-app-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/devid-installer-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/devid-installer-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/macdev-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/macdev-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/bitwarden_desktop_appstore.provisionprofile" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/bitwarden_desktop_appstore.provisionprofile.gpg"
|
||||
|
||||
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \
|
||||
--name bitwarden_desktop_appstore.provisionprofile \
|
||||
--file $HOME/secrets/bitwarden_desktop_appstore.provisionprofile \
|
||||
--output none
|
||||
|
||||
- name: Get certificates
|
||||
run: |
|
||||
mkdir -p $HOME/certificates
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/bitwarden-desktop-key |
|
||||
jq -r .value | base64 -d > $HOME/certificates/bitwarden-desktop-key.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/appstore-app-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/appstore-app-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/appstore-installer-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/appstore-installer-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-app-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/devid-app-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-installer-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/devid-installer-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/macdev-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/macdev-cert.p12
|
||||
|
||||
- name: Set up keychain
|
||||
env:
|
||||
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
|
||||
DESKTOP_KEY_PASSWORD: ${{ secrets.DESKTOP_KEY_PASSWORD }}
|
||||
DEVID_CERT_PASSWORD: ${{ secrets.DEVID_CERT_PASSWORD }}
|
||||
APPSTORE_CERT_PASSWORD: ${{ secrets.APPSTORE_CERT_PASSWORD }}
|
||||
MACDEV_CERT_PASSWORD: ${{ secrets.MACDEV_CERT_PASSWORD }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
run: |
|
||||
security create-keychain -p $KEYCHAIN_PASSWORD build.keychain
|
||||
security default-keychain -s build.keychain
|
||||
security unlock-keychain -p $KEYCHAIN_PASSWORD build.keychain
|
||||
security set-keychain-settings -lut 1200 build.keychain
|
||||
security import "$HOME/secrets/bitwarden-desktop-key.p12" -k build.keychain -P $DESKTOP_KEY_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/bitwarden-desktop-key.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/devid-app-cert.p12" -k build.keychain -P $DEVID_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/devid-app-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/devid-installer-cert.p12" -k build.keychain -P $DEVID_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/devid-installer-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/appstore-app-cert.p12" -k build.keychain -P $APPSTORE_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/appstore-app-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/appstore-installer-cert.p12" -k build.keychain -P $APPSTORE_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/appstore-installer-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/macdev-cert.p12" -k build.keychain -P $MACDEV_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/macdev-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
|
||||
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $KEYCHAIN_PASSWORD build.keychain
|
||||
|
||||
- name: Set up provisioning profiles
|
||||
@ -559,7 +576,7 @@ jobs:
|
||||
working-directory: ./
|
||||
|
||||
- name: Cache Native Module
|
||||
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
|
||||
uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
|
||||
id: cache
|
||||
with:
|
||||
path: apps/desktop/desktop_native/*.node
|
||||
@ -620,70 +637,84 @@ jobs:
|
||||
|
||||
- name: Get Build Cache
|
||||
id: build-cache
|
||||
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
|
||||
uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
|
||||
with:
|
||||
path: apps/desktop/build
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-build
|
||||
|
||||
- name: Setup Safari Cache
|
||||
id: safari-cache
|
||||
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
|
||||
uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
|
||||
with:
|
||||
path: apps/browser/dist/Safari
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-safari-extension
|
||||
|
||||
- name: Decrypt secrets
|
||||
- name: Login to Azure
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
with:
|
||||
creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
|
||||
|
||||
- name: Download Provisioning Profiles secrets
|
||||
env:
|
||||
DECRYPT_FILE_PASSWORD: ${{ secrets.DECRYPT_FILE_PASSWORD }}
|
||||
ACCOUNT_NAME: bitwardenci
|
||||
CONTAINER_NAME: profiles
|
||||
run: |
|
||||
mkdir -p $HOME/secrets
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/bitwarden-desktop-key.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/bitwarden-desktop-key.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/appstore-app-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/appstore-app-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/appstore-installer-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/appstore-installer-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/devid-app-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/devid-app-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/devid-installer-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/devid-installer-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/macdev-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/macdev-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/bitwarden_desktop_appstore.provisionprofile" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/bitwarden_desktop_appstore.provisionprofile.gpg"
|
||||
|
||||
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \
|
||||
--name bitwarden_desktop_appstore.provisionprofile \
|
||||
--file $HOME/secrets/bitwarden_desktop_appstore.provisionprofile \
|
||||
--output none
|
||||
|
||||
- name: Get certificates
|
||||
run: |
|
||||
mkdir -p $HOME/certificates
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/bitwarden-desktop-key |
|
||||
jq -r .value | base64 -d > $HOME/certificates/bitwarden-desktop-key.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/appstore-app-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/appstore-app-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/appstore-installer-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/appstore-installer-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-app-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/devid-app-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-installer-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/devid-installer-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/macdev-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/macdev-cert.p12
|
||||
|
||||
- name: Set up keychain
|
||||
env:
|
||||
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
|
||||
DESKTOP_KEY_PASSWORD: ${{ secrets.DESKTOP_KEY_PASSWORD }}
|
||||
DEVID_CERT_PASSWORD: ${{ secrets.DEVID_CERT_PASSWORD }}
|
||||
APPSTORE_CERT_PASSWORD: ${{ secrets.APPSTORE_CERT_PASSWORD }}
|
||||
MACDEV_CERT_PASSWORD: ${{ secrets.MACDEV_CERT_PASSWORD }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
run: |
|
||||
security create-keychain -p $KEYCHAIN_PASSWORD build.keychain
|
||||
security default-keychain -s build.keychain
|
||||
security unlock-keychain -p $KEYCHAIN_PASSWORD build.keychain
|
||||
security set-keychain-settings -lut 1200 build.keychain
|
||||
security import "$HOME/secrets/bitwarden-desktop-key.p12" -k build.keychain -P $DESKTOP_KEY_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/bitwarden-desktop-key.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/devid-app-cert.p12" -k build.keychain -P $DEVID_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/devid-app-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/devid-installer-cert.p12" -k build.keychain -P $DEVID_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/devid-installer-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/appstore-app-cert.p12" -k build.keychain -P $APPSTORE_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/appstore-app-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/appstore-installer-cert.p12" -k build.keychain -P $APPSTORE_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/appstore-installer-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/macdev-cert.p12" -k build.keychain -P $MACDEV_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/macdev-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
|
||||
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $KEYCHAIN_PASSWORD build.keychain
|
||||
|
||||
- name: Set up provisioning profiles
|
||||
@ -706,7 +737,7 @@ jobs:
|
||||
working-directory: ./
|
||||
|
||||
- name: Cache Native Module
|
||||
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
|
||||
uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
|
||||
id: cache
|
||||
with:
|
||||
path: apps/desktop/desktop_native/*.node
|
||||
@ -722,7 +753,7 @@ jobs:
|
||||
run: npm run build
|
||||
|
||||
- name: Download Browser artifact
|
||||
uses: actions/download-artifact@eaceaf801fd36c7dee90939fad912460b18a1ffe # v4.1.2
|
||||
uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4
|
||||
with:
|
||||
path: ${{ github.workspace }}/browser-build-artifacts
|
||||
|
||||
@ -812,70 +843,84 @@ jobs:
|
||||
|
||||
- name: Get Build Cache
|
||||
id: build-cache
|
||||
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
|
||||
uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
|
||||
with:
|
||||
path: apps/desktop/build
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-build
|
||||
|
||||
- name: Setup Safari Cache
|
||||
id: safari-cache
|
||||
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
|
||||
uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
|
||||
with:
|
||||
path: apps/browser/dist/Safari
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-safari-extension
|
||||
|
||||
- name: Decrypt secrets
|
||||
- name: Login to Azure
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
with:
|
||||
creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
|
||||
|
||||
- name: Download Provisioning Profiles secrets
|
||||
env:
|
||||
DECRYPT_FILE_PASSWORD: ${{ secrets.DECRYPT_FILE_PASSWORD }}
|
||||
ACCOUNT_NAME: bitwardenci
|
||||
CONTAINER_NAME: profiles
|
||||
run: |
|
||||
mkdir -p $HOME/secrets
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/bitwarden-desktop-key.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/bitwarden-desktop-key.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/appstore-app-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/appstore-app-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/appstore-installer-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/appstore-installer-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/devid-app-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/devid-app-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/devid-installer-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/devid-installer-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/macdev-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/macdev-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/bitwarden_desktop_appstore.provisionprofile" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/bitwarden_desktop_appstore.provisionprofile.gpg"
|
||||
|
||||
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \
|
||||
--name bitwarden_desktop_appstore.provisionprofile \
|
||||
--file $HOME/secrets/bitwarden_desktop_appstore.provisionprofile \
|
||||
--output none
|
||||
|
||||
- name: Get certificates
|
||||
run: |
|
||||
mkdir -p $HOME/certificates
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/bitwarden-desktop-key |
|
||||
jq -r .value | base64 -d > $HOME/certificates/bitwarden-desktop-key.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/appstore-app-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/appstore-app-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/appstore-installer-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/appstore-installer-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-app-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/devid-app-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-installer-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/devid-installer-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/macdev-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/macdev-cert.p12
|
||||
|
||||
- name: Set up keychain
|
||||
env:
|
||||
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
|
||||
DESKTOP_KEY_PASSWORD: ${{ secrets.DESKTOP_KEY_PASSWORD }}
|
||||
DEVID_CERT_PASSWORD: ${{ secrets.DEVID_CERT_PASSWORD }}
|
||||
APPSTORE_CERT_PASSWORD: ${{ secrets.APPSTORE_CERT_PASSWORD }}
|
||||
MACDEV_CERT_PASSWORD: ${{ secrets.MACDEV_CERT_PASSWORD }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
run: |
|
||||
security create-keychain -p $KEYCHAIN_PASSWORD build.keychain
|
||||
security default-keychain -s build.keychain
|
||||
security unlock-keychain -p $KEYCHAIN_PASSWORD build.keychain
|
||||
security set-keychain-settings -lut 1200 build.keychain
|
||||
security import "$HOME/secrets/bitwarden-desktop-key.p12" -k build.keychain -P $DESKTOP_KEY_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/bitwarden-desktop-key.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/devid-app-cert.p12" -k build.keychain -P $DEVID_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/devid-app-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/devid-installer-cert.p12" -k build.keychain -P $DEVID_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/devid-installer-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/appstore-app-cert.p12" -k build.keychain -P $APPSTORE_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/appstore-app-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/appstore-installer-cert.p12" -k build.keychain -P $APPSTORE_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/appstore-installer-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/macdev-cert.p12" -k build.keychain -P $MACDEV_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/macdev-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
|
||||
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $KEYCHAIN_PASSWORD build.keychain
|
||||
|
||||
- name: Set up provisioning profiles
|
||||
@ -898,7 +943,7 @@ jobs:
|
||||
working-directory: ./
|
||||
|
||||
- name: Cache Native Module
|
||||
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
|
||||
uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
|
||||
id: cache
|
||||
with:
|
||||
path: apps/desktop/desktop_native/*.node
|
||||
@ -914,7 +959,7 @@ jobs:
|
||||
run: npm run build
|
||||
|
||||
- name: Download Browser artifact
|
||||
uses: actions/download-artifact@eaceaf801fd36c7dee90939fad912460b18a1ffe # v4.1.2
|
||||
uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4
|
||||
with:
|
||||
path: ${{ github.workspace }}/browser-build-artifacts
|
||||
|
||||
@ -991,70 +1036,84 @@ jobs:
|
||||
|
||||
- name: Get Build Cache
|
||||
id: build-cache
|
||||
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
|
||||
uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
|
||||
with:
|
||||
path: apps/desktop/build
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-build
|
||||
|
||||
- name: Setup Safari Cache
|
||||
id: safari-cache
|
||||
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
|
||||
uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
|
||||
with:
|
||||
path: apps/browser/dist/Safari
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-safari-extension
|
||||
|
||||
- name: Decrypt secrets
|
||||
- name: Login to Azure
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
with:
|
||||
creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
|
||||
|
||||
- name: Download Provisioning Profiles secrets
|
||||
env:
|
||||
DECRYPT_FILE_PASSWORD: ${{ secrets.DECRYPT_FILE_PASSWORD }}
|
||||
ACCOUNT_NAME: bitwardenci
|
||||
CONTAINER_NAME: profiles
|
||||
run: |
|
||||
mkdir -p $HOME/secrets
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/bitwarden-desktop-key.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/bitwarden-desktop-key.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/appstore-app-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/appstore-app-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/appstore-installer-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/appstore-installer-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/devid-app-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/devid-app-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/devid-installer-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/devid-installer-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/macdev-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/macdev-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/bitwarden_desktop_appstore.provisionprofile" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/bitwarden_desktop_appstore.provisionprofile.gpg"
|
||||
|
||||
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \
|
||||
--name bitwarden_desktop_appstore.provisionprofile \
|
||||
--file $HOME/secrets/bitwarden_desktop_appstore.provisionprofile \
|
||||
--output none
|
||||
|
||||
- name: Get certificates
|
||||
run: |
|
||||
mkdir -p $HOME/certificates
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/bitwarden-desktop-key |
|
||||
jq -r .value | base64 -d > $HOME/certificates/bitwarden-desktop-key.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/appstore-app-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/appstore-app-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/appstore-installer-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/appstore-installer-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-app-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/devid-app-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-installer-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/devid-installer-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/macdev-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/macdev-cert.p12
|
||||
|
||||
- name: Set up keychain
|
||||
env:
|
||||
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
|
||||
DESKTOP_KEY_PASSWORD: ${{ secrets.DESKTOP_KEY_PASSWORD }}
|
||||
DEVID_CERT_PASSWORD: ${{ secrets.DEVID_CERT_PASSWORD }}
|
||||
APPSTORE_CERT_PASSWORD: ${{ secrets.APPSTORE_CERT_PASSWORD }}
|
||||
MACDEV_CERT_PASSWORD: ${{ secrets.MACDEV_CERT_PASSWORD }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
run: |
|
||||
security create-keychain -p $KEYCHAIN_PASSWORD build.keychain
|
||||
security default-keychain -s build.keychain
|
||||
security unlock-keychain -p $KEYCHAIN_PASSWORD build.keychain
|
||||
security set-keychain-settings -lut 1200 build.keychain
|
||||
security import "$HOME/secrets/bitwarden-desktop-key.p12" -k build.keychain -P $DESKTOP_KEY_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/bitwarden-desktop-key.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/devid-app-cert.p12" -k build.keychain -P $DEVID_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/devid-app-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/devid-installer-cert.p12" -k build.keychain -P $DEVID_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/devid-installer-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/appstore-app-cert.p12" -k build.keychain -P $APPSTORE_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/appstore-app-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/appstore-installer-cert.p12" -k build.keychain -P $APPSTORE_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/appstore-installer-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/macdev-cert.p12" -k build.keychain -P $MACDEV_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/macdev-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
|
||||
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $KEYCHAIN_PASSWORD build.keychain
|
||||
|
||||
- name: Set up provisioning profiles
|
||||
@ -1077,7 +1136,7 @@ jobs:
|
||||
working-directory: ./
|
||||
|
||||
- name: Cache Native Module
|
||||
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
|
||||
uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
|
||||
id: cache
|
||||
with:
|
||||
path: apps/desktop/desktop_native/*.node
|
||||
@ -1093,7 +1152,7 @@ jobs:
|
||||
run: npm run build
|
||||
|
||||
- name: Download Browser artifact
|
||||
uses: actions/download-artifact@eaceaf801fd36c7dee90939fad912460b18a1ffe # v4.1.2
|
||||
uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4
|
||||
with:
|
||||
path: ${{ github.workspace }}/browser-build-artifacts
|
||||
|
||||
@ -1152,7 +1211,7 @@ jobs:
|
||||
secrets: "crowdin-api-token"
|
||||
|
||||
- name: Upload Sources
|
||||
uses: crowdin/github-action@198daeb2d30636c4608d6a6bb96c009dbefc02a2 # v1.18.0
|
||||
uses: crowdin/github-action@c953b17499daa6be3e5afbf7a63616fb02d8b18d # v1.19.0
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }}
|
||||
@ -1180,37 +1239,8 @@ jobs:
|
||||
- crowdin-push
|
||||
steps:
|
||||
- name: Check if any job failed
|
||||
if: ${{ (github.ref == 'refs/heads/main') || (github.ref == 'refs/heads/rc') }}
|
||||
env:
|
||||
ELECTRON_VERIFY_STATUS: ${{ needs.electron-verify.result }}
|
||||
BROWSER_BUILD_STATUS: ${{ needs.browser-build.result }}
|
||||
SETUP_STATUS: ${{ needs.setup.result }}
|
||||
LINUX_STATUS: ${{ needs.linux.result }}
|
||||
WINDOWS_STATUS: ${{ needs.windows.result }}
|
||||
MACOS_BUILD_STATUS: ${{ needs.macos-build.result }}
|
||||
MACOS_PKG_GITHUB_STATUS: ${{ needs.macos-package-github.result }}
|
||||
MACOS_PKG_MAS_STATUS: ${{ needs.macos-package-mas.result }}
|
||||
CROWDIN_PUSH_STATUS: ${{ needs.crowdin-push.result }}
|
||||
run: |
|
||||
if [ "$ELECTRON_VERIFY_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
elif [ "$BROWSER_BUILD_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
elif [ "$SETUP_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
elif [ "$LINUX_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
elif [ "$WINDOWS_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
elif [ "$MACOS_BUILD_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
elif [ "$MACOS_PKG_GITHUB_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
elif [ "$MACOS_PKG_MAS_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
elif [ "$CROWDIN_PUSH_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
fi
|
||||
if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix-rc') && contains(needs.*.result, 'failure')
|
||||
run: exit 1
|
||||
|
||||
- name: Login to Azure - Prod Subscription
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
|
35
.github/workflows/build-web.yml
vendored
35
.github/workflows/build-web.yml
vendored
@ -76,14 +76,18 @@ jobs:
|
||||
npm_command: "dist:bit:selfhost"
|
||||
- name: "cloud-QA"
|
||||
npm_command: "build:bit:qa"
|
||||
git_metadata: true
|
||||
- name: "ee"
|
||||
npm_command: "build:bit:ee"
|
||||
git_metadata: true
|
||||
- name: "cloud-euprd"
|
||||
npm_command: "build:bit:euprd"
|
||||
- name: "cloud-euqa"
|
||||
npm_command: "build:bit:euqa"
|
||||
git_metadata: true
|
||||
- name: "cloud-usdev"
|
||||
npm_command: "build:bit:usdev"
|
||||
git_metadata: true
|
||||
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
@ -109,9 +113,9 @@ jobs:
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Setup QA metadata
|
||||
- name: Add Git metadata to build version
|
||||
working-directory: apps/web
|
||||
if: matrix.name == 'cloud-QA'
|
||||
if: matrix.git_metadata
|
||||
run: |
|
||||
VERSION=$( jq -r ".version" package.json)
|
||||
jq --arg version "$VERSION+${GITHUB_SHA:0:7}" '.version = $version' package.json > package.json.tmp
|
||||
@ -190,7 +194,7 @@ jobs:
|
||||
secrets: "github-pat-bitwarden-devops-bot-repo-scope"
|
||||
|
||||
- name: Download ${{ matrix.artifact_name }} artifact
|
||||
uses: actions/download-artifact@eaceaf801fd36c7dee90939fad912460b18a1ffe # v4.1.2
|
||||
uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4
|
||||
with:
|
||||
name: web-${{ env._VERSION }}-${{ matrix.artifact_name }}.zip
|
||||
path: apps/web
|
||||
@ -266,7 +270,7 @@ jobs:
|
||||
secrets: "crowdin-api-token"
|
||||
|
||||
- name: Upload Sources
|
||||
uses: crowdin/github-action@198daeb2d30636c4608d6a6bb96c009dbefc02a2 # v1.18.0
|
||||
uses: crowdin/github-action@c953b17499daa6be3e5afbf7a63616fb02d8b18d # v1.19.0
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }}
|
||||
@ -323,27 +327,8 @@ jobs:
|
||||
- trigger-web-vault-deploy
|
||||
steps:
|
||||
- name: Check if any job failed
|
||||
if: ${{ (github.ref == 'refs/heads/main') || (github.ref == 'refs/heads/rc') }}
|
||||
env:
|
||||
SETUP_STATUS: ${{ needs.setup.result }}
|
||||
ARTIFACT_STATUS: ${{ needs.build-artifacts.result }}
|
||||
BUILD_CONTAINERS_STATUS: ${{ needs.build-containers.result }}
|
||||
CROWDIN_PUSH_STATUS: ${{ needs.crowdin-push.result }}
|
||||
TRIGGER_WEB_VAULT_DEPLOY_STATUS: ${{ needs.trigger-web-vault-deploy.result }}
|
||||
run: |
|
||||
if [ "$SETUP_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
elif [ "$ARTIFACT_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
elif [ "$BUILD_SELFHOST_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
elif [ "$BUILD_CONTAINERS_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
elif [ "$CROWDIN_PUSH_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
elif [ "$TRIGGER_WEB_VAULT_DEPLOY_STATUS" = "failure" ]; then
|
||||
exit 1
|
||||
fi
|
||||
if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix-rc') && contains(needs.*.result, 'failure')
|
||||
run: exit 1
|
||||
|
||||
- name: Login to Azure - Prod Subscription
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
|
4
.github/workflows/chromatic.yml
vendored
4
.github/workflows/chromatic.yml
vendored
@ -33,7 +33,7 @@ jobs:
|
||||
|
||||
- name: Cache npm
|
||||
id: npm-cache
|
||||
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
|
||||
uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
|
||||
with:
|
||||
path: "~/.npm"
|
||||
key: ${{ runner.os }}-npm-chromatic-${{ hashFiles('**/package-lock.json') }}
|
||||
@ -46,7 +46,7 @@ jobs:
|
||||
run: npm run build-storybook:ci
|
||||
|
||||
- name: Publish to Chromatic
|
||||
uses: chromaui/action@76bda3648003815314bd50adaa553ee612a7f36c # v10.9.2
|
||||
uses: chromaui/action@c9067691aca4a28d6fbb40d9eea6e144369fbcae # v10.9.5
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
|
||||
|
79
.github/workflows/deploy-web.yml
vendored
79
.github/workflows/deploy-web.yml
vendored
@ -1,6 +1,6 @@
|
||||
---
|
||||
name: Deploy Web Vault
|
||||
run-name: Deploy Web Vault to ${{ inputs.environment }}
|
||||
run-name: Deploy Web Vault to ${{ inputs.environment }} from ${{ inputs.branch-or-tag }}
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
@ -19,6 +19,14 @@ on:
|
||||
description: "Branch or Tag name to deploy (examples: 'main', 'feature/sm', 'web-v2023.12.0')"
|
||||
type: string
|
||||
default: main
|
||||
force-delete-destination:
|
||||
description: "Delete remote files that are not found locally"
|
||||
type: boolean
|
||||
default: false
|
||||
debug:
|
||||
description: "Debug mode"
|
||||
type: boolean
|
||||
default: true
|
||||
|
||||
workflow_call:
|
||||
inputs:
|
||||
@ -30,6 +38,14 @@ on:
|
||||
description: "Branch or Tag name to deploy (examples: 'main', 'feature/sm', 'web-v2023.12.0')"
|
||||
type: string
|
||||
default: main
|
||||
force-delete-destination:
|
||||
description: "Delete remote files that are not found locally"
|
||||
type: boolean
|
||||
default: false
|
||||
debug:
|
||||
description: "Debug mode"
|
||||
type: boolean
|
||||
default: true
|
||||
|
||||
permissions:
|
||||
deployments: write
|
||||
@ -45,6 +61,8 @@ jobs:
|
||||
environment-artifact: ${{ steps.config.outputs.environment-artifact }}
|
||||
azure-login-creds: ${{ steps.config.outputs.azure-login-creds }}
|
||||
retrieve-secrets-keyvault: ${{ steps.config.outputs.retrieve-secrets-keyvault }}
|
||||
sync-utility: ${{ steps.config.outputs.sync-utility }}
|
||||
sync-delete-destination-files: ${{ steps.config.outputs.sync-delete-destination-files }}
|
||||
steps:
|
||||
- name: Configure
|
||||
id: config
|
||||
@ -52,6 +70,7 @@ jobs:
|
||||
ENV_NAME_LOWER=$(echo "${{ inputs.environment }}" | awk '{print tolower($0)}')
|
||||
echo "configuring the Web deploy for ${{ inputs.environment }}"
|
||||
echo "environment=${{ inputs.environment }}" >> $GITHUB_OUTPUT
|
||||
|
||||
case ${{ inputs.environment }} in
|
||||
"USQA")
|
||||
echo "azure-login-creds=AZURE_KV_US_QA_SERVICE_PRINCIPAL" >> $GITHUB_OUTPUT
|
||||
@ -89,6 +108,8 @@ jobs:
|
||||
echo "environment-url=http://vault.$ENV_NAME_LOWER.bitwarden.pw" >> $GITHUB_OUTPUT
|
||||
;;
|
||||
esac
|
||||
# Set the sync utility to use for deployment to the environment (az-sync or azcopy)
|
||||
echo "sync-utility=azcopy" >> $GITHUB_OUTPUT
|
||||
|
||||
approval:
|
||||
name: Approval for Deployment to ${{ needs.setup.outputs.environment-name }}
|
||||
@ -212,13 +233,22 @@ jobs:
|
||||
with:
|
||||
creds: ${{ secrets[needs.setup.outputs.azure-login-creds] }}
|
||||
|
||||
- name: Retrieve Storage Account connection string
|
||||
id: retrieve-secrets
|
||||
- name: Retrieve Storage Account connection string for az sync
|
||||
if: ${{ needs.setup.outputs.sync-utility == 'az-sync' }}
|
||||
id: retrieve-secrets-az-sync
|
||||
uses: bitwarden/gh-actions/get-keyvault-secrets@main
|
||||
with:
|
||||
keyvault: ${{ needs.setup.outputs.retrieve-secrets-keyvault }}
|
||||
secrets: "sa-bitwarden-web-vault-dev-key-temp"
|
||||
|
||||
- name: Retrieve Storage Account name and SPN credentials for azcopy
|
||||
if: ${{ needs.setup.outputs.sync-utility == 'azcopy' }}
|
||||
id: retrieve-secrets-azcopy
|
||||
uses: bitwarden/gh-actions/get-keyvault-secrets@main
|
||||
with:
|
||||
keyvault: ${{ needs.setup.outputs.retrieve-secrets-keyvault }}
|
||||
secrets: "sa-bitwarden-web-vault-name,sp-bitwarden-web-vault-password,sp-bitwarden-web-vault-appid,sp-bitwarden-web-vault-tenant"
|
||||
|
||||
- name: 'Download cloud asset from branch/tag: ${{ inputs.branch-or-tag }}'
|
||||
uses: bitwarden/gh-actions/download-artifacts@main
|
||||
with:
|
||||
@ -232,26 +262,39 @@ jobs:
|
||||
working-directory: apps/web
|
||||
run: unzip ${{ env._ENVIRONMENT_ARTIFACT }}
|
||||
|
||||
- name: Empty container in Storage Account
|
||||
run: |
|
||||
az storage blob delete-batch \
|
||||
--source '$web' \
|
||||
--pattern '*' \
|
||||
--connection-string "${{ steps.retrieve-secrets.outputs.sa-bitwarden-web-vault-dev-key-temp }}"
|
||||
|
||||
- name: Deploy to Azure Storage Account
|
||||
- name: Sync to Azure Storage Account using az storage blob sync
|
||||
if: ${{ needs.setup.outputs.sync-utility == 'az-sync' }}
|
||||
working-directory: apps/web
|
||||
run: |
|
||||
az storage blob upload-batch \
|
||||
az storage blob sync \
|
||||
--source "./build" \
|
||||
--destination '$web' \
|
||||
--connection-string "${{ steps.retrieve-secrets.outputs.sa-bitwarden-web-vault-dev-key-temp }}" \
|
||||
--overwrite \
|
||||
--no-progress
|
||||
--container '$web' \
|
||||
--connection-string "${{ steps.retrieve-secrets-az-sync.outputs.sa-bitwarden-web-vault-dev-key-temp }}" \
|
||||
--delete-destination=${{ inputs.force-delete-destination }}
|
||||
|
||||
- name: Sync to Azure Storage Account using azcopy
|
||||
if: ${{ needs.setup.outputs.sync-utility == 'azcopy' }}
|
||||
working-directory: apps/web
|
||||
env:
|
||||
AZCOPY_AUTO_LOGIN_TYPE: SPN
|
||||
AZCOPY_SPA_APPLICATION_ID: ${{ steps.retrieve-secrets-azcopy.outputs.sp-bitwarden-web-vault-appid }}
|
||||
AZCOPY_SPA_CLIENT_SECRET: ${{ steps.retrieve-secrets-azcopy.outputs.sp-bitwarden-web-vault-password }}
|
||||
AZCOPY_TENANT_ID: ${{ steps.retrieve-secrets-azcopy.outputs.sp-bitwarden-web-vault-tenant }}
|
||||
run: |
|
||||
azcopy sync ./build 'https://${{ steps.retrieve-secrets-azcopy.outputs.sa-bitwarden-web-vault-name }}.blob.core.windows.net/$web/' \
|
||||
--delete-destination=${{ inputs.force-delete-destination }} --compare-hash="MD5"
|
||||
|
||||
- name: Debug sync logs
|
||||
if: ${{ inputs.debug }}
|
||||
run: cat /home/runner/.azcopy/*.log
|
||||
|
||||
- name: Debug index.html
|
||||
if: ${{ inputs.debug }}
|
||||
run: cat apps/web/build/index.html
|
||||
|
||||
- name: Update deployment status to Success
|
||||
if: success()
|
||||
uses: chrnorm/deployment-status@2afb7d27101260f4a764219439564d954d10b5b0 # v2.0.1
|
||||
uses: chrnorm/deployment-status@9a72af4586197112e0491ea843682b5dc280d806 # v2.0.3
|
||||
with:
|
||||
token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
environment-url: ${{ env._ENVIRONMENT_URL }}
|
||||
@ -260,7 +303,7 @@ jobs:
|
||||
|
||||
- name: Update deployment status to Failure
|
||||
if: failure()
|
||||
uses: chrnorm/deployment-status@2afb7d27101260f4a764219439564d954d10b5b0 # v2.0.1
|
||||
uses: chrnorm/deployment-status@9a72af4586197112e0491ea843682b5dc280d806 # v2.0.3
|
||||
with:
|
||||
token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
environment-url: ${{ env._ENVIRONMENT_URL }}
|
||||
|
4
.github/workflows/release-browser.yml
vendored
4
.github/workflows/release-browser.yml
vendored
@ -155,7 +155,7 @@ jobs:
|
||||
|
||||
- name: Update deployment status to Success
|
||||
if: ${{ success() }}
|
||||
uses: chrnorm/deployment-status@2afb7d27101260f4a764219439564d954d10b5b0 # v2.0.1
|
||||
uses: chrnorm/deployment-status@9a72af4586197112e0491ea843682b5dc280d806 # v2.0.3
|
||||
with:
|
||||
token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
state: 'success'
|
||||
@ -163,7 +163,7 @@ jobs:
|
||||
|
||||
- name: Update deployment status to Failure
|
||||
if: ${{ failure() }}
|
||||
uses: chrnorm/deployment-status@2afb7d27101260f4a764219439564d954d10b5b0 # v2.0.1
|
||||
uses: chrnorm/deployment-status@9a72af4586197112e0491ea843682b5dc280d806 # v2.0.3
|
||||
with:
|
||||
token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
state: 'failure'
|
||||
|
4
.github/workflows/release-cli.yml
vendored
4
.github/workflows/release-cli.yml
vendored
@ -118,7 +118,7 @@ jobs:
|
||||
|
||||
- name: Update deployment status to Success
|
||||
if: ${{ github.event.inputs.release_type != 'Dry Run' && success() }}
|
||||
uses: chrnorm/deployment-status@2afb7d27101260f4a764219439564d954d10b5b0 # v2.0.1
|
||||
uses: chrnorm/deployment-status@9a72af4586197112e0491ea843682b5dc280d806 # v2.0.3
|
||||
with:
|
||||
token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
state: 'success'
|
||||
@ -126,7 +126,7 @@ jobs:
|
||||
|
||||
- name: Update deployment status to Failure
|
||||
if: ${{ github.event.inputs.release_type != 'Dry Run' && failure() }}
|
||||
uses: chrnorm/deployment-status@2afb7d27101260f4a764219439564d954d10b5b0 # v2.0.1
|
||||
uses: chrnorm/deployment-status@9a72af4586197112e0491ea843682b5dc280d806 # v2.0.3
|
||||
with:
|
||||
token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
state: 'failure'
|
||||
|
265
.github/workflows/release-desktop-beta.yml
vendored
265
.github/workflows/release-desktop-beta.yml
vendored
@ -424,70 +424,78 @@ jobs:
|
||||
|
||||
- name: Cache Build
|
||||
id: build-cache
|
||||
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
|
||||
uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
|
||||
with:
|
||||
path: apps/desktop/build
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-build
|
||||
|
||||
- name: Cache Safari
|
||||
id: safari-cache
|
||||
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
|
||||
uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
|
||||
with:
|
||||
path: apps/browser/dist/Safari
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-safari-extension
|
||||
|
||||
- name: Decrypt secrets
|
||||
- name: Download Provisioning Profiles secrets
|
||||
env:
|
||||
DECRYPT_FILE_PASSWORD: ${{ secrets.DECRYPT_FILE_PASSWORD }}
|
||||
ACCOUNT_NAME: bitwardenci
|
||||
CONTAINER_NAME: profiles
|
||||
run: |
|
||||
mkdir -p $HOME/secrets
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/bitwarden-desktop-key.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/bitwarden-desktop-key.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/appstore-app-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/appstore-app-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/appstore-installer-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/appstore-installer-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/devid-app-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/devid-app-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/devid-installer-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/devid-installer-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/macdev-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/macdev-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/bitwarden_desktop_appstore.provisionprofile" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/bitwarden_desktop_appstore.provisionprofile.gpg"
|
||||
|
||||
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \
|
||||
--name bitwarden_desktop_appstore.provisionprofile \
|
||||
--file $HOME/secrets/bitwarden_desktop_appstore.provisionprofile \
|
||||
--output none
|
||||
|
||||
- name: Get certificates
|
||||
run: |
|
||||
mkdir -p $HOME/certificates
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/bitwarden-desktop-key |
|
||||
jq -r .value | base64 -d > $HOME/certificates/bitwarden-desktop-key.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/appstore-app-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/appstore-app-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/appstore-installer-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/appstore-installer-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-app-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/devid-app-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-installer-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/devid-installer-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/macdev-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/macdev-cert.p12
|
||||
|
||||
- name: Set up keychain
|
||||
env:
|
||||
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
|
||||
DESKTOP_KEY_PASSWORD: ${{ secrets.DESKTOP_KEY_PASSWORD }}
|
||||
DEVID_CERT_PASSWORD: ${{ secrets.DEVID_CERT_PASSWORD }}
|
||||
APPSTORE_CERT_PASSWORD: ${{ secrets.APPSTORE_CERT_PASSWORD }}
|
||||
MACDEV_CERT_PASSWORD: ${{ secrets.MACDEV_CERT_PASSWORD }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
run: |
|
||||
security create-keychain -p $KEYCHAIN_PASSWORD build.keychain
|
||||
security default-keychain -s build.keychain
|
||||
security unlock-keychain -p $KEYCHAIN_PASSWORD build.keychain
|
||||
security set-keychain-settings -lut 1200 build.keychain
|
||||
security import "$HOME/secrets/bitwarden-desktop-key.p12" -k build.keychain -P $DESKTOP_KEY_PASSWORD \
|
||||
security import "$HOME/certificates/bitwarden-desktop-key.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/devid-app-cert.p12" -k build.keychain -P $DEVID_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/devid-app-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/devid-installer-cert.p12" -k build.keychain -P $DEVID_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/devid-installer-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/appstore-app-cert.p12" -k build.keychain -P $APPSTORE_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/appstore-app-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/appstore-installer-cert.p12" -k build.keychain -P $APPSTORE_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/appstore-installer-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/macdev-cert.p12" -k build.keychain -P $MACDEV_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/macdev-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
|
||||
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $KEYCHAIN_PASSWORD build.keychain
|
||||
|
||||
- name: Set up provisioning profiles
|
||||
@ -547,70 +555,84 @@ jobs:
|
||||
|
||||
- name: Get Build Cache
|
||||
id: build-cache
|
||||
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
|
||||
uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
|
||||
with:
|
||||
path: apps/desktop/build
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-build
|
||||
|
||||
- name: Setup Safari Cache
|
||||
id: safari-cache
|
||||
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
|
||||
uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
|
||||
with:
|
||||
path: apps/browser/dist/Safari
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-safari-extension
|
||||
|
||||
- name: Decrypt secrets
|
||||
- name: Login to Azure
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
with:
|
||||
creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
|
||||
|
||||
- name: Download Provisioning Profiles secrets
|
||||
env:
|
||||
DECRYPT_FILE_PASSWORD: ${{ secrets.DECRYPT_FILE_PASSWORD }}
|
||||
ACCOUNT_NAME: bitwardenci
|
||||
CONTAINER_NAME: profiles
|
||||
run: |
|
||||
mkdir -p $HOME/secrets
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/bitwarden-desktop-key.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/bitwarden-desktop-key.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/appstore-app-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/appstore-app-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/appstore-installer-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/appstore-installer-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/devid-app-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/devid-app-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/devid-installer-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/devid-installer-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/macdev-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/macdev-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/bitwarden_desktop_appstore.provisionprofile" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/bitwarden_desktop_appstore.provisionprofile.gpg"
|
||||
|
||||
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \
|
||||
--name bitwarden_desktop_appstore.provisionprofile \
|
||||
--file $HOME/secrets/bitwarden_desktop_appstore.provisionprofile \
|
||||
--output none
|
||||
|
||||
- name: Get certificates
|
||||
run: |
|
||||
mkdir -p $HOME/certificates
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/bitwarden-desktop-key |
|
||||
jq -r .value | base64 -d > $HOME/certificates/bitwarden-desktop-key.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/appstore-app-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/appstore-app-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/appstore-installer-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/appstore-installer-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-app-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/devid-app-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-installer-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/devid-installer-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/macdev-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/macdev-cert.p12
|
||||
|
||||
- name: Set up keychain
|
||||
env:
|
||||
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
|
||||
DESKTOP_KEY_PASSWORD: ${{ secrets.DESKTOP_KEY_PASSWORD }}
|
||||
DEVID_CERT_PASSWORD: ${{ secrets.DEVID_CERT_PASSWORD }}
|
||||
APPSTORE_CERT_PASSWORD: ${{ secrets.APPSTORE_CERT_PASSWORD }}
|
||||
MACDEV_CERT_PASSWORD: ${{ secrets.MACDEV_CERT_PASSWORD }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
run: |
|
||||
security create-keychain -p $KEYCHAIN_PASSWORD build.keychain
|
||||
security default-keychain -s build.keychain
|
||||
security unlock-keychain -p $KEYCHAIN_PASSWORD build.keychain
|
||||
security set-keychain-settings -lut 1200 build.keychain
|
||||
security import "$HOME/secrets/bitwarden-desktop-key.p12" -k build.keychain -P $DESKTOP_KEY_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/bitwarden-desktop-key.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/devid-app-cert.p12" -k build.keychain -P $DEVID_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/devid-app-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/devid-installer-cert.p12" -k build.keychain -P $DEVID_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/devid-installer-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/appstore-app-cert.p12" -k build.keychain -P $APPSTORE_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/appstore-app-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/appstore-installer-cert.p12" -k build.keychain -P $APPSTORE_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/appstore-installer-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/macdev-cert.p12" -k build.keychain -P $MACDEV_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/macdev-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
|
||||
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $KEYCHAIN_PASSWORD build.keychain
|
||||
|
||||
- name: Set up provisioning profiles
|
||||
@ -637,7 +659,7 @@ jobs:
|
||||
|
||||
- name: Download artifact from hotfix-rc
|
||||
if: github.ref == 'refs/heads/hotfix-rc'
|
||||
uses: dawidd6/action-download-artifact@e7466d1a7587ed14867642c2ca74b5bcc1e19a2d # v3.0.0
|
||||
uses: dawidd6/action-download-artifact@71072fbb1229e1317f1a8de6b04206afb461bd67 # v3.1.2
|
||||
with:
|
||||
workflow: build-browser.yml
|
||||
workflow_conclusion: success
|
||||
@ -646,7 +668,7 @@ jobs:
|
||||
|
||||
- name: Download artifact from rc
|
||||
if: github.ref == 'refs/heads/rc'
|
||||
uses: dawidd6/action-download-artifact@e7466d1a7587ed14867642c2ca74b5bcc1e19a2d # v3.0.0
|
||||
uses: dawidd6/action-download-artifact@71072fbb1229e1317f1a8de6b04206afb461bd67 # v3.1.2
|
||||
with:
|
||||
workflow: build-browser.yml
|
||||
workflow_conclusion: success
|
||||
@ -655,7 +677,7 @@ jobs:
|
||||
|
||||
- name: Download artifacts from main
|
||||
if: ${{ github.ref != 'refs/heads/rc' && github.ref != 'refs/heads/hotfix-rc' }}
|
||||
uses: dawidd6/action-download-artifact@e7466d1a7587ed14867642c2ca74b5bcc1e19a2d # v3.0.0
|
||||
uses: dawidd6/action-download-artifact@71072fbb1229e1317f1a8de6b04206afb461bd67 # v3.1.2
|
||||
with:
|
||||
workflow: build-browser.yml
|
||||
workflow_conclusion: success
|
||||
@ -743,70 +765,79 @@ jobs:
|
||||
|
||||
- name: Get Build Cache
|
||||
id: build-cache
|
||||
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
|
||||
uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
|
||||
with:
|
||||
path: apps/desktop/build
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-build
|
||||
|
||||
- name: Setup Safari Cache
|
||||
id: safari-cache
|
||||
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
|
||||
uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
|
||||
with:
|
||||
path: apps/browser/dist/Safari
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-safari-extension
|
||||
|
||||
- name: Decrypt secrets
|
||||
- name: Download Provisioning Profiles secrets
|
||||
env:
|
||||
DECRYPT_FILE_PASSWORD: ${{ secrets.DECRYPT_FILE_PASSWORD }}
|
||||
ACCOUNT_NAME: bitwardenci
|
||||
CONTAINER_NAME: profiles
|
||||
run: |
|
||||
mkdir -p $HOME/secrets
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/bitwarden-desktop-key.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/bitwarden-desktop-key.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/appstore-app-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/appstore-app-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/appstore-installer-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/appstore-installer-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/devid-app-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/devid-app-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/devid-installer-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/devid-installer-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/macdev-cert.p12" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/macdev-cert.p12.gpg"
|
||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||
--output "$HOME/secrets/bitwarden_desktop_appstore.provisionprofile" \
|
||||
"$GITHUB_WORKSPACE/.github/secrets/bitwarden_desktop_appstore.provisionprofile.gpg"
|
||||
|
||||
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \
|
||||
--name bitwarden_desktop_appstore.provisionprofile \
|
||||
--file $HOME/secrets/bitwarden_desktop_appstore.provisionprofile \
|
||||
--output none
|
||||
|
||||
- name: Get certificates
|
||||
run: |
|
||||
mkdir -p $HOME/certificates
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/bitwarden-desktop-key |
|
||||
jq -r .value | base64 -d > $HOME/certificates/bitwarden-desktop-key.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/appstore-app-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/appstore-app-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/appstore-installer-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/appstore-installer-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-app-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/devid-app-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-installer-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/devid-installer-cert.p12
|
||||
|
||||
az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/macdev-cert |
|
||||
jq -r .value | base64 -d > $HOME/certificates/macdev-cert.p12
|
||||
|
||||
- name: Set up keychain
|
||||
env:
|
||||
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
|
||||
DESKTOP_KEY_PASSWORD: ${{ secrets.DESKTOP_KEY_PASSWORD }}
|
||||
DEVID_CERT_PASSWORD: ${{ secrets.DEVID_CERT_PASSWORD }}
|
||||
APPSTORE_CERT_PASSWORD: ${{ secrets.APPSTORE_CERT_PASSWORD }}
|
||||
MACDEV_CERT_PASSWORD: ${{ secrets.MACDEV_CERT_PASSWORD }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
run: |
|
||||
security create-keychain -p $KEYCHAIN_PASSWORD build.keychain
|
||||
security default-keychain -s build.keychain
|
||||
security unlock-keychain -p $KEYCHAIN_PASSWORD build.keychain
|
||||
security set-keychain-settings -lut 1200 build.keychain
|
||||
security import "$HOME/secrets/bitwarden-desktop-key.p12" -k build.keychain -P $DESKTOP_KEY_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/bitwarden-desktop-key.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/devid-app-cert.p12" -k build.keychain -P $DEVID_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/devid-app-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/devid-installer-cert.p12" -k build.keychain -P $DEVID_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/devid-installer-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/appstore-app-cert.p12" -k build.keychain -P $APPSTORE_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/appstore-app-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/appstore-installer-cert.p12" -k build.keychain -P $APPSTORE_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/appstore-installer-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
security import "$HOME/secrets/macdev-cert.p12" -k build.keychain -P $MACDEV_CERT_PASSWORD \
|
||||
|
||||
security import "$HOME/certificates/macdev-cert.p12" -k build.keychain -P "" \
|
||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild
|
||||
|
||||
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $KEYCHAIN_PASSWORD build.keychain
|
||||
|
||||
- name: Set up provisioning profiles
|
||||
@ -833,7 +864,7 @@ jobs:
|
||||
|
||||
- name: Download artifact from hotfix-rc
|
||||
if: github.ref == 'refs/heads/hotfix-rc'
|
||||
uses: dawidd6/action-download-artifact@e7466d1a7587ed14867642c2ca74b5bcc1e19a2d # v3.0.0
|
||||
uses: dawidd6/action-download-artifact@71072fbb1229e1317f1a8de6b04206afb461bd67 # v3.1.2
|
||||
with:
|
||||
workflow: build-browser.yml
|
||||
workflow_conclusion: success
|
||||
@ -842,7 +873,7 @@ jobs:
|
||||
|
||||
- name: Download artifact from rc
|
||||
if: github.ref == 'refs/heads/rc'
|
||||
uses: dawidd6/action-download-artifact@e7466d1a7587ed14867642c2ca74b5bcc1e19a2d # v3.0.0
|
||||
uses: dawidd6/action-download-artifact@71072fbb1229e1317f1a8de6b04206afb461bd67 # v3.1.2
|
||||
with:
|
||||
workflow: build-browser.yml
|
||||
workflow_conclusion: success
|
||||
@ -851,7 +882,7 @@ jobs:
|
||||
|
||||
- name: Download artifact from main
|
||||
if: ${{ github.ref != 'refs/heads/rc' && github.ref != 'refs/heads/hotfix-rc' }}
|
||||
uses: dawidd6/action-download-artifact@e7466d1a7587ed14867642c2ca74b5bcc1e19a2d # v3.0.0
|
||||
uses: dawidd6/action-download-artifact@71072fbb1229e1317f1a8de6b04206afb461bd67 # v3.1.2
|
||||
with:
|
||||
workflow: build-browser.yml
|
||||
workflow_conclusion: success
|
||||
@ -922,7 +953,7 @@ jobs:
|
||||
cf-prod-account"
|
||||
|
||||
- name: Download all artifacts
|
||||
uses: actions/download-artifact@eaceaf801fd36c7dee90939fad912460b18a1ffe # v4.1.2
|
||||
uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4
|
||||
with:
|
||||
path: apps/desktop/artifacts
|
||||
|
||||
@ -961,7 +992,7 @@ jobs:
|
||||
|
||||
- name: Update deployment status to Success
|
||||
if: ${{ success() }}
|
||||
uses: chrnorm/deployment-status@2afb7d27101260f4a764219439564d954d10b5b0 # v2.0.1
|
||||
uses: chrnorm/deployment-status@9a72af4586197112e0491ea843682b5dc280d806 # v2.0.3
|
||||
with:
|
||||
token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
state: 'success'
|
||||
@ -969,7 +1000,7 @@ jobs:
|
||||
|
||||
- name: Update deployment status to Failure
|
||||
if: ${{ failure() }}
|
||||
uses: chrnorm/deployment-status@2afb7d27101260f4a764219439564d954d10b5b0 # v2.0.1
|
||||
uses: chrnorm/deployment-status@9a72af4586197112e0491ea843682b5dc280d806 # v2.0.3
|
||||
with:
|
||||
token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
state: 'failure'
|
||||
|
4
.github/workflows/release-desktop.yml
vendored
4
.github/workflows/release-desktop.yml
vendored
@ -231,7 +231,7 @@ jobs:
|
||||
|
||||
- name: Update deployment status to Success
|
||||
if: ${{ github.event.inputs.release_type != 'Dry Run' && success() }}
|
||||
uses: chrnorm/deployment-status@2afb7d27101260f4a764219439564d954d10b5b0 # v2.0.1
|
||||
uses: chrnorm/deployment-status@9a72af4586197112e0491ea843682b5dc280d806 # v2.0.3
|
||||
with:
|
||||
token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
state: 'success'
|
||||
@ -239,7 +239,7 @@ jobs:
|
||||
|
||||
- name: Update deployment status to Failure
|
||||
if: ${{ github.event.inputs.release_type != 'Dry Run' && failure() }}
|
||||
uses: chrnorm/deployment-status@2afb7d27101260f4a764219439564d954d10b5b0 # v2.0.1
|
||||
uses: chrnorm/deployment-status@9a72af4586197112e0491ea843682b5dc280d806 # v2.0.3
|
||||
with:
|
||||
token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
state: 'failure'
|
||||
|
6
.github/workflows/release-web.yml
vendored
6
.github/workflows/release-web.yml
vendored
@ -221,7 +221,7 @@ jobs:
|
||||
token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
initial-status: 'in_progress'
|
||||
environment-url: http://vault.bitwarden.com
|
||||
environment: 'Web Vault - Production'
|
||||
environment: 'Web Vault - US Production Cloud'
|
||||
description: 'Deployment ${{ needs.setup.outputs.release_version }} from branch ${{ github.ref_name }}'
|
||||
task: release
|
||||
|
||||
@ -268,7 +268,7 @@ jobs:
|
||||
|
||||
- name: Update deployment status to Success
|
||||
if: ${{ github.event.inputs.release_type != 'Dry Run' && success() }}
|
||||
uses: chrnorm/deployment-status@2afb7d27101260f4a764219439564d954d10b5b0 # v2.0.1
|
||||
uses: chrnorm/deployment-status@9a72af4586197112e0491ea843682b5dc280d806 # v2.0.3
|
||||
with:
|
||||
token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
environment-url: http://vault.bitwarden.com
|
||||
@ -277,7 +277,7 @@ jobs:
|
||||
|
||||
- name: Update deployment status to Failure
|
||||
if: ${{ github.event.inputs.release_type != 'Dry Run' && failure() }}
|
||||
uses: chrnorm/deployment-status@2afb7d27101260f4a764219439564d954d10b5b0 # v2.0.1
|
||||
uses: chrnorm/deployment-status@9a72af4586197112e0491ea843682b5dc280d806 # v2.0.3
|
||||
with:
|
||||
token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
environment-url: http://vault.bitwarden.com
|
||||
|
2
.github/workflows/test.yml
vendored
2
.github/workflows/test.yml
vendored
@ -63,7 +63,7 @@ jobs:
|
||||
fail-on-error: true
|
||||
|
||||
- name: Upload to codecov.io
|
||||
uses: codecov/codecov-action@e0b68c6749509c5f83f984dd99a76a1c1a231044 # v4.0.1
|
||||
uses: codecov/codecov-action@54bcd8715eee62d40e33596ef5e8f0f48dbbccab # v4.1.0
|
||||
env:
|
||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@bitwarden/browser",
|
||||
"version": "2024.2.2",
|
||||
"version": "2024.2.1",
|
||||
"scripts": {
|
||||
"build": "webpack",
|
||||
"build:mv3": "cross-env MANIFEST_VERSION=3 webpack",
|
||||
|
@ -494,10 +494,10 @@
|
||||
"message": "تم إنشاء حسابك الجديد! يمكنك الآن تسجيل الدخول."
|
||||
},
|
||||
"youSuccessfullyLoggedIn": {
|
||||
"message": "You successfully logged in"
|
||||
"message": "سجلتَ الدخول بنجاح"
|
||||
},
|
||||
"youMayCloseThisWindow": {
|
||||
"message": "You may close this window"
|
||||
"message": "يمكنك إغلاق هذه النافذة"
|
||||
},
|
||||
"masterPassSent": {
|
||||
"message": "لقد أرسلنا لك رسالة بريد إلكتروني تحتوي على تلميح كلمة المرور الرئيسية."
|
||||
@ -871,7 +871,7 @@
|
||||
"message": "خيارات تسجيل الدخول بخطوتين المملوكة لجهات اخرى مثل YubiKey و Duo."
|
||||
},
|
||||
"ppremiumSignUpReports": {
|
||||
"message": "نظافة كلمة المرور، صحة الحساب، وتقارير خرق البيانات للحفاظ على سلامة خزنتك."
|
||||
"message": "نظافة كلمة المرور، صحة الحساب، وتقارير تسريبات البيانات للحفاظ على سلامة خزنتك."
|
||||
},
|
||||
"ppremiumSignUpTotp": {
|
||||
"message": "مورد رمز التحقق (2FA) لتسجيل الدخول في خزنتك."
|
||||
@ -1367,7 +1367,7 @@
|
||||
"message": "تحقق مما إذا تم الكشف عن كلمة المرور."
|
||||
},
|
||||
"passwordExposed": {
|
||||
"message": "تم الكشف عن كلمة المرور هذه $VALUE$ مرّة (ات) في خروقات البيانات. يجب عليك تغييرها.",
|
||||
"message": "تم الكشف عن كلمة المرور هذه $VALUE$ مرّة(ات) في تسريبات البيانات. يجب عليك تغييرها.",
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"content": "$1",
|
||||
@ -1376,7 +1376,7 @@
|
||||
}
|
||||
},
|
||||
"passwordSafe": {
|
||||
"message": "لم يتم العثور على كلمة المرور هذه في أي عمليات اختراق معروفة للبيانات. من المفترض أن تكون آمنة للاستخدام."
|
||||
"message": "لم يتم العثور على كلمة المرور هذه في أي عمليات تسريبات للبيانات معروفة. من المفترض أن تكون آمنة للاستخدام."
|
||||
},
|
||||
"baseDomain": {
|
||||
"message": "النطاق الأساسي",
|
||||
@ -1712,22 +1712,22 @@
|
||||
"message": "فشل القياسات الحيوية"
|
||||
},
|
||||
"biometricsFailedDesc": {
|
||||
"message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support."
|
||||
"message": "لا يمكن إكمال القياسات الحيوية، فكر في استخدام كلمة مرور رئيسية أو تسجيل الخروج. إذا استمر ذلك، يرجى الاتصال بدعم Bitwarden."
|
||||
},
|
||||
"nativeMessaginPermissionErrorTitle": {
|
||||
"message": "Permission not provided"
|
||||
"message": "الإذن غير متوفر"
|
||||
},
|
||||
"nativeMessaginPermissionErrorDesc": {
|
||||
"message": "Without permission to communicate with the Bitwarden Desktop Application we cannot provide biometrics in the browser extension. Please try again."
|
||||
"message": "بدون إذن للتواصل مع تطبيق سطح المكتب Bitwarden لا يمكننا توفير القياسات الحيوية في ملحق المتصفح. الرجاء المحاولة مرة أخرى."
|
||||
},
|
||||
"nativeMessaginPermissionSidebarTitle": {
|
||||
"message": "Permission request error"
|
||||
"message": "خطأ في طلب الإذن"
|
||||
},
|
||||
"nativeMessaginPermissionSidebarDesc": {
|
||||
"message": "This action cannot be done in the sidebar, please retry the action in the popup or popout."
|
||||
"message": "لا يمكن القيام بهذا الإجراء في الشريط الجانبي، يرجى إعادة محاولة الإجراء في النافذة المنبثقة أو المنبثقة."
|
||||
},
|
||||
"personalOwnershipSubmitError": {
|
||||
"message": "Due to an Enterprise Policy, you are restricted from saving items to your personal vault. Change the Ownership option to an organization and choose from available collections."
|
||||
"message": "بسبب سياسة المؤسسة، يمنع عليك حفظ العناصر في خزانتك الشخصية. غيّر خيار الملكية إلى مؤسسة واختر من المجموعات المتاحة."
|
||||
},
|
||||
"personalOwnershipPolicyInEffect": {
|
||||
"message": "An organization policy is affecting your ownership options."
|
||||
@ -1766,10 +1766,10 @@
|
||||
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
|
||||
},
|
||||
"sendTypeText": {
|
||||
"message": "Text"
|
||||
"message": "نص"
|
||||
},
|
||||
"sendTypeFile": {
|
||||
"message": "File"
|
||||
"message": "ملف"
|
||||
},
|
||||
"allSends": {
|
||||
"message": "All Sends",
|
||||
@ -1810,10 +1810,10 @@
|
||||
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
|
||||
},
|
||||
"disabled": {
|
||||
"message": "Disabled"
|
||||
"message": "معطّل"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
"message": "هل أنت متأكد من أنك تريد إزالة كلمة المرور؟"
|
||||
},
|
||||
"deleteSend": {
|
||||
"message": "Delete Send",
|
||||
@ -1839,7 +1839,7 @@
|
||||
"message": "The file you want to send."
|
||||
},
|
||||
"deletionDate": {
|
||||
"message": "Deletion date"
|
||||
"message": "تاريخ الحذف"
|
||||
},
|
||||
"deletionDateDesc": {
|
||||
"message": "The Send will be permanently deleted on the specified date and time.",
|
||||
@ -1933,10 +1933,10 @@
|
||||
"message": "In order to choose a file using Safari, pop out to a new window by clicking this banner."
|
||||
},
|
||||
"sendFileCalloutHeader": {
|
||||
"message": "Before you start"
|
||||
"message": "قبل أن تبدأ"
|
||||
},
|
||||
"sendFirefoxCustomDatePopoutMessage1": {
|
||||
"message": "To use a calendar style date picker",
|
||||
"message": "لاستخدام منتقي التاريخ على نمط التقويم",
|
||||
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read '**To use a calendar style date picker ** click here to pop out your window.'"
|
||||
},
|
||||
"sendFirefoxCustomDatePopoutMessage2": {
|
||||
@ -1944,14 +1944,14 @@
|
||||
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'To use a calendar style date picker **click here** to pop out your window.'"
|
||||
},
|
||||
"sendFirefoxCustomDatePopoutMessage3": {
|
||||
"message": "to pop out your window.",
|
||||
"message": "أن يخرج من النافذة.",
|
||||
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'To use a calendar style date picker click here **to pop out your window.**'"
|
||||
},
|
||||
"expirationDateIsInvalid": {
|
||||
"message": "The expiration date provided is not valid."
|
||||
"message": "صلاحية تاريخ الانتهاء المقدّم غير صحيح."
|
||||
},
|
||||
"deletionDateIsInvalid": {
|
||||
"message": "The deletion date provided is not valid."
|
||||
"message": "صلاحية تاريخ الحذف المقدّم غير صحيح."
|
||||
},
|
||||
"expirationDateAndTimeRequired": {
|
||||
"message": "An expiration date and time are required."
|
||||
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Select folder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2013,7 +2017,7 @@
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
},
|
||||
"verificationRequired": {
|
||||
"message": "Verification required",
|
||||
"message": "التحقق مطلوب",
|
||||
"description": "Default title for the user verification dialog."
|
||||
},
|
||||
"hours": {
|
||||
@ -2247,55 +2251,55 @@
|
||||
"message": "New around here?"
|
||||
},
|
||||
"rememberEmail": {
|
||||
"message": "Remember email"
|
||||
"message": "تذكر البريد الإلكتروني"
|
||||
},
|
||||
"loginWithDevice": {
|
||||
"message": "Log in with device"
|
||||
"message": "تسجيل الدخول بالجهاز"
|
||||
},
|
||||
"loginWithDeviceEnabledInfo": {
|
||||
"message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?"
|
||||
"message": "يجب إعداد تسجيل الدخول بالجهاز في إعدادات تطبيق Bitwarden. هل تحتاج إلى خِيار آخر؟"
|
||||
},
|
||||
"fingerprintPhraseHeader": {
|
||||
"message": "Fingerprint phrase"
|
||||
"message": "عبارة بصمة الإصبع"
|
||||
},
|
||||
"fingerprintMatchInfo": {
|
||||
"message": "Please make sure your vault is unlocked and the Fingerprint phrase matches on the other device."
|
||||
"message": "الرجاء التأكد من أن الخزنة الخاصة بك غير مقفلة وأن عبارة بصمة الإصبع تتطابق على الجهاز الآخر."
|
||||
},
|
||||
"resendNotification": {
|
||||
"message": "Resend notification"
|
||||
"message": "إعادة إرسال الإشعار"
|
||||
},
|
||||
"viewAllLoginOptions": {
|
||||
"message": "View all log in options"
|
||||
"message": "عرض جميع خيارات تسجيل الدخول"
|
||||
},
|
||||
"notificationSentDevice": {
|
||||
"message": "A notification has been sent to your device."
|
||||
"message": "تم إرسال إشعار إلى جهازك."
|
||||
},
|
||||
"loginInitiated": {
|
||||
"message": "Login initiated"
|
||||
"message": "بَدْء تسجيل الدخول"
|
||||
},
|
||||
"exposedMasterPassword": {
|
||||
"message": "Exposed Master Password"
|
||||
"message": "كلمة المرور الرئيسية مكشوفة"
|
||||
},
|
||||
"exposedMasterPasswordDesc": {
|
||||
"message": "Password found in a data breach. Use a unique password to protect your account. Are you sure you want to use an exposed password?"
|
||||
"message": "كلمة المرور موجودة في تسريبات البيانات. استخدم كلمة مرور فريدة لحماية حسابك. هل أنت متأكد من أنك تريد استخدام كلمة مرور مكشوفة؟"
|
||||
},
|
||||
"weakAndExposedMasterPassword": {
|
||||
"message": "Weak and Exposed Master Password"
|
||||
"message": "كلمة المرور الرئيسية ضعيفة ومكشوفة"
|
||||
},
|
||||
"weakAndBreachedMasterPasswordDesc": {
|
||||
"message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?"
|
||||
"message": "تم تحديد كلمة مرور ضعيفة و موجودة في تسريبات البيانات. استخدم كلمة مرور قوية وفريدة لحماية حسابك. هل أنت متأكد من أنك تريد استخدام كلمة المرور هذه؟"
|
||||
},
|
||||
"checkForBreaches": {
|
||||
"message": "Check known data breaches for this password"
|
||||
"message": "تحقق من تسريبات البيانات المعروفة لكلمة المرور هذه"
|
||||
},
|
||||
"important": {
|
||||
"message": "Important:"
|
||||
"message": "مهم:"
|
||||
},
|
||||
"masterPasswordHint": {
|
||||
"message": "Your master password cannot be recovered if you forget it!"
|
||||
"message": "لا يمكن استعادة كلمة المرور الرئيسية إذا نسيتها!"
|
||||
},
|
||||
"characterMinimum": {
|
||||
"message": "$LENGTH$ character minimum",
|
||||
"message": "$LENGTH$ حرف أدنى",
|
||||
"placeholders": {
|
||||
"length": {
|
||||
"content": "$1",
|
||||
@ -2304,13 +2308,13 @@
|
||||
}
|
||||
},
|
||||
"autofillPageLoadPolicyActivated": {
|
||||
"message": "Your organization policies have turned on auto-fill on page load."
|
||||
"message": "سياسات مؤسستك شغلت الملء التلقائي في تحميل الصفحة."
|
||||
},
|
||||
"howToAutofill": {
|
||||
"message": "How to auto-fill"
|
||||
"message": "كيفية الملء التلقائي"
|
||||
},
|
||||
"autofillSelectInfoWithCommand": {
|
||||
"message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.",
|
||||
"message": "حدد عنصر من هذه الشاشة، واستخدام الاختصار $COMMAND$، أو استكشاف خيارات أخرى في الإعدادات.",
|
||||
"placeholders": {
|
||||
"command": {
|
||||
"content": "$1",
|
||||
@ -2322,13 +2326,13 @@
|
||||
"message": "Select an item from this screen, or explore other options in settings."
|
||||
},
|
||||
"gotIt": {
|
||||
"message": "Got it"
|
||||
"message": "فهمت"
|
||||
},
|
||||
"autofillSettings": {
|
||||
"message": "Auto-fill settings"
|
||||
"message": "إعدادات الملء التلقائي"
|
||||
},
|
||||
"autofillShortcut": {
|
||||
"message": "Auto-fill keyboard shortcut"
|
||||
"message": "ملء تلقائي لاختصار لوحة المفاتيح"
|
||||
},
|
||||
"autofillShortcutNotSet": {
|
||||
"message": "The auto-fill shortcut is not set. Change this in the browser's settings."
|
||||
@ -2352,34 +2356,34 @@
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
"message": "جارٍ تسجيل الدخول على"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
"message": "تُفتح في نافذة جديدة"
|
||||
},
|
||||
"deviceApprovalRequired": {
|
||||
"message": "Device approval required. Select an approval option below:"
|
||||
"message": "موافقة الجهاز مطلوبة. حدّد خيار الموافقة أدناه:"
|
||||
},
|
||||
"rememberThisDevice": {
|
||||
"message": "Remember this device"
|
||||
"message": "تذكر هذا الجهاز"
|
||||
},
|
||||
"uncheckIfPublicDevice": {
|
||||
"message": "Uncheck if using a public device"
|
||||
"message": "إلغاء تحديد عند استخدام جهاز عام"
|
||||
},
|
||||
"approveFromYourOtherDevice": {
|
||||
"message": "Approve from your other device"
|
||||
"message": "الموافقة من جهازك الآخر"
|
||||
},
|
||||
"requestAdminApproval": {
|
||||
"message": "Request admin approval"
|
||||
"message": "طلب موافقة المدير"
|
||||
},
|
||||
"approveWithMasterPassword": {
|
||||
"message": "Approve with master password"
|
||||
"message": "الموافقة بواسطة كلمة المرور الرئيسية"
|
||||
},
|
||||
"ssoIdentifierRequired": {
|
||||
"message": "Organization SSO identifier is required."
|
||||
},
|
||||
"eu": {
|
||||
"message": "EU",
|
||||
"message": "الاتحاد الأوروبي",
|
||||
"description": "European Union"
|
||||
},
|
||||
"usDomain": {
|
||||
@ -2526,126 +2530,126 @@
|
||||
"description": "Toggling an expand/collapse state."
|
||||
},
|
||||
"filelessImport": {
|
||||
"message": "Import your data to Bitwarden?",
|
||||
"message": "استيراد بياناتك إلى Bitwarden؟",
|
||||
"description": "Default notification title for triggering a fileless import."
|
||||
},
|
||||
"lpFilelessImport": {
|
||||
"message": "Protect your LastPass data and import to Bitwarden?",
|
||||
"message": "حماية بياناتك الأخيرة واستيرادك إلى Bitwarden؟",
|
||||
"description": "LastPass specific notification title for triggering a fileless import."
|
||||
},
|
||||
"lpCancelFilelessImport": {
|
||||
"message": "Save as unencrypted file",
|
||||
"message": "حفظ كملف غير مشفر",
|
||||
"description": "LastPass specific notification button text for cancelling a fileless import."
|
||||
},
|
||||
"startFilelessImport": {
|
||||
"message": "Import to Bitwarden",
|
||||
"message": "استيراد إلى Bitwarden",
|
||||
"description": "Notification button text for starting a fileless import."
|
||||
},
|
||||
"importing": {
|
||||
"message": "Importing...",
|
||||
"message": "جارِ الاستيراد...",
|
||||
"description": "Notification message for when an import is in progress."
|
||||
},
|
||||
"dataSuccessfullyImported": {
|
||||
"message": "Data successfully imported!",
|
||||
"message": "لقد تم استيراد البيانات بنجاح!",
|
||||
"description": "Notification message for when an import has completed successfully."
|
||||
},
|
||||
"dataImportFailed": {
|
||||
"message": "Error importing. Check console for details.",
|
||||
"message": "خطأ في الاستيراد. تحقق من وحدة التحكم للحصول على التفاصيل.",
|
||||
"description": "Notification message for when an import has failed."
|
||||
},
|
||||
"importNetworkError": {
|
||||
"message": "Network error encountered during import.",
|
||||
"message": "تم مواجهة خطأ في الشبكة أثناء الاستيراد.",
|
||||
"description": "Notification message for when an import has failed due to a network error."
|
||||
},
|
||||
"aliasDomain": {
|
||||
"message": "Alias domain"
|
||||
"message": "الاسم البديل للنطاق"
|
||||
},
|
||||
"passwordRepromptDisabledAutofillOnPageLoad": {
|
||||
"message": "Items with master password re-prompt cannot be auto-filled on page load. Auto-fill on page load turned off.",
|
||||
"message": "العناصر مع إعادة طلب كلمة المرور الرئيسية لا يمكن ملئها تلقائيًا عند تحميل الصفحة. التعبئة التلقائية عند تحميل الصفحة.",
|
||||
"description": "Toast message for describing that master password re-prompt cannot be auto-filled on page load."
|
||||
},
|
||||
"autofillOnPageLoadSetToDefault": {
|
||||
"message": "Auto-fill on page load set to use default setting.",
|
||||
"message": "ملء تلقائي عند تعيين تحميل الصفحة لاستخدام الإعداد الافتراضي.",
|
||||
"description": "Toast message for informing the user that auto-fill on page load has been set to the default setting."
|
||||
},
|
||||
"turnOffMasterPasswordPromptToEditField": {
|
||||
"message": "Turn off master password re-prompt to edit this field",
|
||||
"message": "إيقاف تشغيل كلمة المرور الرئيسية مرة أخرى لتحرير هذا الحقل",
|
||||
"description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item."
|
||||
},
|
||||
"skipToContent": {
|
||||
"message": "Skip to content"
|
||||
"message": "تخطي إلى المحتوى"
|
||||
},
|
||||
"bitwardenOverlayButton": {
|
||||
"message": "Bitwarden auto-fill menu button",
|
||||
"message": "زر قائمة الملء التلقائي Bitwarden",
|
||||
"description": "Page title for the iframe containing the overlay button"
|
||||
},
|
||||
"toggleBitwardenVaultOverlay": {
|
||||
"message": "Toggle Bitwarden auto-fill menu",
|
||||
"message": "تبديل قائمة الملء التلقائي لـ Bitwarden",
|
||||
"description": "Screen reader and tool tip label for the overlay button"
|
||||
},
|
||||
"bitwardenVault": {
|
||||
"message": "Bitwarden auto-fill menu",
|
||||
"message": "قائمة الملء التلقائي Bitwarden",
|
||||
"description": "Page title in overlay"
|
||||
},
|
||||
"unlockYourAccountToViewMatchingLogins": {
|
||||
"message": "Unlock your account to view matching logins",
|
||||
"message": "افتح حسابك لعرض تسجيلات الدخول المطابقة",
|
||||
"description": "Text to display in overlay when the account is locked."
|
||||
},
|
||||
"unlockAccount": {
|
||||
"message": "Unlock account",
|
||||
"message": "فتح الحساب",
|
||||
"description": "Button text to display in overlay when the account is locked."
|
||||
},
|
||||
"fillCredentialsFor": {
|
||||
"message": "Fill credentials for",
|
||||
"message": "ملء بيانات الاعتماد لـ",
|
||||
"description": "Screen reader text for when overlay item is in focused"
|
||||
},
|
||||
"partialUsername": {
|
||||
"message": "Partial username",
|
||||
"message": "اسم المستخدم الجزئي",
|
||||
"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": {
|
||||
"message": "No items to show",
|
||||
"message": "لا توجد عناصر لإظهارها",
|
||||
"description": "Text to show in overlay if there are no matching items"
|
||||
},
|
||||
"newItem": {
|
||||
"message": "New item",
|
||||
"message": "عنصر جديد",
|
||||
"description": "Button text to display in overlay when there are no matching items"
|
||||
},
|
||||
"addNewVaultItem": {
|
||||
"message": "Add new vault item",
|
||||
"message": "إضافة عنصر مخزن جديد",
|
||||
"description": "Screen reader text (aria-label) for new item button in overlay"
|
||||
},
|
||||
"bitwardenOverlayMenuAvailable": {
|
||||
"message": "Bitwarden auto-fill menu available. Press the down arrow key to select.",
|
||||
"message": "تتوفر قائمة الملء التلقائي لBitwarden. اضغط على مفتاح السهم لأسفل للتحديد.",
|
||||
"description": "Screen reader text for announcing when the overlay opens on the page"
|
||||
},
|
||||
"turnOn": {
|
||||
"message": "Turn on"
|
||||
"message": "فعّل"
|
||||
},
|
||||
"ignore": {
|
||||
"message": "Ignore"
|
||||
"message": "تجاهل"
|
||||
},
|
||||
"importData": {
|
||||
"message": "Import data",
|
||||
"message": "استيراد البيانات",
|
||||
"description": "Used for the header of the import dialog, the import button and within the file-password-prompt"
|
||||
},
|
||||
"importError": {
|
||||
"message": "Import error"
|
||||
"message": "خطأ في الاستيراد"
|
||||
},
|
||||
"importErrorDesc": {
|
||||
"message": "There was a problem with the data you tried to import. Please resolve the errors listed below in your source file and try again."
|
||||
"message": "حدثت مشكلة في البيانات التي حاولت استيرادها. الرجاء حل الأخطاء المدرجة أدناه في الملف المصدر الخاص بك وحاول مرة أخرى."
|
||||
},
|
||||
"resolveTheErrorsBelowAndTryAgain": {
|
||||
"message": "Resolve the errors below and try again."
|
||||
"message": "حِل الأخطاء أدناه ثم حاول مرة أخرى."
|
||||
},
|
||||
"description": {
|
||||
"message": "Description"
|
||||
"message": "الوصف"
|
||||
},
|
||||
"importSuccess": {
|
||||
"message": "Data successfully imported"
|
||||
"message": "تم استيراد البيانات بنجاح"
|
||||
},
|
||||
"importSuccessNumberOfItems": {
|
||||
"message": "A total of $AMOUNT$ items were imported.",
|
||||
"message": "تم استيراد مجموع العناصر $AMOUNT$.",
|
||||
"placeholders": {
|
||||
"amount": {
|
||||
"content": "$1",
|
||||
@ -2654,46 +2658,46 @@
|
||||
}
|
||||
},
|
||||
"tryAgain": {
|
||||
"message": "Try again"
|
||||
"message": "حاول مجددًا"
|
||||
},
|
||||
"verificationRequiredForActionSetPinToContinue": {
|
||||
"message": "Verification required for this action. Set a PIN to continue."
|
||||
"message": "التحقق مطلوب لهذا الإجراء. عيّن رمز PIN للمتابعة."
|
||||
},
|
||||
"setPin": {
|
||||
"message": "Set PIN"
|
||||
"message": "عيّن PIN"
|
||||
},
|
||||
"verifyWithBiometrics": {
|
||||
"message": "Verify with biometrics"
|
||||
"message": "التحقق بواسطة القياسات الحيوية"
|
||||
},
|
||||
"awaitingConfirmation": {
|
||||
"message": "Awaiting confirmation"
|
||||
"message": "في انتظار تأكيد"
|
||||
},
|
||||
"couldNotCompleteBiometrics": {
|
||||
"message": "Could not complete biometrics."
|
||||
"message": "لا يمكن إكمال القياسات الحيوية."
|
||||
},
|
||||
"needADifferentMethod": {
|
||||
"message": "Need a different method?"
|
||||
"message": "هل تحتاج إلى طريقة مختلفة؟"
|
||||
},
|
||||
"useMasterPassword": {
|
||||
"message": "Use master password"
|
||||
"message": "استخدام كلمة المرور الرئيسية"
|
||||
},
|
||||
"usePin": {
|
||||
"message": "Use PIN"
|
||||
"message": "استخدم PIN"
|
||||
},
|
||||
"useBiometrics": {
|
||||
"message": "Use biometrics"
|
||||
"message": "استخدم السياقات الحيوية"
|
||||
},
|
||||
"enterVerificationCodeSentToEmail": {
|
||||
"message": "Enter the verification code that was sent to your email."
|
||||
"message": "أدخِل رمز التحقق الذي أرسل إلى بريدك الإلكتروني."
|
||||
},
|
||||
"resendCode": {
|
||||
"message": "Resend code"
|
||||
"message": "أعِد إرسال الرمز"
|
||||
},
|
||||
"total": {
|
||||
"message": "Total"
|
||||
"message": "المجموع"
|
||||
},
|
||||
"importWarning": {
|
||||
"message": "You are importing data to $ORGANIZATION$. Your data may be shared with members of this organization. Do you want to proceed?",
|
||||
"message": "أنت تستورد البيانات إلى $ORGANIZATION$. قد يتم مشاركة بياناتك مع أعضاء هذه المؤسسة. هل تريد المتابعة؟",
|
||||
"placeholders": {
|
||||
"organization": {
|
||||
"content": "$1",
|
||||
@ -2702,46 +2706,46 @@
|
||||
}
|
||||
},
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
"message": "قم بتشغيل Duo واتبع الخطوات لإنهاء تسجيل الدخول."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
"duoRequiredForAccount": {
|
||||
"message": "تسجيل الدخول لـ Duo من خطوتين مطلوب لحسابك."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "انبثق الامتداد لإكمال تسجيل الدخول."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
"message": "تمديد منبثق"
|
||||
},
|
||||
"launchDuo": {
|
||||
"message": "Launch Duo"
|
||||
"message": "تشغيل Duo"
|
||||
},
|
||||
"importFormatError": {
|
||||
"message": "Data is not formatted correctly. Please check your import file and try again."
|
||||
"message": "لم يتم تنسيق البيانات بشكل صحيح. الرجاء التحقق من ملف الاستيراد الخاص بك وحاول مرة أخرى."
|
||||
},
|
||||
"importNothingError": {
|
||||
"message": "Nothing was imported."
|
||||
"message": "لم يتم استيراد أي شيء."
|
||||
},
|
||||
"importEncKeyError": {
|
||||
"message": "Error decrypting the exported file. Your encryption key does not match the encryption key used export the data."
|
||||
"message": "خطأ في فك تشفير الملف المصدر. مفتاح التشفير الخاص بك لا يتطابق مع مفتاح التشفير المستخدم عند تصدير البيانات."
|
||||
},
|
||||
"invalidFilePassword": {
|
||||
"message": "Invalid file password, please use the password you entered when you created the export file."
|
||||
"message": "كلمة مرور الملف غير صالحة، الرجاء استخدام كلمة المرور التي أدخلتها عند إنشاء ملف التصدير."
|
||||
},
|
||||
"importDestination": {
|
||||
"message": "Import destination"
|
||||
"message": "وجهة الاستيراد"
|
||||
},
|
||||
"learnAboutImportOptions": {
|
||||
"message": "Learn about your import options"
|
||||
"message": "تعرف على خيارات الاستيراد الخاصة بك"
|
||||
},
|
||||
"selectImportFolder": {
|
||||
"message": "Select a folder"
|
||||
"message": "اختر مجلدًا"
|
||||
},
|
||||
"selectImportCollection": {
|
||||
"message": "Select a collection"
|
||||
"message": "اختر مجموعة"
|
||||
},
|
||||
"importTargetHint": {
|
||||
"message": "Select this option if you want the imported file contents moved to a $DESTINATION$",
|
||||
"message": "حدد هذا الخيار إذا كنت تريد نقل محتويات الملف المستورد إلى $DESTINATION$",
|
||||
"description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.",
|
||||
"placeholders": {
|
||||
"destination": {
|
||||
@ -2751,25 +2755,25 @@
|
||||
}
|
||||
},
|
||||
"importUnassignedItemsError": {
|
||||
"message": "File contains unassigned items."
|
||||
"message": "الملف يحتوي على عناصر غير مسندة."
|
||||
},
|
||||
"selectFormat": {
|
||||
"message": "Select the format of the import file"
|
||||
"message": "حدد تنسيق ملف الاستيراد"
|
||||
},
|
||||
"selectImportFile": {
|
||||
"message": "Select the import file"
|
||||
"message": "حدد ملف الاستيراد"
|
||||
},
|
||||
"chooseFile": {
|
||||
"message": "Choose File"
|
||||
"message": "اختر ملف"
|
||||
},
|
||||
"noFileChosen": {
|
||||
"message": "No file chosen"
|
||||
"message": "لم يتم اختيار ملف"
|
||||
},
|
||||
"orCopyPasteFileContents": {
|
||||
"message": "or copy/paste the import file contents"
|
||||
"message": "أو انسخ/الصق محتويات ملف الاستيراد"
|
||||
},
|
||||
"instructionsFor": {
|
||||
"message": "$NAME$ Instructions",
|
||||
"message": "تعليمات $NAME$",
|
||||
"description": "The title for the import tool instructions.",
|
||||
"placeholders": {
|
||||
"name": {
|
||||
@ -2779,19 +2783,19 @@
|
||||
}
|
||||
},
|
||||
"confirmVaultImport": {
|
||||
"message": "Confirm vault import"
|
||||
"message": "تأكيد تصدير الخزنة"
|
||||
},
|
||||
"confirmVaultImportDesc": {
|
||||
"message": "This file is password-protected. Please enter the file password to import data."
|
||||
"message": "هذا الملف محمي بكلمة مرور. الرجاء إدخال كلمة مرور الملف لاستيراد البيانات."
|
||||
},
|
||||
"confirmFilePassword": {
|
||||
"message": "Confirm file password"
|
||||
"message": "تأكيد كلمة مرور الملف"
|
||||
},
|
||||
"typePasskey": {
|
||||
"message": "Passkey"
|
||||
},
|
||||
"passkeyNotCopied": {
|
||||
"message": "Passkey will not be copied"
|
||||
"message": "لن يتم نسخ Passkey"
|
||||
},
|
||||
"passkeyNotCopiedAlert": {
|
||||
"message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?"
|
||||
@ -2812,7 +2816,7 @@
|
||||
"message": "You do not have a matching login for this site."
|
||||
},
|
||||
"confirm": {
|
||||
"message": "Confirm"
|
||||
"message": "تأكيد"
|
||||
},
|
||||
"savePasskey": {
|
||||
"message": "Save passkey"
|
||||
@ -2848,13 +2852,13 @@
|
||||
"message": "Incorrect username or password"
|
||||
},
|
||||
"incorrectPassword": {
|
||||
"message": "Incorrect password"
|
||||
"message": "كلمة مرور غير صحيحة"
|
||||
},
|
||||
"incorrectCode": {
|
||||
"message": "Incorrect code"
|
||||
"message": "رمز غير صحيح"
|
||||
},
|
||||
"incorrectPin": {
|
||||
"message": "Incorrect PIN"
|
||||
"message": "رمز PIN غير صحيح"
|
||||
},
|
||||
"multifactorAuthenticationFailed": {
|
||||
"message": "Multifactor authentication failed"
|
||||
@ -2863,10 +2867,10 @@
|
||||
"message": "Include shared folders"
|
||||
},
|
||||
"lastPassEmail": {
|
||||
"message": "LastPass Email"
|
||||
"message": "بريد LastPass الإلكتروني"
|
||||
},
|
||||
"importingYourAccount": {
|
||||
"message": "Importing your account..."
|
||||
"message": "جارِ استيراد حسابك..."
|
||||
},
|
||||
"lastPassMFARequired": {
|
||||
"message": "LastPass multifactor authentication required"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -494,10 +494,10 @@
|
||||
"message": "Yeni hesabınız yaradıldı! İndi giriş edə bilərsiniz."
|
||||
},
|
||||
"youSuccessfullyLoggedIn": {
|
||||
"message": "You successfully logged in"
|
||||
"message": "Uğurla giriş etdiniz"
|
||||
},
|
||||
"youMayCloseThisWindow": {
|
||||
"message": "You may close this window"
|
||||
"message": "Bu pəncərəni bağlaya bilərsiniz"
|
||||
},
|
||||
"masterPassSent": {
|
||||
"message": "Sizə ana parol ipucunuz olan bir e-poçt göndərdik."
|
||||
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Qovluq seçin..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "Heç bir qovluq tapılmadı",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Təşkilatınızın icazələri güncəlləndi və bir ana parol ayarlamağınızı tələb edir.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2013,7 +2017,7 @@
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
},
|
||||
"verificationRequired": {
|
||||
"message": "Verification required",
|
||||
"message": "Doğrulama tələb olunur",
|
||||
"description": "Default title for the user verification dialog."
|
||||
},
|
||||
"hours": {
|
||||
@ -2654,40 +2658,40 @@
|
||||
}
|
||||
},
|
||||
"tryAgain": {
|
||||
"message": "Try again"
|
||||
"message": "Yenidən sına"
|
||||
},
|
||||
"verificationRequiredForActionSetPinToContinue": {
|
||||
"message": "Verification required for this action. Set a PIN to continue."
|
||||
"message": "Bu əməliyyat üçün doğrulama tələb olunur. Davam etmək üçün bir PIN təyin edin."
|
||||
},
|
||||
"setPin": {
|
||||
"message": "Set PIN"
|
||||
"message": "PIN təyin et"
|
||||
},
|
||||
"verifyWithBiometrics": {
|
||||
"message": "Verify with biometrics"
|
||||
"message": "Biometriklə doğrula"
|
||||
},
|
||||
"awaitingConfirmation": {
|
||||
"message": "Awaiting confirmation"
|
||||
"message": "Təsdiq gözlənilir"
|
||||
},
|
||||
"couldNotCompleteBiometrics": {
|
||||
"message": "Could not complete biometrics."
|
||||
"message": "Biometrik tamamlana bilmədi."
|
||||
},
|
||||
"needADifferentMethod": {
|
||||
"message": "Need a different method?"
|
||||
"message": "Fərqli bir üsul lazımdır?"
|
||||
},
|
||||
"useMasterPassword": {
|
||||
"message": "Use master password"
|
||||
"message": "Ana parolu istifadə et"
|
||||
},
|
||||
"usePin": {
|
||||
"message": "Use PIN"
|
||||
"message": "PIN-i istifadə et"
|
||||
},
|
||||
"useBiometrics": {
|
||||
"message": "Use biometrics"
|
||||
"message": "Biometrik istifadə et"
|
||||
},
|
||||
"enterVerificationCodeSentToEmail": {
|
||||
"message": "Enter the verification code that was sent to your email."
|
||||
"message": "E-poçtunuza göndərilmiş doğrulama kodunu daxil edin."
|
||||
},
|
||||
"resendCode": {
|
||||
"message": "Resend code"
|
||||
"message": "Kodu təkrar göndər"
|
||||
},
|
||||
"total": {
|
||||
"message": "Cəmi"
|
||||
@ -2702,19 +2706,19 @@
|
||||
}
|
||||
},
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
"message": "Duo-nu başladın və giriş prosesini tamamlamaq üçün addımları izləyin."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Hesabınız üçün Duo iki addımlı giriş tələb olunur."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
"message": "Popout uzantısı"
|
||||
},
|
||||
"launchDuo": {
|
||||
"message": "Launch Duo"
|
||||
"message": "Duo-nu başlat"
|
||||
},
|
||||
"importFormatError": {
|
||||
"message": "Data doğru format edilməyib. Lütfən daxilə köçürmə faylınızı yoxlayıb yenidən sınayın."
|
||||
@ -2848,13 +2852,13 @@
|
||||
"message": "Yanlış istifadəçi adı və ya parol"
|
||||
},
|
||||
"incorrectPassword": {
|
||||
"message": "Incorrect password"
|
||||
"message": "Yanlış parol"
|
||||
},
|
||||
"incorrectCode": {
|
||||
"message": "Incorrect code"
|
||||
"message": "Yanlış kod"
|
||||
},
|
||||
"incorrectPin": {
|
||||
"message": "Incorrect PIN"
|
||||
"message": "Yanlış PIN"
|
||||
},
|
||||
"multifactorAuthenticationFailed": {
|
||||
"message": "Çox faktorlu kimlik doğrulama uğursuz oldu"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Bu seçimin yox sayılması, \"Bitwarden\"in və brauzerinizin avto-doldurma menyuları arasında ziddiyyətlərə səbəb ola bilər.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "Bu əməliyyat, Bitwarden uzantısını yenidən başladacaq. Bu seçimin yox sayılması, \"Bitwarden\"in və brauzerinizin avto-doldurma menyuları arasında ziddiyyətlərə səbəb ola bilər.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "\"Bitwarden\"i ilkin parol meneceriniz olaraq təyin edin",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "İlkin olaraq təyin et",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Kimlik məlumatları uğurla saxlanıldı!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Kimlik məlumatları uğurla güncəlləndi!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Kimlik məlumatlarını saxlama xətası. Detallar üçün konsolu yoxlayın.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Выбраць папку..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -494,10 +494,10 @@
|
||||
"message": "Абонаментът ви бе създаден. Вече можете да се впишете."
|
||||
},
|
||||
"youSuccessfullyLoggedIn": {
|
||||
"message": "You successfully logged in"
|
||||
"message": "Вписахте се успешно"
|
||||
},
|
||||
"youMayCloseThisWindow": {
|
||||
"message": "You may close this window"
|
||||
"message": "Може да затворите този прозорец"
|
||||
},
|
||||
"masterPassSent": {
|
||||
"message": "Изпратихме ви писмо с подсказка за главната ви парола."
|
||||
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Избиране на папка..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "Няма намерени папки",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Правата Ви в организацията бяха променени, необходимо е да зададете главна парола.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Стартирайте DUO и следвайте инструкциите, за да завършите вписването."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"message": "Вашата регистрация изисква двустепенно удостоверяване чрез DUO."
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Вашата регистрация изисква двустепенно удостоверяване чрез Duo."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Отворете разширението в нов прозорец, за да завършите вписването"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Отворете разширението в изскачащ прозорец, за да завършите вписването."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Отваряне на разширението в нов прозорец"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ако пренебрегнете тази настройка, може да има конфликт между менюто за автоматично попълване на Битуорден и това на браузъра.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "Това действие ще рестартира добавката на Битуорден. Ако пренебрегнете тази настройка, може да има конфликт между менюто за автоматично попълване на Битуорден и това на браузъра.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Направете Битуорден своя управител на пароли по подразбиране",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Задаване по подразбиране",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Идентификационните данни са запазени успешно!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Идентификационните данни са променени успешно!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Грешка при запазването на идентификационните данни. Вижте конзолата за подробности.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Select folder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Select folder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Seleccioneu la carpeta..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No s'ha trobat cap carpeta",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Els permisos de la vostra organització s'han actualitzat, cal que establiu una contrasenya mestra.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Inicieu DUO i seguiu els passos per finalitzar la sessió."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Es requereix l'inici de sessió en dos passos de DUO al vostre compte."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Obriu l'extensió en una finestra nova per completar l'inici de sessió"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Desplega l'extensió per completar l'inici de sessió."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Extensió emergent"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Si ignoreu aquesta opció pot provocar conflictes entre el menú d'emplenament automàtic de Bitwarden i el del navegador.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "Aquesta acció reiniciarà l'extensió Bitwarden. Si ignoreu aquesta opció pot provocar conflictes entre el menú d'emplenament automàtic de Bitwarden i el del vostre navegador.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Feu que Bitwarden siga el vostre gestor de contrasenyes predeterminat",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Estableix per defecte",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Les credencials s'han guardat correctament!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Les credencials s'han actualitzat correctament!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "S'ha produït un error en guardar les credencials. Consulteu la consola per obtenir més informació.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Vyberte složku..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "Nebyly nalezeny žádné složky",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Oprávnění Vaší organizace byla aktualizována. To vyžaduje nastavení hlavního hesla.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Spusťte DUO a pro dokončení přihlášení postupujte podle kroků."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Pro Váš účet je vyžadováno dvoufázové přihlášení DUO."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Pro dokončení přihlášení otevřete rozšíření v novém okně"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Pro dokončení přihlášení použijte vyskakovací okno rozšíření."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Zobrazit okno s doplňkem"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignorování této volby může způsobit konflikty mezi nabídkou automatického vyplňování Bitwardenu a Vaším prohlížečem.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "Tato akce restartuje rozšíření Bitwardenu. Ignorování této volby může způsobit konflikty mezi nabídkou automatického vyplňování Bitwardenu a prohlížečem.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Nastavit Bitwarden jako výchozí správce hesel",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Nastavit jako výchozí",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Pověření byla úspěšně uložena!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Pověření byla úspěšně aktualizována!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Chyba při ukládání přihlašovacích údajů. Podrobnosti naleznete v konzoli.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -387,7 +387,7 @@
|
||||
"message": "Gwirio'ch hunaniaeth"
|
||||
},
|
||||
"yourVaultIsLocked": {
|
||||
"message": "Mae eich cell dan glo. Gwiriwch eich hunaniaeth i barhau."
|
||||
"message": "Mae eich cell ar glo. Gwiriwch eich hunaniaeth i barhau."
|
||||
},
|
||||
"unlock": {
|
||||
"message": "Datgloi"
|
||||
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Dewis ffolder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -494,10 +494,10 @@
|
||||
"message": "Din nye konto er oprettet! Du kan nu logge ind."
|
||||
},
|
||||
"youSuccessfullyLoggedIn": {
|
||||
"message": "You successfully logged in"
|
||||
"message": "Du er nu logget ind"
|
||||
},
|
||||
"youMayCloseThisWindow": {
|
||||
"message": "You may close this window"
|
||||
"message": "Dette vindue kan nu lukkes"
|
||||
},
|
||||
"masterPassSent": {
|
||||
"message": "Vi har sendt dig en e-mail med dit hovedadgangskodetip."
|
||||
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Vælg mappe..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "Ingen mapper fundet",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Organisationstilladelserne er blevet opdateret, og der kræves nu oprettelse af en hovedadgangskode.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,14 +2708,14 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Start DUO og følg trinene for at fuldføre indlogningen."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"message": "DUO totrins indlogning kræves for kontoen."
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo-totrinsindlogning kræves for kontoen."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Åbn udvidelsen i et nyt vindue for at fuldføre indlogning"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Pop udvidelsen ud for at fuldføre indlogning."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
"message": "Pop ud-udvidelse"
|
||||
},
|
||||
"launchDuo": {
|
||||
"message": "Start DUO"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoreres denne indstilling, kan det forårsage konflikter mellem Bitwardens autoudfyld-menu og webbrowsere.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "Denne handling vil genstarte Bitwarden-udvidelsen. Ignoreres denne indstilling, kan det forårsage konflikter mellem Bitwardens autoudfyld-menu og webbrowsere.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Lad Bitwarden håndtere adgangskoder som standard",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Gør til standard",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Legitimationsoplysninger er gemt!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Legitimationsoplysninger er opdateret!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Fejl under import. Tjek konsollen for detaljer.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -494,10 +494,10 @@
|
||||
"message": "Dein neues Konto wurde erstellt! Du kannst dich jetzt anmelden."
|
||||
},
|
||||
"youSuccessfullyLoggedIn": {
|
||||
"message": "You successfully logged in"
|
||||
"message": "Du hast dich erfolgreich angemeldet."
|
||||
},
|
||||
"youMayCloseThisWindow": {
|
||||
"message": "You may close this window"
|
||||
"message": "Du kannst dieses Fenster schließen."
|
||||
},
|
||||
"masterPassSent": {
|
||||
"message": "Wir haben dir eine E-Mail mit dem Master-Passwort-Hinweis geschickt."
|
||||
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Ordner auswählen..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "Keine Ordner gefunden",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Deine Organisationsberechtigungen wurden aktualisiert und verlangen, dass du ein Master-Passwort festlegen musst.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Starte DUO und folge den Schritten, um die Anmeldung zu abzuschließen."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"message": "Für dein Konto ist die DUO Zwei-Faktor-Authentifizierung erforderlich."
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Öffne die Erweiterung in einem neuen Fenster, um die Anmeldung abzuschließen"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout-Erweiterung"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Das Ignorieren dieser Option kann zu Konflikten zwischen dem Bitwarden Auto-Ausfüllen Menü und dem Browser führen.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "Diese Aktion wird die Bitwarden-Erweiterung neu starten. Wenn diese Option ignoriert wird, kann dies zu Konflikten zwischen dem Bitwarden Auto-Ausfüllen Menü und dem Browser führen.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Bitwarden zum Standard-Passwort-Manager machen",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Als Standard festlegen",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Zugangsdaten erfolgreich gespeichert!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Zugangsdaten erfolgreich aktualisiert!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Fehler beim Speichern der Zugangsdaten. Details in der Konsole.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Επιλέξτε φάκελο..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2542,8 +2542,8 @@
|
||||
"description": "LastPass specific notification button text for cancelling a fileless import."
|
||||
},
|
||||
"startFilelessImport": {
|
||||
"message": "Import to Bitwarden",
|
||||
"description": "Notification button text for starting a fileless import."
|
||||
"message": "Import to Bitwarden",
|
||||
"description": "Notification button text for starting a fileless import."
|
||||
},
|
||||
"importing": {
|
||||
"message": "Importing...",
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -1082,7 +1082,7 @@
|
||||
"message": "If a login form is detected, auto-fill when the web page loads."
|
||||
},
|
||||
"experimentalFeature": {
|
||||
"message": "Compromised or untrusted websites can exploit autofill on page load."
|
||||
"message": "Compromised or untrusted websites can exploit auto-fill on page load."
|
||||
},
|
||||
"learnMoreAboutAutofill": {
|
||||
"message": "Learn more about auto-fill"
|
||||
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Select folder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organisation permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2304,7 +2308,7 @@
|
||||
}
|
||||
},
|
||||
"autofillPageLoadPolicyActivated": {
|
||||
"message": "Your organization policies have turned on auto-fill on page load."
|
||||
"message": "Your organisation policies have turned on auto-fill on page load."
|
||||
},
|
||||
"howToAutofill": {
|
||||
"message": "How to auto-fill"
|
||||
@ -2702,19 +2706,19 @@
|
||||
}
|
||||
},
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch DUO and follow the steps to finish logging in."
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"message": "DUO two-step login is required for your account."
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
},
|
||||
"launchDuo": {
|
||||
"message": "Launch DUO"
|
||||
"message": "Launch Duo"
|
||||
},
|
||||
"importFormatError": {
|
||||
"message": "Data is not formatted correctly. Please check your import file and try again."
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Select folder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Seleccione carpeta..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Los permisos de la organización se han actualizado y se requiere el establecimiento de una contraseña maestra.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Pasar por alto esta opción puede causar conflictos entre el menú de relleno automático de Bitwarden y el del navegador.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "Esta acción reiniciará la extensión Bitwarden. Pasar por alto esta opción puede causar conflictos entre el menú de relleno automático de Bitwarden y el del navegador.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Hacer de Bitwarden su gestor de contraseñas predeterminado",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Predeterminar",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Vali kaust..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Hautatu karpeta..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "پوشه را انتخاب کنید..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -494,10 +494,10 @@
|
||||
"message": "Uusi käyttäjätilisi on luotu! Voit nyt kirjautua sisään."
|
||||
},
|
||||
"youSuccessfullyLoggedIn": {
|
||||
"message": "You successfully logged in"
|
||||
"message": "Kirjautuminen onnistui"
|
||||
},
|
||||
"youMayCloseThisWindow": {
|
||||
"message": "You may close this window"
|
||||
"message": "Voit sulkea tämän ikkunan"
|
||||
},
|
||||
"masterPassSent": {
|
||||
"message": "Lähetimme pääsalasanasi vihjeen sähköpostitse."
|
||||
@ -1088,7 +1088,7 @@
|
||||
"message": "Lisätietoja automaattitäytöstä"
|
||||
},
|
||||
"defaultAutoFillOnPageLoad": {
|
||||
"message": "Automaattitäytön oletusasetus kirjautumistiedoille"
|
||||
"message": "Kirjautumistietojen automaattitäytön oletusasetus"
|
||||
},
|
||||
"defaultAutoFillOnPageLoadDesc": {
|
||||
"message": "Automaattinen täyttö on mahdollista ottaa käyttöön tai poistaa käytöstä kirjautumistietokohtaisesti kirjautumistetoa muokkaamalla."
|
||||
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Valitse kansio..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "Ongelmia ei löytynyt",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Organisaatiosi käyttöoikeuksia muutettiin ja tämän seurauksena sinun on asetettava pääsalasana.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2526,7 +2530,7 @@
|
||||
"description": "Toggling an expand/collapse state."
|
||||
},
|
||||
"filelessImport": {
|
||||
"message": "Tuodaanko tiedot Bitwardeniin?",
|
||||
"message": "Haluatko tuoda tietosi Bitwardeniin?",
|
||||
"description": "Default notification title for triggering a fileless import."
|
||||
},
|
||||
"lpFilelessImport": {
|
||||
@ -2702,19 +2706,19 @@
|
||||
}
|
||||
},
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Avaa DUO ja viimeistele kirjautuminen seuraamalla ohjeita."
|
||||
"message": "Avaa Duo ja viimeistele kirjautuminen seuraamalla ohjeita."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"message": "Tilisi vaatii kaksivaiheisen DUO-kirjautumisen."
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Tilillesi kirjautuminen vaatii Duo-vahvistuksen."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Viimeistele kirjautuminen avaamalla laajennus erilliseen ikkunaan."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Irrota laajennus"
|
||||
},
|
||||
"launchDuo": {
|
||||
"message": "Avaa DUO"
|
||||
"message": "Avaa Duo"
|
||||
},
|
||||
"importFormatError": {
|
||||
"message": "Tietoja ei ole muotoiltu oikein. Tarkista tuotava tiedosto ja yritä uudelleen."
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Tämän huomiotta jättäminen voi aiheuttaa ongelmia Bitwardenin automaattitäytön valikon ja selaimen välisessä toiminnassa.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "Tämä toiminto käynnistää Bitwarden-laajennuksen uudelleen ja sen huomiotta jättäminen voi aiheuttaa ongelmia Bitwardenin automaattitäytön valikon ja selaimen välisessä toiminnassa.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Määritä Bitwarden oletusarvoiseksi salasanahallinnaksi",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Määritä oletukseksi",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Käyttäjätiedot on tallennettu!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Käyttäjätiedot on päivitetty!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Virhe tallennettaessa käyttäjätietoja. Näet isätietoja hallinnasta.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Pumili ng folder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -107,7 +107,7 @@
|
||||
"message": "Copier le nom du champ personnalisé"
|
||||
},
|
||||
"noMatchingLogins": {
|
||||
"message": "Aucun identifiant correspondant."
|
||||
"message": "Aucun identifiant correspondant"
|
||||
},
|
||||
"noCards": {
|
||||
"message": "Aucune carte"
|
||||
@ -131,7 +131,7 @@
|
||||
"message": "Connectez-vous à votre coffre"
|
||||
},
|
||||
"autoFillInfo": {
|
||||
"message": "Il n'y a pas d'identifiants disponibles à saisir automatiquement pour l'onglet actuel du navigateur."
|
||||
"message": "Il n'y a pas d'identifiants disponibles pour la saisie automatique dans l'onglet actuel."
|
||||
},
|
||||
"addLogin": {
|
||||
"message": "Ajouter un identifiant"
|
||||
@ -140,7 +140,7 @@
|
||||
"message": "Ajouter un élément"
|
||||
},
|
||||
"passwordHint": {
|
||||
"message": "Indice mot de passe"
|
||||
"message": "Indice de mot de passe"
|
||||
},
|
||||
"enterEmailToGetHint": {
|
||||
"message": "Saisissez l'adresse électronique de votre compte pour recevoir l'indice de votre mot de passe principal."
|
||||
@ -177,7 +177,7 @@
|
||||
"description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing."
|
||||
},
|
||||
"yourAccountsFingerprint": {
|
||||
"message": "La phrase d'empreinte de votre compte",
|
||||
"message": "Phrase d'empreinte de votre compte",
|
||||
"description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing."
|
||||
},
|
||||
"twoStepLogin": {
|
||||
@ -229,7 +229,7 @@
|
||||
"message": "Contacter le support Bitwarden"
|
||||
},
|
||||
"sync": {
|
||||
"message": "Synchroniser"
|
||||
"message": "Synchronisation"
|
||||
},
|
||||
"syncVaultNow": {
|
||||
"message": "Synchroniser le coffre maintenant"
|
||||
@ -369,10 +369,10 @@
|
||||
"message": "Autre"
|
||||
},
|
||||
"unlockMethodNeededToChangeTimeoutActionDesc": {
|
||||
"message": "Configurez une méthode de déverrouillage pour changer le délai d'attente de votre coffre."
|
||||
"message": "Configurez une méthode de déverrouillage pour changer le délai d'expiration de votre coffre."
|
||||
},
|
||||
"unlockMethodNeeded": {
|
||||
"message": "Configurer une méthode de déverrouillage dans Paramètres"
|
||||
"message": "Configurer une méthode de déverrouillage dans les Paramètres"
|
||||
},
|
||||
"rateExtension": {
|
||||
"message": "Noter l'extension"
|
||||
@ -494,7 +494,7 @@
|
||||
"message": "Votre nouveau compte a été créé ! Vous pouvez maintenant vous authentifier."
|
||||
},
|
||||
"youSuccessfullyLoggedIn": {
|
||||
"message": "You successfully logged in"
|
||||
"message": "Vous vous êtes connecté avec succès"
|
||||
},
|
||||
"youMayCloseThisWindow": {
|
||||
"message": "Vous pouvez fermer cette fenêtre"
|
||||
@ -519,7 +519,7 @@
|
||||
}
|
||||
},
|
||||
"autofillError": {
|
||||
"message": "Impossible de saisir automatiquement l'élément sélectionné sur cette page. Copiez-collez plutôt l'information."
|
||||
"message": "Impossible de saisir automatiquement l'élément sélectionné sur cette page. Essayez plutôt le copier-coller."
|
||||
},
|
||||
"totpCaptureError": {
|
||||
"message": "Impossible de scanner le code QR à partir de la page web actuelle"
|
||||
@ -564,7 +564,7 @@
|
||||
"message": "Vous pouvez changer votre mot de passe principal depuis le coffre web de bitwarden.com. Voulez-vous visiter le site web maintenant ?"
|
||||
},
|
||||
"twoStepLoginConfirmation": {
|
||||
"message": "L'authentification à deux facteurs rend votre compte plus sûr en vous demandant de vérifier votre connexion avec un autre dispositif tel qu'une clé de sécurité, une application d'authentification, un SMS, un appel téléphonique ou un courriel. L'authentification à deux facteurs peut être configurée sur le coffre web de bitwarden.com. Voulez-vous visiter le site web maintenant ?"
|
||||
"message": "L'authentification à deux facteurs rend votre compte plus sûr en vous demandant de vérifier votre connexion avec un autre dispositif tel qu'une clé de sécurité, une application d'authentification, un SMS, un appel téléphonique ou un courriel. L'authentification à deux facteurs peut être configurée dans le coffre web de bitwarden.com. Voulez-vous visiter le site web maintenant ?"
|
||||
},
|
||||
"editedFolder": {
|
||||
"message": "Dossier sauvegardé"
|
||||
@ -650,16 +650,16 @@
|
||||
"message": "Demander à ajouter un élément si aucun n'est trouvé dans votre coffre."
|
||||
},
|
||||
"addLoginNotificationDescAlt": {
|
||||
"message": "Demander d'ajouter un élément s'il n'est pas présent dans le coffre. S'applique à tous les comptes connectés."
|
||||
"message": "Demandez d'ajouter un élément s'il celui-ci n'est pas trouvé dans votre coffre. S'applique à tous les comptes connectés."
|
||||
},
|
||||
"showCardsCurrentTab": {
|
||||
"message": "Afficher les cartes sur la page de l'onglet"
|
||||
"message": "Afficher les cartes de paiement sur page d'Onglet"
|
||||
},
|
||||
"showCardsCurrentTabDesc": {
|
||||
"message": "Lister les éléments de la carte sur la page de l'onglet pour faciliter la saisie automatique."
|
||||
},
|
||||
"showIdentitiesCurrentTab": {
|
||||
"message": "Afficher les identités sur la page Onglet courant"
|
||||
"message": "Afficher les identités sur page d'Onglet"
|
||||
},
|
||||
"showIdentitiesCurrentTabDesc": {
|
||||
"message": "Lister les éléments d'identité sur la page de l'onglet pour faciliter la saisie automatique."
|
||||
@ -669,7 +669,7 @@
|
||||
"description": "Clipboard is the operating system thing where you copy/paste data to on your device."
|
||||
},
|
||||
"clearClipboardDesc": {
|
||||
"message": "Effacer automatiquement de votre presse-papiers les valeurs copiées.",
|
||||
"message": "Efface automatiquement les valeurs copiées de votre presse-papiers.",
|
||||
"description": "Clipboard is the operating system thing where you copy/paste data to on your device."
|
||||
},
|
||||
"notificationAddDesc": {
|
||||
@ -679,19 +679,19 @@
|
||||
"message": "Enregistrer"
|
||||
},
|
||||
"enableChangedPasswordNotification": {
|
||||
"message": "Demander à mettre à jour l'identifiant existant"
|
||||
"message": "Demander à mettre à jour un identifiant existant"
|
||||
},
|
||||
"changedPasswordNotificationDesc": {
|
||||
"message": "Demander à mettre à jour le mot de passe d'un identifiant lorsqu'un changement est détecté sur un site Web."
|
||||
},
|
||||
"changedPasswordNotificationDescAlt": {
|
||||
"message": "Proposer de mettre à jour le mot de passe quand un changement est détecté sur un site web. S'appliquer à tous les comptes connectés."
|
||||
"message": "Demander à mettre à jour le mot de passe d'un identifiant lorsqu'un changement est détecté sur un site web. S'applique à tous les comptes connectés."
|
||||
},
|
||||
"enableUsePasskeys": {
|
||||
"message": "Demander à enregistrer et utiliser les mots de passe"
|
||||
"message": "Demander à enregistrer et utiliser les clés d'accès"
|
||||
},
|
||||
"usePasskeysDesc": {
|
||||
"message": "Proposer d'enregistrer de nouvelles clés d'accès ou bien de se connecter à l'aide de clés déjà stockées dans votre coffre-fort. S'applique à tous les comptes connectés."
|
||||
"message": "Demander d'enregistrer de nouvelles clés d'accès ou bien de se connecter à l'aide de clés stockées dans votre coffre. S'applique à tous les comptes connectés."
|
||||
},
|
||||
"notificationChangeDesc": {
|
||||
"message": "Souhaitez-vous mettre à jour ce mot de passe dans Bitwarden ?"
|
||||
@ -709,10 +709,10 @@
|
||||
"message": "Afficher les options du menu contextuel"
|
||||
},
|
||||
"contextMenuItemDesc": {
|
||||
"message": "Utilisez un clic secondaire pour accéder à la génération de mots de passe et les identifiants correspondants pour le site Web. "
|
||||
"message": "Utilise un clic secondaire pour accéder à la génération de mots de passe et aux identifiants correspondants pour le site web."
|
||||
},
|
||||
"contextMenuItemDescAlt": {
|
||||
"message": "Utilisez un clic secondaire pour accéder à la génération de mot de passe et aux identifiants correspondants au site Web. S'applique à tous les comptes connectés."
|
||||
"message": "Utilise un clic secondaire pour accéder à la génération de mot de passe et aux identifiants correspondants pour le site web. S'applique à tous les comptes connectés."
|
||||
},
|
||||
"defaultUriMatchDetection": {
|
||||
"message": "Détection de correspondance URI par défaut",
|
||||
@ -728,7 +728,7 @@
|
||||
"message": "Modifier le thème de couleur de l'application."
|
||||
},
|
||||
"themeDescAlt": {
|
||||
"message": "Modifier le thème de couleur de l'application. S'applique à tous les comptes connectés."
|
||||
"message": "Modifie le thème de couleur de l'application. S'applique à tous les comptes connectés."
|
||||
},
|
||||
"dark": {
|
||||
"message": "Sombre",
|
||||
@ -907,10 +907,10 @@
|
||||
"message": "Actualisation terminée"
|
||||
},
|
||||
"enableAutoTotpCopy": {
|
||||
"message": "Copier le code TOTP automatiquement"
|
||||
"message": "Copier TOTP automatiquement"
|
||||
},
|
||||
"disableAutoTotpCopyDesc": {
|
||||
"message": "Si un identifiant possède une clé d'authentification, copiez le code de vérification TOTP dans votre presse-papiers lorsque vous saisissez automatiquement l'identifiant."
|
||||
"message": "Si un identifiant possède une clé d'authentification, copie le code de vérification TOTP dans votre presse-papiers lorsque vous saisissez automatiquement l'identifiant."
|
||||
},
|
||||
"enableAutoBiometricsPrompt": {
|
||||
"message": "Demander la biométrie au lancement"
|
||||
@ -1051,11 +1051,11 @@
|
||||
"message": "Les URLs d'environnement ont été enregistrées."
|
||||
},
|
||||
"showAutoFillMenuOnFormFields": {
|
||||
"message": "Afficher le menu de saisie automatique sur les champs du formulaire",
|
||||
"message": "Afficher le menu de saisie automatique dans les champs d'un formulaire",
|
||||
"description": "Represents the message for allowing the user to enable the auto-fill overlay"
|
||||
},
|
||||
"showAutoFillMenuOnFormFieldsDescAlt": {
|
||||
"message": "Appliquer à tous les comptes connectés."
|
||||
"message": "S'applique à tous les comptes connectés."
|
||||
},
|
||||
"turnOffBrowserBuiltInPasswordManagerSettings": {
|
||||
"message": "Désactivez les paramètres du gestionnaire de mots de passe intégré à votre navigateur pour éviter les conflits."
|
||||
@ -1064,11 +1064,11 @@
|
||||
"message": "Éditer les paramètres du navigateur."
|
||||
},
|
||||
"autofillOverlayVisibilityOff": {
|
||||
"message": "Arrêt",
|
||||
"message": "Désactivé",
|
||||
"description": "Overlay setting select option for disabling autofill overlay"
|
||||
},
|
||||
"autofillOverlayVisibilityOnFieldFocus": {
|
||||
"message": "Quand le champ est sélectionné (a le focus)",
|
||||
"message": "Lorsque le champ est sélectionné (sur \"focus\")",
|
||||
"description": "Overlay appearance select option for showing the field on focus of the input element"
|
||||
},
|
||||
"autofillOverlayVisibilityOnButtonClick": {
|
||||
@ -1079,10 +1079,10 @@
|
||||
"message": "Saisir automatiquement au chargement de la page"
|
||||
},
|
||||
"enableAutoFillOnPageLoadDesc": {
|
||||
"message": "Si un formulaire de connexion est détecté, saisir automatiquement lors du chargement de la page web."
|
||||
"message": "Si un formulaire de connexion est détecté, il sera saisi automatiquement lors du chargement de la page web."
|
||||
},
|
||||
"experimentalFeature": {
|
||||
"message": "Les sites web compromis ou non fiables peuvent exploiter la saisie automatique au chargement de la page."
|
||||
"message": "les sites web compromis ou non fiables peuvent exploiter la saisie automatique au chargement de la page."
|
||||
},
|
||||
"learnMoreAboutAutofill": {
|
||||
"message": "En savoir plus sur la saisie automatique"
|
||||
@ -1165,16 +1165,16 @@
|
||||
"message": "Afficher les icônes des sites web"
|
||||
},
|
||||
"faviconDesc": {
|
||||
"message": "Afficher une image reconnaissable à côté de chaque identifiant."
|
||||
"message": "Affiche une image reconnaissable à côté de chaque identifiant."
|
||||
},
|
||||
"faviconDescAlt": {
|
||||
"message": "Afficher une image reconnaissable à côté de chaque identifiant. S'applique à tous les comptes connectés."
|
||||
"message": "Affiche une image reconnaissable à côté de chaque identifiant. S'applique à tous les comptes connectés."
|
||||
},
|
||||
"enableBadgeCounter": {
|
||||
"message": "Afficher le compteur de badge"
|
||||
},
|
||||
"badgeCounterDesc": {
|
||||
"message": "Indique le nombre d'identifiants que vous avez pour la page web actuelle."
|
||||
"message": "Indique le nombre d'identifiants dont vous disposez pour la page web en cours."
|
||||
},
|
||||
"cardholderName": {
|
||||
"message": "Nom du titulaire de la carte"
|
||||
@ -1279,7 +1279,7 @@
|
||||
"message": "Numéro de passeport"
|
||||
},
|
||||
"licenseNumber": {
|
||||
"message": "Numéro de permis de Conduire"
|
||||
"message": "Numéro de licence"
|
||||
},
|
||||
"email": {
|
||||
"message": "Courriel"
|
||||
@ -1571,7 +1571,7 @@
|
||||
"message": "Élément saisi automatiquement"
|
||||
},
|
||||
"insecurePageWarning": {
|
||||
"message": "Avertissement : il s'agit d'une page HTTP non sécurisée, et toute information que vous soumettez peut potentiellement être vue et modifiée par d'autres. À l'origine, cet identifiant a été enregistré sur une page sécurisée (HTTPS)."
|
||||
"message": "Avertissement : il s'agit d'une page HTTP non sécurisée, et toute information que vous soumettez peut potentiellement être vue et modifiée par un tiers. À l'origine, cet identifiant a été enregistré sur une page sécurisée (HTTPS)."
|
||||
},
|
||||
"insecurePageWarningFillPrompt": {
|
||||
"message": "Voulez-vous toujours saisir automatiquement cet identifiant ?"
|
||||
@ -1739,10 +1739,10 @@
|
||||
"message": "Domaines exclus"
|
||||
},
|
||||
"excludedDomainsDesc": {
|
||||
"message": "Bitwarden ne proposera pas d'enregistrer les informations de connexion pour ces domaines. Vous devez actualiser la page pour que les modifications prennent effet."
|
||||
"message": "Bitwarden ne demandera pas d'enregistrer les détails de connexion pour ces domaines. Vous devez actualiser la page pour que les modifications prennent effet."
|
||||
},
|
||||
"excludedDomainsDescAlt": {
|
||||
"message": "Bitwarden ne proposera pas d'enregistrer les informations de connexion pour ces domaines pour tous les comptes connectés. Vous devez rafraîchir la page pour appliquer les changements."
|
||||
"message": "Bitwarden ne demandera pas d'enregistrer les détails de connexion pour ces domaines pour tous les comptes connectés. Vous devez actualiser la page pour que les modifications prennent effet."
|
||||
},
|
||||
"excludedDomainsInvalidDomain": {
|
||||
"message": "$DOMAIN$ n'est pas un domaine valide",
|
||||
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Sélectionnez un dossier..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "Aucun dossier trouvé",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Les autorisations de votre organisation ont été mises à jour, vous obligeant à définir un mot de passe principal.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2684,7 +2688,7 @@
|
||||
"message": "Utiliser la biométrie"
|
||||
},
|
||||
"enterVerificationCodeSentToEmail": {
|
||||
"message": "Entrez le code de vérification qui a été envoyé à votre adresse courriel."
|
||||
"message": "Entrez le code de vérification qui a été envoyé à votre adresse de messagerie."
|
||||
},
|
||||
"resendCode": {
|
||||
"message": "Renvoyer le code"
|
||||
@ -2704,14 +2708,14 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Lancez DUO et suivez les étapes pour terminer la connexion."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"message": "L'authentification à double facteur DUO est requise pour votre compte."
|
||||
"duoRequiredForAccount": {
|
||||
"message": "L'authentification à deux facteurs Duo est requise pour votre compte."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Ouvrez l'extension dans une nouvelle fenêtre pour terminer la connexion"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Faire apparaître l'extension pour terminer la connexion."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
"message": "Détacher l'extension"
|
||||
},
|
||||
"launchDuo": {
|
||||
"message": "Lancer DUO"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignorer cette option peut causer des conflits entre le menu de saisie automatique de Bitwarden et celui de votre navigateur.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "Cette action va redémarrer l'extension Bitwarden. Ignorer cette option peut causer des conflits entre le menu de saisie automatique de Bitwarden et celui de votre navigateur.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Faire de Bitwarden votre gestionnaire de mots de passe par défaut",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2987,11 +2987,23 @@
|
||||
"description": "Title for the dialog that appears when the user has not granted the extension permission to set privacy settings"
|
||||
},
|
||||
"privacyPermissionAdditionNotGrantedDescription": {
|
||||
"message": "Vous devez accorder les autorisations de confidentialité du navigateur à Bitwarden pour le définir comme gestionnaire de mots de passe par défaut.",
|
||||
"message": "Vous devez accorder les permissions de confidentialité du navigateur à Bitwarden pour le définir comme gestionnaire de mots de passe par défaut.",
|
||||
"description": "Description for the dialog that appears when the user has not granted the extension permission to set privacy settings"
|
||||
},
|
||||
"makeDefault": {
|
||||
"message": "Définir par défaut",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Select folder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Select folder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "הרשאות הארגון שלך עודכנו, מה שמאלץ אותך להגדיר סיסמה ראשית.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "फ़ोल्डर चुनें..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Odaberi mapu..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Moraš postaviti glavnu lozinku jer su dopuštenja tvoje organizacije ažurirana.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -494,10 +494,10 @@
|
||||
"message": "Felhasználódat létrehoztuk. Most már be tudsz jelentkezni."
|
||||
},
|
||||
"youSuccessfullyLoggedIn": {
|
||||
"message": "You successfully logged in"
|
||||
"message": "A bejelentkezés sikeres volt."
|
||||
},
|
||||
"youMayCloseThisWindow": {
|
||||
"message": "You may close this window"
|
||||
"message": "Most már bezárható ez az ablak."
|
||||
},
|
||||
"masterPassSent": {
|
||||
"message": "Elküldtünk neked egy mesterjelszó emlékeztetődet tartalmazó E-mailt."
|
||||
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Mappa választása..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "Nem találhatók mappák.",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "A szervezeti engedélyek frissítésre kerültek, ezért be kell állítani egy mesterjelszót.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Indítsuk el a DUO-t és kövessük a lépéseket a bejelentkezés befejezéséhez."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "A fiókhoz kétlépcsős DUO bejelentkezés szükséges."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "A bejelentkezés befejezéséhez nyissuk meg a bővítményt egy új ablakban."
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "A bejelentkezés befejezéséhez nyissuk meg a kiterjesztést."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Felugró bővítmény"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ennek az opciónak a figyelmen kívül hagyása ütközést okozhat a Bitwarden automatikus kitöltési menü és a böngésző között.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "Ez a művelet újraindítja a Bitwarden bővítményt. Ennek az opciónak a figyelmen kívül hagyása ütközést okozhat a Bitwarden automatikus kitöltési menü és a böngésző között.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Legyen a Bitwarden az alapértelmezett jelszókezelő",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Legyen alapértelmezett",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "A hitelesítések sikeresen mentésre kerültek.",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "A hitelesítések sikeresen frissítésre kerültek.",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Hiba történt a hitelesítések mentésekor. A részletekért ellenőrizzük a konzolt.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Pilih Folder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Seleziona cartella..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "Nessuna cartella trovata",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Le autorizzazioni della tua organizzazione sono state aggiornate, obbligandoti a impostare una password principale.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Avvia DUO e segui i passaggi per finire di accedere."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Per il tuo account è richiesta la verifica in due passaggi DUO."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Apri l'estensione in una nuova finestra per completare l'accesso"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Apri l'estensione in un popup per completare l'accesso."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Estrai estensione"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Se questa opzione è disattivata potrebbe causare conflitti tra il menu di riempimento automatico di Bitwarden e quello del tuo browser.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "Questa azione riavvierà l'estensione di Bitwarden. Se questa opzione è disattivata potrebbe causare conflitti tra il menu di riempimento automatico di Bitwarden e quello del tuo browser.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Rendi Bitwarden il tuo password manager predefinito",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Rendi predefinito",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credenziali salvate!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credenziali aggiornate!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Errore durante il salvataggio delle credenziali. Controlla la console per più dettagli.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -494,10 +494,10 @@
|
||||
"message": "新しいアカウントを作成しました!今すぐログインできます。"
|
||||
},
|
||||
"youSuccessfullyLoggedIn": {
|
||||
"message": "You successfully logged in"
|
||||
"message": "ログインに成功しました"
|
||||
},
|
||||
"youMayCloseThisWindow": {
|
||||
"message": "You may close this window"
|
||||
"message": "ウィンドウを閉じて大丈夫です"
|
||||
},
|
||||
"masterPassSent": {
|
||||
"message": "あなたのマスターパスワードのヒントを記載したメールを送信しました。"
|
||||
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "フォルダーを選択..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "フォルダーが見つかりません",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "組織の権限が更新され、マスターパスワードの設定が必要になりました。",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "ログインを完了するには DUO を起動し手順に従ってください。"
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"message": "アカウントには DUO 二段階認証が必要です。"
|
||||
"duoRequiredForAccount": {
|
||||
"message": "アカウントには Duo 二段階認証が必要です。"
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "新しいウィンドウで拡張機能を開いてログインを完了してください"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "ログインを完了するために拡張機能を開きます。"
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "拡張機能のポップアップ"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "このオプションを無視すると、Bitwarden の自動入力メニューとブラウザの自動入力メニューが競合する可能性があります。",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "この操作は Bitwarden 拡張機能を再起動します。このオプションを無視すると、Bitwarden の自動入力メニューとブラウザの自動入力メニューが競合する可能性があります。",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Bitwarden をデフォルトのパスワードマネージャーにする",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "デフォルトにする",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "認証情報を保存しました!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "認証情報を更新しました!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "資格情報の保存中にエラーが発生しました。詳細はコンソールを確認してください。",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Select folder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Select folder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Select folder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "폴더 선택..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -561,10 +561,10 @@
|
||||
"message": "Keisti pagrindinį slaptažodį"
|
||||
},
|
||||
"changeMasterPasswordConfirmation": {
|
||||
"message": "Pagrindinį slaptažodį galite pakeisti bitwarden.com žiniatinklio saugykloje. Ar norite dabar apsilankyti svetainėje?"
|
||||
"message": "Pagrindinį slaptažodį galite pakeisti „bitwarden.com“ žiniatinklio saugykloje. Ar norite dabar apsilankyti svetainėje?"
|
||||
},
|
||||
"twoStepLoginConfirmation": {
|
||||
"message": "Prisijungus dviem veiksmais, jūsų paskyra tampa saugesnė, reikalaujant patvirtinti prisijungimą naudojant kitą įrenginį, pvz., Saugos raktą, autentifikavimo programą, SMS, telefono skambutį ar el. Paštą. Dviejų žingsnių prisijungimą galima įjungti „bitwarden.com“ interneto saugykloje. Ar norite dabar apsilankyti svetainėje?"
|
||||
"message": "Prisijungus dviem veiksmais, jūsų paskyra tampa saugesnė, reikalaujant patvirtinti prisijungimą naudojant kitą įrenginį, pvz., saugos raktą, autentifikavimo programėlę, SMS, telefono skambutį ar el. paštą. Dviejų žingsnių prisijungimą galima įjungti „bitwarden.com“ interneto saugykloje. Ar norite dabar apsilankyti svetainėje?"
|
||||
},
|
||||
"editedFolder": {
|
||||
"message": "Katalogas atnaujintas"
|
||||
@ -673,7 +673,7 @@
|
||||
"description": "Clipboard is the operating system thing where you copy/paste data to on your device."
|
||||
},
|
||||
"notificationAddDesc": {
|
||||
"message": "Ar Bitwarden turėtų įsiminti šį slaptažodį už tave?"
|
||||
"message": "Ar „Bitwarden“ turėtų įsiminti šį slaptažodį už Jus?"
|
||||
},
|
||||
"notificationAddSave": {
|
||||
"message": "Išsaugoti"
|
||||
@ -694,13 +694,13 @@
|
||||
"message": "Paprašykite išsaugoti naujus prieigos raktus arba prisijungti naudodant saugykloje saugomus prieigos raktus. Taikoma visoms prisijungusioms paskyroms."
|
||||
},
|
||||
"notificationChangeDesc": {
|
||||
"message": "Ar nori atnaujinti šį slaptažodį Bitwarden?"
|
||||
"message": "Ar nori atnaujinti šį slaptažodį „Bitwarden“ programėlėje?"
|
||||
},
|
||||
"notificationChangeSave": {
|
||||
"message": "Atnaujinti"
|
||||
},
|
||||
"notificationUnlockDesc": {
|
||||
"message": "Atrakink savo Bitwarden saugyklą, kad užpildytum automatinio užpildymo užklausą."
|
||||
"message": "Atrakinkite savo „Bitwarden“ saugyklą, kad užbaigtumėte automatinio užpildymo užklausą."
|
||||
},
|
||||
"notificationUnlock": {
|
||||
"message": "Atrakinti"
|
||||
@ -762,7 +762,7 @@
|
||||
"message": "Šis duomenų exportavimas užšifruoja jūsų duomenis naudodamas jūsų prieigos kodų raktu. Jei jūs kada nuspręsite pakeisti prieigos kodų raktą, jūs turėtumėte per naują eksportuoti duomenis, nes kitaip, jūs negalėsite iššifruoti išeksportuotų duomenų."
|
||||
},
|
||||
"encExportAccountWarningDesc": {
|
||||
"message": "Prieigos kodų raktai yra unikalūs kiekvienai Bitwarden vartotojo paskyrai, taigi jums nepavyktų importuoti užkoduotų eksportuotų duomenų į kitą prieigą."
|
||||
"message": "Paskyros šifravimo raktai yra unikalūs kiekvienai „Bitwarden“ vartotojo paskyrai, todėl negalite importuoti užšifruoto eksportavimo į kitą paskyrą."
|
||||
},
|
||||
"exportMasterPassword": {
|
||||
"message": "Įveskite pagrindinį slaptažodį norint išsinešti saugyklos duomenis."
|
||||
@ -774,7 +774,7 @@
|
||||
"message": "Sužinoti apie organizacijas"
|
||||
},
|
||||
"learnOrgConfirmation": {
|
||||
"message": "Bitwarden leidžia jums dalintis savo saugyklos elementais su kitais vartotojais organizacijoje. Ar jūs norėtumėte apsilankyti bitwarden.com puslapyje, kad sužinoti daugiau?"
|
||||
"message": "„Bitwarden“ leidžia dalytis saugyklos elementais su kitais naudojantis organizacija. Ar norėtumėte apsilankyti „bitwarden.com“ svetainėje ir sužinoti daugiau?"
|
||||
},
|
||||
"moveToOrganization": {
|
||||
"message": "Perkelti į organizaciją"
|
||||
@ -853,7 +853,7 @@
|
||||
"message": "Tvarkyti narystę"
|
||||
},
|
||||
"premiumManageAlert": {
|
||||
"message": "Galite tvarkyti savo narystę internete per bitwarden.com. Ar norite aplankyti šį puslapį dabar?"
|
||||
"message": "Savo narystę galite tvarkyti „bitwarden.com“ žiniatinklio saugykloje. Ar norite apsilankyti svetainėje dabar?"
|
||||
},
|
||||
"premiumRefresh": {
|
||||
"message": "Atnaujinti narystę"
|
||||
@ -886,13 +886,13 @@
|
||||
"message": "Įsigyti Premium"
|
||||
},
|
||||
"premiumPurchaseAlert": {
|
||||
"message": "Gali įsigyti Premium narystę bitwarden.com interneto saugykloje. Ar nori aplankyti svetainėje dabar?"
|
||||
"message": "Galite įsigyti „Premium“ narystę „bitwarden.com“ žiniatinklio saugykloje. Ar norite apsilankyti svetainėje dabar?"
|
||||
},
|
||||
"premiumCurrentMember": {
|
||||
"message": "Tu esi Premium narys!"
|
||||
},
|
||||
"premiumCurrentMemberThanks": {
|
||||
"message": "Dėkojame, kad remiate Bitwarden."
|
||||
"message": "Dėkojame, kad palaikote „Bitwarden“."
|
||||
},
|
||||
"premiumPrice": {
|
||||
"message": "Visa tai tik už $PRICE$ / metus!",
|
||||
@ -1021,7 +1021,7 @@
|
||||
"message": "Savarankiškai sukurta aplinka"
|
||||
},
|
||||
"selfHostedEnvironmentFooter": {
|
||||
"message": "Nurodyk pagrindinį URL adresą savo patalpose esančio Bitwarden diegimo."
|
||||
"message": "Nurodykite vietinio priglobto „Bitwarden“ diegimo bazinį URL."
|
||||
},
|
||||
"customEnvironment": {
|
||||
"message": "Individualizuota aplinka"
|
||||
@ -1481,7 +1481,7 @@
|
||||
"message": "Silpnas pagrindinis slaptažodis"
|
||||
},
|
||||
"weakMasterPasswordDesc": {
|
||||
"message": "Jūsų pasirinktas pagrindinis slaptažodis yra silpnas. Turėtumėte naudoti stiprų pagrindinį slaptažodį (arba slaptafrazę), kad tinkamai apsaugotumėte savo Bitwarden paskyrą. Ar tikrai norite naudoti šį pagrindinį slaptažodį?"
|
||||
"message": "Jūsų pasirinktas pagrindinis slaptažodis yra silpnas. Turėtumėte naudoti stiprų pagrindinį slaptažodį (arba slaptafrazę), kad tinkamai apsaugotumėte savo „Bitwarden“ paskyrą. Ar tikrai norite naudoti šį pagrindinį slaptažodį?"
|
||||
},
|
||||
"pin": {
|
||||
"message": "PIN",
|
||||
@ -1509,7 +1509,7 @@
|
||||
"message": "Laukiama patvirtinimo iš darbalaukio"
|
||||
},
|
||||
"awaitDesktopDesc": {
|
||||
"message": "Patvirtinkite naudodami biometrinius duomenis Bitwarden darbalaukio programoje, kad nustatytumėte naršyklės biometrinius duomenis."
|
||||
"message": "Patvirtinkite naudodami biometrinius duomenis „Bitwarden“ darbalaukio programoje, kad nustatytumėte naršyklės biometrinius duomenis."
|
||||
},
|
||||
"lockWithMasterPassOnRestart": {
|
||||
"message": "Užrakinkite pagrindiniu slaptažodžiu paleidus naršyklę iš naujo"
|
||||
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Pasirinkti aplankalą..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "Nerasta aplankų.",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Dėl organizacijos leidimų atnaujinimo, Jums reikia nustatyti pagrindinį slaptažodį.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2168,17 +2172,17 @@
|
||||
"message": "Sugeneruoti el. pašto slapyvardį su išorine persiuntimo paslauga."
|
||||
},
|
||||
"hostname": {
|
||||
"message": "Hostname",
|
||||
"message": "Pagrindinio kompiuterio vardas",
|
||||
"description": "Part of a URL."
|
||||
},
|
||||
"apiAccessToken": {
|
||||
"message": "API Access Token"
|
||||
"message": "API Prieigos Raktas"
|
||||
},
|
||||
"apiKey": {
|
||||
"message": "API raktas"
|
||||
},
|
||||
"ssoKeyConnectorError": {
|
||||
"message": "Key connector error: make sure key connector is available and working correctly."
|
||||
"message": "Rakto jungties klaida: įsitikinkite, kad rakto jungtis yra prieinama ir veikia tinkamai."
|
||||
},
|
||||
"premiumSubcriptionRequired": {
|
||||
"message": "Reikalingas Premium abonementas"
|
||||
@ -2187,10 +2191,10 @@
|
||||
"message": "Organizacija suspenduota."
|
||||
},
|
||||
"disabledOrganizationFilterError": {
|
||||
"message": "Items in suspended Organizations cannot be accessed. Contact your Organization owner for assistance."
|
||||
"message": "Elementai esantys suspenduotose Organizacijose yra neprieinami. Susisiekite su savo Organizacijos savininku."
|
||||
},
|
||||
"loggingInTo": {
|
||||
"message": "Logging in to $DOMAIN$",
|
||||
"message": "Prisijungiama prie $DOMAIN$",
|
||||
"placeholders": {
|
||||
"domain": {
|
||||
"content": "$1",
|
||||
@ -2199,25 +2203,25 @@
|
||||
}
|
||||
},
|
||||
"settingsEdited": {
|
||||
"message": "Settings have been edited"
|
||||
"message": "Nustatymai buvo paredaguoti"
|
||||
},
|
||||
"environmentEditedClick": {
|
||||
"message": "Spauskite čia"
|
||||
},
|
||||
"environmentEditedReset": {
|
||||
"message": "to reset to pre-configured settings"
|
||||
"message": "iš naujo nustatyti iš anksto sukonfigūruotus nustatymus"
|
||||
},
|
||||
"serverVersion": {
|
||||
"message": "Server version"
|
||||
"message": "Serverio versija"
|
||||
},
|
||||
"selfHostedServer": {
|
||||
"message": "self-hosted"
|
||||
"message": "savarankiškai sukurtas"
|
||||
},
|
||||
"thirdParty": {
|
||||
"message": "Trečioji šalis"
|
||||
},
|
||||
"thirdPartyServerMessage": {
|
||||
"message": "Connected to third-party server implementation, $SERVERNAME$. Please verify bugs using the official server, or report them to the third-party server.",
|
||||
"message": "Prisijungta prie trečiosios šalies serverio diegimo $SERVERNAME$. Patikrinkite klaidas naudodami oficialų serverį arba praneškite apie jas trečiosios šalies serveriui.",
|
||||
"placeholders": {
|
||||
"servername": {
|
||||
"content": "$1",
|
||||
@ -2226,7 +2230,7 @@
|
||||
}
|
||||
},
|
||||
"lastSeenOn": {
|
||||
"message": "last seen on: $DATE$",
|
||||
"message": "paskutinį kartą matytas: $DATE$",
|
||||
"placeholders": {
|
||||
"date": {
|
||||
"content": "$1",
|
||||
@ -2256,7 +2260,7 @@
|
||||
"message": "Prisijungti su įrenginiu turi būti nustatyta Bitwarden aplikacijos nustatymuose. Reikia kito pasirinkimo?"
|
||||
},
|
||||
"fingerprintPhraseHeader": {
|
||||
"message": "Fingerprint phrase"
|
||||
"message": "Pirštų atspaudų frazė"
|
||||
},
|
||||
"fingerprintMatchInfo": {
|
||||
"message": "Please make sure your vault is unlocked and the Fingerprint phrase matches on the other device."
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Paleisk DUO ir sek veiksmus, kad baigtum prisijungti."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"message": "Tavo paskyrai reikalingas DUO dviejų veiksmų prisijungimas."
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Tavo paskyrai reikalingas Duo dviejų veiksmų prisijungimas."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Atidaryk plėtinį naujame lange, kad užbaigtum prisijungimą."
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Išskleisk plėtinį, kad užbaigtum prisijungimą."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Iššokantis plėtinys"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoruojant šią parinktį, gali kilti konfliktų tarp Bitwarden automatinio užpildymo meniu ir naršyklės.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "Šis veiksmas iš naujo paleis Bitwarden plėtinį.\nIgnoruojant šią parinktį, gali kilti konfliktų tarp Bitwarden automatinio užpildymo meniu ir naršyklės.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Padaryti Bitwarden savo numatytuoju slaptažodžių tvarkytuvu",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Padaryti numatytuoju",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Kredencialai išsaugoti sėkmingai.",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Kredencialai atnaujinti sėkmingai.",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Klaida išsaugant kredencialus. Išsamesnės informacijos patikrink konsolėje.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Izvēlēties mapi..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "Nav atrasta neviena mape",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Apvienības atļaujas tika atjauninātas, un tās pieprasa iestatīt galveno paroli.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Jāpalaiž DUO un jāseko soļiem, lai pabeigtu pieteikšanos."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"message": "Kontam ir nepieciešama DUO divpakāpju pieteikšanās."
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Kontam ir nepieciešama Duo divpakāpju pieteikšanās."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Paplašinājums jāatver jaunā logā, lai pabeigtu pieteikšanos"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Jāatver paplašinājums atsevišķā logā, lai pabeigtu pieteikšanos."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Atvērt paplašinājumu atsevišķi"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Šīs iespējas neņemšana vērā var radīt nesaderības starp Bitwarden automātiskās aizpildes izvēlni un pārlūka.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "Šī darbība pārsāknēs Bitwarden paplašinājumu. Šīs iespējas neņemšana vērā var radīt nesaderības starp Bitwarden automātiskās aizpildes izvēlni un pārlūka.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Padarīt Bitwarden par noklusējuma paroļu pārvaldnieku",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Padarīt par noklusējumu",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Piekļuves informācija veiksmīgi saglabāta.",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Piekļuves informācija veiksmīgi atjaunināta.",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Kļūda piekļuves informācijas saglabāšanā. Jāpārbauda, vai konsolē ir izvērstāka informācija.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Select folder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Select folder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Select folder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Velg mappe …"
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Gjør Bitwarden til din standard passordbehandler",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Select folder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -1180,7 +1180,7 @@
|
||||
"message": "Naam kaarthouder"
|
||||
},
|
||||
"number": {
|
||||
"message": "Kaartummer"
|
||||
"message": "Kaartnummer"
|
||||
},
|
||||
"brand": {
|
||||
"message": "Merk"
|
||||
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Map selecteren..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "Geen mappen gevonden",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Jouw account vereist Duo-tweestapsaanmelding."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Open de extensie om in te loggen."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Deze optie negeren kan tot conflicten leiden tussen het automatisch invullen van Bitwarden en dat van je browser.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "Deze actie herstart de Bitwarden-extensie. Deze optie negeren kan tot conflicten leiden tussen het automatisch invullen van Bitwarden en dat van je browser.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Maak van Bitwarden je standaardwachtbeheerder",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Standaard maken",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Select folder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Select folder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Wybierz folder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "Nie znaleziono folderów",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Uprawnienia w Twojej organizacji zostały zaktualizowane, musisz teraz ustawić hasło główne.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Uruchom DUO i wykonaj kroki, aby zakończyć logowanie."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"message": "Dwustopniowe logowanie DUO jest wymagane dla Twojego konta."
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Dwustopniowe logowanie Duo jest wymagane dla Twojego konta."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Otwórz rozszerzenie w nowym oknie aby zakończyć logowanie"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Otwórz rozszerzenie w nowym oknie, aby dokończyć logowanie."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignorowanie tej opcji może spowodować konflikty pomiędzy menu autouzupełniania Bitwarden a przeglądarką.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "Ta akcja zrestartuje rozszerzenie Bitwarden. Ignorowanie tej opcji może spowodować konflikty pomiędzy menu autouzupełniania Bitwarden a przeglądarką.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Ustaw Bitwarden jako domyślny menedżer haseł",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Ustaw jako domyślny",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Pomyślnie zapisano dane logowania!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Pomyślnie zaktualizowano dane logowania!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Błąd podczas zapisywania danych logowania. Sprawdź konsolę, aby uzyskać szczegóły.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Selecionar pasta..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "As permissões da sua organização foram atualizadas, exigindo que você defina uma senha mestra.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Selecionar pasta..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "Nenhuma pasta encontrada",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "As permissões da sua organização foram atualizadas, exigindo a definição de uma palavra-passe mestra.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2702,19 +2706,19 @@
|
||||
}
|
||||
},
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Inicie o DUO e siga os passos para concluir o início de sessão."
|
||||
"message": "Inicie o Duo e siga os passos para concluir o início de sessão."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"message": "A verificação em dois passos DUO é necessária para a sua conta."
|
||||
"duoRequiredForAccount": {
|
||||
"message": "A verificação de dois passos Duo é necessária para a sua conta."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Abra a extensão numa nova janela para concluir o início de sessão"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Abra a extensão para concluir o início de sessão."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Extensão popout"
|
||||
},
|
||||
"launchDuo": {
|
||||
"message": "Iniciar o DUO"
|
||||
"message": "Iniciar o Duo"
|
||||
},
|
||||
"importFormatError": {
|
||||
"message": "Os dados não estão formatados corretamente. Por favor, verifique o seu ficheiro de importação e tente novamente."
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignorar esta opção pode causar conflitos entre o menu de preenchimento automático do Bitwarden e o do seu navegador.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "Esta ação reiniciará a extensão Bitwarden. Ignorar esta opção pode causar conflitos entre o menu de preenchimento automático do Bitwarden e o do seu navegador.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Tornar o Bitwarden o seu gestor de palavras-passe predefinido",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Tornar predefinido",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credenciais guardadas com sucesso!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credenciais atualizadas com sucesso!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Erro ao guardar as credenciais. Verifique a consola para obter detalhes.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Selectare folder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -494,10 +494,10 @@
|
||||
"message": "Ваш аккаунт создан! Теперь вы можете войти в систему."
|
||||
},
|
||||
"youSuccessfullyLoggedIn": {
|
||||
"message": "You successfully logged in"
|
||||
"message": "Вы успешно авторизовались"
|
||||
},
|
||||
"youMayCloseThisWindow": {
|
||||
"message": "You may close this window"
|
||||
"message": "Можете закрыть это окно"
|
||||
},
|
||||
"masterPassSent": {
|
||||
"message": "Мы отправили вам письмо с подсказкой к мастер-паролю."
|
||||
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Выберите папку..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "Папки не найдены",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Права доступа организации были обновлены, требуется установить мастер-пароль.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2702,19 +2706,19 @@
|
||||
}
|
||||
},
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Запустите DUO и следуйте шагам для завершения авторизации."
|
||||
"message": "Запустите Duo и следуйте шагам для завершения авторизации."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"message": "Для вашего аккаунта требуется двухэтапная аутентификация DUO."
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Для вашего аккаунта требуется двухэтапная аутентификация Duo."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Откройте расширение в новом окне, чтобы завершить авторизацию"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Запустите расширение для завершения авторизации."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Открепить расширение"
|
||||
},
|
||||
"launchDuo": {
|
||||
"message": "Запустить DUO"
|
||||
"message": "Запустить Duo"
|
||||
},
|
||||
"importFormatError": {
|
||||
"message": "Формат данных некорректен. Проверьте импортируемый файл и повторите попытку."
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Отключение этого параметра может привести к конфликту между меню автозаполнения Bitwarden и вашим браузером.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "Это действие перезапустит расширение Bitwarden. Игнорирование этой опции может привести к конфликту между меню автозаполнения Bitwarden и вашим браузером.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Сделать Bitwarden менеджером паролей по умолчанию",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Установить по умолчанию",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Учетные данные успешно сохранены!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Учетные данные успешно обновлены!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Ошибка сохранения учетных данных. Проверьте консоль для получения подробной информации.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "ෆෝල්ඩරය තෝරන්න..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Vybrať priečinok..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "Nenašli sa žiadne priečinky",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Povolenia vašej organizácie boli aktualizované, čo si vyžaduje nastavenie hlavného hesla.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Spustite DUO a postupujte podľa pokynov na dokončenie prihlásenia."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"message": "Pre váš účet je potrebné dvojstupňové prihlásenie DUO."
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Pre váš účet je potrebné dvojstupňové prihlásenie Duo."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Na dokončenie prihlásenia otvorte rozšírenie v novom okne"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Ak chcete dokončiť prihlásenie, otvorte rozšírenie."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Zobraziť rozšírenie v novom okne"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ak nenastavíte túto možnosť, môže to spôsobiť konflikty medzi ponukou automatického vypĺňania Bitwardenu a ponukou vášho prehliadača.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "Táto akcia reštartuje rozšírenie Bitwarden. Ignorovanie tejto možnosti môže spôsobiť konflikty medzi ponukou automatického vypĺňania Bitwarden a ponukou prehliadača.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Nastaviť Bitwarden ako predvolený správca hesiel",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Nastaviť ako predvolený",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Prihlasovacie údaje boli úspešne uložené!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Prihlasovacie údaje boli úspešne aktualizované!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Chyba pri ukladaní prihlasovacích údajov. Viac informácii nájdete v konzole.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Izberi mapo..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -494,10 +494,10 @@
|
||||
"message": "Ваш налог је креиран! Сада се можете пријавити."
|
||||
},
|
||||
"youSuccessfullyLoggedIn": {
|
||||
"message": "You successfully logged in"
|
||||
"message": "Успешно сте се пријавили"
|
||||
},
|
||||
"youMayCloseThisWindow": {
|
||||
"message": "You may close this window"
|
||||
"message": "Можете затворити овај прозор"
|
||||
},
|
||||
"masterPassSent": {
|
||||
"message": "Послали смо Вам поруку са саветом главне лозинке."
|
||||
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Изаберите фасциклу..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "Нису пронађене фасцикле",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Дозволе за вашу организацију су ажуриране, што захтева да поставите главну лозинку.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Покренути DUO и пратите кораке да бисте завршили пријављивање."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"message": "DUO пријава у два корака је потребна за ваш налог."
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo пријава у два корака је потребна за ваш налог."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Отворите екстензију у новом прозору да бисте завршили пријаву"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Искачући додатак да бисте довршили пријаву."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Игнорисање ове опције може довести до сукоба између љутопуњења Bitwarden-а и вашег прегледача.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "Ова акција ће поново покренути ектензију Bitwarden-а. Игнорисање ове опције може довести до сукоба између љутопуњења Bitwarden-а и вашег прегледача.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Урадите да Bitwarden буде ваш подразумевани менаџер лозинки",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Постави као подразумевано",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Акредитиви су успешно сачувани!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Акредитиви су успешно ажурирани!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Грешка при чувању акредитива. Проверите конзолу за детаље.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -688,10 +688,10 @@
|
||||
"message": "Ask to update a login's password when a change is detected on a website. Applies to all logged in accounts."
|
||||
},
|
||||
"enableUsePasskeys": {
|
||||
"message": "Be om att spara och använda nycklar"
|
||||
"message": "Be om att spara och använda lösennycklar"
|
||||
},
|
||||
"usePasskeysDesc": {
|
||||
"message": "Be om att spara nya nycklar eller logga in med nycklar som lagras i ditt valv. Gäller för alla inloggade konton."
|
||||
"message": "Be om att spara nya lösennycklar eller logga in med nycklar som lagras i ditt valv. Gäller för alla inloggade konton."
|
||||
},
|
||||
"notificationChangeDesc": {
|
||||
"message": "Vill du uppdatera det här lösenordet i Bitwarden?"
|
||||
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Välj mapp…"
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "Inga mappar hittades",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2788,25 +2792,25 @@
|
||||
"message": "Confirm file password"
|
||||
},
|
||||
"typePasskey": {
|
||||
"message": "Nyckel"
|
||||
"message": "Lösennyckel"
|
||||
},
|
||||
"passkeyNotCopied": {
|
||||
"message": "Nyckeln kommer inte kopieras"
|
||||
"message": "Lösennyckeln kommer inte kopieras"
|
||||
},
|
||||
"passkeyNotCopiedAlert": {
|
||||
"message": "Nyckeln kommer inte att kopieras till det klonade objektet. Vill du fortsätta klona det här objektet?"
|
||||
"message": "Lösennyckeln kommer inte att kopieras till det klonade objektet. Vill du fortsätta klona det här objektet?"
|
||||
},
|
||||
"passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": {
|
||||
"message": "Verifiering krävs av den initierande webbplatsen. Denna funktion är ännu inte implementerad för konton utan huvudlösenord."
|
||||
},
|
||||
"logInWithPasskey": {
|
||||
"message": "Logga in med nyckel?"
|
||||
"message": "Logga in med lösennyckel?"
|
||||
},
|
||||
"passkeyAlreadyExists": {
|
||||
"message": "En nyckel finns redan för detta program."
|
||||
"message": "En lösennyckel finns redan för detta program."
|
||||
},
|
||||
"noPasskeysFoundForThisApplication": {
|
||||
"message": "Inga nycklar hittades för detta program."
|
||||
"message": "Inga lösennycklar hittades för detta program."
|
||||
},
|
||||
"noMatchingPasskeyLogin": {
|
||||
"message": "Det finns ingen matchande inloggning för denna webbplats."
|
||||
@ -2815,28 +2819,28 @@
|
||||
"message": "Bekräfta"
|
||||
},
|
||||
"savePasskey": {
|
||||
"message": "Spara nyckel"
|
||||
"message": "Spara lösennyckel"
|
||||
},
|
||||
"savePasskeyNewLogin": {
|
||||
"message": "Spara nyckel som ny inloggning"
|
||||
"message": "Spara lösennyckel som ny inloggning"
|
||||
},
|
||||
"choosePasskey": {
|
||||
"message": "Välj en inloggning för att spara denna nyckel till"
|
||||
"message": "Välj en inloggning för att spara denna lösennyckel till"
|
||||
},
|
||||
"passkeyItem": {
|
||||
"message": "Nyckelobjekt"
|
||||
"message": "Lösennyckelobjekt"
|
||||
},
|
||||
"overwritePasskey": {
|
||||
"message": "Skriv över nyckel?"
|
||||
"message": "Skriv över lösennyckel?"
|
||||
},
|
||||
"overwritePasskeyAlert": {
|
||||
"message": "Detta objekt innehåller redan en nyckel. Är du säker på att du vill skriva över nuvarande nyckeln?"
|
||||
"message": "Detta objekt innehåller redan en lösennyckel. Är du säker på att du vill skriva över nuvarande lösennyckeln?"
|
||||
},
|
||||
"featureNotSupported": {
|
||||
"message": "Feature not yet supported"
|
||||
},
|
||||
"yourPasskeyIsLocked": {
|
||||
"message": "Autentisering krävs för att använda nyckel. Verifiera din identitet för att fortsätta."
|
||||
"message": "Autentisering krävs för att använda lösennyckel. Verifiera din identitet för att fortsätta."
|
||||
},
|
||||
"multifactorAuthenticationCancelled": {
|
||||
"message": "Multifactor authentication cancelled"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Låt Bitwarden hantera lösenord som standard",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Select folder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Select folder..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Klasör seç..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "Herhangi bir klasör bulunamadı",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Kuruluş izinleriniz güncellendi ve bir ana parola belirlemeniz gerekiyor.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "DUO'yu başlatın ve oturum açmayı tamamlamak için adımları izleyin."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"message": "Hesabınız için DUO iki adımlı giriş gereklidir."
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Hesabınız için Duo'ya iki adımlı giriş yapmanız gerekiyor."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Oturum açma işlemini tamamlamak için uzantıyı yeni bir pencerede açın"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Oturum açma işlemini tamamlamak için uzantıyı açın."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout uzantısı"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Bu seçeneğin göz ardı edilmesi, Bitwarden otomatik doldurma menüsü ile tarayıcınızınki arasında çakışmalara neden olabilir.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "Bu eylem Bitwarden uzantısını yeniden başlatacaktır. Bu seçeneğin göz ardı edilmesi, Bitwarden otomatik doldurma menüsü ile tarayıcınızın arasında çakışmalara neden olabilir.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Bitwarden'ı varsayılan şifre yöneticiniz yapın",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Varsayılan yap",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Kimlik bilgileri başarıyla kaydedildi!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Kimlik bilgileri başarıyla güncellendi!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Kimlik bilgileri kaydedilirken hata oluştu. Ayrıntılar için konsolu kontrol edin.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Обрати теку..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "Тек не знайдено",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Оновлено дозволи вашої організації – вимагається встановлення головного пароля.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2135,7 +2139,7 @@
|
||||
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
|
||||
},
|
||||
"plusAddressedEmailDesc": {
|
||||
"message": "Використовуйте розширені можливості адрес вашого постачальника електронної пошти."
|
||||
"message": "Використовуйте розширені можливості адрес вашого провайдера електронної пошти."
|
||||
},
|
||||
"catchallEmail": {
|
||||
"message": "Адреса е-пошти Catch-all"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Запустіть Duo і виконайте дії для завершення входу."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Для вашого облікового запису необхідна двоетапна перевірка з Duo."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Відкрийте розширення у новому вікні, щоб завершити вхід"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Відкріпіть розширення для завершення входу."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Відкріпити вікно розширення"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Якщо ігнорувати цей параметр, можуть виникнути конфлікти автозаповнення між Bitwarden і браузером.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "Ця дія призведе до перезапуску розширення Bitwarden. Якщо ігнорувати цей параметр, можуть виникнути конфлікти автозаповнення між Bitwarden і браузером.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Зробити Bitwarden типовим менеджером паролів",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Зробити типовим",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Облікові дані успішно збережено!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Облікові дані успішно оновлено!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Помилка збереження облікових даних. Перегляньте подробиці в консолі.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "Chọn thư mục..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "Your organization permissions were updated, requiring you to set a master password.",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -494,10 +494,10 @@
|
||||
"message": "您的新账户已创建!您现在可以登录了。"
|
||||
},
|
||||
"youSuccessfullyLoggedIn": {
|
||||
"message": "You successfully logged in"
|
||||
"message": "您已成功登录"
|
||||
},
|
||||
"youMayCloseThisWindow": {
|
||||
"message": "You may close this window"
|
||||
"message": "您可以关闭此窗口"
|
||||
},
|
||||
"masterPassSent": {
|
||||
"message": "我们已经为您发送了包含主密码提示的邮件。"
|
||||
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "选择文件夹..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "找不到文件夹",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "您的组织权限已更新,要求您设置主密码。",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2704,17 +2708,17 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "启动 DUO 并按照步骤完成登录。"
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"message": "您的账户需要 DUO 两步登录。"
|
||||
"duoRequiredForAccount": {
|
||||
"message": "您的账户要求使用 Duo 两步登录。"
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "在新窗口中打开扩展以完成登录"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "弹出扩展以完成登录。"
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "弹出扩展"
|
||||
},
|
||||
"launchDuo": {
|
||||
"message": "启动 DUO"
|
||||
"message": "启动 Duo"
|
||||
},
|
||||
"importFormatError": {
|
||||
"message": "数据格式不正确。请检查您的导入文件然后重试。"
|
||||
@ -2967,19 +2971,15 @@
|
||||
"description": "Label indicating the most common import formats"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillTitle": {
|
||||
"message": "将 Bitwarden 设置为您的默认密码管理器?",
|
||||
"message": "将 Bitwarden 设置为您的默认密码管理器吗?",
|
||||
"description": "Dialog title facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillDescription": {
|
||||
"message": "忽略此设置可能会导致 Bitwarden 自动填充菜单与浏览器自带功能产生冲突。",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "此操作将重启 Bitwarden 扩展。忽略此选项可能会在 Bitwarden 自动填充菜单和您的浏览器自带功能之间产生冲突。",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "将 Bitwarden 设置为您的默认密码管理器?",
|
||||
"message": "将 Bitwarden 设置为您的默认密码管理器",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"privacyPermissionAdditionNotGrantedTitle": {
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "设为默认",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "凭据保存成功!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "凭据更新成功!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "保存凭据时出错。检查控制台以获取详细信息。",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -2004,6 +2004,10 @@
|
||||
"selectFolder": {
|
||||
"message": "選擇資料夾⋯"
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
"message": "您的組織權限已更新,需要您設定主密碼。",
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
@ -2654,7 +2658,7 @@
|
||||
}
|
||||
},
|
||||
"tryAgain": {
|
||||
"message": "Try again"
|
||||
"message": "再試一次"
|
||||
},
|
||||
"verificationRequiredForActionSetPinToContinue": {
|
||||
"message": "Verification required for this action. Set a PIN to continue."
|
||||
@ -2704,11 +2708,11 @@
|
||||
"launchDuoAndFollowStepsToFinishLoggingIn": {
|
||||
"message": "Launch Duo and follow the steps to finish logging in."
|
||||
},
|
||||
"duoRequiredByOrgForAccount": {
|
||||
"duoRequiredForAccount": {
|
||||
"message": "Duo two-step login is required for your account."
|
||||
},
|
||||
"openExtensionInNewWindowToCompleteLogin": {
|
||||
"message": "Open the extension in a new window to complete login"
|
||||
"popoutTheExtensionToCompleteLogin": {
|
||||
"message": "Popout the extension to complete login."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
@ -2974,10 +2978,6 @@
|
||||
"message": "Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillPrivacyRequiredDescription": {
|
||||
"message": "This action will restart the Bitwarden extension. Ignoring this option may cause conflicts between the Bitwarden auto-fill menu and your browser's.",
|
||||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
@ -2993,5 +2993,17 @@
|
||||
"makeDefault": {
|
||||
"message": "Make default",
|
||||
"description": "Button text for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"saveCipherAttemptSuccess": {
|
||||
"message": "Credentials saved successfully!",
|
||||
"description": "Notification message for when saving credentials has succeeded."
|
||||
},
|
||||
"updateCipherAttemptSuccess": {
|
||||
"message": "Credentials updated successfully!",
|
||||
"description": "Notification message for when updating credentials has succeeded."
|
||||
},
|
||||
"saveCipherAttemptFailed": {
|
||||
"message": "Error saving credentials. Check console for details.",
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,10 @@ import {
|
||||
factory,
|
||||
FactoryOptions,
|
||||
} from "../../../platform/background/service-factories/factory-options";
|
||||
import {
|
||||
stateProviderFactory,
|
||||
StateProviderInitOptions,
|
||||
} from "../../../platform/background/service-factories/state-provider.factory";
|
||||
import {
|
||||
stateServiceFactory as stateServiceFactory,
|
||||
StateServiceInitOptions,
|
||||
@ -20,6 +24,7 @@ type PolicyServiceFactoryOptions = FactoryOptions;
|
||||
|
||||
export type PolicyServiceInitOptions = PolicyServiceFactoryOptions &
|
||||
StateServiceInitOptions &
|
||||
StateProviderInitOptions &
|
||||
OrganizationServiceInitOptions;
|
||||
|
||||
export function policyServiceFactory(
|
||||
@ -33,6 +38,7 @@ export function policyServiceFactory(
|
||||
async () =>
|
||||
new BrowserPolicyService(
|
||||
await stateServiceFactory(cache, opts),
|
||||
await stateProviderFactory(cache, opts),
|
||||
await organizationServiceFactory(cache, opts),
|
||||
),
|
||||
);
|
||||
|
@ -1,29 +0,0 @@
|
||||
import { AuthRequestCryptoServiceAbstraction } from "@bitwarden/common/auth/abstractions/auth-request-crypto.service.abstraction";
|
||||
import { AuthRequestCryptoServiceImplementation } from "@bitwarden/common/auth/services/auth-request-crypto.service.implementation";
|
||||
|
||||
import {
|
||||
CryptoServiceInitOptions,
|
||||
cryptoServiceFactory,
|
||||
} from "../../../platform/background/service-factories/crypto-service.factory";
|
||||
import {
|
||||
CachedServices,
|
||||
FactoryOptions,
|
||||
factory,
|
||||
} from "../../../platform/background/service-factories/factory-options";
|
||||
|
||||
type AuthRequestCryptoServiceFactoryOptions = FactoryOptions;
|
||||
|
||||
export type AuthRequestCryptoServiceInitOptions = AuthRequestCryptoServiceFactoryOptions &
|
||||
CryptoServiceInitOptions;
|
||||
|
||||
export function authRequestCryptoServiceFactory(
|
||||
cache: { authRequestCryptoService?: AuthRequestCryptoServiceAbstraction } & CachedServices,
|
||||
opts: AuthRequestCryptoServiceInitOptions,
|
||||
): Promise<AuthRequestCryptoServiceAbstraction> {
|
||||
return factory(
|
||||
cache,
|
||||
"authRequestCryptoService",
|
||||
opts,
|
||||
async () => new AuthRequestCryptoServiceImplementation(await cryptoServiceFactory(cache, opts)),
|
||||
);
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
import { AuthRequestService, AuthRequestServiceAbstraction } from "@bitwarden/auth/common";
|
||||
|
||||
import {
|
||||
apiServiceFactory,
|
||||
ApiServiceInitOptions,
|
||||
} from "../../../platform/background/service-factories/api-service.factory";
|
||||
import {
|
||||
appIdServiceFactory,
|
||||
AppIdServiceInitOptions,
|
||||
} from "../../../platform/background/service-factories/app-id-service.factory";
|
||||
import {
|
||||
CryptoServiceInitOptions,
|
||||
cryptoServiceFactory,
|
||||
} from "../../../platform/background/service-factories/crypto-service.factory";
|
||||
import {
|
||||
CachedServices,
|
||||
FactoryOptions,
|
||||
factory,
|
||||
} from "../../../platform/background/service-factories/factory-options";
|
||||
import {
|
||||
stateServiceFactory,
|
||||
StateServiceInitOptions,
|
||||
} from "../../../platform/background/service-factories/state-service.factory";
|
||||
|
||||
type AuthRequestServiceFactoryOptions = FactoryOptions;
|
||||
|
||||
export type AuthRequestServiceInitOptions = AuthRequestServiceFactoryOptions &
|
||||
AppIdServiceInitOptions &
|
||||
CryptoServiceInitOptions &
|
||||
ApiServiceInitOptions &
|
||||
StateServiceInitOptions;
|
||||
|
||||
export function authRequestServiceFactory(
|
||||
cache: { authRequestService?: AuthRequestServiceAbstraction } & CachedServices,
|
||||
opts: AuthRequestServiceInitOptions,
|
||||
): Promise<AuthRequestServiceAbstraction> {
|
||||
return factory(
|
||||
cache,
|
||||
"authRequestService",
|
||||
opts,
|
||||
async () =>
|
||||
new AuthRequestService(
|
||||
await appIdServiceFactory(cache, opts),
|
||||
await cryptoServiceFactory(cache, opts),
|
||||
await apiServiceFactory(cache, opts),
|
||||
await stateServiceFactory(cache, opts),
|
||||
),
|
||||
);
|
||||
}
|
@ -30,6 +30,10 @@ import {
|
||||
I18nServiceInitOptions,
|
||||
i18nServiceFactory,
|
||||
} from "../../../platform/background/service-factories/i18n-service.factory";
|
||||
import {
|
||||
KeyGenerationServiceInitOptions,
|
||||
keyGenerationServiceFactory,
|
||||
} from "../../../platform/background/service-factories/key-generation-service.factory";
|
||||
import {
|
||||
PlatformUtilsServiceInitOptions,
|
||||
platformUtilsServiceFactory,
|
||||
@ -42,6 +46,7 @@ import {
|
||||
type DeviceTrustCryptoServiceFactoryOptions = FactoryOptions;
|
||||
|
||||
export type DeviceTrustCryptoServiceInitOptions = DeviceTrustCryptoServiceFactoryOptions &
|
||||
KeyGenerationServiceInitOptions &
|
||||
CryptoFunctionServiceInitOptions &
|
||||
CryptoServiceInitOptions &
|
||||
EncryptServiceInitOptions &
|
||||
@ -61,6 +66,7 @@ export function deviceTrustCryptoServiceFactory(
|
||||
opts,
|
||||
async () =>
|
||||
new DeviceTrustCryptoService(
|
||||
await keyGenerationServiceFactory(cache, opts),
|
||||
await cryptoFunctionServiceFactory(cache, opts),
|
||||
await cryptoServiceFactory(cache, opts),
|
||||
await encryptServiceFactory(cache, opts),
|
||||
|
@ -9,10 +9,6 @@ import {
|
||||
apiServiceFactory,
|
||||
ApiServiceInitOptions,
|
||||
} from "../../../platform/background/service-factories/api-service.factory";
|
||||
import {
|
||||
CryptoFunctionServiceInitOptions,
|
||||
cryptoFunctionServiceFactory,
|
||||
} from "../../../platform/background/service-factories/crypto-function-service.factory";
|
||||
import {
|
||||
CryptoServiceInitOptions,
|
||||
cryptoServiceFactory,
|
||||
@ -22,6 +18,10 @@ import {
|
||||
CachedServices,
|
||||
factory,
|
||||
} from "../../../platform/background/service-factories/factory-options";
|
||||
import {
|
||||
KeyGenerationServiceInitOptions,
|
||||
keyGenerationServiceFactory,
|
||||
} from "../../../platform/background/service-factories/key-generation-service.factory";
|
||||
import {
|
||||
logServiceFactory,
|
||||
LogServiceInitOptions,
|
||||
@ -46,7 +46,7 @@ export type KeyConnectorServiceInitOptions = KeyConnectorServiceFactoryOptions &
|
||||
TokenServiceInitOptions &
|
||||
LogServiceInitOptions &
|
||||
OrganizationServiceInitOptions &
|
||||
CryptoFunctionServiceInitOptions;
|
||||
KeyGenerationServiceInitOptions;
|
||||
|
||||
export function keyConnectorServiceFactory(
|
||||
cache: { keyConnectorService?: AbstractKeyConnectorService } & CachedServices,
|
||||
@ -64,7 +64,7 @@ export function keyConnectorServiceFactory(
|
||||
await tokenServiceFactory(cache, opts),
|
||||
await logServiceFactory(cache, opts),
|
||||
await organizationServiceFactory(cache, opts),
|
||||
await cryptoFunctionServiceFactory(cache, opts),
|
||||
await keyGenerationServiceFactory(cache, opts),
|
||||
opts.keyConnectorServiceOptions.logoutCallback,
|
||||
),
|
||||
);
|
||||
|
@ -52,9 +52,9 @@ import {
|
||||
} from "../../../tools/background/service_factories/password-strength-service.factory";
|
||||
|
||||
import {
|
||||
authRequestCryptoServiceFactory,
|
||||
AuthRequestCryptoServiceInitOptions,
|
||||
} from "./auth-request-crypto-service.factory";
|
||||
authRequestServiceFactory,
|
||||
AuthRequestServiceInitOptions,
|
||||
} from "./auth-request-service.factory";
|
||||
import {
|
||||
deviceTrustCryptoServiceFactory,
|
||||
DeviceTrustCryptoServiceInitOptions,
|
||||
@ -84,7 +84,7 @@ export type LoginStrategyServiceInitOptions = LoginStrategyServiceFactoryOptions
|
||||
PolicyServiceInitOptions &
|
||||
PasswordStrengthServiceInitOptions &
|
||||
DeviceTrustCryptoServiceInitOptions &
|
||||
AuthRequestCryptoServiceInitOptions;
|
||||
AuthRequestServiceInitOptions;
|
||||
|
||||
export function loginStrategyServiceFactory(
|
||||
cache: { loginStrategyService?: LoginStrategyServiceAbstraction } & CachedServices,
|
||||
@ -112,7 +112,7 @@ export function loginStrategyServiceFactory(
|
||||
await passwordStrengthServiceFactory(cache, opts),
|
||||
await policyServiceFactory(cache, opts),
|
||||
await deviceTrustCryptoServiceFactory(cache, opts),
|
||||
await authRequestCryptoServiceFactory(cache, opts),
|
||||
await authRequestServiceFactory(cache, opts),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { Component, NgZone } from "@angular/core";
|
||||
import { Router } from "@angular/router";
|
||||
import { firstValueFrom } from "rxjs";
|
||||
|
||||
import { LockComponent as BaseLockComponent } from "@bitwarden/angular/auth/components/lock.component";
|
||||
import { PinCryptoServiceAbstraction } from "@bitwarden/auth/common";
|
||||
@ -19,6 +20,7 @@ import { LogService } from "@bitwarden/common/platform/abstractions/log.service"
|
||||
import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service";
|
||||
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
|
||||
import { StateService } from "@bitwarden/common/platform/abstractions/state.service";
|
||||
import { BiometricStateService } from "@bitwarden/common/platform/biometrics/biometric-state.service";
|
||||
import { PasswordStrengthServiceAbstraction } from "@bitwarden/common/tools/password-strength";
|
||||
import { DialogService } from "@bitwarden/components";
|
||||
|
||||
@ -59,6 +61,7 @@ export class LockComponent extends BaseLockComponent {
|
||||
userVerificationService: UserVerificationService,
|
||||
pinCryptoService: PinCryptoServiceAbstraction,
|
||||
private routerService: BrowserRouterService,
|
||||
biometricStateService: BiometricStateService,
|
||||
) {
|
||||
super(
|
||||
router,
|
||||
@ -80,6 +83,7 @@ export class LockComponent extends BaseLockComponent {
|
||||
deviceTrustCryptoService,
|
||||
userVerificationService,
|
||||
pinCryptoService,
|
||||
biometricStateService,
|
||||
);
|
||||
this.successRoute = "/tabs/current";
|
||||
this.isInitialLockScreen = (window as any).previousPopupUrl == null;
|
||||
@ -100,14 +104,15 @@ export class LockComponent extends BaseLockComponent {
|
||||
|
||||
async ngOnInit() {
|
||||
await super.ngOnInit();
|
||||
const disableAutoBiometricsPrompt =
|
||||
(await this.stateService.getDisableAutoBiometricsPrompt()) ?? true;
|
||||
const autoBiometricsPrompt = await firstValueFrom(
|
||||
this.biometricStateService.promptAutomatically$,
|
||||
);
|
||||
|
||||
window.setTimeout(async () => {
|
||||
document.getElementById(this.pinEnabled ? "pin" : "masterPassword")?.focus();
|
||||
if (
|
||||
this.biometricLock &&
|
||||
!disableAutoBiometricsPrompt &&
|
||||
autoBiometricsPrompt &&
|
||||
this.isInitialLockScreen &&
|
||||
(await this.authService.getAuthStatus()) === AuthenticationStatus.Locked
|
||||
) {
|
||||
|
@ -3,10 +3,12 @@ import { Component, OnDestroy, OnInit } from "@angular/core";
|
||||
import { Router } from "@angular/router";
|
||||
|
||||
import { LoginViaAuthRequestComponent as BaseLoginWithDeviceComponent } from "@bitwarden/angular/auth/components/login-via-auth-request.component";
|
||||
import { LoginStrategyServiceAbstraction } from "@bitwarden/auth/common";
|
||||
import {
|
||||
AuthRequestServiceAbstraction,
|
||||
LoginStrategyServiceAbstraction,
|
||||
} from "@bitwarden/auth/common";
|
||||
import { ApiService } from "@bitwarden/common/abstractions/api.service";
|
||||
import { AnonymousHubService } from "@bitwarden/common/auth/abstractions/anonymous-hub.service";
|
||||
import { AuthRequestCryptoServiceAbstraction } from "@bitwarden/common/auth/abstractions/auth-request-crypto.service.abstraction";
|
||||
import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
|
||||
import { DeviceTrustCryptoServiceAbstraction } from "@bitwarden/common/auth/abstractions/device-trust-crypto.service.abstraction";
|
||||
import { LoginService } from "@bitwarden/common/auth/abstractions/login.service";
|
||||
@ -48,7 +50,7 @@ export class LoginViaAuthRequestComponent
|
||||
loginService: LoginService,
|
||||
syncService: SyncService,
|
||||
deviceTrustCryptoService: DeviceTrustCryptoServiceAbstraction,
|
||||
authReqCryptoService: AuthRequestCryptoServiceAbstraction,
|
||||
authRequestService: AuthRequestServiceAbstraction,
|
||||
loginStrategyService: LoginStrategyServiceAbstraction,
|
||||
private location: Location,
|
||||
) {
|
||||
@ -69,7 +71,7 @@ export class LoginViaAuthRequestComponent
|
||||
stateService,
|
||||
loginService,
|
||||
deviceTrustCryptoService,
|
||||
authReqCryptoService,
|
||||
authRequestService,
|
||||
loginStrategyService,
|
||||
);
|
||||
super.onSuccessfulLogin = async () => {
|
||||
|
@ -88,6 +88,8 @@ type NotificationBackgroundExtensionMessage = {
|
||||
notificationType?: string;
|
||||
};
|
||||
|
||||
type SaveOrUpdateCipherResult = undefined | { error: string };
|
||||
|
||||
type BackgroundMessageParam = { message: NotificationBackgroundExtensionMessage };
|
||||
type BackgroundSenderParam = { sender: chrome.runtime.MessageSender };
|
||||
type BackgroundOnMessageHandlerParams = BackgroundMessageParam & BackgroundSenderParam;
|
||||
@ -107,6 +109,9 @@ type NotificationBackgroundExtensionMessageHandlers = {
|
||||
bgReopenUnlockPopout: ({ sender }: BackgroundSenderParam) => Promise<void>;
|
||||
checkNotificationQueue: ({ sender }: BackgroundSenderParam) => Promise<void>;
|
||||
collectPageDetailsResponse: ({ message }: BackgroundMessageParam) => Promise<void>;
|
||||
bgGetEnableChangedPasswordPrompt: () => Promise<boolean>;
|
||||
bgGetEnableAddedLoginPrompt: () => Promise<boolean>;
|
||||
getWebVaultUrlForNotification: () => string;
|
||||
};
|
||||
|
||||
export {
|
||||
@ -120,6 +125,7 @@ export {
|
||||
ChangePasswordMessageData,
|
||||
UnlockVaultMessageData,
|
||||
AddLoginMessageData,
|
||||
SaveOrUpdateCipherResult,
|
||||
NotificationBackgroundExtensionMessage,
|
||||
NotificationBackgroundExtensionMessageHandlers,
|
||||
};
|
||||
|
@ -4,6 +4,7 @@ import { firstValueFrom } from "rxjs";
|
||||
import { PolicyService } from "@bitwarden/common/admin-console/services/policy/policy.service";
|
||||
import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
|
||||
import { AuthService } from "@bitwarden/common/auth/services/auth.service";
|
||||
import { UserNotificationSettingsService } from "@bitwarden/common/autofill/services/user-notification-settings.service";
|
||||
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
|
||||
import { EnvironmentService } from "@bitwarden/common/platform/services/environment.service";
|
||||
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
|
||||
@ -20,6 +21,7 @@ import { createAutofillPageDetailsMock, createChromeTabMock } from "../spec/auto
|
||||
import { flushPromises, sendExtensionRuntimeMessage } from "../spec/testing-utils";
|
||||
|
||||
import {
|
||||
AddChangePasswordQueueMessage,
|
||||
AddLoginQueueMessage,
|
||||
AddUnlockVaultQueueMessage,
|
||||
LockedVaultPendingNotificationsData,
|
||||
@ -44,6 +46,7 @@ describe("NotificationBackground", () => {
|
||||
const policyService = mock<PolicyService>();
|
||||
const folderService = mock<FolderService>();
|
||||
const stateService = mock<BrowserStateService>();
|
||||
const userNotificationSettingsService = mock<UserNotificationSettingsService>();
|
||||
const environmentService = mock<EnvironmentService>();
|
||||
const logService = mock<LogService>();
|
||||
|
||||
@ -55,6 +58,7 @@ describe("NotificationBackground", () => {
|
||||
policyService,
|
||||
folderService,
|
||||
stateService,
|
||||
userNotificationSettingsService,
|
||||
environmentService,
|
||||
logService,
|
||||
);
|
||||
@ -234,8 +238,8 @@ describe("NotificationBackground", () => {
|
||||
let tab: chrome.tabs.Tab;
|
||||
let sender: chrome.runtime.MessageSender;
|
||||
let getAuthStatusSpy: jest.SpyInstance;
|
||||
let getDisableAddLoginNotificationSpy: jest.SpyInstance;
|
||||
let getDisableChangedPasswordNotificationSpy: jest.SpyInstance;
|
||||
let getEnableAddedLoginPromptSpy: jest.SpyInstance;
|
||||
let getEnableChangedPasswordPromptSpy: jest.SpyInstance;
|
||||
let pushAddLoginToQueueSpy: jest.SpyInstance;
|
||||
let pushChangePasswordToQueueSpy: jest.SpyInstance;
|
||||
let getAllDecryptedForUrlSpy: jest.SpyInstance;
|
||||
@ -244,13 +248,13 @@ describe("NotificationBackground", () => {
|
||||
tab = createChromeTabMock();
|
||||
sender = mock<chrome.runtime.MessageSender>({ tab });
|
||||
getAuthStatusSpy = jest.spyOn(authService, "getAuthStatus");
|
||||
getDisableAddLoginNotificationSpy = jest.spyOn(
|
||||
stateService,
|
||||
"getDisableAddLoginNotification",
|
||||
getEnableAddedLoginPromptSpy = jest.spyOn(
|
||||
notificationBackground as any,
|
||||
"getEnableAddedLoginPrompt",
|
||||
);
|
||||
getDisableChangedPasswordNotificationSpy = jest.spyOn(
|
||||
stateService,
|
||||
"getDisableChangedPasswordNotification",
|
||||
getEnableChangedPasswordPromptSpy = jest.spyOn(
|
||||
notificationBackground as any,
|
||||
"getEnableChangedPasswordPrompt",
|
||||
);
|
||||
pushAddLoginToQueueSpy = jest.spyOn(notificationBackground as any, "pushAddLoginToQueue");
|
||||
pushChangePasswordToQueueSpy = jest.spyOn(
|
||||
@ -271,7 +275,7 @@ describe("NotificationBackground", () => {
|
||||
await flushPromises();
|
||||
|
||||
expect(getAuthStatusSpy).toHaveBeenCalled();
|
||||
expect(getDisableAddLoginNotificationSpy).not.toHaveBeenCalled();
|
||||
expect(getEnableAddedLoginPromptSpy).not.toHaveBeenCalled();
|
||||
expect(pushAddLoginToQueueSpy).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
@ -286,7 +290,7 @@ describe("NotificationBackground", () => {
|
||||
await flushPromises();
|
||||
|
||||
expect(getAuthStatusSpy).toHaveBeenCalled();
|
||||
expect(getDisableAddLoginNotificationSpy).not.toHaveBeenCalled();
|
||||
expect(getEnableAddedLoginPromptSpy).not.toHaveBeenCalled();
|
||||
expect(pushAddLoginToQueueSpy).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
@ -296,13 +300,13 @@ describe("NotificationBackground", () => {
|
||||
login: { username: "test", password: "password", url: "https://example.com" },
|
||||
};
|
||||
getAuthStatusSpy.mockResolvedValueOnce(AuthenticationStatus.Locked);
|
||||
getDisableAddLoginNotificationSpy.mockReturnValueOnce(true);
|
||||
getEnableAddedLoginPromptSpy.mockReturnValueOnce(false);
|
||||
|
||||
sendExtensionRuntimeMessage(message, sender);
|
||||
await flushPromises();
|
||||
|
||||
expect(getAuthStatusSpy).toHaveBeenCalled();
|
||||
expect(getDisableAddLoginNotificationSpy).toHaveBeenCalled();
|
||||
expect(getEnableAddedLoginPromptSpy).toHaveBeenCalled();
|
||||
expect(getAllDecryptedForUrlSpy).not.toHaveBeenCalled();
|
||||
expect(pushAddLoginToQueueSpy).not.toHaveBeenCalled();
|
||||
expect(pushChangePasswordToQueueSpy).not.toHaveBeenCalled();
|
||||
@ -314,14 +318,14 @@ describe("NotificationBackground", () => {
|
||||
login: { username: "test", password: "password", url: "https://example.com" },
|
||||
};
|
||||
getAuthStatusSpy.mockResolvedValueOnce(AuthenticationStatus.Unlocked);
|
||||
getDisableAddLoginNotificationSpy.mockReturnValueOnce(true);
|
||||
getEnableAddedLoginPromptSpy.mockReturnValueOnce(false);
|
||||
getAllDecryptedForUrlSpy.mockResolvedValueOnce([]);
|
||||
|
||||
sendExtensionRuntimeMessage(message, sender);
|
||||
await flushPromises();
|
||||
|
||||
expect(getAuthStatusSpy).toHaveBeenCalled();
|
||||
expect(getDisableAddLoginNotificationSpy).toHaveBeenCalled();
|
||||
expect(getEnableAddedLoginPromptSpy).toHaveBeenCalled();
|
||||
expect(getAllDecryptedForUrlSpy).toHaveBeenCalled();
|
||||
expect(pushAddLoginToQueueSpy).not.toHaveBeenCalled();
|
||||
expect(pushChangePasswordToQueueSpy).not.toHaveBeenCalled();
|
||||
@ -333,8 +337,8 @@ describe("NotificationBackground", () => {
|
||||
login: { username: "test", password: "password", url: "https://example.com" },
|
||||
};
|
||||
getAuthStatusSpy.mockResolvedValueOnce(AuthenticationStatus.Unlocked);
|
||||
getDisableAddLoginNotificationSpy.mockReturnValueOnce(false);
|
||||
getDisableChangedPasswordNotificationSpy.mockReturnValueOnce(true);
|
||||
getEnableAddedLoginPromptSpy.mockReturnValueOnce(true);
|
||||
getEnableChangedPasswordPromptSpy.mockReturnValueOnce(false);
|
||||
getAllDecryptedForUrlSpy.mockResolvedValueOnce([
|
||||
mock<CipherView>({ login: { username: "test", password: "oldPassword" } }),
|
||||
]);
|
||||
@ -343,9 +347,9 @@ describe("NotificationBackground", () => {
|
||||
await flushPromises();
|
||||
|
||||
expect(getAuthStatusSpy).toHaveBeenCalled();
|
||||
expect(getDisableAddLoginNotificationSpy).toHaveBeenCalled();
|
||||
expect(getEnableAddedLoginPromptSpy).toHaveBeenCalled();
|
||||
expect(getAllDecryptedForUrlSpy).toHaveBeenCalled();
|
||||
expect(getDisableChangedPasswordNotificationSpy).toHaveBeenCalled();
|
||||
expect(getEnableChangedPasswordPromptSpy).toHaveBeenCalled();
|
||||
expect(pushAddLoginToQueueSpy).not.toHaveBeenCalled();
|
||||
expect(pushChangePasswordToQueueSpy).not.toHaveBeenCalled();
|
||||
});
|
||||
@ -356,7 +360,7 @@ describe("NotificationBackground", () => {
|
||||
login: { username: "test", password: "password", url: "https://example.com" },
|
||||
};
|
||||
getAuthStatusSpy.mockResolvedValueOnce(AuthenticationStatus.Unlocked);
|
||||
getDisableAddLoginNotificationSpy.mockReturnValueOnce(false);
|
||||
getEnableAddedLoginPromptSpy.mockReturnValueOnce(true);
|
||||
getAllDecryptedForUrlSpy.mockResolvedValueOnce([
|
||||
mock<CipherView>({ login: { username: "test", password: "password" } }),
|
||||
]);
|
||||
@ -365,7 +369,7 @@ describe("NotificationBackground", () => {
|
||||
await flushPromises();
|
||||
|
||||
expect(getAuthStatusSpy).toHaveBeenCalled();
|
||||
expect(getDisableAddLoginNotificationSpy).toHaveBeenCalled();
|
||||
expect(getEnableAddedLoginPromptSpy).toHaveBeenCalled();
|
||||
expect(getAllDecryptedForUrlSpy).toHaveBeenCalled();
|
||||
expect(pushAddLoginToQueueSpy).not.toHaveBeenCalled();
|
||||
expect(pushChangePasswordToQueueSpy).not.toHaveBeenCalled();
|
||||
@ -375,7 +379,7 @@ describe("NotificationBackground", () => {
|
||||
const login = { username: "test", password: "password", url: "https://example.com" };
|
||||
const message: NotificationBackgroundExtensionMessage = { command: "bgAddLogin", login };
|
||||
getAuthStatusSpy.mockResolvedValueOnce(AuthenticationStatus.Locked);
|
||||
getDisableAddLoginNotificationSpy.mockReturnValueOnce(false);
|
||||
getEnableAddedLoginPromptSpy.mockReturnValueOnce(true);
|
||||
|
||||
sendExtensionRuntimeMessage(message, sender);
|
||||
await flushPromises();
|
||||
@ -392,7 +396,7 @@ describe("NotificationBackground", () => {
|
||||
} as any;
|
||||
const message: NotificationBackgroundExtensionMessage = { command: "bgAddLogin", login };
|
||||
getAuthStatusSpy.mockResolvedValueOnce(AuthenticationStatus.Unlocked);
|
||||
getDisableAddLoginNotificationSpy.mockReturnValueOnce(false);
|
||||
getEnableAddedLoginPromptSpy.mockReturnValueOnce(true);
|
||||
getAllDecryptedForUrlSpy.mockResolvedValueOnce([
|
||||
mock<CipherView>({ login: { username: "anotherTestUsername", password: "password" } }),
|
||||
]);
|
||||
@ -408,7 +412,8 @@ describe("NotificationBackground", () => {
|
||||
const login = { username: "tEsT", password: "password", url: "https://example.com" };
|
||||
const message: NotificationBackgroundExtensionMessage = { command: "bgAddLogin", login };
|
||||
getAuthStatusSpy.mockResolvedValueOnce(AuthenticationStatus.Unlocked);
|
||||
getDisableAddLoginNotificationSpy.mockReturnValueOnce(false);
|
||||
getEnableAddedLoginPromptSpy.mockResolvedValueOnce(true);
|
||||
getEnableChangedPasswordPromptSpy.mockResolvedValueOnce(true);
|
||||
getAllDecryptedForUrlSpy.mockResolvedValueOnce([
|
||||
mock<CipherView>({
|
||||
id: "cipher-id",
|
||||
@ -640,6 +645,424 @@ describe("NotificationBackground", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("bgSaveCipher message handler", () => {
|
||||
let getAuthStatusSpy: jest.SpyInstance;
|
||||
let tabSendMessageDataSpy: jest.SpyInstance;
|
||||
let openUnlockPopoutSpy: jest.SpyInstance;
|
||||
|
||||
beforeEach(() => {
|
||||
getAuthStatusSpy = jest.spyOn(authService, "getAuthStatus");
|
||||
tabSendMessageDataSpy = jest.spyOn(BrowserApi, "tabSendMessageData").mockImplementation();
|
||||
openUnlockPopoutSpy = jest
|
||||
.spyOn(notificationBackground as any, "openUnlockPopout")
|
||||
.mockImplementation();
|
||||
});
|
||||
|
||||
it("skips saving the cipher and opens an unlock popout if the extension is not unlocked", async () => {
|
||||
const sender = mock<chrome.runtime.MessageSender>({ tab: { id: 1 } });
|
||||
const message: NotificationBackgroundExtensionMessage = {
|
||||
command: "bgSaveCipher",
|
||||
edit: false,
|
||||
folder: "folder-id",
|
||||
};
|
||||
getAuthStatusSpy.mockResolvedValueOnce(AuthenticationStatus.Locked);
|
||||
|
||||
sendExtensionRuntimeMessage(message, sender);
|
||||
await flushPromises();
|
||||
|
||||
expect(getAuthStatusSpy).toHaveBeenCalled();
|
||||
expect(tabSendMessageDataSpy).toHaveBeenCalledWith(
|
||||
sender.tab,
|
||||
"addToLockedVaultPendingNotifications",
|
||||
{
|
||||
commandToRetry: { message, sender },
|
||||
target: "notification.background",
|
||||
},
|
||||
);
|
||||
expect(openUnlockPopoutSpy).toHaveBeenCalledWith(sender.tab);
|
||||
});
|
||||
|
||||
describe("saveOrUpdateCredentials", () => {
|
||||
let getDecryptedCipherByIdSpy: jest.SpyInstance;
|
||||
let getAllDecryptedForUrlSpy: jest.SpyInstance;
|
||||
let updatePasswordSpy: jest.SpyInstance;
|
||||
let convertAddLoginQueueMessageToCipherViewSpy: jest.SpyInstance;
|
||||
let tabSendMessageSpy: jest.SpyInstance;
|
||||
let editItemSpy: jest.SpyInstance;
|
||||
let setAddEditCipherInfoSpy: jest.SpyInstance;
|
||||
let openAddEditVaultItemPopoutSpy: jest.SpyInstance;
|
||||
let createWithServerSpy: jest.SpyInstance;
|
||||
let updateWithServerSpy: jest.SpyInstance;
|
||||
let folderExistsSpy: jest.SpyInstance;
|
||||
let cipherEncryptSpy: jest.SpyInstance;
|
||||
|
||||
beforeEach(() => {
|
||||
getAuthStatusSpy.mockResolvedValueOnce(AuthenticationStatus.Unlocked);
|
||||
getDecryptedCipherByIdSpy = jest.spyOn(
|
||||
notificationBackground as any,
|
||||
"getDecryptedCipherById",
|
||||
);
|
||||
getAllDecryptedForUrlSpy = jest.spyOn(cipherService, "getAllDecryptedForUrl");
|
||||
updatePasswordSpy = jest.spyOn(notificationBackground as any, "updatePassword");
|
||||
convertAddLoginQueueMessageToCipherViewSpy = jest.spyOn(
|
||||
notificationBackground as any,
|
||||
"convertAddLoginQueueMessageToCipherView",
|
||||
);
|
||||
tabSendMessageSpy = jest.spyOn(BrowserApi, "tabSendMessage").mockImplementation();
|
||||
editItemSpy = jest.spyOn(notificationBackground as any, "editItem");
|
||||
setAddEditCipherInfoSpy = jest.spyOn(stateService, "setAddEditCipherInfo");
|
||||
openAddEditVaultItemPopoutSpy = jest.spyOn(
|
||||
notificationBackground as any,
|
||||
"openAddEditVaultItemPopout",
|
||||
);
|
||||
createWithServerSpy = jest.spyOn(cipherService, "createWithServer");
|
||||
updateWithServerSpy = jest.spyOn(cipherService, "updateWithServer");
|
||||
folderExistsSpy = jest.spyOn(notificationBackground as any, "folderExists");
|
||||
cipherEncryptSpy = jest.spyOn(cipherService, "encrypt");
|
||||
});
|
||||
|
||||
it("skips saving the cipher if the notification queue does not have a tab that is related to the sender", async () => {
|
||||
const sender = mock<chrome.runtime.MessageSender>({ tab: { id: 2 } });
|
||||
const message: NotificationBackgroundExtensionMessage = {
|
||||
command: "bgSaveCipher",
|
||||
edit: false,
|
||||
folder: "folder-id",
|
||||
};
|
||||
notificationBackground["notificationQueue"] = [
|
||||
mock<AddLoginQueueMessage>({
|
||||
tab: createChromeTabMock({ id: 1 }),
|
||||
}),
|
||||
];
|
||||
|
||||
sendExtensionRuntimeMessage(message, sender);
|
||||
await flushPromises();
|
||||
|
||||
expect(updatePasswordSpy).not.toHaveBeenCalled();
|
||||
expect(editItemSpy).not.toHaveBeenCalled();
|
||||
expect(createWithServerSpy).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("skips saving the cipher if the notification queue does not contain an AddLogin or ChangePassword type", async () => {
|
||||
const tab = createChromeTabMock({ id: 1 });
|
||||
const sender = mock<chrome.runtime.MessageSender>({ tab });
|
||||
const message: NotificationBackgroundExtensionMessage = {
|
||||
command: "bgSaveCipher",
|
||||
edit: false,
|
||||
folder: "folder-id",
|
||||
};
|
||||
notificationBackground["notificationQueue"] = [
|
||||
mock<AddUnlockVaultQueueMessage>({
|
||||
tab,
|
||||
type: NotificationQueueMessageType.UnlockVault,
|
||||
}),
|
||||
];
|
||||
|
||||
sendExtensionRuntimeMessage(message, sender);
|
||||
await flushPromises();
|
||||
|
||||
expect(updatePasswordSpy).not.toHaveBeenCalled();
|
||||
expect(editItemSpy).not.toHaveBeenCalled();
|
||||
expect(createWithServerSpy).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("skips saving the cipher if the notification queue message has a different domain than the passed tab", () => {
|
||||
const tab = createChromeTabMock({ id: 1, url: "https://example.com" });
|
||||
const sender = mock<chrome.runtime.MessageSender>({ tab });
|
||||
const message: NotificationBackgroundExtensionMessage = {
|
||||
command: "bgSaveCipher",
|
||||
edit: false,
|
||||
folder: "folder-id",
|
||||
};
|
||||
notificationBackground["notificationQueue"] = [
|
||||
mock<AddLoginQueueMessage>({
|
||||
type: NotificationQueueMessageType.AddLogin,
|
||||
tab,
|
||||
domain: "another.com",
|
||||
}),
|
||||
];
|
||||
|
||||
sendExtensionRuntimeMessage(message, sender);
|
||||
expect(updatePasswordSpy).not.toHaveBeenCalled();
|
||||
expect(editItemSpy).not.toHaveBeenCalled();
|
||||
expect(createWithServerSpy).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("updates the password if the notification message type is for ChangePassword", async () => {
|
||||
const tab = createChromeTabMock({ id: 1, url: "https://example.com" });
|
||||
const sender = mock<chrome.runtime.MessageSender>({ tab });
|
||||
const message: NotificationBackgroundExtensionMessage = {
|
||||
command: "bgSaveCipher",
|
||||
edit: false,
|
||||
folder: "folder-id",
|
||||
};
|
||||
const queueMessage = mock<AddChangePasswordQueueMessage>({
|
||||
type: NotificationQueueMessageType.ChangePassword,
|
||||
tab,
|
||||
domain: "example.com",
|
||||
newPassword: "newPassword",
|
||||
});
|
||||
notificationBackground["notificationQueue"] = [queueMessage];
|
||||
const cipherView = mock<CipherView>();
|
||||
getDecryptedCipherByIdSpy.mockResolvedValueOnce(cipherView);
|
||||
|
||||
sendExtensionRuntimeMessage(message, sender);
|
||||
await flushPromises();
|
||||
|
||||
expect(editItemSpy).not.toHaveBeenCalled();
|
||||
expect(createWithServerSpy).not.toHaveBeenCalled();
|
||||
expect(updatePasswordSpy).toHaveBeenCalledWith(
|
||||
cipherView,
|
||||
queueMessage.newPassword,
|
||||
message.edit,
|
||||
sender.tab,
|
||||
);
|
||||
expect(updateWithServerSpy).toHaveBeenCalled();
|
||||
expect(tabSendMessageSpy).toHaveBeenCalledWith(sender.tab, {
|
||||
command: "saveCipherAttemptCompleted",
|
||||
});
|
||||
});
|
||||
|
||||
it("updates the cipher password if the queue message was locked and an existing cipher has the same username as the message", async () => {
|
||||
const tab = createChromeTabMock({ id: 1, url: "https://example.com" });
|
||||
const sender = mock<chrome.runtime.MessageSender>({ tab });
|
||||
const message: NotificationBackgroundExtensionMessage = {
|
||||
command: "bgSaveCipher",
|
||||
edit: false,
|
||||
folder: "folder-id",
|
||||
};
|
||||
const queueMessage = mock<AddLoginQueueMessage>({
|
||||
type: NotificationQueueMessageType.AddLogin,
|
||||
tab,
|
||||
domain: "example.com",
|
||||
username: "test",
|
||||
password: "updated-password",
|
||||
wasVaultLocked: true,
|
||||
});
|
||||
notificationBackground["notificationQueue"] = [queueMessage];
|
||||
const cipherView = mock<CipherView>({
|
||||
login: { username: "test", password: "old-password" },
|
||||
});
|
||||
getAllDecryptedForUrlSpy.mockResolvedValueOnce([cipherView]);
|
||||
|
||||
sendExtensionRuntimeMessage(message, sender);
|
||||
await flushPromises();
|
||||
|
||||
expect(updatePasswordSpy).toHaveBeenCalledWith(
|
||||
cipherView,
|
||||
queueMessage.password,
|
||||
message.edit,
|
||||
sender.tab,
|
||||
);
|
||||
expect(editItemSpy).not.toHaveBeenCalled();
|
||||
expect(createWithServerSpy).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("opens an editItem window and closes the notification bar if the edit value is within the passed message when attempting to update an existing cipher", async () => {
|
||||
const tab = createChromeTabMock({ id: 1, url: "https://example.com" });
|
||||
const sender = mock<chrome.runtime.MessageSender>({ tab });
|
||||
const message: NotificationBackgroundExtensionMessage = {
|
||||
command: "bgSaveCipher",
|
||||
edit: true,
|
||||
folder: "folder-id",
|
||||
};
|
||||
const queueMessage = mock<AddChangePasswordQueueMessage>({
|
||||
type: NotificationQueueMessageType.ChangePassword,
|
||||
tab,
|
||||
domain: "example.com",
|
||||
newPassword: "newPassword",
|
||||
});
|
||||
notificationBackground["notificationQueue"] = [queueMessage];
|
||||
const cipherView = mock<CipherView>();
|
||||
getDecryptedCipherByIdSpy.mockResolvedValueOnce(cipherView);
|
||||
setAddEditCipherInfoSpy.mockResolvedValue(undefined);
|
||||
openAddEditVaultItemPopoutSpy.mockResolvedValue(undefined);
|
||||
|
||||
sendExtensionRuntimeMessage(message, sender);
|
||||
await flushPromises();
|
||||
|
||||
expect(updatePasswordSpy).toHaveBeenCalledWith(
|
||||
cipherView,
|
||||
queueMessage.newPassword,
|
||||
message.edit,
|
||||
sender.tab,
|
||||
);
|
||||
expect(editItemSpy).toHaveBeenCalled();
|
||||
expect(updateWithServerSpy).not.toHaveBeenCalled();
|
||||
expect(tabSendMessageSpy).toHaveBeenCalledWith(sender.tab, {
|
||||
command: "closeNotificationBar",
|
||||
});
|
||||
expect(tabSendMessageSpy).toHaveBeenCalledWith(sender.tab, {
|
||||
command: "editedCipher",
|
||||
});
|
||||
expect(setAddEditCipherInfoSpy).toHaveBeenCalledWith({
|
||||
cipher: cipherView,
|
||||
collectionIds: cipherView.collectionIds,
|
||||
});
|
||||
expect(openAddEditVaultItemPopoutSpy).toHaveBeenCalledWith(sender.tab, {
|
||||
cipherId: cipherView.id,
|
||||
});
|
||||
});
|
||||
|
||||
it("opens an editItem window and closes the notification bar if the edit value is within the passed message when attempting to save the cipher", async () => {
|
||||
const tab = createChromeTabMock({ id: 1, url: "https://example.com" });
|
||||
const sender = mock<chrome.runtime.MessageSender>({ tab });
|
||||
const message: NotificationBackgroundExtensionMessage = {
|
||||
command: "bgSaveCipher",
|
||||
edit: true,
|
||||
folder: "folder-id",
|
||||
};
|
||||
const queueMessage = mock<AddLoginQueueMessage>({
|
||||
type: NotificationQueueMessageType.AddLogin,
|
||||
tab,
|
||||
domain: "example.com",
|
||||
username: "test",
|
||||
password: "password",
|
||||
wasVaultLocked: false,
|
||||
});
|
||||
notificationBackground["notificationQueue"] = [queueMessage];
|
||||
const cipherView = mock<CipherView>({
|
||||
login: { username: "test", password: "password" },
|
||||
});
|
||||
folderExistsSpy.mockResolvedValueOnce(true);
|
||||
convertAddLoginQueueMessageToCipherViewSpy.mockReturnValueOnce(cipherView);
|
||||
editItemSpy.mockResolvedValueOnce(undefined);
|
||||
|
||||
sendExtensionRuntimeMessage(message, sender);
|
||||
await flushPromises();
|
||||
|
||||
expect(updatePasswordSpy).not.toHaveBeenCalled();
|
||||
expect(convertAddLoginQueueMessageToCipherViewSpy).toHaveBeenCalledWith(
|
||||
queueMessage,
|
||||
message.folder,
|
||||
);
|
||||
expect(editItemSpy).toHaveBeenCalledWith(cipherView, sender.tab);
|
||||
expect(tabSendMessageSpy).toHaveBeenCalledWith(sender.tab, {
|
||||
command: "closeNotificationBar",
|
||||
});
|
||||
expect(createWithServerSpy).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("creates the cipher within the server and sends an `saveCipherAttemptCompleted` and `addedCipher` message to the sender tab", async () => {
|
||||
const tab = createChromeTabMock({ id: 1, url: "https://example.com" });
|
||||
const sender = mock<chrome.runtime.MessageSender>({ tab });
|
||||
const message: NotificationBackgroundExtensionMessage = {
|
||||
command: "bgSaveCipher",
|
||||
edit: false,
|
||||
folder: "folder-id",
|
||||
};
|
||||
const queueMessage = mock<AddLoginQueueMessage>({
|
||||
type: NotificationQueueMessageType.AddLogin,
|
||||
tab,
|
||||
domain: "example.com",
|
||||
username: "test",
|
||||
password: "password",
|
||||
wasVaultLocked: false,
|
||||
});
|
||||
notificationBackground["notificationQueue"] = [queueMessage];
|
||||
const cipherView = mock<CipherView>({
|
||||
login: { username: "test", password: "password" },
|
||||
});
|
||||
folderExistsSpy.mockResolvedValueOnce(false);
|
||||
convertAddLoginQueueMessageToCipherViewSpy.mockReturnValueOnce(cipherView);
|
||||
editItemSpy.mockResolvedValueOnce(undefined);
|
||||
|
||||
sendExtensionRuntimeMessage(message, sender);
|
||||
await flushPromises();
|
||||
|
||||
expect(convertAddLoginQueueMessageToCipherViewSpy).toHaveBeenCalledWith(
|
||||
queueMessage,
|
||||
null,
|
||||
);
|
||||
expect(cipherEncryptSpy).toHaveBeenCalledWith(cipherView);
|
||||
expect(createWithServerSpy).toHaveBeenCalled();
|
||||
expect(tabSendMessageSpy).toHaveBeenCalledWith(sender.tab, {
|
||||
command: "saveCipherAttemptCompleted",
|
||||
});
|
||||
expect(tabSendMessageSpy).toHaveBeenCalledWith(sender.tab, { command: "addedCipher" });
|
||||
});
|
||||
|
||||
it("sends an error message within the `saveCipherAttemptCompleted` message if the cipher cannot be saved to the server", async () => {
|
||||
const tab = createChromeTabMock({ id: 1, url: "https://example.com" });
|
||||
const sender = mock<chrome.runtime.MessageSender>({ tab });
|
||||
const message: NotificationBackgroundExtensionMessage = {
|
||||
command: "bgSaveCipher",
|
||||
edit: false,
|
||||
folder: "folder-id",
|
||||
};
|
||||
const queueMessage = mock<AddLoginQueueMessage>({
|
||||
type: NotificationQueueMessageType.AddLogin,
|
||||
tab,
|
||||
domain: "example.com",
|
||||
username: "test",
|
||||
password: "password",
|
||||
wasVaultLocked: false,
|
||||
});
|
||||
notificationBackground["notificationQueue"] = [queueMessage];
|
||||
const cipherView = mock<CipherView>({
|
||||
login: { username: "test", password: "password" },
|
||||
});
|
||||
folderExistsSpy.mockResolvedValueOnce(true);
|
||||
convertAddLoginQueueMessageToCipherViewSpy.mockReturnValueOnce(cipherView);
|
||||
editItemSpy.mockResolvedValueOnce(undefined);
|
||||
const errorMessage = "fetch error";
|
||||
createWithServerSpy.mockImplementation(() => {
|
||||
throw new Error(errorMessage);
|
||||
});
|
||||
|
||||
sendExtensionRuntimeMessage(message, sender);
|
||||
await flushPromises();
|
||||
|
||||
expect(cipherEncryptSpy).toHaveBeenCalledWith(cipherView);
|
||||
expect(createWithServerSpy).toThrow(errorMessage);
|
||||
expect(tabSendMessageSpy).not.toHaveBeenCalledWith(sender.tab, {
|
||||
command: "addedCipher",
|
||||
});
|
||||
expect(tabSendMessageDataSpy).toHaveBeenCalledWith(
|
||||
sender.tab,
|
||||
"saveCipherAttemptCompleted",
|
||||
{
|
||||
error: errorMessage,
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
it("sends an error message within the `saveCipherAttemptCompleted` message if the cipher cannot be updated within the server", async () => {
|
||||
const tab = createChromeTabMock({ id: 1, url: "https://example.com" });
|
||||
const sender = mock<chrome.runtime.MessageSender>({ tab });
|
||||
const message: NotificationBackgroundExtensionMessage = {
|
||||
command: "bgSaveCipher",
|
||||
edit: false,
|
||||
folder: "folder-id",
|
||||
};
|
||||
const queueMessage = mock<AddChangePasswordQueueMessage>({
|
||||
type: NotificationQueueMessageType.ChangePassword,
|
||||
tab,
|
||||
domain: "example.com",
|
||||
newPassword: "newPassword",
|
||||
});
|
||||
notificationBackground["notificationQueue"] = [queueMessage];
|
||||
const cipherView = mock<CipherView>();
|
||||
getDecryptedCipherByIdSpy.mockResolvedValueOnce(cipherView);
|
||||
const errorMessage = "fetch error";
|
||||
updateWithServerSpy.mockImplementation(() => {
|
||||
throw new Error(errorMessage);
|
||||
});
|
||||
|
||||
sendExtensionRuntimeMessage(message, sender);
|
||||
await flushPromises();
|
||||
|
||||
expect(updateWithServerSpy).toThrow(errorMessage);
|
||||
expect(tabSendMessageDataSpy).toHaveBeenCalledWith(
|
||||
sender.tab,
|
||||
"saveCipherAttemptCompleted",
|
||||
{
|
||||
error: errorMessage,
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("bgNeverSave message handler", () => {
|
||||
let tabSendMessageDataSpy: jest.SpyInstance;
|
||||
|
||||
@ -913,5 +1336,23 @@ describe("NotificationBackground", () => {
|
||||
expect(openUnlockWindowSpy).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe("getWebVaultUrlForNotification", () => {
|
||||
it("returns the web vault url", async () => {
|
||||
const message: NotificationBackgroundExtensionMessage = {
|
||||
command: "getWebVaultUrlForNotification",
|
||||
};
|
||||
const webVaultUrl = "https://example.com";
|
||||
const environmentServiceSpy = jest
|
||||
.spyOn(environmentService, "getWebVaultUrl")
|
||||
.mockReturnValueOnce(webVaultUrl);
|
||||
|
||||
sendExtensionRuntimeMessage(message);
|
||||
await flushPromises();
|
||||
|
||||
expect(environmentServiceSpy).toHaveBeenCalled();
|
||||
expect(environmentServiceSpy).toHaveReturnedWith(webVaultUrl);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -4,9 +4,10 @@ import { PolicyService } from "@bitwarden/common/admin-console/abstractions/poli
|
||||
import { PolicyType } from "@bitwarden/common/admin-console/enums";
|
||||
import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
|
||||
import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
|
||||
import { NOTIFICATION_BAR_LIFESPAN_MS } from "@bitwarden/common/autofill/constants";
|
||||
import { UserNotificationSettingsServiceAbstraction } from "@bitwarden/common/autofill/services/user-notification-settings.service";
|
||||
import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service";
|
||||
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
|
||||
import { ThemeType } from "@bitwarden/common/platform/enums";
|
||||
import { Utils } from "@bitwarden/common/platform/misc/utils";
|
||||
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
|
||||
import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction";
|
||||
@ -19,7 +20,6 @@ import { openUnlockPopout } from "../../auth/popup/utils/auth-popout-window";
|
||||
import { BrowserApi } from "../../platform/browser/browser-api";
|
||||
import { BrowserStateService } from "../../platform/services/abstractions/browser-state.service";
|
||||
import { openAddEditVaultItemPopout } from "../../vault/popup/utils/vault-popout-window";
|
||||
import { NOTIFICATION_BAR_LIFESPAN_MS } from "../constants";
|
||||
import { NotificationQueueMessageType } from "../enums/notification-queue-message-type.enum";
|
||||
import { AutofillService } from "../services/abstractions/autofill.service";
|
||||
|
||||
@ -39,6 +39,7 @@ import { OverlayBackgroundExtensionMessage } from "./abstractions/overlay.backgr
|
||||
|
||||
export default class NotificationBackground {
|
||||
private openUnlockPopout = openUnlockPopout;
|
||||
private openAddEditVaultItemPopout = openAddEditVaultItemPopout;
|
||||
private notificationQueue: NotificationQueueMessageItem[] = [];
|
||||
private readonly extensionMessageHandlers: NotificationBackgroundExtensionMessageHandlers = {
|
||||
unlockCompleted: ({ message, sender }) => this.handleUnlockCompleted(message, sender),
|
||||
@ -57,6 +58,9 @@ export default class NotificationBackground {
|
||||
bgUnlockPopoutOpened: ({ message, sender }) => this.unlockVault(message, sender.tab),
|
||||
checkNotificationQueue: ({ sender }) => this.checkNotificationQueue(sender.tab),
|
||||
bgReopenUnlockPopout: ({ sender }) => this.openUnlockPopout(sender.tab),
|
||||
bgGetEnableChangedPasswordPrompt: () => this.getEnableChangedPasswordPrompt(),
|
||||
bgGetEnableAddedLoginPrompt: () => this.getEnableAddedLoginPrompt(),
|
||||
getWebVaultUrlForNotification: () => this.getWebVaultUrl(),
|
||||
};
|
||||
|
||||
constructor(
|
||||
@ -66,6 +70,7 @@ export default class NotificationBackground {
|
||||
private policyService: PolicyService,
|
||||
private folderService: FolderService,
|
||||
private stateService: BrowserStateService,
|
||||
private userNotificationSettingsService: UserNotificationSettingsServiceAbstraction,
|
||||
private environmentService: EnvironmentService,
|
||||
private logService: LogService,
|
||||
) {}
|
||||
@ -80,6 +85,20 @@ export default class NotificationBackground {
|
||||
this.cleanupNotificationQueue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the enableChangedPasswordPrompt setting from the user notification settings service.
|
||||
*/
|
||||
async getEnableChangedPasswordPrompt(): Promise<boolean> {
|
||||
return await firstValueFrom(this.userNotificationSettingsService.enableChangedPasswordPrompt$);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the enableAddedLoginPrompt setting from the user notification settings service.
|
||||
*/
|
||||
async getEnableAddedLoginPrompt(): Promise<boolean> {
|
||||
return await firstValueFrom(this.userNotificationSettingsService.enableAddedLoginPrompt$);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the notification queue for any messages that need to be sent to the
|
||||
* specified tab. If no tab is specified, the current tab will be used.
|
||||
@ -133,11 +152,9 @@ export default class NotificationBackground {
|
||||
notificationQueueMessage: NotificationQueueMessageItem,
|
||||
) {
|
||||
const notificationType = notificationQueueMessage.type;
|
||||
const webVaultURL = this.environmentService.getWebVaultUrl();
|
||||
const typeData: Record<string, any> = {
|
||||
isVaultLocked: notificationQueueMessage.wasVaultLocked,
|
||||
theme: await this.getCurrentTheme(),
|
||||
webVaultURL,
|
||||
theme: await this.stateService.getTheme(),
|
||||
};
|
||||
|
||||
switch (notificationType) {
|
||||
@ -157,18 +174,6 @@ export default class NotificationBackground {
|
||||
});
|
||||
}
|
||||
|
||||
private async getCurrentTheme() {
|
||||
const theme = await this.stateService.getTheme();
|
||||
|
||||
if (theme !== ThemeType.System) {
|
||||
return theme;
|
||||
}
|
||||
|
||||
return window.matchMedia("(prefers-color-scheme: dark)").matches
|
||||
? ThemeType.Dark
|
||||
: ThemeType.Light;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes any login messages from the notification queue that
|
||||
* are associated with the specified tab.
|
||||
@ -207,9 +212,10 @@ export default class NotificationBackground {
|
||||
return;
|
||||
}
|
||||
|
||||
const disabledAddLogin = await this.stateService.getDisableAddLoginNotification();
|
||||
const addLoginIsEnabled = await this.getEnableAddedLoginPrompt();
|
||||
|
||||
if (authStatus === AuthenticationStatus.Locked) {
|
||||
if (!disabledAddLogin) {
|
||||
if (addLoginIsEnabled) {
|
||||
await this.pushAddLoginToQueue(loginDomain, loginInfo, sender.tab, true);
|
||||
}
|
||||
|
||||
@ -220,14 +226,15 @@ export default class NotificationBackground {
|
||||
const usernameMatches = ciphers.filter(
|
||||
(c) => c.login.username != null && c.login.username.toLowerCase() === normalizedUsername,
|
||||
);
|
||||
if (!disabledAddLogin && usernameMatches.length === 0) {
|
||||
if (addLoginIsEnabled && usernameMatches.length === 0) {
|
||||
await this.pushAddLoginToQueue(loginDomain, loginInfo, sender.tab);
|
||||
return;
|
||||
}
|
||||
|
||||
const disabledChangePassword = await this.stateService.getDisableChangedPasswordNotification();
|
||||
const changePasswordIsEnabled = await this.getEnableChangedPasswordPrompt();
|
||||
|
||||
if (
|
||||
!disabledChangePassword &&
|
||||
changePasswordIsEnabled &&
|
||||
usernameMatches.length === 1 &&
|
||||
usernameMatches[0].login.password !== loginInfo.password
|
||||
) {
|
||||
@ -431,6 +438,14 @@ export default class NotificationBackground {
|
||||
this.removeTabFromNotificationQueue(tab);
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves a cipher based on the message sent from the notification bar. If the vault
|
||||
* is locked, the message will be added to the notification queue and the unlock
|
||||
* popout will be opened.
|
||||
*
|
||||
* @param message - The extension message
|
||||
* @param sender - The contextual sender of the message
|
||||
*/
|
||||
private async handleSaveCipherMessage(
|
||||
message: NotificationBackgroundExtensionMessage,
|
||||
sender: chrome.runtime.MessageSender,
|
||||
@ -454,6 +469,14 @@ export default class NotificationBackground {
|
||||
await this.saveOrUpdateCredentials(sender.tab, message.edit, message.folder);
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves or updates credentials based on the message within the
|
||||
* notification queue that is associated with the specified tab.
|
||||
*
|
||||
* @param tab - The tab to save or update credentials for
|
||||
* @param edit - Identifies if the credentials should be edited or simply added
|
||||
* @param folderId - The folder to add the cipher to
|
||||
*/
|
||||
private async saveOrUpdateCredentials(tab: chrome.tabs.Tab, edit: boolean, folderId?: string) {
|
||||
for (let i = this.notificationQueue.length - 1; i >= 0; i--) {
|
||||
const queueMessage = this.notificationQueue[i];
|
||||
@ -471,9 +494,6 @@ export default class NotificationBackground {
|
||||
}
|
||||
|
||||
this.notificationQueue.splice(i, 1);
|
||||
BrowserApi.tabSendMessageData(tab, "closeNotificationBar").catch((error) =>
|
||||
this.logService.error(error),
|
||||
);
|
||||
|
||||
if (queueMessage.type === NotificationQueueMessageType.ChangePassword) {
|
||||
const cipherView = await this.getDecryptedCipherById(queueMessage.cipherId);
|
||||
@ -481,38 +501,52 @@ export default class NotificationBackground {
|
||||
return;
|
||||
}
|
||||
|
||||
if (queueMessage.type === NotificationQueueMessageType.AddLogin) {
|
||||
// If the vault was locked, check if a cipher needs updating instead of creating a new one
|
||||
if (queueMessage.wasVaultLocked) {
|
||||
const allCiphers = await this.cipherService.getAllDecryptedForUrl(queueMessage.uri);
|
||||
const existingCipher = allCiphers.find(
|
||||
(c) =>
|
||||
c.login.username != null && c.login.username.toLowerCase() === queueMessage.username,
|
||||
);
|
||||
// If the vault was locked, check if a cipher needs updating instead of creating a new one
|
||||
if (queueMessage.wasVaultLocked) {
|
||||
const allCiphers = await this.cipherService.getAllDecryptedForUrl(queueMessage.uri);
|
||||
const existingCipher = allCiphers.find(
|
||||
(c) =>
|
||||
c.login.username != null && c.login.username.toLowerCase() === queueMessage.username,
|
||||
);
|
||||
|
||||
if (existingCipher != null) {
|
||||
await this.updatePassword(existingCipher, queueMessage.password, edit, tab);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
folderId = (await this.folderExists(folderId)) ? folderId : null;
|
||||
const newCipher = this.convertAddLoginQueueMessageToCipherView(queueMessage, folderId);
|
||||
|
||||
if (edit) {
|
||||
await this.editItem(newCipher, tab);
|
||||
if (existingCipher != null) {
|
||||
await this.updatePassword(existingCipher, queueMessage.password, edit, tab);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
const cipher = await this.cipherService.encrypt(newCipher);
|
||||
folderId = (await this.folderExists(folderId)) ? folderId : null;
|
||||
const newCipher = this.convertAddLoginQueueMessageToCipherView(queueMessage, folderId);
|
||||
|
||||
if (edit) {
|
||||
await this.editItem(newCipher, tab);
|
||||
await BrowserApi.tabSendMessage(tab, { command: "closeNotificationBar" });
|
||||
return;
|
||||
}
|
||||
|
||||
const cipher = await this.cipherService.encrypt(newCipher);
|
||||
try {
|
||||
await this.cipherService.createWithServer(cipher);
|
||||
BrowserApi.tabSendMessageData(tab, "addedCipher").catch((error) =>
|
||||
this.logService.error(error),
|
||||
);
|
||||
await BrowserApi.tabSendMessage(tab, { command: "saveCipherAttemptCompleted" });
|
||||
await BrowserApi.tabSendMessage(tab, { command: "addedCipher" });
|
||||
} catch (error) {
|
||||
await BrowserApi.tabSendMessageData(tab, "saveCipherAttemptCompleted", {
|
||||
error: String(error.message),
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles updating an existing cipher's password. If the cipher
|
||||
* is being edited, a popup will be opened to allow the user to
|
||||
* edit the cipher.
|
||||
*
|
||||
* @param cipherView - The cipher to update
|
||||
* @param newPassword - The new password to update the cipher with
|
||||
* @param edit - Identifies if the cipher should be edited or simply updated
|
||||
* @param tab - The tab that the message was sent from
|
||||
*/
|
||||
private async updatePassword(
|
||||
cipherView: CipherView,
|
||||
newPassword: string,
|
||||
@ -523,23 +557,37 @@ export default class NotificationBackground {
|
||||
|
||||
if (edit) {
|
||||
await this.editItem(cipherView, tab);
|
||||
await BrowserApi.tabSendMessage(tab, { command: "closeNotificationBar" });
|
||||
await BrowserApi.tabSendMessage(tab, { command: "editedCipher" });
|
||||
return;
|
||||
}
|
||||
|
||||
const cipher = await this.cipherService.encrypt(cipherView);
|
||||
await this.cipherService.updateWithServer(cipher);
|
||||
// We've only updated the password, no need to broadcast editedCipher message
|
||||
return;
|
||||
try {
|
||||
// We've only updated the password, no need to broadcast editedCipher message
|
||||
await this.cipherService.updateWithServer(cipher);
|
||||
await BrowserApi.tabSendMessage(tab, { command: "saveCipherAttemptCompleted" });
|
||||
} catch (error) {
|
||||
await BrowserApi.tabSendMessageData(tab, "saveCipherAttemptCompleted", {
|
||||
error: String(error.message),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the add/edit cipher info in the state service
|
||||
* and opens the add/edit vault item popout.
|
||||
*
|
||||
* @param cipherView - The cipher to edit
|
||||
* @param senderTab - The tab that the message was sent from
|
||||
*/
|
||||
private async editItem(cipherView: CipherView, senderTab: chrome.tabs.Tab) {
|
||||
await this.stateService.setAddEditCipherInfo({
|
||||
cipher: cipherView,
|
||||
collectionIds: cipherView.collectionIds,
|
||||
});
|
||||
|
||||
await openAddEditVaultItemPopout(senderTab, { cipherId: cipherView.id });
|
||||
await this.openAddEditVaultItemPopout(senderTab, { cipherId: cipherView.id });
|
||||
}
|
||||
|
||||
private async folderExists(folderId: string) {
|
||||
@ -594,6 +642,10 @@ export default class NotificationBackground {
|
||||
return await firstValueFrom(this.folderService.folderViews$);
|
||||
}
|
||||
|
||||
private getWebVaultUrl(): string {
|
||||
return this.environmentService.getWebVaultUrl();
|
||||
}
|
||||
|
||||
private async removeIndividualVault(): Promise<boolean> {
|
||||
return await firstValueFrom(
|
||||
this.policyService.policyAppliesToActiveUser$(PolicyType.PersonalOwnership),
|
||||
|
@ -2,6 +2,10 @@ import { mock, mockReset } from "jest-mock-extended";
|
||||
|
||||
import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
|
||||
import { AuthService } from "@bitwarden/common/auth/services/auth.service";
|
||||
import {
|
||||
SHOW_AUTOFILL_BUTTON,
|
||||
AutofillOverlayVisibility,
|
||||
} from "@bitwarden/common/autofill/constants";
|
||||
import { AutofillSettingsService } from "@bitwarden/common/autofill/services/autofill-settings.service";
|
||||
import { ThemeType } from "@bitwarden/common/platform/enums";
|
||||
import { EnvironmentService } from "@bitwarden/common/platform/services/environment.service";
|
||||
@ -15,7 +19,6 @@ import { CipherService } from "@bitwarden/common/vault/services/cipher.service";
|
||||
import { BrowserApi } from "../../platform/browser/browser-api";
|
||||
import BrowserPlatformUtilsService from "../../platform/services/browser-platform-utils.service";
|
||||
import { BrowserStateService } from "../../platform/services/browser-state.service";
|
||||
import { SHOW_AUTOFILL_BUTTON } from "../constants";
|
||||
import { AutofillService } from "../services/abstractions/autofill.service";
|
||||
import {
|
||||
createAutofillPageDetailsMock,
|
||||
@ -28,7 +31,6 @@ import { flushPromises, sendExtensionRuntimeMessage, sendPortMessage } from "../
|
||||
import {
|
||||
AutofillOverlayElement,
|
||||
AutofillOverlayPort,
|
||||
AutofillOverlayVisibility,
|
||||
RedirectFocusDirection,
|
||||
} from "../utils/autofill-overlay.enum";
|
||||
|
||||
@ -202,7 +204,7 @@ describe("OverlayBackground", () => {
|
||||
},
|
||||
id: "overlay-cipher-0",
|
||||
login: {
|
||||
username: "us*******2",
|
||||
username: "username-2",
|
||||
},
|
||||
name: "name-2",
|
||||
reprompt: cipher2.reprompt,
|
||||
@ -219,7 +221,7 @@ describe("OverlayBackground", () => {
|
||||
},
|
||||
id: "overlay-cipher-1",
|
||||
login: {
|
||||
username: "us*******1",
|
||||
username: "username-1",
|
||||
},
|
||||
name: "name-1",
|
||||
reprompt: cipher1.reprompt,
|
||||
@ -288,7 +290,7 @@ describe("OverlayBackground", () => {
|
||||
},
|
||||
id: "overlay-cipher-0",
|
||||
login: {
|
||||
username: "us*******2",
|
||||
username: "username-2",
|
||||
},
|
||||
name: "name-2",
|
||||
reprompt: cipher2.reprompt,
|
||||
@ -305,7 +307,7 @@ describe("OverlayBackground", () => {
|
||||
},
|
||||
id: "overlay-cipher-1",
|
||||
login: {
|
||||
username: "us*******1",
|
||||
username: "username-1",
|
||||
},
|
||||
name: "name-1",
|
||||
reprompt: cipher1.reprompt,
|
||||
@ -345,48 +347,6 @@ describe("OverlayBackground", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("obscureName", () => {
|
||||
it("returns an empty string if the name is falsy", () => {
|
||||
const name: string = undefined;
|
||||
|
||||
const obscureName = overlayBackground["obscureName"](name);
|
||||
|
||||
expect(obscureName).toBe("");
|
||||
});
|
||||
|
||||
it("will not attempt to obscure a username that is only a domain", () => {
|
||||
const name = "@domain.com";
|
||||
|
||||
const obscureName = overlayBackground["obscureName"](name);
|
||||
|
||||
expect(obscureName).toBe(name);
|
||||
});
|
||||
|
||||
it("will obscure all characters of a name that is less than 5 characters expect for the first character", () => {
|
||||
const name = "name@domain.com";
|
||||
|
||||
const obscureName = overlayBackground["obscureName"](name);
|
||||
|
||||
expect(obscureName).toBe("n***@domain.com");
|
||||
});
|
||||
|
||||
it("will obscure all characters of a name that is greater than 4 characters by less than 6 ", () => {
|
||||
const name = "name1@domain.com";
|
||||
|
||||
const obscureName = overlayBackground["obscureName"](name);
|
||||
|
||||
expect(obscureName).toBe("na***@domain.com");
|
||||
});
|
||||
|
||||
it("will obscure all characters of a name that is greater than 5 characters except for the first two characters and the last character", () => {
|
||||
const name = "name12@domain.com";
|
||||
|
||||
const obscureName = overlayBackground["obscureName"](name);
|
||||
|
||||
expect(obscureName).toBe("na***2@domain.com");
|
||||
});
|
||||
});
|
||||
|
||||
describe("getAuthStatus", () => {
|
||||
it("will update the user's auth status but will not update the overlay ciphers", async () => {
|
||||
const authStatus = AuthenticationStatus.Unlocked;
|
||||
@ -615,6 +575,8 @@ describe("OverlayBackground", () => {
|
||||
});
|
||||
|
||||
it("will open the add edit popout window after creating a new cipher", async () => {
|
||||
jest.spyOn(BrowserApi, "sendMessage");
|
||||
|
||||
sendExtensionRuntimeMessage(
|
||||
{
|
||||
command: "autofillOverlayAddNewVaultItem",
|
||||
@ -630,6 +592,9 @@ describe("OverlayBackground", () => {
|
||||
await flushPromises();
|
||||
|
||||
expect(overlayBackground["stateService"].setAddEditCipherInfo).toHaveBeenCalled();
|
||||
expect(BrowserApi.sendMessage).toHaveBeenCalledWith(
|
||||
"inlineAutofillMenuRefreshAddEditCipher",
|
||||
);
|
||||
expect(overlayBackground["openAddEditVaultItemPopout"]).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
@ -1296,7 +1261,7 @@ describe("OverlayBackground", () => {
|
||||
});
|
||||
await flushPromises();
|
||||
|
||||
expect(copyToClipboardSpy).toHaveBeenCalledWith("totp-code", { window });
|
||||
expect(copyToClipboardSpy).toHaveBeenCalledWith("totp-code");
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -3,7 +3,9 @@ import { firstValueFrom } from "rxjs";
|
||||
import { SettingsService } from "@bitwarden/common/abstractions/settings.service";
|
||||
import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
|
||||
import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
|
||||
import { SHOW_AUTOFILL_BUTTON } from "@bitwarden/common/autofill/constants";
|
||||
import { AutofillSettingsServiceAbstraction } from "@bitwarden/common/autofill/services/autofill-settings.service";
|
||||
import { InlineMenuVisibilitySetting } from "@bitwarden/common/autofill/types";
|
||||
import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service";
|
||||
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
|
||||
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
|
||||
@ -22,13 +24,8 @@ import {
|
||||
openViewVaultItemPopout,
|
||||
openAddEditVaultItemPopout,
|
||||
} from "../../vault/popup/utils/vault-popout-window";
|
||||
import { SHOW_AUTOFILL_BUTTON } from "../constants";
|
||||
import { AutofillService, PageDetail } from "../services/abstractions/autofill.service";
|
||||
import {
|
||||
InlineMenuVisibilitySetting,
|
||||
AutofillOverlayElement,
|
||||
AutofillOverlayPort,
|
||||
} from "../utils/autofill-overlay.enum";
|
||||
import { AutofillOverlayElement, AutofillOverlayPort } from "../utils/autofill-overlay.enum";
|
||||
|
||||
import { LockedVaultPendingNotificationsData } from "./abstractions/notification.background";
|
||||
import {
|
||||
@ -179,10 +176,7 @@ class OverlayBackground implements OverlayBackgroundInterface {
|
||||
cipher.type === CipherType.Login
|
||||
? loginCipherIcon
|
||||
: buildCipherIcon(this.iconsServerUrl, cipher, isFaviconDisabled),
|
||||
login:
|
||||
cipher.type === CipherType.Login
|
||||
? { username: this.obscureName(cipher.login.username) }
|
||||
: null,
|
||||
login: cipher.type === CipherType.Login ? { username: cipher.login.username } : null,
|
||||
card: cipher.type === CipherType.Card ? cipher.card.subTitle : null,
|
||||
});
|
||||
}
|
||||
@ -244,7 +238,7 @@ class OverlayBackground implements OverlayBackgroundInterface {
|
||||
});
|
||||
|
||||
if (totpCode) {
|
||||
this.platformUtilsService.copyToClipboard(totpCode, { window });
|
||||
this.platformUtilsService.copyToClipboard(totpCode);
|
||||
}
|
||||
|
||||
this.overlayLoginCiphers = new Map([[overlayCipherId, cipher], ...this.overlayLoginCiphers]);
|
||||
@ -426,39 +420,6 @@ class OverlayBackground implements OverlayBackgroundInterface {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Obscures the username by replacing all but the first and last characters with asterisks.
|
||||
* If the username is less than 4 characters, only the first character will be shown.
|
||||
* If the username is 6 or more characters, the first and last characters will be shown.
|
||||
* The domain will not be obscured.
|
||||
*
|
||||
* @param name - The username to obscure
|
||||
*/
|
||||
private obscureName(name: string): string {
|
||||
if (!name) {
|
||||
return "";
|
||||
}
|
||||
|
||||
const [username, domain] = name.split("@");
|
||||
const usernameLength = username?.length;
|
||||
if (!usernameLength) {
|
||||
return name;
|
||||
}
|
||||
|
||||
const startingCharacters = username.slice(0, usernameLength > 4 ? 2 : 1);
|
||||
let numberStars = usernameLength;
|
||||
if (usernameLength > 4) {
|
||||
numberStars = usernameLength < 6 ? numberStars - 1 : numberStars - 2;
|
||||
}
|
||||
|
||||
let obscureName = `${startingCharacters}${new Array(numberStars).join("*")}`;
|
||||
if (usernameLength >= 6) {
|
||||
obscureName = `${obscureName}${username.slice(-1)}`;
|
||||
}
|
||||
|
||||
return domain ? `${obscureName}@${domain}` : obscureName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the overlay's visibility setting from the settings service.
|
||||
*/
|
||||
@ -670,6 +631,7 @@ class OverlayBackground implements OverlayBackgroundInterface {
|
||||
collectionIds: cipherView.collectionIds,
|
||||
});
|
||||
|
||||
await BrowserApi.sendMessage("inlineAutofillMenuRefreshAddEditCipher");
|
||||
await this.openAddEditVaultItemPopout(sender.tab, { cipherId: cipherView.id });
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,25 @@
|
||||
import { BadgeSettingsService } from "@bitwarden/common/autofill/services/badge-settings.service";
|
||||
|
||||
import {
|
||||
CachedServices,
|
||||
factory,
|
||||
FactoryOptions,
|
||||
} from "../../../platform/background/service-factories/factory-options";
|
||||
import {
|
||||
stateProviderFactory,
|
||||
StateProviderInitOptions,
|
||||
} from "../../../platform/background/service-factories/state-provider.factory";
|
||||
|
||||
export type BadgeSettingsServiceInitOptions = FactoryOptions & StateProviderInitOptions;
|
||||
|
||||
export function badgeSettingsServiceFactory(
|
||||
cache: { badgeSettingsService?: BadgeSettingsService } & CachedServices,
|
||||
opts: BadgeSettingsServiceInitOptions,
|
||||
): Promise<BadgeSettingsService> {
|
||||
return factory(
|
||||
cache,
|
||||
"badgeSettingsService",
|
||||
opts,
|
||||
async () => new BadgeSettingsService(await stateProviderFactory(cache, opts)),
|
||||
);
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
import { UserNotificationSettingsService } from "@bitwarden/common/autofill/services/user-notification-settings.service";
|
||||
|
||||
import {
|
||||
CachedServices,
|
||||
factory,
|
||||
FactoryOptions,
|
||||
} from "../../../platform/background/service-factories/factory-options";
|
||||
import {
|
||||
stateProviderFactory,
|
||||
StateProviderInitOptions,
|
||||
} from "../../../platform/background/service-factories/state-provider.factory";
|
||||
|
||||
export type UserNotificationSettingsServiceInitOptions = FactoryOptions & StateProviderInitOptions;
|
||||
|
||||
export function userNotificationSettingsServiceFactory(
|
||||
cache: { userNotificationSettingsService?: UserNotificationSettingsService } & CachedServices,
|
||||
opts: UserNotificationSettingsServiceInitOptions,
|
||||
): Promise<UserNotificationSettingsService> {
|
||||
return factory(
|
||||
cache,
|
||||
"userNotificationSettingsService",
|
||||
opts,
|
||||
async () => new UserNotificationSettingsService(await stateProviderFactory(cache, opts)),
|
||||
);
|
||||
}
|
@ -16,7 +16,7 @@ export default class WebRequestBackground {
|
||||
private cipherService: CipherService,
|
||||
private authService: AuthService,
|
||||
) {
|
||||
if (BrowserApi.manifestVersion === 2) {
|
||||
if (BrowserApi.isManifestVersion(2)) {
|
||||
this.webRequest = (window as any).chrome.webRequest;
|
||||
}
|
||||
this.isFirefox = platformUtilsService.isFirefox();
|
||||
|
@ -3,14 +3,6 @@ import { mock, MockProxy } from "jest-mock-extended";
|
||||
import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service";
|
||||
import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
|
||||
import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction";
|
||||
import { StateService } from "@bitwarden/common/platform/abstractions/state.service";
|
||||
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
|
||||
import { TotpService } from "@bitwarden/common/vault/abstractions/totp.service";
|
||||
import { CipherType } from "@bitwarden/common/vault/enums";
|
||||
import { CipherRepromptType } from "@bitwarden/common/vault/enums/cipher-reprompt-type";
|
||||
import { Cipher } from "@bitwarden/common/vault/models/domain/cipher";
|
||||
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
|
||||
|
||||
import {
|
||||
AUTOFILL_ID,
|
||||
COPY_PASSWORD_ID,
|
||||
@ -18,7 +10,14 @@ import {
|
||||
COPY_VERIFICATION_CODE_ID,
|
||||
GENERATE_PASSWORD_ID,
|
||||
NOOP_COMMAND_SUFFIX,
|
||||
} from "../constants";
|
||||
} from "@bitwarden/common/autofill/constants";
|
||||
import { StateService } from "@bitwarden/common/platform/abstractions/state.service";
|
||||
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
|
||||
import { TotpService } from "@bitwarden/common/vault/abstractions/totp.service";
|
||||
import { CipherType } from "@bitwarden/common/vault/enums";
|
||||
import { CipherRepromptType } from "@bitwarden/common/vault/enums/cipher-reprompt-type";
|
||||
import { Cipher } from "@bitwarden/common/vault/models/domain/cipher";
|
||||
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
|
||||
|
||||
import {
|
||||
CopyToClipboardAction,
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user