mirror of
https://github.com/jakeswenson/BitBetter.git
synced 2023-10-10 13:36:57 +02:00
Improve build and scripts (#30)
* Use absolute path rather than relative path in scripts * Remove src/bitBetter/.keys/cert.cert * Build licenseGen in Docker This way we don't have to install dotnet sdk on the host * Build bitBetter in Docker This way we don't have to install dotnet sdk on the host * Change DIR in run.sh to point to the project root * Replace echo in Dockerfiles by set -x and set -e * Use same Dockerfile for api and identity images * Update README.md * Update CircleCI config The Docker Executor can't mount volume. https://support.circleci.com/hc/en-us/articles/360007324514 https://circleci.com/docs/2.0/executor-types/#using-machine * Make scripts work with sh * Remove the container used to build bitBetter
This commit is contained in:
parent
5d01d3c661
commit
3e44d7347b
@ -1,15 +1,12 @@
|
||||
version: 2
|
||||
jobs:
|
||||
build:
|
||||
docker:
|
||||
- image: microsoft/dotnet:2-sdk
|
||||
machine: true
|
||||
steps:
|
||||
- checkout
|
||||
- run:
|
||||
name: Print the Current Time
|
||||
command: date
|
||||
- setup_remote_docker
|
||||
- run: { name: 'Get docker', command: 'curl -fsSL get.docker.com -o get-docker.sh && sh get-docker.sh' }
|
||||
- run:
|
||||
name: Generate Keys
|
||||
command: ./.keys/generate-keys.sh
|
||||
|
@ -3,15 +3,18 @@
|
||||
# Check for openssl
|
||||
command -v openssl >/dev/null 2>&1 || { echo >&2 "openssl required but not found. Aborting."; exit 1; }
|
||||
|
||||
DIR=`dirname "$0"`
|
||||
DIR=`exec 2>/dev/null;(cd -- "$DIR") && cd -- "$DIR"|| cd "$DIR"; unset PWD; /usr/bin/pwd || /bin/pwd || pwd`
|
||||
|
||||
# Remove any existing key files
|
||||
[ ! -e cert.pem ] || rm cert.pem
|
||||
[ ! -e key.pem ] || rm key.pem
|
||||
[ ! -e cert.cert ] || rm cert.cert
|
||||
[ ! -e cert.pfx ] || rm cert.pfx
|
||||
[ ! -e "$DIR/cert.pem" ] || rm "$DIR/cert.pem"
|
||||
[ ! -e "$DIR/key.pem" ] || rm "$DIR/key.pem"
|
||||
[ ! -e "$DIR/cert.cert" ] || rm "$DIR/cert.cert"
|
||||
[ ! -e "$DIR/cert.pfx" ] || rm "$DIR/cert.pfx"
|
||||
|
||||
# Generate new keys
|
||||
openssl req -x509 -newkey rsa:4096 -keyout .keys/key.pem -out .keys/cert.cert -days 36500 -subj '/CN=www.mydom.com/O=My Company Name LTD./C=US' -outform DER -passout pass:test
|
||||
openssl x509 -inform DER -in .keys/cert.cert -out .keys/cert.pem
|
||||
openssl pkcs12 -export -out .keys/cert.pfx -inkey .keys/key.pem -in .keys/cert.pem -passin pass:test -passout pass:test
|
||||
openssl req -x509 -newkey rsa:4096 -keyout "$DIR/key.pem" -out "$DIR/cert.cert" -days 36500 -subj '/CN=www.mydom.com/O=My Company Name LTD./C=US' -outform DER -passout pass:test
|
||||
openssl x509 -inform DER -in "$DIR/cert.cert" -out "$DIR/cert.pem"
|
||||
openssl pkcs12 -export -out "$DIR/cert.pfx" -inkey "$DIR/key.pem" -in "$DIR/cert.pem" -passin pass:test -passout pass:test
|
||||
|
||||
ls
|
||||
|
16
README.md
16
README.md
@ -4,7 +4,7 @@ BitBetter is is a tool to modify bitwardens core dll to allow you to generate yo
|
||||
|
||||
_Beware! BitBetter does janky IL magic to rewrite the bitwarden core dll and install a self signed certificate. Use at your own risk!_
|
||||
|
||||
Credit to https://github.com/h44z/BitBetter and https://github.com/jakeswenson/BitBetter
|
||||
Credit to https://github.com/h44z/BitBetter and https://github.com/jakeswenson/BitBetter
|
||||
|
||||
# Table of Contents
|
||||
1. [Getting Started](#getting-started)
|
||||
@ -22,7 +22,6 @@ The following instructions are for unix-based systems (Linux, BSD, macOS), it is
|
||||
Aside from docker, which you also need for Bitwarden, BitBetter requires the following:
|
||||
|
||||
* openssl (probably already installed on most Linux or WSL systems)
|
||||
* dotnet-sdk-2.1 (install instructions can be found [here](https://dotnet.microsoft.com/download/linux-package-manager/rhel/sdk-2.1.604))
|
||||
|
||||
## Setting up BitBetter
|
||||
With your pre-requisites installed, begin the installation of BitBetter by downloading it through Github or using the git command:
|
||||
@ -31,15 +30,6 @@ With your pre-requisites installed, begin the installation of BitBetter by downl
|
||||
git clone https://github.com/jakeswenson/BitBetter.git
|
||||
```
|
||||
|
||||
First, we need to add the correct version of Newtonsoft.Json to the license generator and the BitBetter docker directories.
|
||||
|
||||
```bash
|
||||
cd BitBetter/src/licenseGen/
|
||||
dotnet add package Newtonsoft.Json --version 12.0.1
|
||||
|
||||
cd ../bitBetter
|
||||
dotnet add package Newtonsoft.Json --version 12.0.1
|
||||
```
|
||||
## Building BitBetter
|
||||
|
||||
Now that you've set up your build environment, you can **run the main build script** to generate a modified version of the `bitwarden/api` and `bitwarden/identity` docker images.
|
||||
@ -125,13 +115,13 @@ I'll work on updates in the next couple weeks, right now, I just wanted somethin
|
||||
## But why? Its open source?
|
||||
|
||||
Yes, bitwarden is great. If I didn't care about it i wouldn't be doing this.
|
||||
I was bothered that if i want to host bitwarden myself, at my house,
|
||||
I was bothered that if i want to host bitwarden myself, at my house,
|
||||
for my family to use (with the ability to share access) I would still have to pay a monthly ENTERPRISE organization fee.
|
||||
To host it myself. And maintain it myself. Basically WTH was bitwarden doing that I was paying them for?
|
||||
|
||||
## You should have reached out to bitwarden
|
||||
|
||||
Thanks, good idea. And I did. Currently they're not focused on solving this issue - yet.
|
||||
Thanks, good idea. And I did. Currently they're not focused on solving this issue - yet.
|
||||
To be clear i'm totally happy to give them my money. Offer a perpetual server license, and i'd pay for it. Let me license the server, period. Allow an orginzation to have Premium for all users.. 500 seats, let the 500 users in the orginzation have the Premium features too.
|
||||
|
||||
I'm still in the testing/evaluating phase. If I am hosting the server/data, let me license the server, period. How many licenses does one user need to have...
|
||||
|
26
build.sh
26
build.sh
@ -1,24 +1,18 @@
|
||||
#!/bin/bash
|
||||
#!/bin/sh
|
||||
|
||||
DIR=`dirname "$0"`
|
||||
DIR=`exec 2>/dev/null;(cd -- "$DIR") && cd -- "$DIR"|| cd "$DIR"; unset PWD; /usr/bin/pwd || /bin/pwd || pwd`
|
||||
|
||||
# If there aren't any keys, generate them first.
|
||||
[ -e ./.keys/cert.cert ] || ./.keys/generate-keys.sh
|
||||
[ -e "$DIR/.keys/cert.cert" ] || "$DIR/.keys/generate-keys.sh"
|
||||
|
||||
[ -e ./src/bitBetter/api/.keys ] || mkdir ./src/bitBetter/api/.keys
|
||||
[ -e ./src/bitBetter/identity/.keys ] || mkdir ./src/bitBetter/identity/.keys
|
||||
[ -e "$DIR/src/bitBetter/.keys" ] || mkdir "$DIR/src/bitBetter/.keys"
|
||||
|
||||
cp .keys/cert.cert ./src/bitBetter/api/.keys
|
||||
cp .keys/cert.cert ./src/bitBetter/identity/.keys
|
||||
cp "$DIR/.keys/cert.cert" "$DIR/src/bitBetter/.keys"
|
||||
|
||||
cd ./src/bitBetter
|
||||
docker run --rm -v "$DIR/src/bitBetter:/bitBetter" -w=/bitBetter mcr.microsoft.com/dotnet/core/sdk:2.1 sh build.sh
|
||||
|
||||
dotnet restore
|
||||
dotnet publish
|
||||
docker build --build-arg BITWARDEN_TAG=bitwarden/api -t bitbetter/api "$DIR/src/bitBetter" # --squash
|
||||
docker build --build-arg BITWARDEN_TAG=bitwarden/identity -t bitbetter/identity "$DIR/src/bitBetter" # --squash
|
||||
|
||||
cp -r bin/ api/
|
||||
cp -r bin/ identity/
|
||||
|
||||
cd ./api
|
||||
docker build --pull . -t bitbetter/api # --squash
|
||||
|
||||
cd ../identity
|
||||
docker build --pull . -t bitbetter/identity # --squash
|
||||
|
Binary file not shown.
11
src/bitBetter/Dockerfile
Normal file
11
src/bitBetter/Dockerfile
Normal file
@ -0,0 +1,11 @@
|
||||
ARG BITWARDEN_TAG
|
||||
FROM ${BITWARDEN_TAG}
|
||||
|
||||
COPY bin/Debug/netcoreapp2.0/publish/* /bitBetter/
|
||||
COPY ./.keys/cert.cert /newLicensing.cer
|
||||
|
||||
RUN set -e; set -x; \
|
||||
dotnet /bitBetter/bitBetter.dll && \
|
||||
mv /app/Core.dll /app/Core.orig.dll && \
|
||||
mv /app/modified.dll /app/Core.dll && \
|
||||
rm -rf /bitBetter && rm -rf /newLicensing.cer
|
@ -1,12 +0,0 @@
|
||||
FROM bitwarden/api
|
||||
|
||||
COPY bin/Debug/netcoreapp2.0/publish/* /bitBetter/
|
||||
COPY ./.keys/cert.cert /newLicensing.cer
|
||||
|
||||
RUN dotnet /bitBetter/bitBetter.dll && \
|
||||
echo "modified dll" && \
|
||||
mv /app/Core.dll /app/Core.orig.dll && \
|
||||
mv /app/modified.dll /app/Core.dll && \
|
||||
echo "replaced dll" && \
|
||||
rm -rf /bitBetter && rm -rf /newLicensing.cer && \
|
||||
echo "cleaned up"
|
8
src/bitBetter/build.sh
Executable file
8
src/bitBetter/build.sh
Executable file
@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
set -x
|
||||
|
||||
dotnet add package Newtonsoft.Json --version 12.0.1
|
||||
dotnet restore
|
||||
dotnet publish
|
@ -1,12 +0,0 @@
|
||||
FROM bitwarden/identity
|
||||
|
||||
COPY bin/Debug/netcoreapp2.0/publish/* /bitBetter/
|
||||
COPY ./.keys/cert.cert /newLicensing.cer
|
||||
|
||||
RUN dotnet /bitBetter/bitBetter.dll && \
|
||||
echo "modified dll" && \
|
||||
mv /app/Core.dll /app/Core.orig.dll && \
|
||||
mv /app/modified.dll /app/Core.dll && \
|
||||
echo "replaced dll" && \
|
||||
rm -rf /bitBetter && rm -rf /newLicensing.cer && \
|
||||
echo "cleaned up"
|
@ -1,5 +1,17 @@
|
||||
FROM mcr.microsoft.com/dotnet/core/sdk:2.1 as build
|
||||
|
||||
WORKDIR /licenseGen
|
||||
|
||||
COPY . /licenseGen
|
||||
|
||||
RUN set -e; set -x; \
|
||||
dotnet add package Newtonsoft.Json --version 12.0.1 \
|
||||
&& dotnet restore \
|
||||
&& dotnet publish
|
||||
|
||||
|
||||
FROM bitbetter/api
|
||||
|
||||
COPY bin/Debug/netcoreapp2.0/publish/* /app/
|
||||
COPY --from=build /licenseGen/bin/Debug/netcoreapp2.0/publish/* /app/
|
||||
|
||||
ENTRYPOINT [ "dotnet", "/app/licenseGen.dll", "--core", "/app/Core.dll", "--cert", "/cert.pfx" ]
|
||||
ENTRYPOINT [ "dotnet", "/app/licenseGen.dll", "--core", "/app/Core.dll", "--cert", "/cert.pfx" ]
|
||||
|
@ -1,11 +1,6 @@
|
||||
#!/bin/bash
|
||||
#!/bin/sh
|
||||
|
||||
script_dir=`cd $(dirname $0); pwd`
|
||||
|
||||
cd $script_dir
|
||||
|
||||
dotnet restore
|
||||
dotnet publish
|
||||
|
||||
docker build . -t bitbetter/licensegen # --squash
|
||||
DIR=`dirname "$0"`
|
||||
DIR=`exec 2>/dev/null;(cd -- "$DIR") && cd -- "$DIR"|| cd "$DIR"; unset PWD; /usr/bin/pwd || /bin/pwd || pwd`
|
||||
|
||||
docker build -t bitbetter/licensegen "$DIR" # --squash
|
||||
|
@ -1,18 +1,19 @@
|
||||
#!/bin/bash
|
||||
#!/bin/sh
|
||||
|
||||
script_dir=`cd $(dirname $0); pwd`
|
||||
DIR=`dirname "$0"`
|
||||
DIR=`exec 2>/dev/null;(cd -- "$DIR") && cd -- "$DIR"|| cd "$DIR"; unset PWD; /usr/bin/pwd || /bin/pwd || pwd`
|
||||
|
||||
# Grab the absolute path to the default pfx location
|
||||
cert_path=`cd ./.keys; ls -d -1 $PWD/cert.pfx`
|
||||
cert_path="$DIR/.keys/cert.pfx"
|
||||
|
||||
if [ "$#" -lt "1" ]; then
|
||||
echo "USAGE: $0 <ABSOLUTE PATH TO CERT.PFX> [License Gen args...]"
|
||||
exit 1
|
||||
elif [ "$#" -ge "2" ]; then
|
||||
# If a cert path is provided manually, override the default
|
||||
cert_path=$1
|
||||
cert_path="$1"
|
||||
shift
|
||||
fi
|
||||
|
||||
docker run -it -v "$cert_path:/cert.pfx" bitbetter/licensegen "$@"
|
||||
docker run -it --rm -v "$cert_path:/cert.pfx" bitbetter/licensegen "$@"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user