mirror of
				https://github.com/jakeswenson/BitBetter.git
				synced 2025-10-31 04:43:25 +00:00 
			
		
		
		
	Make Sso available in org license (#73)
* Exclude cert.cert from git * Use latest release of bitwarden as base image (#67, #66) * Add a script which simplifies Bitwarden updates * fix typo * Add UseApi * Updated version, created update section * Workaround for docker-compose --ignore-pull-failures bugs (4377 and 7127) * use version from docker script * check if bitbetter images are outdated * Make Sso available in org license Add `UseSso` var and enable * Update README.md Co-authored-by: Christoph Haas <christoph.h@sprinternet.at> Co-authored-by: Lework <kuailemy123@163.com> Co-authored-by: Captainhook <ec14018@qmul.ac.uk>
This commit is contained in:
		
							parent
							
								
									6527ac8362
								
							
						
					
					
						commit
						7d8f0b1082
					
				|  | @ -13,6 +13,7 @@ Credit to https://github.com/h44z/BitBetter and https://github.com/jakeswenson/B | ||||||
|     + [Dependencies](#dependencies) |     + [Dependencies](#dependencies) | ||||||
|     + [Setting up BitBetter](#setting-up-bitbetter) |     + [Setting up BitBetter](#setting-up-bitbetter) | ||||||
|     + [Building BitBetter](#building-bitbetter) |     + [Building BitBetter](#building-bitbetter) | ||||||
|  |     + [Updating Bitwarden and BitBetter](#updating-bitwarden-and-bitbetter) | ||||||
|     + [Generating Signed Licenses](#generating-signed-licenses) |     + [Generating Signed Licenses](#generating-signed-licenses) | ||||||
| 2. [FAQ](#faq-questions-you-might-have-) | 2. [FAQ](#faq-questions-you-might-have-) | ||||||
| 3. [Footnotes](#footnotes) | 3. [Footnotes](#footnotes) | ||||||
|  | @ -23,7 +24,7 @@ The following instructions are for unix-based systems (Linux, BSD, macOS), it is | ||||||
| ## Dependencies | ## Dependencies | ||||||
| Aside from docker, which you also need for Bitwarden, BitBetter requires the following: | Aside from docker, which you also need for Bitwarden, BitBetter requires the following: | ||||||
| 
 | 
 | ||||||
| * Bitwarden (tested with 1.33.0, might work on lower versions) | * Bitwarden (tested with 1.37.0, might work on lower versions) | ||||||
| * openssl (probably already installed on most Linux or WSL systems, any version should work) | * openssl (probably already installed on most Linux or WSL systems, any version should work) | ||||||
| 
 | 
 | ||||||
| ## Setting up BitBetter | ## Setting up BitBetter | ||||||
|  | @ -78,6 +79,10 @@ openssl pkcs12 -export -out cert.pfx -inkey key.pem -in cert.pem -passin pass:te | ||||||
| 
 | 
 | ||||||
| --- | --- | ||||||
| 
 | 
 | ||||||
|  | ## Updating Bitwarden and BitBetter | ||||||
|  | 
 | ||||||
|  | To update Bitwarden, the provided `update-bitwarden.sh` script can be used. It will rebuild the BitBetter images and automatically update Bitwarden afterwards. Docker pull errors can be ignored for api and identity images. | ||||||
|  | 
 | ||||||
| ## Generating Signed Licenses | ## Generating Signed Licenses | ||||||
| 
 | 
 | ||||||
| There is a tool included in the directory `src/licenseGen/` that will generate new individual and organization licenses. These licenses will be accepted by the modified Bitwarden because they will be signed by the certificate you generated in earlier steps. | There is a tool included in the directory `src/licenseGen/` that will generate new individual and organization licenses. These licenses will be accepted by the modified Bitwarden because they will be signed by the certificate you generated in earlier steps. | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								build.sh
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								build.sh
									
									
									
									
									
								
							|  | @ -2,6 +2,9 @@ | ||||||
| 
 | 
 | ||||||
| DIR=`dirname "$0"` | DIR=`dirname "$0"` | ||||||
| DIR=`exec 2>/dev/null;(cd -- "$DIR") && cd -- "$DIR"|| cd "$DIR"; unset PWD; /usr/bin/pwd || /bin/pwd || pwd` | DIR=`exec 2>/dev/null;(cd -- "$DIR") && cd -- "$DIR"|| cd "$DIR"; unset PWD; /usr/bin/pwd || /bin/pwd || pwd` | ||||||
|  | BW_VERSION="$(curl --silent https://raw.githubusercontent.com/bitwarden/server/master/scripts/bitwarden.sh | grep 'COREVERSION="' | sed 's/^[^"]*"//; s/".*//')" | ||||||
|  | 
 | ||||||
|  | echo "Building BitBetter for BitWarden version $BW_VERSION" | ||||||
| 
 | 
 | ||||||
| # If there aren't any keys, generate them first. | # If there aren't any keys, generate them first. | ||||||
| [ -e "$DIR/.keys/cert.cert" ] || "$DIR/.keys/generate-keys.sh" | [ -e "$DIR/.keys/cert.cert" ] || "$DIR/.keys/generate-keys.sh" | ||||||
|  | @ -12,7 +15,11 @@ cp "$DIR/.keys/cert.cert" "$DIR/src/bitBetter/.keys" | ||||||
| 
 | 
 | ||||||
| docker run --rm -v "$DIR/src/bitBetter:/bitBetter" -w=/bitBetter mcr.microsoft.com/dotnet/core/sdk:3.1 sh build.sh | docker run --rm -v "$DIR/src/bitBetter:/bitBetter" -w=/bitBetter mcr.microsoft.com/dotnet/core/sdk:3.1 sh build.sh | ||||||
| 
 | 
 | ||||||
| docker build --build-arg BITWARDEN_TAG=bitwarden/api -t bitbetter/api "$DIR/src/bitBetter" # --squash | docker build --no-cache --build-arg BITWARDEN_TAG=bitwarden/api:$BW_VERSION -t bitbetter/api "$DIR/src/bitBetter" # --squash | ||||||
| docker build --build-arg BITWARDEN_TAG=bitwarden/identity -t bitbetter/identity "$DIR/src/bitBetter" # --squash | docker build --no-cache --build-arg BITWARDEN_TAG=bitwarden/identity:$BW_VERSION -t bitbetter/identity "$DIR/src/bitBetter" # --squash | ||||||
| 
 | 
 | ||||||
|  | docker tag bitbetter/api bitbetter/api:latest | ||||||
|  | docker tag bitbetter/identity bitbetter/identity:latest | ||||||
|  | docker tag bitbetter/api bitbetter/api:$BW_VERSION | ||||||
|  | docker tag bitbetter/identity bitbetter/identity:$BW_VERSION | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -51,10 +51,10 @@ namespace bitwardenSelfLicensor | ||||||
| 
 | 
 | ||||||
|             var existingCert = new X509Certificate2(x.GetResourceData()); |             var existingCert = new X509Certificate2(x.GetResourceData()); | ||||||
| 
 | 
 | ||||||
|             Console.WriteLine($"Existing Cert Thumbprin: {existingCert.Thumbprint}"); |             Console.WriteLine($"Existing Cert Thumbprint: {existingCert.Thumbprint}"); | ||||||
|             X509Certificate2 certificate = new X509Certificate2(cert); |             X509Certificate2 certificate = new X509Certificate2(cert); | ||||||
| 
 | 
 | ||||||
|             Console.WriteLine($"New cert Thumbprint: {certificate.Thumbprint}"); |             Console.WriteLine($"New Cert Thumbprint: {certificate.Thumbprint}"); | ||||||
| 
 | 
 | ||||||
|             var ctor = licensingType.GetConstructors().Single(); |             var ctor = licensingType.GetConstructors().Single(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -359,6 +359,7 @@ namespace bitwardenSelfLicensor | ||||||
|             set("Seats", (short)32767); |             set("Seats", (short)32767); | ||||||
|             set("MaxCollections", short.MaxValue); |             set("MaxCollections", short.MaxValue); | ||||||
|             set("UsePolicies", true); |             set("UsePolicies", true); | ||||||
|  |             set("UseSso", true); | ||||||
|             set("UseGroups", true); |             set("UseGroups", true); | ||||||
|             set("UseEvents", true); |             set("UseEvents", true); | ||||||
|             set("UseDirectory", true); |             set("UseDirectory", true); | ||||||
|  | @ -367,11 +368,12 @@ namespace bitwardenSelfLicensor | ||||||
|             set("MaxStorageGb", short.MaxValue); |             set("MaxStorageGb", short.MaxValue); | ||||||
|             set("SelfHost", true); |             set("SelfHost", true); | ||||||
|             set("UsersGetPremium", true); |             set("UsersGetPremium", true); | ||||||
|             set("Version", 5); |             set("Version", 6); | ||||||
|             set("Issued", DateTime.UtcNow); |             set("Issued", DateTime.UtcNow); | ||||||
|             set("Refresh", DateTime.UtcNow.AddYears(100).AddMonths(-1)); |             set("Refresh", DateTime.UtcNow.AddYears(100).AddMonths(-1)); | ||||||
|             set("Expires", DateTime.UtcNow.AddYears(100)); |             set("Expires", DateTime.UtcNow.AddYears(100)); | ||||||
|             set("Trial", false); |             set("Trial", false); | ||||||
|  |             set("UseApi", true); | ||||||
| 
 | 
 | ||||||
|             set("Hash", Convert.ToBase64String((byte[])type.GetMethod("ComputeHash").Invoke(license, new object[0]))); |             set("Hash", Convert.ToBase64String((byte[])type.GetMethod("ComputeHash").Invoke(license, new object[0]))); | ||||||
|             set("Signature", Convert.ToBase64String((byte[])type.GetMethod("Sign").Invoke(license, new object[] { cert }))); |             set("Signature", Convert.ToBase64String((byte[])type.GetMethod("Sign").Invoke(license, new object[] { cert }))); | ||||||
|  |  | ||||||
							
								
								
									
										73
									
								
								update-bitwarden.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										73
									
								
								update-bitwarden.sh
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,73 @@ | ||||||
|  | #!/bin/bash | ||||||
|  | 
 | ||||||
|  | SCRIPT_BASE="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" | ||||||
|  | BW_VERSION="$(curl --silent https://raw.githubusercontent.com/bitwarden/server/master/scripts/bitwarden.sh | grep 'COREVERSION="' | sed 's/^[^"]*"//; s/".*//')" | ||||||
|  | 
 | ||||||
|  | echo "Starting Bitwarden update, newest server version: $BW_VERSION" | ||||||
|  | 
 | ||||||
|  | # Default path is the parent directory of the BitBetter location | ||||||
|  | BITWARDEN_BASE="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." >/dev/null 2>&1 && pwd )" | ||||||
|  | 
 | ||||||
|  | # Get Bitwarden base from user (or keep default value) | ||||||
|  | read -p "Enter Bitwarden base directory [$BITWARDEN_BASE]: " tmpbase | ||||||
|  | BITWARDEN_BASE=${tmpbase:-$BITWARDEN_BASE} | ||||||
|  | 
 | ||||||
|  | # Check if directory exists and is valid | ||||||
|  | [ -d "$BITWARDEN_BASE" ] || { echo "Bitwarden base directory $BITWARDEN_BASE not found!"; exit 1; } | ||||||
|  | [ -f "$BITWARDEN_BASE/bitwarden.sh" ] || { echo "Bitwarden base directory $BITWARDEN_BASE is not valid!"; exit 1; } | ||||||
|  | 
 | ||||||
|  | # Check if user wants to recreate the docker-compose override file | ||||||
|  | RECREATE_OV="y" | ||||||
|  | read -p "Rebuild docker-compose override? [Y/n]: " tmprecreate | ||||||
|  | RECREATE_OV=${tmprecreate:-$RECREATE_OV} | ||||||
|  | 
 | ||||||
|  | if [[ $RECREATE_OV =~ ^[Yy]$ ]] | ||||||
|  | then | ||||||
|  |     { | ||||||
|  |         echo "version: '3'" | ||||||
|  |         echo "" | ||||||
|  |         echo "services:" | ||||||
|  |         echo "  api:" | ||||||
|  |         echo "    image: bitbetter/api:$BW_VERSION" | ||||||
|  |         echo "" | ||||||
|  |         echo "  identity:" | ||||||
|  |         echo "    image: bitbetter/identity:$BW_VERSION" | ||||||
|  |         echo "" | ||||||
|  |     } > $BITWARDEN_BASE/bwdata/docker/docker-compose.override.yml | ||||||
|  |     echo "BitBetter docker-compose override created!" | ||||||
|  | else | ||||||
|  |     echo "Make sure to check if the docker override contains the correct image version ($BW_VERSION) in $BITWARDEN_BASE/bwdata/docker/docker-compose.override.yml!" | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | # Check if user wants to rebuild the bitbetter images | ||||||
|  | docker images bitbetter/api --format="{{ .Tag }}" | grep -F -- "${BW_VERSION}" > /dev/null | ||||||
|  | retval=$? | ||||||
|  | REBUILD_BB="n" | ||||||
|  | REBUILD_BB_DESCR="[y/N]" | ||||||
|  | if [ $retval -ne 0 ]; then | ||||||
|  |     REBUILD_BB="y" | ||||||
|  |     REBUILD_BB_DESCR="[Y/n]" | ||||||
|  | fi | ||||||
|  | read -p "Rebuild BitBetter images? $REBUILD_BB_DESCR: " tmprebuild | ||||||
|  | REBUILD_BB=${tmprebuild:-$REBUILD_BB} | ||||||
|  | 
 | ||||||
|  | if [[ $REBUILD_BB =~ ^[Yy]$ ]] | ||||||
|  | then | ||||||
|  |     ./build.sh | ||||||
|  |     echo "BitBetter images updated to version: $BW_VERSION" | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | # Now start the bitwarden update | ||||||
|  | cd $BITWARDEN_BASE | ||||||
|  | 
 | ||||||
|  | ./bitwarden.sh updateself | ||||||
|  | 
 | ||||||
|  | # Update the bitwarden.sh: automatically patch run.sh to fix docker-compose pull errors for private images | ||||||
|  | awk '1;/function downloadRunFile/{c=6}c&&!--c{print "sed -i '\''s/docker-compose pull/docker-compose pull --ignore-pull-failures || true/g'\'' $SCRIPTS_DIR/run.sh"}' $BITWARDEN_BASE/bitwarden.sh > tmp_bw.sh && mv tmp_bw.sh $BITWARDEN_BASE/bitwarden.sh | ||||||
|  | chmod +x $BITWARDEN_BASE/bitwarden.sh | ||||||
|  | echo "Patching bitwarden.sh completed..." | ||||||
|  | 
 | ||||||
|  | ./bitwarden.sh update | ||||||
|  | 
 | ||||||
|  | cd $SCRIPT_BASE | ||||||
|  | echo "Bitwarden update completed!" | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user