Bitwarden_rs
-
@will I'm not currently running it for anyone at this moment. I did a year two back before ever using Cloudron and then started to use the Bitwarden build from @iamthefij when I was teaching myself how to deploy custom apps to Cloudron which worked for me at the time, but I definitely didn't trust myself as I was still new with Cloudron so never used it in any production level. haha.
I'm just making a point that there are some valid use-cases where it'd be great to have a migration guide from anybody who's got a lot of experience with Bitwarden_RS already, regardless of where the source is located because not all sources are going to be beta builds on Cloudron. And at the app level (not even Cloudron) simply exporting a json file isn't enough for those who have attachments nor is that process really user-friendly for those who aren't very computer savvy (I'm thinking my mom for example, I'd love to be hosting her passwords and fully plan on doing it, but what if I need to eventually migrate the instance? How do I make it so that there's no impact to her and I take all the load instead?), so a guide would be great if anyone's come across one or already been pushing through a similar situation that can share some insights.
It's likely more an app-related question than a Cloudron question for sure, but there are many keen Bitwarden admins on here who may already have the experience to share some insight with how to migrate bitwarden_rs instances.
If I can do this myself, I'll be happy to write up a guide. Maybe I'll make this a project in a week or two. I assume we'll need to just identify the critical files that hold all that info and replace the ones in our Cloudron instances with them in the /app/data directory (so it's not overwritten).
-
There's some discussions here: https://github.com/dani-garcia/bitwarden_rs/issues/497#issuecomment-511827057
-
A simple export from the earlier bitwardn app (courtesy of @fbartels) and import into this app did not work for me:
Apr 24 09:41:40 172.18.0.1 - - [24/Apr/2020:07:41:40 +0000] "GET /healthcheck HTTP/1.1" 200 173 "-" "Mozilla (CloudronHealth)" Apr 24 09:41:43 [2020-04-24 07:41:43][request][INFO] POST /api/ciphers/import Apr 24 09:41:43 [2020-04-24 07:41:43][response][INFO] POST /api/ciphers/import (post_ciphers_import) => 400 Bad Request Apr 24 09:41:43 172.18.0.1 - - [24/Apr/2020:07:41:43 +0000] "POST /api/ciphers/import HTTP/1.1" 400 1521 "https://bit.domain.tld/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:76.0) Gecko/20100101 Firefox/76.0" Apr 24 09:41:50 172.18.0.1 - - [24/Apr/2020:07:41:50 +0000] "GET /healthcheck HTTP/1.1" 200 173 "-" "Mozilla (CloudronHealth)"
-
@d19dotca said in Bitwarden_rs:
@iamthefij Yes, I agree. Though the attachments aren't in the sqlite DB itself, are they? I assume there's a directory we need to bring over too.
In both cases, attachments are located in
app/data/attachments
with unique identifiers as filenames. I don't know if those UIDs remain the same after an export/import (which currenlty fails, see above) -
@necrevistonnezr I had similar (the same?) errors and ended up exporting portions of the db and importing said portions, like only the As, then the Bs, etc. Then the importing worked.
-
I managed to migrate from my current bitwarden instance (BW OLD) to the cloudron app (BW NEW) as follows:
- Disable 2-Factor Authentification for BW OLD (this is important!). I also removed "Organizations" in Bitwarden, I don't know if that's important, too.
- Open the terminal for BW OLD, go to
app/data/
- Zip your attachments:
zip -r attachments.zip attachments/
- Dump your existing sqlite database:
sqlite3 db.sqlite3 .dump > sqlitedump.sql
- Drop schema creation and metadata from your dump, leaving only your actual data:
grep "INSERT INTO" sqlitedump.sql | grep -v "__diesel_schema_migrations" > mysqldump.sql
- Still in the terminal view, hit the "Download" button (top right), enter the path to the attachments and the SQL dump (
app/data/attachments.zip
andapp/data/mysqldump.sql
) and download them. - Open the terminal for BW NEW, go to
app/data/
. - Still in the terminal view, hit the "Upload to /tmp" button (top right), upload the previously downloaded attachments.zip and mysqldump.sql
- Move uploaded files to data folder:
mv /tmp/attachments.zip /app/data/
andmv /tmp/mysqldump.sql /app/data/
- Unzip your attachments:
unzip attachments.zip
andrm attachments.zip
11.Import SQL Dump:mysql --user=${CLOUDRON_MYSQL_USERNAME} --password=${CLOUDRON_MYSQL_PASSWORD} --host=${CLOUDRON_MYSQL_HOST} ${CLOUDRON_MYSQL_DATABASE} < mysqldump.sql
(Enter like that, don't replace the variables with your username or password) - Hit "Restart"
You can now login with your Bitwarden credentials. All passwords and the attachments shoud be there.
-
I looked into self hosting a Bitwarden instance myself a few months ago, but decided to wait for Cloudron to implement it. Excited to see it land!
I have a couple of questions about the differences between this version and the 'standard' self-hosted one from Bitwarden itself. For one, normally the user has to provide an an installation key upon set-up which doesn't seem to be the case here.
And it seems as though this version has access to premium and organisation features that users normally have to pay for, even while self-hosting.How does this implementation get around these? Is it possible the instance will break eventually or slowly fork away from the official Bitwarden server?
-
@apatheticatitude This already is a fork away from the official Bitwarden app. Bitwarden_RS is a fork of Bitwarden, written in Rust and allows for the premium features by simply removing parts of the code that would otherwise require a key / license. Any app that’s fully open source, one can technically remove any requirements to pay for it through modification to the code.
-
@necrevistonnezr That’s fantastic! Very detailed. Glad you were able to make that work.
-
@d19dotca said in Bitwarden_rs:
This already is a fork away from the official Bitwarden app
That is not quite right. A fork implies that at some point in time bitwarden_rs and the official server shared the same code, but have diverged since then. (And at at least one side won't include that changes of the other)
Bitwarden_rs is an implementation of a backend component that exposes the exact same API towards the frontend.
Some parts that require payment in the official server have been made available in _rs anyways. Other less heavily used parts are even missing.
@apatheticatitude said in Bitwarden_rs:
Is it possible the instance will break eventually
Possibly. All it takes is larger or unexpected change in the API. So far the bitwarden developer has been friendly towards third party implementations however.
-
@fbartels Ah yes, I guess technically "fork" wasn't really the right word there. The point I was trying to make is the same though... the source we are using for this app in Cloudron is already not the original/official Bitwarden server project to begin with.
-
@d19dotca Yeah, I actually want to make the unofficial part a bit more clearer in our app description or maybe even our post install that Bitwarden. Also want to make sure that if paid features are being used, people take up a subscription with the upstream author. My understanding is that the main project is also a small indie company.
-
@yusf I guess it depends on what features you're referring to. Bitwarden_rs and the official Bitwarden clients (mobile apps, browser extensions, etc.) all support TOTP token storage and file storage, for example, which are both considered premium features (the $10/year if using official vault.bitwarden.com account). Any particular feature you're referring to?
-
@yusf It works with organization in the sense that items shared in an organization will show up and you can add new items to an existing organization. One limitation though in the mobile app is that you can’t create an organization, you have to do that in the web app. That’s a general Bitwarden limitation though, not Bitwarden_rs specifically.
Screenshot below shows the test item I created in a test org, and has a share icon next to it to signify its from a shared organization.
Screenshot below shows how to assign to an org. The org I have is called test. The scribbled out option is the personal account. Test is the org.