All Projects → vwxyzjn → Portwarden

vwxyzjn / Portwarden

Licence: mit
Create Encrypted Backups of Your Bitwarden Vault with Attachments

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to Portwarden

Helm Secrets
Successor of zendesk/helm-secrets - A helm plugin that help manage secrets with Git workflow and store them anywhere
Stars: ✭ 165 (-39.78%)
Mutual labels:  encryption, k8s
Helm Secrets
DEPRECATED A helm plugin that help manage secrets with Git workflow and store them anywhere
Stars: ✭ 1,129 (+312.04%)
Mutual labels:  encryption, k8s
etesync-notes
An EteSync backed note taking app
Stars: ✭ 64 (-76.64%)
Mutual labels:  encryption
Xorencryption
XOR encryption implementations for several languages.
Stars: ✭ 266 (-2.92%)
Mutual labels:  encryption
Nfreezer
nFreezer is an encrypted-at-rest backup tool.
Stars: ✭ 259 (-5.47%)
Mutual labels:  encryption
manifest-summary
print summary of a kubernetes manifest
Stars: ✭ 31 (-88.69%)
Mutual labels:  k8s
Rocketjob
Ruby's missing background and batch processing system
Stars: ✭ 258 (-5.84%)
Mutual labels:  encryption
flame
Flame is an ActionScript library that provides a number of useful UI controls, collections, cryptographic services, and utilities to work with the Flex SDK.
Stars: ✭ 18 (-93.43%)
Mutual labels:  encryption
Bluntly
serverless, encrypted, NAT-breaking p2p connections - DEPRECATED
Stars: ✭ 270 (-1.46%)
Mutual labels:  encryption
Citrix K8s Ingress Controller
Citrix ADC (NetScaler) Ingress Controller for Kubernetes:
Stars: ✭ 256 (-6.57%)
Mutual labels:  k8s
Cloaker
Simple, drag-and-drop, password-based file encryption
Stars: ✭ 267 (-2.55%)
Mutual labels:  encryption
Csi S3
A Container Storage Interface for S3
Stars: ✭ 255 (-6.93%)
Mutual labels:  k8s
k8s mcextfs
Midnight Commander extfs for kubernetes
Stars: ✭ 18 (-93.43%)
Mutual labels:  k8s
Polyaxon
Machine Learning Platform for Kubernetes (MLOps tools for experimentation and automation)
Stars: ✭ 2,966 (+982.48%)
Mutual labels:  k8s
vmecs
A simple VMess proxy implementation written in C.
Stars: ✭ 28 (-89.78%)
Mutual labels:  encryption
K8s Tew
Kubernetes - The Easier Way
Stars: ✭ 269 (-1.82%)
Mutual labels:  k8s
k8s-mongo-sidecar
Kubernetes sidecar for MongoDB
Stars: ✭ 35 (-87.23%)
Mutual labels:  k8s
Terraform Aws Eks Cluster
Terraform module for provisioning an EKS cluster
Stars: ✭ 256 (-6.57%)
Mutual labels:  k8s
Wormhole William
End-to-end encrypted file transfer. A magic wormhole CLI and API in Go (golang).
Stars: ✭ 256 (-6.57%)
Mutual labels:  encryption
Msoffcrypto Tool
Python tool and library for decrypting MS Office files with passwords or other keys
Stars: ✭ 274 (+0%)
Mutual labels:  encryption

PortWarden

Buy Me A Coffee

This project creates encrypted backups for Bitwarden vaults including attachments. It pulls your vault items from Bitwarden CLI and download all the attachments associated with those items to a temporary backup folder. Then, portwarden zip that folder, encrypt it with a passphrase, and delete the temporary folder.

It addresses this issue in the community forum https://community.bitwarden.com/t/encrypted-export/235, but hopefully Bitwarden will come up with official solutions soon.

3/28/20 Update

We now support restoring the backup to an empty account, including attachments.

Disclaimer

Note that you may lose your data if you try the restore feature and I am not responsible. Use the free software at your own discretion. Since we don't handle restoration conflicts, make sure to back up with your main account and restore to a spare/alternative account.

Usage Of Portwarden CLI

Go to https://github.com/bitwarden/cli/releases to download the latest version of Bitwarden CLI and place the executable bw/bw.exe in your PATH. Then, go to https://github.com/vwxyzjn/portwarden/releases/ to download the latest release of portwarden. Now just follow these steps :

# If you are running self hosted instance, execute `bw config server https://MYSERVER.COM`
portwarden --passphrase 1234 --filename backup.portwarden encrypt
portwarden --passphrase 1234 --filename backup.portwarden decrypt
# RESTORE IS EXPERIMENTAL!! YOU MAY LOSE YOUR DATA
# IF YOU RESTORE TO YOUR MAIN ACCOUNT
# PLEASE MAKE SURE YOU KNOW WHAT YOU ARE DOING

# Please use a **spare** account for restoring backup
# Portwarden doesn't handle conflicts therefore a
# separate account is needed

# In fact we setup a check to make sure the account your
# are restoring to does not have any data in it
portwarden --passphrase 1234 --filename backup.portwarden restore

Demo Backup

alt text

Demo Decrypt

alt text

Demo restore

alt text

Portwarden Compared with Official Bitwarden Backup (As of 12/5/2018)

Portwarden Official Bitwarden Backup
Backend golang C#
Backup Format ✔️ AES-Encrypted .portwarden format Unencrypted CSV file
Backup With Attachments ✔️ Not supported (see this feature request)
Restore Attachments ✔️ Supported Not supported

Contribution & Development

Clone this repo. Make sure you have Docker installed, ports 8000, 8081, 5000 unused, Golang installed, dep installed. In addition, create an environment varialble Salt of length 30 for encryption salt. Then run

dep ensure           # Install go dependencies
docker-compose up -d # Spin up required containers

# After the services/containers are created successfully, you should see
# $ docker-compose up  -d
# WARNING: Some services (worker) use the 'deploy' key, which will be ignored. Compose does not support 'deploy' configuration - use `docker stack deploy` to deploy to a swarm.
# Creating network "portwarden_default" with the default driver
# Creating portwarden_redis_1           ... done
# Creating portwarden_redis-commander_1 ... done
# Creating portwarden_frontend_1        ... done
# Creating portwarden_worker_1          ... done
# Creating portwarden_scheduler_1       ... done

docker ps # checkout the running containers
# $ docker ps
# CONTAINER ID        IMAGE                                   COMMAND                  CREATED             STATUS              PORTS                    NAMES
# e9bbc7263189        vwxyzjn/portwarden-base:1.1.0           "/bin/bash"              15 seconds ago      Up 12 seconds       0.0.0.0:5000->5000/tcp   portwarden_scheduler_1
# f44247d80881        vwxyzjn/portwarden-base:1.1.0           "go run main.go"         15 seconds ago      Up 12 seconds       5000/tcp                 portwarden_worker_1
# 37deb1556391        vwxyzjn/portwarden-frontend:1.0.1       "/bin/sh -c 'npm run…"   17 seconds ago      Up 14 seconds       0.0.0.0:8000->8000/tcp   portwarden_frontend_1
# 6ab98b5515f1        redis                                   "docker-entrypoint.s…"   17 seconds ago      Up 14 seconds       0.0.0.0:6379->6379/tcp   portwarden_redis_1
# 78618bb157d2        rediscommander/redis-commander:latest   "/usr/bin/dumb-init …"   17 seconds ago      Up 14 seconds       0.0.0.0:8081->8081/tcp   portwarden_redis-commander_1

docker exec -it portwarden_scheduler_1 bash # get into scheduler container and do whatever you want.

# $ docker exec -it portwarden_scheduler_1 bash
# [email protected]:/go/src/github.com/vwxyzjn/portwarden/web/scheduler# go run main.go
# (string) (len=24) "Scheduler Server Started"
# [GIN-debug] [WARNING] Now Gin requires Go 1.6 or later and Go 1.7 will be required soon.

# [GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

# [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
#  - using env:   export GIN_MODE=release
#  - using code:  gin.SetMode(gin.ReleaseMode)

# [GIN-debug] GET    /                         --> github.com/vwxyzjn/portwarden/web/scheduler/server.(*PortwardenServer).Run.func1 (4 handlers)
# [GIN-debug] POST   /decrypt                  --> github.com/vwxyzjn/portwarden/web/scheduler/server.DecryptBackupHandler (4 handlers)
# [GIN-debug] GET    /gdrive/loginUrl          --> github.com/vwxyzjn/portwarden/web/scheduler/server.(*PortwardenServer).GetGoogleDriveLoginURLHandler-fm (4 handlers)
# [GIN-debug] GET    /gdrive/login             --> github.com/vwxyzjn/portwarden/web/scheduler/server.(*PortwardenServer).GetGoogleDriveLoginHandler-fm (4 handlers)
# [GIN-debug] GET    /test/TokenAuthMiddleware --> github.com/vwxyzjn/portwarden/web/scheduler/server.(*PortwardenServer).Run.func2 (5 handlers)
# [GIN-debug] POST   /encrypt                  --> github.com/vwxyzjn/portwarden/web/scheduler/server.EncryptBackupHandler (5 handlers)
# [GIN-debug] POST   /encrypt/cancel           --> github.com/vwxyzjn/portwarden/web/scheduler/server.CancelEncryptBackupHandler (5 handlers)
# [GIN-debug] Listening and serving HTTP on :5000

Notice the docker-compose.yaml file defines the services running and it's mounting your current directory as volumes and map it to the container's working directory. This means you can develop/make changes in your local machine, and run it in the container. It also maps certain containers' ports into your host so that you can call the endpoints.

PRs are welcome. For ideas, you could probably add a progress bar to the CLI.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].