diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 173cc3c..30d4644 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -12,7 +12,7 @@ before: hooks: - go mod tidy - go generate ./... - - sh -c "ls && cd ./webui && npm i && npm run build" + - sh -c "ls && cd ./webui && npm i && npm run build && gzip ./dist/*" builds: - main: . diff --git a/backrest.go b/backrest.go index 6fc0692..d416b44 100644 --- a/backrest.go +++ b/backrest.go @@ -80,7 +80,25 @@ func main() { mux := http.NewServeMux() if box, err := rice.FindBox("webui/dist"); err == nil { - mux.Handle("/", http.FileServer(box.HTTPBox())) + mux.Handle("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if strings.HasSuffix(r.URL.Path, "/") { + r.URL.Path += "index.html" + } + f, err := box.Open(r.URL.Path + ".gz") + if err == nil { + defer f.Close() + w.Header().Set("Content-Encoding", "gzip") + http.ServeContent(w, r, r.URL.Path, box.Time(), f) + return + } + f, err = box.Open(r.URL.Path) + if err == nil { + defer f.Close() + http.ServeContent(w, r, r.URL.Path, box.Time(), f) + return + } + http.Error(w, "Not found", http.StatusNotFound) + })) } else { zap.S().Warnf("Error loading static assets, not serving UI: %v", err) } diff --git a/go.mod b/go.mod index 3faaeeb..4cf742b 100644 --- a/go.mod +++ b/go.mod @@ -3,29 +3,30 @@ module github.com/garethgeorge/backrest go 1.21 require ( + connectrpc.com/connect v1.14.0 github.com/GeertJohan/go.rice v1.0.3 + github.com/NYTimes/gziphandler v1.1.1 github.com/gitploy-io/cronexpr v0.2.2 - github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.1 - github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 github.com/hashicorp/go-multierror v1.1.1 github.com/mattn/go-colorable v0.1.13 github.com/natefinch/atomic v1.0.1 go.etcd.io/bbolt v1.3.8 go.uber.org/zap v1.26.0 golang.org/x/crypto v0.17.0 + golang.org/x/net v0.19.0 google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0 google.golang.org/grpc v1.60.1 google.golang.org/protobuf v1.32.0 ) require ( - connectrpc.com/connect v1.14.0 // indirect github.com/daaku/go.zipexe v1.0.2 // indirect github.com/golang/protobuf v1.5.3 // indirect + github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.1 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/mattn/go-isatty v0.0.20 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/net v0.19.0 // indirect golang.org/x/sys v0.15.0 // indirect golang.org/x/text v0.14.0 // indirect google.golang.org/genproto v0.0.0-20231212172506-995d672761c0 // indirect diff --git a/go.sum b/go.sum index b7d58be..7696a43 100644 --- a/go.sum +++ b/go.sum @@ -3,6 +3,8 @@ connectrpc.com/connect v1.14.0/go.mod h1:uoAq5bmhhn43TwhaKdGKN/bZcGtzPW1v+ngDTn5 github.com/GeertJohan/go.incremental v1.0.0/go.mod h1:6fAjUhbVuX1KcMD3c8TEgVUqmo4seqhv0i0kdATSkM0= github.com/GeertJohan/go.rice v1.0.3 h1:k5viR+xGtIhF61125vCE1cmJ5957RQGXG6dmbaWZSmI= github.com/GeertJohan/go.rice v1.0.3/go.mod h1:XVdrU4pW00M4ikZed5q56tPf1v2KwnIKeIdc9CBYNt4= +github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= +github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= github.com/daaku/go.zipexe v1.0.2 h1:Zg55YLYTr7M9wjKn8SY/WcpuuEi+kR2u4E8RhvpyXmk= github.com/daaku/go.zipexe v1.0.2/go.mod h1:5xWogtqlYnfBXkSB1o9xysukNP9GTvaNkqzUZbt3Bw8= diff --git a/install.sh b/install.sh index 09446b8..6f9fb28 100755 --- a/install.sh +++ b/install.sh @@ -1,14 +1,10 @@ #! /bin/bash -if [ "$EUID" -ne "0" ]; then - echo "Please run as root e.g. sudo ./install.sh" - exit -fi install_unix() { echo "Installing backrest to /usr/local/bin" - mkdir -p /usr/local/bin - cp $(ls -1 backrest | head -n 1) /usr/local/bin + sudo mkdir -p /usr/local/bin + sudo cp $(ls -1 backrest | head -n 1) /usr/local/bin } create_systemd_service() { @@ -19,7 +15,7 @@ create_systemd_service() { echo "Creating systemd service at /etc/systemd/system/backrest.service" - cat > /etc/systemd/system/backrest.service <<- EOM + sudo cat > /etc/systemd/system/backrest.service <<- EOM [Unit] Description=Backrest Service After=network.target @@ -33,30 +29,32 @@ ExecStart=/usr/local/bin/backrest [Install] WantedBy=multi-user.target EOM - + echo "Reloading systemd daemon" - systemctl daemon-reload + sudo systemctl daemon-reload } create_launchd_plist() { echo "Creating launchd plist at /Library/LaunchAgents/com.backrest.plist" - cat > /Library/LaunchAgents/com.backrest.plist <<- EOM + sudo tee /Library/LaunchAgents/com.backrest.plist > /dev/null <<- EOM - - Label - com.backrest - Program - /usr/local/bin/backrest - RunAtLoad - + + Label + com.backrest + ProgramArguments + + /usr/local/bin/backrest + + KeepAlive + StandardOutPath /tmp/backrest.log StandardErrorPath /tmp/backrest.log - + EOM } @@ -78,9 +76,9 @@ elif [ "$OS" = "Linux" ]; then install_unix create_systemd_service echo "Enabling systemd service backrest.service" - systemctl enable backrest - systemctl start backrest + sudo systemctl enable backrest + sudo systemctl start backrest else echo "Unknown OS: $OS. This script only supports Darwin and Linux." exit 1 -fi +fi \ No newline at end of file diff --git a/uninstall.sh b/uninstall.sh index 01a784f..4d0c542 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -1,13 +1,8 @@ #! /bin/bash -if [ "$EUID" -ne "0" ]; then - echo "Please run as root e.g. sudo ./install.sh" - exit -fi - uninstall_unix() { echo "Uninstalling backrest from /usr/local/bin/backrest" - rm -f /usr/local/bin/backrest + sudo rm -f /usr/local/bin/backrest } remove_systemd_service() { @@ -17,19 +12,19 @@ remove_systemd_service() { fi echo "Removing systemd service at /etc/systemd/system/backrest.service" - systemctl stop backrest - systemctl disable backrest - rm -f /etc/systemd/system/backrest.service + sudo systemctl stop backrest + sudo systemctl disable backrest + sudo rm -f /etc/systemd/system/backrest.service echo "Reloading systemd daemon" - systemctl daemon-reload + sudo systemctl daemon-reload } remove_launchd_plist() { echo "Removing launchd plist at /Library/LaunchAgents/com.backrest.plist" launchctl unload /Library/LaunchAgents/com.backrest.plist || true - rm /Library/LaunchAgents/com.backrest.plist + sudo rm /Library/LaunchAgents/com.backrest.plist } OS=$(uname -s) diff --git a/webui/.proxyrc.json b/webui/.proxyrc.json index f1c1947..41448ce 100644 --- a/webui/.proxyrc.json +++ b/webui/.proxyrc.json @@ -1,5 +1,5 @@ { - "/api": { + "/v1.Backrest": { "target": "http://localhost:9898", "secure": false }