Merge branch 'master' of github.com:bitwarden/desktop into feature/rust

# Conflicts:
#	jslib
This commit is contained in:
Hinton 2022-03-25 10:17:46 +01:00
commit 7c6b9fb760
28 changed files with 406 additions and 424 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -8,6 +8,8 @@ on:
- 'gh-pages'
paths-ignore:
- '.github/workflows/**'
workflow_dispatch:
inputs: {}
jobs:
cloc:
@ -15,7 +17,7 @@ jobs:
runs-on: ubuntu-20.04
steps:
- name: Checkout repo
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846
- name: Set up cloc
run: |
@ -37,7 +39,7 @@ jobs:
hotfix_branch_exists: ${{ steps.branch-check.outputs.hotfix_branch_exists }}
steps:
- name: Checkout repo
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846
- name: Get Package Version
id: retrieve-version
@ -57,8 +59,8 @@ jobs:
run: |
SAFARI_REF=master
if [[ "$GITHUB_REF" == "refs/heads/hotfix" ]]; then
SAFARI_REF=hotfix
if [[ "$GITHUB_REF" == "refs/heads/hotfix-rc" ]]; then
SAFARI_REF=hotfix-rc
elif [[ "$GITHUB_REF" == "refs/heads/rc" ]]; then
SAFARI_REF=rc
fi
@ -75,12 +77,34 @@ jobs:
echo "::set-output name=rc_branch_exists::0"
fi
if [[ $(git ls-remote --heads origin hotfix) ]]; then
if [[ $(git ls-remote --heads origin hotfix-rc) ]]; then
echo "::set-output name=hotfix_branch_exists::1"
else
echo "::set-output name=hotfix_branch_exists::0"
fi
lint:
name: Lint
runs-on: ubuntu-20.04
steps:
- name: Checkout repo
uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846
- name: Cache npm
id: npm-cache
uses: actions/cache@937d24475381cd9c75ae6db12cb4e79714b926ed
with:
path: '~/.npm'
key: ${{ runner.os }}-npm-${{ hashFiles('package-lock.json') }}
restore-keys: |
${{ runner.os }}-npm-
- name: Install Node dependencies
run: npm ci
- name: Run linter
run: npm run lint
linux:
name: Linux Build
@ -90,20 +114,15 @@ jobs:
_PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }}
steps:
- name: Checkout repo
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846
- name: Set up Node
uses: actions/setup-node@46071b5c7a2e0c34e49c3cb8a0e792e86e18d5ea # v2.1.5
uses: actions/setup-node@9ced9a43a244f3ac94f13bfd896db8c8f30da67a # v3.0.0
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '16'
- name: Cache npm
id: npm-cache
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
with:
path: '~/.npm'
key: ${{ runner.os }}-${{ github.run_id }}-npm-${{ hashFiles('**/package-lock.json') }}
- name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
@ -130,49 +149,46 @@ jobs:
- name: Install Node dependencies
run: npm ci
- name: Run linter
run: npm run lint
- name: Build application
run: npm run dist:lin
- name: Upload .deb artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: Bitwarden-${{ env._PACKAGE_VERSION }}-amd64.deb
path: ./dist/Bitwarden-${{ env._PACKAGE_VERSION }}-amd64.deb
if-no-files-found: error
- name: Upload .rpm artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: Bitwarden-${{ env._PACKAGE_VERSION }}-x86_64.rpm
path: ./dist/Bitwarden-${{ env._PACKAGE_VERSION }}-x86_64.rpm
if-no-files-found: error
- name: Upload .freebsd artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: Bitwarden-${{ env._PACKAGE_VERSION }}-x64.freebsd
path: ./dist/Bitwarden-${{ env._PACKAGE_VERSION }}-x64.freebsd
if-no-files-found: error
- name: Upload .snap artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: bitwarden_${{ env._PACKAGE_VERSION }}_amd64.snap
path: ./dist/bitwarden_${{ env._PACKAGE_VERSION }}_amd64.snap
if-no-files-found: error
- name: Upload .AppImage artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: Bitwarden-${{ env._PACKAGE_VERSION }}-x86_64.AppImage
path: ./dist/Bitwarden-${{ env._PACKAGE_VERSION }}-x86_64.AppImage
if-no-files-found: error
- name: Upload latest auto-update artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: latest-linux.yml
path: ./dist/latest-linux.yml
@ -187,20 +203,15 @@ jobs:
_PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }}
steps:
- name: Checkout repo
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846
- name: Set up Node
uses: actions/setup-node@46071b5c7a2e0c34e49c3cb8a0e792e86e18d5ea # v2.1.5
uses: actions/setup-node@9ced9a43a244f3ac94f13bfd896db8c8f30da67a # v3.0.0
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '16'
- name: Cache npm
id: npm-cache
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
with:
path: '%AppData%/npm-cache'
key: ${{ runner.os }}-${{ github.run_id }}-npm-${{ hashFiles('**/package-lock.json') }}
- name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
shell: pwsh
@ -224,13 +235,13 @@ jobs:
choco --version
- name: Login to Azure
uses: Azure/login@77f1b2e3fb80c0e8645114159d17008b8a2e475a
uses: Azure/login@1f63701bf3e6892515f1b7ce2d2bf1708b46beaf
with:
creds: ${{ secrets.AZURE_PROD_KV_CREDENTIALS }}
- name: Retrieve secrets
id: retrieve-secrets
uses: Azure/get-keyvault-secrets@80ccd3fafe5662407cc2e55f202ee34bfff8c403
uses: Azure/get-keyvault-secrets@b5c723b9ac7870c022b8c35befe620b7009b336f
with:
keyvault: "bitwarden-prod-kv"
secrets: "code-signing-vault-url,
@ -242,9 +253,6 @@ jobs:
- name: Install Node dependencies
run: npm ci
- name: Run linter
run: npm run lint
- name: Build & Sign (dev)
env:
ELECTRON_BUILDER_SIGN: 1
@ -280,91 +288,91 @@ jobs:
choco pack ./dist/chocolatey/bitwarden.nuspec --version "$env:_PACKAGE_VERSION" --out ./dist/chocolatey
- name: Upload portable exe artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: Bitwarden-Portable-${{ env._PACKAGE_VERSION }}.exe
path: ./dist/Bitwarden-Portable-${{ env._PACKAGE_VERSION }}.exe
if-no-files-found: error
- name: Upload installer exe artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: Bitwarden-Installer-${{ env._PACKAGE_VERSION }}.exe
path: ./dist/nsis-web/Bitwarden-Installer-${{ env._PACKAGE_VERSION }}.exe
if-no-files-found: error
- name: Upload appx ia32 artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: Bitwarden-${{ env._PACKAGE_VERSION }}-ia32.appx
path: ./dist/Bitwarden-${{ env._PACKAGE_VERSION }}-ia32.appx
if-no-files-found: error
- name: Upload store appx ia32 artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: Bitwarden-${{ env._PACKAGE_VERSION }}-ia32-store.appx
path: ./dist/Bitwarden-${{ env._PACKAGE_VERSION }}-ia32-store.appx
if-no-files-found: error
- name: Upload NSIS ia32 artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: Bitwarden-${{ env._PACKAGE_VERSION }}-ia32.nsis.7z
path: ./dist/nsis-web/Bitwarden-${{ env._PACKAGE_VERSION }}-ia32.nsis.7z
if-no-files-found: error
- name: Upload appx x64 artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: Bitwarden-${{ env._PACKAGE_VERSION }}-x64.appx
path: ./dist/Bitwarden-${{ env._PACKAGE_VERSION }}-x64.appx
if-no-files-found: error
- name: Upload store appx x64 artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: Bitwarden-${{ env._PACKAGE_VERSION }}-x64-store.appx
path: ./dist/Bitwarden-${{ env._PACKAGE_VERSION }}-x64-store.appx
if-no-files-found: error
- name: Upload NSIS x64 artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: Bitwarden-${{ env._PACKAGE_VERSION }}-x64.nsis.7z
path: ./dist/nsis-web/Bitwarden-${{ env._PACKAGE_VERSION }}-x64.nsis.7z
if-no-files-found: error
- name: Upload appx ARM64 artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: Bitwarden-${{ env._PACKAGE_VERSION }}-arm64.appx
path: ./dist/Bitwarden-${{ env._PACKAGE_VERSION }}-arm64.appx
if-no-files-found: error
- name: Upload store appx ARM64 artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: Bitwarden-${{ env._PACKAGE_VERSION }}-arm64-store.appx
path: ./dist/Bitwarden-${{ env._PACKAGE_VERSION }}-arm64-store.appx
if-no-files-found: error
- name: Upload NSIS ARM64 artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: Bitwarden-${{ env._PACKAGE_VERSION }}-arm64.nsis.7z
path: ./dist/nsis-web/Bitwarden-${{ env._PACKAGE_VERSION }}-arm64.nsis.7z
if-no-files-found: error
- name: Upload nupkg artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: bitwarden.${{ env._PACKAGE_VERSION }}.nupkg
path: ./dist/chocolatey/bitwarden.${{ env._PACKAGE_VERSION }}.nupkg
if-no-files-found: error
- name: Upload latest auto-update artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: latest.yml
path: ./dist/nsis-web/latest.yml
@ -379,20 +387,15 @@ jobs:
_PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }}
steps:
- name: Checkout repo
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846
- name: Set up Node
uses: actions/setup-node@46071b5c7a2e0c34e49c3cb8a0e792e86e18d5ea # v2.1.5
uses: actions/setup-node@9ced9a43a244f3ac94f13bfd896db8c8f30da67a # v3.0.0
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '16'
- name: Cache npm
id: npm-cache
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
with:
path: '~/.npm'
key: ${{ runner.os }}-${{ github.run_id }}-npm-${{ hashFiles('**/package-lock.json') }}
- name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
@ -410,14 +413,14 @@ jobs:
- name: Cache Build
id: build-cache
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
uses: actions/cache@937d24475381cd9c75ae6db12cb4e79714b926ed
with:
path: build
key: ${{ runner.os }}-${{ github.run_id }}-build
- name: Cache Safari
id: safari-cache
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
uses: actions/cache@937d24475381cd9c75ae6db12cb4e79714b926ed
with:
path: dist-safari
key: ${{ runner.os }}-${{ github.run_id }}-safari-extension
@ -496,9 +499,6 @@ jobs:
- name: Install Node dependencies
run: npm ci
- name: Run linter
run: npm run lint
- name: Build application (dev)
run: npm run build
@ -507,39 +507,39 @@ jobs:
run: New-Item ./dist-safari -ItemType Directory -ea 0
- name: Checkout browser extension
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846
with:
repository: 'bitwarden/browser'
path: 'dist-safari/browser'
ref: ${{ needs.setup.outputs.safari_ref }}
- name: Build Safari extension
shell: pwsh
run: ./scripts/safari-build.ps1 -skipcheckout -skipoutcopy
run: |
npm install
npm run dist:safari
working-directory: dist-safari/browser
macos-package-github:
name: MacOS Package GitHub Release Assets
runs-on: macos-11
needs: [setup, macos-build]
needs:
- setup
- macos-build
- lint
env:
_PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }}
steps:
- name: Checkout repo
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846
- name: Set up Node
uses: actions/setup-node@46071b5c7a2e0c34e49c3cb8a0e792e86e18d5ea # v2.1.5
uses: actions/setup-node@9ced9a43a244f3ac94f13bfd896db8c8f30da67a # v3.0.0
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '16'
- name: Cache npm
id: npm-cache
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
with:
path: '~/.npm'
key: ${{ runner.os }}-${{ github.run_id }}-npm-${{ hashFiles('**/package-lock.json') }}
- name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
@ -557,14 +557,14 @@ jobs:
- name: Get Build Cache
id: build-cache
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
uses: actions/cache@937d24475381cd9c75ae6db12cb4e79714b926ed
with:
path: build
key: ${{ runner.os }}-${{ github.run_id }}-build
- name: Setup Safari Cache
id: safari-cache
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
uses: actions/cache@937d24475381cd9c75ae6db12cb4e79714b926ed
with:
path: dist-safari
key: ${{ runner.os }}-${{ github.run_id }}-safari-extension
@ -654,7 +654,7 @@ jobs:
- name: Checkout browser extension
if: steps.safari-cache.outputs.cache-hit != 'true'
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846
with:
repository: 'bitwarden/browser'
path: 'dist-safari/browser'
@ -662,12 +662,15 @@ jobs:
- name: Build Safari extension
if: steps.safari-cache.outputs.cache-hit != 'true'
shell: pwsh
run: ./scripts/safari-build.ps1 -skipcheckout -skipoutcopy
run: |
npm install
npm run dist:safari
working-directory: dist-safari/browser
- name: Load Safari extension for .dmg
shell: pwsh
run: ./scripts/safari-build.ps1 -copyonly
run: |
mkdir PlugIns
cp -r dist-safari/browser/dist/Safari/dmg/build/Release/safari.appex PlugIns/safari.appex
- name: Build application (dist)
env:
@ -676,28 +679,28 @@ jobs:
run: npm run pack:mac
- name: Upload .zip artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: Bitwarden-${{ env._PACKAGE_VERSION }}-universal-mac.zip
path: ./dist/Bitwarden-${{ env._PACKAGE_VERSION }}-universal-mac.zip
if-no-files-found: error
- name: Upload .dmg artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: Bitwarden-${{ env._PACKAGE_VERSION }}-universal.dmg
path: ./dist/Bitwarden-${{ env._PACKAGE_VERSION }}-universal.dmg
if-no-files-found: error
- name: Upload .dmg blockmap artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: Bitwarden-${{ env._PACKAGE_VERSION }}-universal.dmg.blockmap
path: ./dist/Bitwarden-${{ env._PACKAGE_VERSION }}-universal.dmg.blockmap
if-no-files-found: error
- name: Upload latest auto-update artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: latest-mac.yml
path: ./dist/latest-mac.yml
@ -707,25 +710,23 @@ jobs:
macos-package-mas:
name: MacOS Package Prod Release Asset
runs-on: macos-11
needs: [setup, macos-build]
needs:
- setup
- macos-build
- lint
env:
_PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }}
steps:
- name: Checkout repo
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846
- name: Set up Node
uses: actions/setup-node@46071b5c7a2e0c34e49c3cb8a0e792e86e18d5ea # v2.1.5
uses: actions/setup-node@9ced9a43a244f3ac94f13bfd896db8c8f30da67a # v3.0.0
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '16'
- name: Cache npm
id: npm-cache
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
with:
path: '~/.npm'
key: ${{ runner.os }}-${{ github.run_id }}-npm-${{ hashFiles('**/package-lock.json') }}
- name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
@ -743,14 +744,14 @@ jobs:
- name: Get Build Cache
id: build-cache
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
uses: actions/cache@937d24475381cd9c75ae6db12cb4e79714b926ed
with:
path: build
key: ${{ runner.os }}-${{ github.run_id }}-build
- name: Setup Safari Cache
id: safari-cache
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
uses: actions/cache@937d24475381cd9c75ae6db12cb4e79714b926ed
with:
path: dist-safari
key: ${{ runner.os }}-${{ github.run_id }}-safari-extension
@ -840,7 +841,7 @@ jobs:
- name: Checkout browser extension
if: steps.safari-cache.outputs.cache-hit != 'true'
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846
with:
repository: 'bitwarden/browser'
path: 'dist-safari/browser'
@ -848,12 +849,15 @@ jobs:
- name: Build Safari extension
if: steps.safari-cache.outputs.cache-hit != 'true'
shell: pwsh
run: ./scripts/safari-build.ps1 -skipcheckout -skipoutcopy
run: |
npm install
npm run dist:safari
working-directory: dist-safari/browser
- name: Load Safari extension for App Store
shell: pwsh
run: ./scripts/safari-build.ps1 -mas -copyonly
run: |
mkdir PlugIns
cp -r dist-safari/browser/dist/Safari/mas/build/Release/safari.appex PlugIns/safari.appex
- name: Build application for App Store
run: npm run pack:mac:mas
@ -862,7 +866,7 @@ jobs:
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
- name: Upload .pkg artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: Bitwarden-${{ env._PACKAGE_VERSION }}-universal.pkg
path: ./dist/mas-universal/Bitwarden-${{ env._PACKAGE_VERSION }}-universal.pkg
@ -877,7 +881,7 @@ jobs:
&& needs.setup.outputs.rc_branch_exists == 0
&& needs.setup.outputs.hotfix_branch_exists == 0)
|| (github.ref == 'refs/heads/rc' && needs.setup.outputs.hotfix_branch_exists == 0)
|| github.ref == 'refs/heads/hotfix'
|| github.ref == 'refs/heads/hotfix-rc'
run: npm run upload:mas
@ -885,25 +889,23 @@ jobs:
name: MacOS Package Dev Release Asset
if: false # We need to look into how code signing works for dev
runs-on: macos-11
needs: [setup, macos-build]
needs:
- setup
- macos-build
- lint
env:
_PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }}
steps:
- name: Checkout repo
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846
- name: Set up Node
uses: actions/setup-node@46071b5c7a2e0c34e49c3cb8a0e792e86e18d5ea # v2.1.5
uses: actions/setup-node@9ced9a43a244f3ac94f13bfd896db8c8f30da67a # v3.0.0
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '16'
- name: Cache npm
id: npm-cache
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
with:
path: '~/.npm'
key: ${{ runner.os }}-${{ github.run_id }}-npm-${{ hashFiles('**/package-lock.json') }}
- name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
@ -921,14 +923,14 @@ jobs:
- name: Get Build Cache
id: build-cache
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
uses: actions/cache@937d24475381cd9c75ae6db12cb4e79714b926ed
with:
path: build
key: ${{ runner.os }}-${{ github.run_id }}-build
- name: Setup Safari Cache
id: safari-cache
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
uses: actions/cache@937d24475381cd9c75ae6db12cb4e79714b926ed
with:
path: dist-safari
key: ${{ runner.os }}-${{ github.run_id }}-safari-extension
@ -1018,7 +1020,7 @@ jobs:
- name: Checkout browser extension
if: steps.safari-cache.outputs.cache-hit != 'true'
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846
with:
repository: 'bitwarden/browser'
path: 'dist-safari/browser'
@ -1026,12 +1028,15 @@ jobs:
- name: Build Safari extension
if: steps.safari-cache.outputs.cache-hit != 'true'
shell: pwsh
run: ./scripts/safari-build.ps1 -skipcheckout -skipoutcopy
run: |
npm install
npm run dist:safari
working-directory: dist-safari/browser
- name: Load Safari extension for App Store
shell: pwsh
run: ./scripts/safari-build.ps1 -masdev -copyonly
run: |
mkdir PlugIns
cp -r dist-safari/browser/dist/Safari/masdev/build/Release/safari.appex PlugIns/safari.appex
- name: Build dev application for App Store
run: npm run pack:mac:masdev
@ -1044,7 +1049,7 @@ jobs:
run: zip -r Bitwarden-${{ env.PACKAGE_VERSION }}-masdev-universal.zip Bitwarden.app
- name: Upload masdev artifact
uses: actions/upload-artifact@ee69f02b3dfdecd58bb31b4d133da38ba6fe3700 # v2.2.3
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: Bitwarden-${{ env._PACKAGE_VERSION }}-masdev-universal.zip
path: ./dist/mas-universal/Bitwarden-${{ env._PACKAGE_VERSION }}-masdev-universal.zip
@ -1064,22 +1069,22 @@ jobs:
_CROWDIN_PROJECT_ID: "299360"
steps:
- name: Checkout repo
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846
- name: Login to Azure
uses: Azure/login@77f1b2e3fb80c0e8645114159d17008b8a2e475a
uses: Azure/login@1f63701bf3e6892515f1b7ce2d2bf1708b46beaf
with:
creds: ${{ secrets.AZURE_PROD_KV_CREDENTIALS }}
- name: Retrieve secrets
id: retrieve-secrets
uses: Azure/get-keyvault-secrets@80ccd3fafe5662407cc2e55f202ee34bfff8c403
uses: Azure/get-keyvault-secrets@b5c723b9ac7870c022b8c35befe620b7009b336f
with:
keyvault: "bitwarden-prod-kv"
secrets: "crowdin-api-token"
- name: Upload Sources
uses: crowdin/github-action@e39093fd75daae7859c68eded4b43d42ec78d8ea # v1.3.2
uses: crowdin/github-action@9237b4cb361788dfce63feb2e2f15c09e2fe7415
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }}
@ -1097,6 +1102,7 @@ jobs:
needs:
- cloc
- setup
- lint
- linux
- windows
- macos-build
@ -1109,6 +1115,7 @@ jobs:
env:
CLOC_STATUS: ${{ needs.cloc.result }}
SETUP_STATUS: ${{ needs.setup.result }}
LINT_STATUS: ${{ needs.lint.result }}
LINUX_STATUS: ${{ needs.linux.result }}
WINDOWS_STATUS: ${{ needs.windows.result }}
MACOS_BUILD_STATUS: ${{ needs.macos-build.result }}
@ -1120,6 +1127,8 @@ jobs:
exit 1
elif [ "$SETUP_STATUS" = "failure" ]; then
exit 1
elif [ "$LINT_STATUS" = "failure" ]; then
exit 1
elif [ "$LINUX_STATUS" = "failure" ]; then
exit 1
elif [ "$WINDOWS_STATUS" = "failure" ]; then
@ -1135,21 +1144,21 @@ jobs:
fi
- name: Login to Azure - Prod Subscription
uses: Azure/login@77f1b2e3fb80c0e8645114159d17008b8a2e475a
uses: Azure/login@1f63701bf3e6892515f1b7ce2d2bf1708b46beaf
if: failure()
with:
creds: ${{ secrets.AZURE_PROD_KV_CREDENTIALS }}
- name: Retrieve secrets
id: retrieve-secrets
uses: Azure/get-keyvault-secrets@80ccd3fafe5662407cc2e55f202ee34bfff8c403
uses: Azure/get-keyvault-secrets@b5c723b9ac7870c022b8c35befe620b7009b336f
if: failure()
with:
keyvault: "bitwarden-prod-kv"
secrets: "devops-alerts-slack-webhook-url"
- name: Notify Slack on failure
uses: act10ns/slack@e4e71685b9b239384b0f676a63c32367f59c2522 # v1.2.2
uses: act10ns/slack@da3191ebe2e67f49b46880b4633f5591a96d1d33
if: failure()
env:
SLACK_WEBHOOK_URL: ${{ steps.retrieve-secrets.outputs.devops-alerts-slack-webhook-url }}

View File

@ -25,9 +25,9 @@ jobs:
- name: Branch check
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
run: |
if [[ "$GITHUB_REF" != "refs/heads/rc" ]] && [[ "$GITHUB_REF" != "refs/heads/hotfix" ]]; then
if [[ "$GITHUB_REF" != "refs/heads/rc" ]] && [[ "$GITHUB_REF" != "refs/heads/hotfix-rc" ]]; then
echo "==================================="
echo "[!] Can only release from the 'rc' or 'hotfix' branches"
echo "[!] Can only release from the 'rc' or 'hotfix-rc' branches"
echo "==================================="
exit 1
fi

View File

@ -1,39 +1,11 @@
Bitwarden believes that working with security researchers across the globe is crucial to keeping our
users safe. If you believe you've found a security issue in our product or service, we encourage you to
notify us. We welcome working with you to resolve the issue promptly. Thanks in advance!
Bitwarden believes that working with security researchers across the globe is crucial to keeping our users safe. If you believe you've found a security issue in our product or service, we encourage you to please submit a report through our [HackerOne Program](https://hackerone.com/bitwarden/). We welcome working with you to resolve the issue promptly. Thanks in advance!
# Disclosure Policy
- Let us know as soon as possible upon discovery of a potential security issue, and we'll make every
effort to quickly resolve the issue.
- Provide us a reasonable amount of time to resolve the issue before any disclosure to the public or a
third-party. We may publicly disclose the issue before resolving it, if appropriate.
- Make a good faith effort to avoid privacy violations, destruction of data, and interruption or
degradation of our service. Only interact with accounts you own or with explicit permission of the
account holder.
- If you would like to encrypt your report, please use the PGP key with long ID
`0xDE6887086F892325FEC04CC0D847525B6931381F` (available in the public keyserver pool).
# In-scope
- Security issues in any current release of Bitwarden. This includes the web vault, browser extension,
and mobile apps (iOS and Android). Product downloads are available at https://bitwarden.com. Source
code is available at https://github.com/bitwarden.
# Exclusions
The following bug classes are out-of scope:
- Bugs that are already reported on any of Bitwarden's issue trackers (https://github.com/bitwarden),
or that we already know of. Note that some of our issue tracking is private.
- Issues in an upstream software dependency (ex: Xamarin, ASP.NET) which are already reported to the
upstream maintainer.
- Attacks requiring physical access to a user's device.
- Self-XSS
- Issues related to software or protocols not under Bitwarden's control
- Vulnerabilities in outdated versions of Bitwarden
- Missing security best practices that do not directly lead to a vulnerability
- Issues that do not have any impact on the general public
- Let us know as soon as possible upon discovery of a potential security issue, and we'll make every effort to quickly resolve the issue.
- Provide us a reasonable amount of time to resolve the issue before any disclosure to the public or a third-party. We may publicly disclose the issue before resolving it, if appropriate.
- Make a good faith effort to avoid privacy violations, destruction of data, and interruption or degradation of our service. Only interact with accounts you own or with explicit permission of the account holder.
- If you would like to encrypt your report, please use the PGP key with long ID `0xDE6887086F892325FEC04CC0D847525B6931381F` (available in the public keyserver pool).
While researching, we'd like to ask you to refrain from:
@ -42,4 +14,8 @@ While researching, we'd like to ask you to refrain from:
- Social engineering (including phishing) of Bitwarden staff or contractors
- Any physical attempts against Bitwarden property or data centers
# We want to help you!
If you have something that you feel is close to exploitation, or if you'd like some information regarding the internal API, or generally have any questions regarding the app that would help in your efforts, please email us at https://bitwarden.com/contact and ask for that information. As stated above, Bitwarden wants to help you find issues, and is more than willing to help.
Thank you for helping keep Bitwarden and our users safe!

View File

@ -57,6 +57,7 @@
"publish:mac": "npm run build && npm run clean:dist && electron-builder --mac -p always",
"publish:mac:mas": "npm run dist:mac:mas && npm run upload:mas",
"publish:win": "npm run build && npm run clean:dist && electron-builder --win --x64 --arm64 --ia32 -p always -c.win.certificateSubjectName=\"8bit Solutions LLC\"",
"publish:win:dev": "npm run build && npm run clean:dist && electron-builder --win --x64 --arm64 --ia32 -p always",
"upload:mas": "xcrun altool --upload-app --type osx --file \"$(find ./dist/mas-universal/Bitwarden*.pkg)\" --username $APPLE_ID_USERNAME --password $APPLE_ID_PASSWORD",
"prettier": "prettier --write .",
"prepare": "husky install"
@ -81,7 +82,6 @@
"mac": {
"electronUpdaterCompatibility": ">=0.0.1",
"category": "public.app-category.productivity",
"minimumSystemVersion": "10.14",
"darkModeSupport": true,
"gatekeeperAssess": false,
"hardenedRuntime": true,
@ -186,7 +186,8 @@
"mas": {
"entitlements": "resources/entitlements.mas.plist",
"entitlementsInherit": "resources/entitlements.mas.inherit.plist",
"hardenedRuntime": false
"hardenedRuntime": false,
"minimumSystemVersion": "10.14"
},
"nsisWeb": {
"oneClick": false,

View File

@ -2,6 +2,8 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>

1
scripts/dev/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
data

View File

@ -0,0 +1,19 @@
version: "3"
services:
minio:
image: minio/minio
command: server /data --console-address ":9001"
ports:
- "9000:9000"
- "9001:9001"
# environment:
# MINIO_ROOT_USER: minioadmin
# MINIO_ROOT_PASSWORD: minioadmin
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
volumes:
- ./data:/data

View File

@ -63,26 +63,7 @@ import { FormsModule, ReactiveFormsModule } from "@angular/forms";
import { BrowserModule } from "@angular/platform-browser";
import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
import { AvatarComponent } from "jslib-angular/components/avatar.component";
import { CalloutComponent } from "jslib-angular/components/callout.component";
import { ExportScopeCalloutComponent } from "jslib-angular/components/export-scope-callout.component";
import { IconComponent } from "jslib-angular/components/icon.component";
import { BitwardenToastModule } from "jslib-angular/components/toastr.component";
import { A11yTitleDirective } from "jslib-angular/directives/a11y-title.directive";
import { ApiActionDirective } from "jslib-angular/directives/api-action.directive";
import { AutofocusDirective } from "jslib-angular/directives/autofocus.directive";
import { BlurClickDirective } from "jslib-angular/directives/blur-click.directive";
import { BoxRowDirective } from "jslib-angular/directives/box-row.directive";
import { CipherListVirtualScroll } from "jslib-angular/directives/cipherListVirtualScroll.directive";
import { FallbackSrcDirective } from "jslib-angular/directives/fallback-src.directive";
import { InputVerbatimDirective } from "jslib-angular/directives/input-verbatim.directive";
import { SelectCopyDirective } from "jslib-angular/directives/select-copy.directive";
import { StopClickDirective } from "jslib-angular/directives/stop-click.directive";
import { StopPropDirective } from "jslib-angular/directives/stop-prop.directive";
import { TrueFalseValueDirective } from "jslib-angular/directives/true-false-value.directive";
import { ColorPasswordPipe } from "jslib-angular/pipes/color-password.pipe";
import { I18nPipe } from "jslib-angular/pipes/i18n.pipe";
import { SearchCiphersPipe } from "jslib-angular/pipes/search-ciphers.pipe";
import { JslibModule } from "jslib-angular/jslib.module";
import { EnvironmentComponent } from "./accounts/environment.component";
import { HintComponent } from "./accounts/hint.component";
@ -183,47 +164,32 @@ registerLocaleData(localeZhTw, "zh-TW");
@NgModule({
imports: [
A11yModule,
AppRoutingModule,
BrowserAnimationsModule,
BrowserModule,
DragDropModule,
FormsModule,
ReactiveFormsModule,
ServicesModule,
BitwardenToastModule.forRoot({
maxOpened: 5,
autoDismiss: true,
closeButton: true,
}),
ScrollingModule,
A11yModule,
JslibModule,
OverlayModule,
ReactiveFormsModule,
ScrollingModule,
ServicesModule,
],
declarations: [
A11yTitleDirective,
AccountSwitcherComponent,
AddEditComponent,
AddEditCustomFieldsComponent,
ApiActionDirective,
AppComponent,
AttachmentsComponent,
AutofocusDirective,
BlurClickDirective,
BoxRowDirective,
CalloutComponent,
CipherListVirtualScroll,
CiphersComponent,
CollectionsComponent,
ColorPasswordPipe,
EnvironmentComponent,
ExportComponent,
ExportScopeCalloutComponent,
FallbackSrcDirective,
FolderAddEditComponent,
GroupingsComponent,
HeaderComponent,
HintComponent,
I18nPipe,
IconComponent,
InputVerbatimDirective,
LockComponent,
LoginComponent,
NavComponent,
@ -234,8 +200,7 @@ registerLocaleData(localeZhTw, "zh-TW");
PremiumComponent,
RegisterComponent,
RemovePasswordComponent,
SearchCiphersPipe,
SelectCopyDirective,
SearchComponent,
SendAddEditComponent,
SendComponent,
SendEffluxDatesComponent,
@ -244,9 +209,6 @@ registerLocaleData(localeZhTw, "zh-TW");
SettingsComponent,
ShareComponent,
SsoComponent,
StopClickDirective,
StopPropDirective,
TrueFalseValueDirective,
TwoFactorComponent,
TwoFactorOptionsComponent,
UpdateTempPasswordComponent,
@ -255,10 +217,6 @@ registerLocaleData(localeZhTw, "zh-TW");
VerifyMasterPasswordComponent,
ViewComponent,
ViewCustomFieldsComponent,
HeaderComponent,
AccountSwitcherComponent,
AvatarComponent,
SearchComponent,
],
providers: [DatePipe],
bootstrap: [AppComponent],

View File

@ -455,112 +455,112 @@
"message": "Maksimalna veličina datoteke je 500 MB."
},
"updateKey": {
"message": "You cannot use this feature until you update your encryption key."
"message": "Ovu funkciju ne možete koristiti dok ne ažurirate ključ za šifrovanje."
},
"editedFolder": {
"message": "Edited folder"
"message": "Uređen folder"
},
"addedFolder": {
"message": "Added folder"
"message": "Folder dodan"
},
"deleteFolderConfirmation": {
"message": "Are you sure you want to delete this folder?"
"message": "Sigurno želiš izbrisati ovaj Folder?"
},
"deletedFolder": {
"message": "Deleted folder"
"message": "Folder izbrisan"
},
"loginOrCreateNewAccount": {
"message": "Log in or create a new account to access your secure vault."
"message": "Prijavite se ili napravite novi račun da biste pristupili svom sigurnom trezoru."
},
"createAccount": {
"message": "Create Account"
"message": "Napravi račun"
},
"logIn": {
"message": "Log In"
"message": "Prijavite se"
},
"submit": {
"message": "Submit"
"message": "Potvrdi"
},
"masterPass": {
"message": "Master Password"
"message": "Master/glavna šifra"
},
"masterPassDesc": {
"message": "The master password is the password you use to access your vault. It is very important that you do not forget your master password. There is no way to recover the password in the event that you forget it."
"message": "Glavna lozinka je lozinka koju koristite za pristup Vašem trezoru. Veoma je važno da ne zaboravite glavnu lozinku. Ne postoji način da povratite lozinku u slučaju da je zaboravite."
},
"masterPassHintDesc": {
"message": "A master password hint can help you remember your password if you forget it."
"message": "Nagoveštaj glavne lozinke može Vam pomoći da zapamtite lozinku ako je zaboravite."
},
"reTypeMasterPass": {
"message": "Re-type Master Password"
"message": "Ponovo unesite glavnu lozinku"
},
"masterPassHint": {
"message": "Master Password Hint (optional)"
"message": "Nagovještaj za glavnu lozinku (opcionalno)"
},
"settings": {
"message": "Settings"
"message": "Postavke"
},
"passwordHint": {
"message": "Password Hint"
"message": "Nagovještaj lozinke"
},
"enterEmailToGetHint": {
"message": "Enter your account email address to receive your master password hint."
"message": "Unesite E-Mail adresu Vašeg računa da biste dobili nagovještaj o mogućoj glavnoj lozinki."
},
"getMasterPasswordHint": {
"message": "Get master password hint"
"message": "Dobijte nagovještaj glavne lozinke"
},
"emailRequired": {
"message": "Email address is required."
"message": "Potrebna je email adresa."
},
"invalidEmail": {
"message": "Invalid email address."
"message": "Neispravna email adresa."
},
"masterPassRequired": {
"message": "Master password is required."
"message": "Potrebna je glavna lozinka."
},
"masterPassLength": {
"message": "Master password must be at least 8 characters long."
"message": "Glavna lozinka mora imati najmanje 8 znakova."
},
"masterPassDoesntMatch": {
"message": "Master password confirmation does not match."
"message": "Potvrda glavne lozinke se ne podudara."
},
"newAccountCreated": {
"message": "Your new account has been created! You may now log in."
"message": "Tvoj novi račun je kreiran! Sada se možeš prijaviti."
},
"masterPassSent": {
"message": "We've sent you an email with your master password hint."
"message": "Poslali smo vam e-mail sa podsjetnikom za glavnu lozinku."
},
"unexpectedError": {
"message": "An unexpected error has occurred."
"message": "Neočekivana greška se dogodila."
},
"itemInformation": {
"message": "Item Information"
"message": "Informacije o stavki"
},
"noItemsInList": {
"message": "There are no items to list."
"message": "Nema podataka za prikazati."
},
"sendVerificationCode": {
"message": "Send a verification code to your email"
"message": "Pošalji verifikacijski kod na E-Mail"
},
"sendCode": {
"message": "Send Code"
"message": "Pošalji kod"
},
"codeSent": {
"message": "Code Sent"
"message": "Kod poslan"
},
"verificationCode": {
"message": "Verification Code"
"message": "Verifikacioni kod"
},
"confirmIdentity": {
"message": "Confirm your identity to continue."
"message": "Potvrdite lozinku za nastavak."
},
"verificationCodeRequired": {
"message": "Verification code is required."
"message": "Verifikacijski kod je neophodan."
},
"invalidVerificationCode": {
"message": "Invalid verification code"
"message": "Neispravan verifikacijski kod"
},
"continue": {
"message": "Continue"
"message": "Nastavi"
},
"enterVerificationCodeApp": {
"message": "Unesite 6-ocifreni verifikacioni kod iz Vaše aplikacije za potvrdu autentičnosti."
@ -710,87 +710,87 @@
"message": "Da li ste sigurni da želite da se odjavite?"
},
"logOut": {
"message": "Log Out"
"message": "Odjavi se"
},
"addNewLogin": {
"message": "Add New Login"
"message": "Dodaj novu prijavu"
},
"addNewItem": {
"message": "Add New Item"
"message": "Dodaj novu stavku"
},
"addNewFolder": {
"message": "Add New Folder"
"message": "Dodajte novi folder"
},
"view": {
"message": "View"
"message": "Prikaz"
},
"account": {
"message": "Account"
"message": "Račun"
},
"loading": {
"message": "Loading..."
"message": "Učitavanje..."
},
"lockVault": {
"message": "Lock Vault"
"message": "Zaključaj trezor"
},
"passwordGenerator": {
"message": "Password Generator"
"message": "Generator lozinki"
},
"contactUs": {
"message": "Contact Us"
"message": "Kontaktirajte nas"
},
"getHelp": {
"message": "Get Help"
"message": "Potraži pomoć"
},
"fileBugReport": {
"message": "File a Bug Report"
"message": "Podnesite izvještaj o greški"
},
"blog": {
"message": "Blog"
},
"followUs": {
"message": "Follow Us"
"message": "Pratite nas"
},
"syncVault": {
"message": "Sync Vault"
"message": "Sinhronizujte trezor sada"
},
"changeMasterPass": {
"message": "Change Master Password"
"message": "Promijenite glavnu lozinku"
},
"changeMasterPasswordConfirmation": {
"message": "You can change your master password on the bitwarden.com web vault. Do you want to visit the website now?"
"message": "Možete da promjenite svoju glavnu lozinku na bitwarden.com web trezoru. Da li želite da posjetite web stranicu sada?"
},
"fingerprintPhrase": {
"message": "Fingerprint Phrase",
"message": "Jedinstvena fraza",
"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": "Your account's fingerprint phrase",
"message": "Jedinstvena fraza tvog računa",
"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."
},
"goToWebVault": {
"message": "Go To Web Vault"
"message": "Idi na web trezor"
},
"getMobileApp": {
"message": "Get Mobile App"
"message": "Preuzmi mobilnu aplikaciju"
},
"getBrowserExtension": {
"message": "Get Browser Extension"
"message": "Preuzmi proširenje za preglednik"
},
"syncingComplete": {
"message": "Syncing complete"
"message": "Sinhronizacija je završena"
},
"syncingFailed": {
"message": "Syncing failed"
"message": "Sinhronizacija nije uspjela"
},
"yourVaultIsLocked": {
"message": "Your vault is locked. Verify your identity to continue."
"message": "Vaš trezor je zaključan. Potvrdite glavnu lozinku da nastavite."
},
"unlock": {
"message": "Unlock"
"message": "Otključaj"
},
"loggedInAsOn": {
"message": "Logged in as $EMAIL$ on $HOSTNAME$.",
"message": "Prijavljen kao $EMAIL$ na $HOSTNAME$.",
"placeholders": {
"email": {
"content": "$1",
@ -803,81 +803,81 @@
}
},
"invalidMasterPassword": {
"message": "Invalid master password"
"message": "Neispravna glavna lozinka"
},
"twoStepLoginConfirmation": {
"message": "Two-step login makes your account more secure by requiring you to verify your login with another device such as a security key, authenticator app, SMS, phone call, or email. Two-step login can be enabled on the bitwarden.com web vault. Do you want to visit the website now?"
"message": "Prijava u dva koraka čini Vaš račun sigurnijim tako što zahtjeva da verifikujete svoje podatke pomoću drugog uređaja, kao što su sigurnosni ključ, aplikacija za autentifikaciju, SMS, telefonski poziv ili E-Mail. Prijavljivanje u dva koraka može se omogućiti na bitwarden.com web trezoru. Da li želite da posjetite web stranicu sada?"
},
"twoStepLogin": {
"message": "Two-step Login"
"message": "Prijava u dva koraka"
},
"vaultTimeout": {
"message": "Vault Timeout"
"message": "Vremensko ograničenje trezora"
},
"vaultTimeoutDesc": {
"message": "Choose when your vault will timeout and perform the selected action."
"message": "Odaberi kada će za koliko vremena će isteći aktivnost trezora i biti izvršena odabrana radnja."
},
"immediately": {
"message": "Immediately"
"message": "Odmah"
},
"tenSeconds": {
"message": "10 seconds"
"message": "10 sekundi"
},
"twentySeconds": {
"message": "20 seconds"
"message": "20 sekundi"
},
"thirtySeconds": {
"message": "30 seconds"
"message": "30 sekundi"
},
"oneMinute": {
"message": "1 minute"
"message": "1 minuta"
},
"twoMinutes": {
"message": "2 minutes"
"message": "2 minute"
},
"fiveMinutes": {
"message": "5 minutes"
"message": "5 minuta"
},
"fifteenMinutes": {
"message": "15 minutes"
"message": "15 minuta"
},
"thirtyMinutes": {
"message": "30 minutes"
"message": "30 minuta"
},
"oneHour": {
"message": "1 hour"
"message": "1 sat"
},
"fourHours": {
"message": "4 hours"
"message": "4 sata"
},
"onIdle": {
"message": "On System Idle"
"message": "Na sistemskoj pripravnosti"
},
"onSleep": {
"message": "On System Sleep"
"message": "Na sistemskom mirovanju"
},
"onLocked": {
"message": "On System Lock"
"message": "Na sistemskom zaključavanju"
},
"onRestart": {
"message": "On Restart"
"message": "Kod ponovnog pokretanja"
},
"never": {
"message": "Never"
"message": "Nikad"
},
"security": {
"message": "Security"
"message": "Sigurnost"
},
"clearClipboard": {
"message": "Clear Clipboard",
"message": "Očisti međumemoriju",
"description": "Clipboard is the operating system thing where you copy/paste data to on your device."
},
"clearClipboardDesc": {
"message": "Automatically clear copied values from your clipboard.",
"message": "Automatski očistiti kopirane vrijednosti iz vaše međumemorije.",
"description": "Clipboard is the operating system thing where you copy/paste data to on your device."
},
"disableFavicon": {
"message": "Disable Website Icons"
"message": "Onemogućite ikone web lokacije"
},
"disableFaviconDesc": {
"message": "Website Icons provide a recognizable image next to each login item in your vault."
@ -916,61 +916,61 @@
"message": "Start To Tray Icon"
},
"startToTrayDesc": {
"message": "When the application is first started, only show an icon in the system tray."
"message": "Kada se aplikacija prvi put pokrene, prikaži samo ikonu u sistemskoj traci."
},
"startToMenuBar": {
"message": "Start to menu bar"
"message": "Pokreni u traci menija"
},
"startToMenuBarDesc": {
"message": "When the application is first started, only show an icon in the menu bar."
"message": "Kada se aplikacija prvi put pokrene, prikaži samo ikonu u sistemskoj traci."
},
"openAtLogin": {
"message": "Start automatically on login"
"message": "Automatsko pokretanje prilikom prijavljivanja"
},
"openAtLoginDesc": {
"message": "Start the Bitwarden Desktop application automatically on login."
"message": "Automatski pokreni Bitwarden desktop aplikaciju kod prijave."
},
"alwaysShowDock": {
"message": "Always show in the Dock"
"message": "Uvijek prikaži u Dock-u"
},
"alwaysShowDockDesc": {
"message": "Show the Bitwarden icon in the Dock even when minimized to the menu bar."
"message": "Prikaži Bitwareden ikonu u Docku čak i kada je minimiziran u traku s izbornicima."
},
"confirmTrayTitle": {
"message": "Confirm disable tray"
"message": "Potvrdi onemogućavanje trake"
},
"confirmTrayDesc": {
"message": "Disabling this setting will also disable all other tray related settings."
"message": "Ako onemogućite ovo podešavanje sva ostala podešavanja vezana za sistemsku traku će također biti onemogućena."
},
"language": {
"message": "Language"
"message": "Jezik"
},
"languageDesc": {
"message": "Change the language used by the application. Restart is required."
"message": "Promijeni jezik aplikacije. Potrebno je ponovno pokretanje."
},
"theme": {
"message": "Theme"
"message": "Tema"
},
"themeDesc": {
"message": "Change the application's color theme."
"message": "Promjeni boju teme u aplikaciji."
},
"dark": {
"message": "Dark",
"message": "Tamno",
"description": "Dark color"
},
"light": {
"message": "Light",
"message": "Svijetlo",
"description": "Light color"
},
"copy": {
"message": "Copy",
"message": "Kopiraj",
"description": "Copy to clipboard"
},
"checkForUpdates": {
"message": "Check For Updates"
"message": "Provjeri ima li ažuriranja"
},
"version": {
"message": "Version $VERSION_NUM$",
"message": "Verzija $VERSION_NUM$",
"placeholders": {
"version_num": {
"content": "$1",
@ -979,10 +979,10 @@
}
},
"restartToUpdate": {
"message": "Restart To Update"
"message": "Ponovo pokreni za ažuriranje"
},
"restartToUpdateDesc": {
"message": "Version $VERSION_NUM$ is ready to install. You must restart the application to complete the installation. Do you want to restart and update now?",
"message": "Verzija $VERSION_NUM$ je spremna za instalaciju. Moraš ponovno pokrenuti Bitwarden za dovršetak instalacije. Želiš li ponovo pokrenuti i ažurirati?",
"placeholders": {
"version_num": {
"content": "$1",
@ -991,87 +991,87 @@
}
},
"updateAvailable": {
"message": "Update Available"
"message": "Dostupna su ažuriranja"
},
"updateAvailableDesc": {
"message": "An update was found. Do you want to download it now?"
"message": "Pronađeno je ažuriranje. Želiš li ga sada preuzeti?"
},
"restart": {
"message": "Restart"
"message": "Ponovno pokreni"
},
"later": {
"message": "Later"
"message": "Kasnije"
},
"noUpdatesAvailable": {
"message": "No updates are currently available. You are using the latest version."
"message": "Trenutno nema ažuriranja. Već koristiš najnoviju verziju."
},
"updateError": {
"message": "Update Error"
"message": "Greška pri ažuriranju"
},
"unknown": {
"message": "Unknown"
"message": "Nepoznato"
},
"copyUsername": {
"message": "Copy Username"
"message": "Kopiraj korisničko ime"
},
"copyNumber": {
"message": "Copy Number",
"message": "Kopiraj broj",
"description": "Copy credit card number"
},
"copySecurityCode": {
"message": "Copy Security Code",
"message": "Kopirajte sigurnosni kod",
"description": "Copy credit card security code (CVV)"
},
"premiumMembership": {
"message": "Premium Membership"
"message": "Premium članstvo"
},
"premiumManage": {
"message": "Manage Membership"
"message": "Upravljaj članstvom"
},
"premiumManageAlert": {
"message": "You can manage your membership on the bitwarden.com web vault. Do you want to visit the website now?"
"message": "Svojim članstvom možeš upravljati na bitwarden.com web trezoru. Želiš li sada posjetiti web stranicu?"
},
"premiumRefresh": {
"message": "Refresh Membership"
"message": "Osvježi status članstva"
},
"premiumNotCurrentMember": {
"message": "You are not currently a premium member."
"message": "Trenutno nisi premium član."
},
"premiumSignUpAndGet": {
"message": "Sign up for a premium membership and get:"
"message": "Prijavi se za premium članstvo, čime dobijaš:"
},
"premiumSignUpStorage": {
"message": "1 GB encrypted storage for file attachments."
"message": "1 GB šifriranog prostora za pohranu podataka."
},
"premiumSignUpTwoStep": {
"message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo."
"message": "Dodatne mogućnosti za prijavu u dva koraka kao što su YubiKey, FIDO U2F i Duo."
},
"premiumSignUpReports": {
"message": "Password hygiene, account health, and data breach reports to keep your vault safe."
"message": "Higijenu lozinki, zdravlje računa i izvještaje o krađi podataka radi zaštite svojeg trezora."
},
"premiumSignUpTotp": {
"message": "TOTP verification code (2FA) generator for logins in your vault."
"message": "Generator TOTP kontrolnog koda (2FA) za prijave u tvom trezoru."
},
"premiumSignUpSupport": {
"message": "Priority customer support."
"message": "Prioritetnu korisničku podršku."
},
"premiumSignUpFuture": {
"message": "All future premium features. More coming soon!"
"message": "Sve buduće premium značajke. Uskoro više!"
},
"premiumPurchase": {
"message": "Purchase Premium"
"message": "Kupi premium članstvo"
},
"premiumPurchaseAlert": {
"message": "You can purchase premium membership on the bitwarden.com web vault. Do you want to visit the website now?"
"message": "Svojim članstvom možeš upravljati na bitwarden.com web trezoru. Želiš li sada posjetiti web stranicu?"
},
"premiumCurrentMember": {
"message": "You are a premium member!"
"message": "Ti si premium član!"
},
"premiumCurrentMemberThanks": {
"message": "Thank you for supporting Bitwarden."
"message": "Hvala ti što podupireš Bitwarden."
},
"premiumPrice": {
"message": "All for just $PRICE$ /year!",
"message": "Sve za samo $PRICE$ /godišnje!",
"placeholders": {
"price": {
"content": "$1",
@ -1080,13 +1080,13 @@
}
},
"refreshComplete": {
"message": "Refresh complete"
"message": "Osvježavanje završeno"
},
"passwordHistory": {
"message": "Password History"
"message": "Historija uređivanja lozinke"
},
"clear": {
"message": "Clear",
"message": "Obriši",
"description": "To clear something out. example: To clear browser history."
},
"noPasswordsInList": {
@ -1267,34 +1267,34 @@
"message": "Account encryption keys are unique to each Bitwarden user account, so you can't import an encrypted export into a different account."
},
"noOrganizationsList": {
"message": "You do not belong to any organizations. Organizations allow you to securely share items with other users."
"message": "Ne pripadaš niti jednoj organizaciji. Organizacije omogućuju sigurno dijeljenje stavki s drugim korisnicima."
},
"noCollectionsInList": {
"message": "There are no collections to list."
"message": "Nema kolekcija za prikazati."
},
"ownership": {
"message": "Ownership"
"message": "Vlasništvo"
},
"whoOwnsThisItem": {
"message": "Who owns this item?"
"message": "Ko je vlasnik ove stavke?"
},
"strong": {
"message": "Strong",
"message": "Jaka",
"description": "ex. A strong password. Scale: Weak -> Good -> Strong"
},
"good": {
"message": "Good",
"message": "Dobra",
"description": "ex. A good password. Scale: Weak -> Good -> Strong"
},
"weak": {
"message": "Weak",
"message": "Slaba",
"description": "ex. A weak password. Scale: Weak -> Good -> Strong"
},
"weakMasterPassword": {
"message": "Weak Master Password"
"message": "Slaba glavna lozinka"
},
"weakMasterPasswordDesc": {
"message": "The master password you have chosen is weak. You should use a strong master password (or a passphrase) to properly protect your Bitwarden account. Are you sure you want to use this master password?"
"message": "Odabrana glavna lozinka je slaba. Trebaš koristiti jaču glavnu lozinku (ili frazu) kako bi tvoj Bitwarden račun bio pravilno zaštićen. Sigurno želiš koristiti ovakvu, slabu glavnu lozinku?"
},
"pin": {
"message": "PIN",

View File

@ -737,10 +737,10 @@
"message": "Generador de contrasenyes"
},
"contactUs": {
"message": "Contact Us"
"message": "Contacta'ns"
},
"getHelp": {
"message": "Get Help"
"message": "Obteniu ajuda"
},
"fileBugReport": {
"message": "Presenta un informe d'error"
@ -1815,13 +1815,13 @@
"message": "Opcions"
},
"sessionTimeout": {
"message": "Your session has timed out. Please go back and try logging in again."
"message": "La sessió ha expirat. Torneu arrere i proveu d'iniciar sessió de nou."
},
"exportingPersonalVaultTitle": {
"message": "Exporting Personal Vault"
"message": "S'està exportant la caixa forta personal"
},
"exportingPersonalVaultDescription": {
"message": "Only the personal vault items associated with $EMAIL$ will be exported. Organization vault items will not be included.",
"message": "Només s'exportaran els elements personals de la caixa forta associats a $EMAIL$. Els elements de la caixa forta de l'organització no s'inclouran.",
"placeholders": {
"email": {
"content": "$1",

View File

@ -737,10 +737,10 @@
"message": "Adgangskodegenerator"
},
"contactUs": {
"message": "Contact Us"
"message": "Kontakt os"
},
"getHelp": {
"message": "Get Help"
"message": "Få hjælp"
},
"fileBugReport": {
"message": "Indsend en fejlrapport"
@ -1815,13 +1815,13 @@
"message": "Indstillinger"
},
"sessionTimeout": {
"message": "Your session has timed out. Please go back and try logging in again."
"message": "Din session er udløbet. Gå tilbage og prøv at logge ind igen."
},
"exportingPersonalVaultTitle": {
"message": "Exporting Personal Vault"
"message": "Eksporterer personlig boks"
},
"exportingPersonalVaultDescription": {
"message": "Only the personal vault items associated with $EMAIL$ will be exported. Organization vault items will not be included.",
"message": "Kun de personlige bokselementer tilknyttet $EMAIL$ eksporteres. Organisationsbokseelementer medtages ikke.",
"placeholders": {
"email": {
"content": "$1",

View File

@ -1794,7 +1794,7 @@
"message": "Einstellungen"
},
"appPreferences": {
"message": "Tətbiq tənzimləmələri (Bütün hesablar)"
"message": "App-Einstellungen (Alle Konten)"
},
"accountSwitcherLimitReached": {
"message": "Kontolimit erreicht. Abmelden von einem Konto, um ein anderes hinzuzufügen."

View File

@ -1818,10 +1818,10 @@
"message": "زمان نشست شما به پایان رسید. لطفاً برگردید و دوباره وارد سیستم شوید."
},
"exportingPersonalVaultTitle": {
"message": "Exporting Personal Vault"
"message": "صادرات گاو‌صندوق شخصی"
},
"exportingPersonalVaultDescription": {
"message": "Only the personal vault items associated with $EMAIL$ will be exported. Organization vault items will not be included.",
"message": "فقط موارد گاو‌صندوق شخصی مرتبط با $EMAIL$ صادر خواهد شد. موارد گاو‌صندوق سازمان شامل نخواهد شد.",
"placeholders": {
"email": {
"content": "$1",

View File

@ -979,7 +979,7 @@
}
},
"restartToUpdate": {
"message": "Käynnistä uudelleen päivittääksesi"
"message": "Käynnistä Bitwarden uudelleen päivittääksesi"
},
"restartToUpdateDesc": {
"message": "Versio $VERSION_NUM$ on valmis asennettavaksi. Sovellus tulee käynnistää uudelleen, jotta asennus voidaan suorittaa loppuun. Haluatko käynnistää sovelluksen uudelleen ja päivittää nyt?",
@ -997,7 +997,7 @@
"message": "Päivitys löydetty. Haluatko ladata sen nyt?"
},
"restart": {
"message": "Käynnistä uudelleen"
"message": "Käynnistä sovellus uudelleen"
},
"later": {
"message": "Myöhemmin"
@ -1594,7 +1594,7 @@
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"sendNotesDesc": {
"message": "Yksityiset muistiinpanot tästä Sendistä.",
"message": "Yksityisiä merkintöjä tästä Sendistä.",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"sendLink": {

View File

@ -737,10 +737,10 @@
"message": "Passordgenerator"
},
"contactUs": {
"message": "Contact Us"
"message": "Kontakt oss"
},
"getHelp": {
"message": "Get Help"
"message": "Få hjelp"
},
"fileBugReport": {
"message": "Legg inn en feilrapport"
@ -1812,13 +1812,13 @@
"message": "Bytt konto"
},
"options": {
"message": "Options"
"message": "Alternativer"
},
"sessionTimeout": {
"message": "Your session has timed out. Please go back and try logging in again."
"message": "Økten ble tidsavbrutt. Vennligst gå tilbake og prøv å logge inn på nytt."
},
"exportingPersonalVaultTitle": {
"message": "Exporting Personal Vault"
"message": "Eksporter personlig hvelv"
},
"exportingPersonalVaultDescription": {
"message": "Only the personal vault items associated with $EMAIL$ will be exported. Organization vault items will not be included.",

View File

@ -997,7 +997,7 @@
"message": "Er is een update gevonden. Wil je deze nu downloaden?"
},
"restart": {
"message": "Herstarten"
"message": "Applicatie herstarten"
},
"later": {
"message": "Later"

View File

@ -737,10 +737,10 @@
"message": "Генератор Лозинке"
},
"contactUs": {
"message": "Contact Us"
"message": "Контактирајте нас"
},
"getHelp": {
"message": "Get Help"
"message": "Потражи помоћ"
},
"fileBugReport": {
"message": "Пријавите грешку"
@ -1794,13 +1794,13 @@
"message": "Подешавања"
},
"appPreferences": {
"message": "App Settings (All Accounts)"
"message": "Подешавања апликације (Сви налози)"
},
"accountSwitcherLimitReached": {
"message": "Граница налога достигнута. Одјавите се од једног налога да би додали други."
},
"settingsTitle": {
"message": "App settings for $EMAIL$",
"message": "Подешавања апликације за $EMAIL$",
"placeholders": {
"email": {
"content": "$1",
@ -1809,19 +1809,19 @@
}
},
"switchAccount": {
"message": "Switch Account"
"message": "Промени налог"
},
"options": {
"message": "Options"
"message": "Опције"
},
"sessionTimeout": {
"message": "Your session has timed out. Please go back and try logging in again."
"message": "Ваша сесија је истекла. Вратите се и покушајте поново да се пријавите."
},
"exportingPersonalVaultTitle": {
"message": "Exporting Personal Vault"
"message": "Извоз личног сефа"
},
"exportingPersonalVaultDescription": {
"message": "Only the personal vault items associated with $EMAIL$ will be exported. Organization vault items will not be included.",
"message": "Само предмети личног сефа повезани са $EMAIL$ биће извезени. Ставке организационог сефа неће бити укључене.",
"placeholders": {
"email": {
"content": "$1",

View File

@ -737,10 +737,10 @@
"message": "Генератор паролів"
},
"contactUs": {
"message": "Contact Us"
"message": "Зв'язатися з нами"
},
"getHelp": {
"message": "Get Help"
"message": "Отримати допомогу"
},
"fileBugReport": {
"message": "Повідомити про помилку"
@ -1815,13 +1815,13 @@
"message": "Налаштування"
},
"sessionTimeout": {
"message": "Your session has timed out. Please go back and try logging in again."
"message": "Час вашого сеансу завершився. Поверніться назад і спробуйте увійти знову."
},
"exportingPersonalVaultTitle": {
"message": "Exporting Personal Vault"
"message": "Експортування особистого сховища"
},
"exportingPersonalVaultDescription": {
"message": "Only the personal vault items associated with $EMAIL$ will be exported. Organization vault items will not be included.",
"message": "Будуть експортовані лише записи особистого сховища, пов'язані з $EMAIL$. Записи сховища організації не буде включено.",
"placeholders": {
"email": {
"content": "$1",

View File

@ -104,7 +104,7 @@
"message": "電子郵件地址"
},
"verificationCodeTotp": {
"message": "驗證碼 (TOTP)"
"message": "驗證碼TOTP"
},
"website": {
"message": "網站"
@ -308,7 +308,7 @@
"message": "編輯"
},
"authenticatorKeyTotp": {
"message": "驗證器金鑰 (TOTP)"
"message": "驗證器金鑰TOTP"
},
"folder": {
"message": "資料夾"
@ -389,7 +389,7 @@
"message": "複製 URI"
},
"copyVerificationCodeTotp": {
"message": "複製驗證碼 (TOTP)"
"message": "複製驗證碼TOTP"
},
"length": {
"message": "長度"
@ -536,7 +536,7 @@
"message": "項目資訊"
},
"noItemsInList": {
"message": "沒有可顯示的項目。"
"message": "沒有可列出的項目。"
},
"sendVerificationCode": {
"message": "傳送驗證碼到您的信箱"
@ -608,14 +608,14 @@
"message": "驗證器應用程式"
},
"authenticatorAppDesc": {
"message": "使用驗證器應用程式 (如 Authy 或 Google Authenticator 產生基於時間的驗證碼。",
"message": "使用驗證器應用程式(如 Authy 或 Google Authenticator產生基於時間的驗證碼。",
"description": "'Authy' and 'Google Authenticator' are product names and should not be translated."
},
"yubiKeyTitle": {
"message": "YubiKey OTP 安全鑰匙"
},
"yubiKeyDesc": {
"message": "使用 YubiKey 存取您的帳戶。支援 YubiKey 4、4 Nano、4C、以及 NEO 裝置。"
"message": "使用 YubiKey 存取您的帳戶。支援 YubiKey 4、4 Nano、4C、以及 NEO 裝置。"
},
"duoDesc": {
"message": "使用 Duo Security 的 Duo Mobile 程式、SMS 、致電或 U2F 安全鑰匙進行驗證。",
@ -1090,7 +1090,7 @@
"description": "To clear something out. example: To clear browser history."
},
"noPasswordsInList": {
"message": "沒有可顯示的密碼。"
"message": "沒有可列出的密碼。"
},
"undo": {
"message": "復原"
@ -1264,13 +1264,13 @@
"message": "將使用您帳戶的加密金鑰來加密匯出資料,若您更新了帳戶的加密金鑰,請重新匯出,才有辦法解密匯出的檔案。"
},
"encExportAccountWarningDesc": {
"message": "每個 Bitwarden 使用者帳戶的帳戶加密金鑰都不同,因此無法將加密過的匯出檔案匯入到不同帳戶中。"
"message": "每個 Bitwarden 使用者帳戶的帳戶加密金鑰都不相同,因此無法將已加密匯出的檔案匯入至不同帳戶中。"
},
"noOrganizationsList": {
"message": "您沒有加入任何組織。組織允許您與其他使用者安全地共項目。"
"message": "您沒有加入任何組織。組織允許您與其他使用者安全地共項目。"
},
"noCollectionsInList": {
"message": "沒有可顯示的集合。"
"message": "沒有可列出的集合。"
},
"ownership": {
"message": "所有權"
@ -1294,7 +1294,7 @@
"message": "主密碼強度太弱"
},
"weakMasterPasswordDesc": {
"message": "您設定的主密碼很脆弱。您應該使用高強度的密碼 (或密碼短語) 來正確保護您的 bitwarden 帳戶。仍要使用這組主密碼嗎?"
"message": "您設定的主密碼很脆弱。您應該使用高強度的密碼(或密碼短語)來正確保護您的 bitwarden 帳戶。仍要使用這組主密碼嗎?"
},
"pin": {
"message": "PIN 碼",
@ -1606,7 +1606,7 @@
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"textHiddenByDefault": {
"message": "存取此 Send 時,預設將隱藏文本",
"message": "存取此 Send 時,預設隱藏文字内容",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"createdSend": {
@ -1685,7 +1685,7 @@
"message": "已逾期"
},
"pendingDeletion": {
"message": "等待刪除"
"message": "等待刪除"
},
"webAuthnAuthenticate": {
"message": "驗證 WebAuthn"
@ -1755,7 +1755,7 @@
"message": "一或多個組織策略不允許您輸出個人密碼庫。"
},
"addAccount": {
"message": "新增帳"
"message": "新增帳"
},
"removeMasterPassword": {
"message": "移除主密碼"
@ -1788,7 +1788,7 @@
"message": "鎖定所有密碼庫"
},
"accountLimitReached": {
"message": "最多只能同時登入 5 隻帳。"
"message": "最多只能同時登入 5 隻帳。"
},
"accountPreferences": {
"message": "偏好設定"
@ -1821,7 +1821,7 @@
"message": "匯出個人密碼庫"
},
"exportingPersonalVaultDescription": {
"message": "只會匯出關聯到 $EMAIL$ 的個人密碼庫。組織密碼庫的項目不包含在內。",
"message": "只會匯出與 $EMAIL$ 關聯的個人密碼庫。組織密碼庫的項目不包含在內。",
"placeholders": {
"email": {
"content": "$1",

View File

@ -83,7 +83,8 @@ export class Main {
null,
this.logService,
null,
new StateFactory(GlobalState, Account)
new StateFactory(GlobalState, Account),
false // Do not use disk caching because this will get out of sync with the renderer service
);
this.windowMain = new WindowMain(

View File

@ -2,7 +2,7 @@ import { BrowserWindow, clipboard, dialog, MenuItemConstructorOptions } from "el
import { I18nService } from "jslib-common/abstractions/i18n.service";
import { UpdaterMain } from "jslib-electron/updater.main";
import { isSnapStore, isWindowsStore } from "jslib-electron/utils";
import { isMacAppStore, isSnapStore, isWindowsStore } from "jslib-electron/utils";
import { IMenubarMenu } from "./menubar";
@ -42,7 +42,7 @@ export class AboutMenu implements IMenubarMenu {
return {
id: "checkForUpdates",
label: this.localize("checkForUpdates"),
visible: !isWindowsStore() && !isSnapStore(),
visible: !isWindowsStore() && !isSnapStore() && !isMacAppStore(),
click: () => this.checkForUpdate(),
};
}

View File

@ -2,7 +2,7 @@
"name": "@bitwarden/desktop",
"productName": "Bitwarden",
"description": "A secure and free password manager for all of your devices.",
"version": "1.31.4",
"version": "1.32.2",
"author": "Bitwarden Inc. <hello@bitwarden.com> (https://bitwarden.com)",
"homepage": "https://bitwarden.com",
"license": "GPL-3.0",

View File

@ -4,6 +4,9 @@ const { merge } = require("webpack-merge");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const { AngularWebpackPlugin } = require("@ngtools/webpack");
const TerserPlugin = require("terser-webpack-plugin");
const NODE_ENV = process.env.NODE_ENV == null ? "development" : process.env.NODE_ENV;
const common = {
module: {
@ -39,7 +42,7 @@ const common = {
const renderer = {
mode: "production",
devtool: false,
devtool: "source-map",
target: "electron-renderer",
node: {
__dirname: false,
@ -48,7 +51,19 @@ const renderer = {
"app/main": "./src/app/main.ts",
},
optimization: {
minimize: false,
minimizer: [
new TerserPlugin({
terserOptions: {
// Replicate Angular CLI behaviour
compress: {
global_defs: {
ngDevMode: false,
ngI18nClosureMode: false,
},
},
},
}),
],
splitChunks: {
cacheGroups: {
commons: {