diff --git a/.goreleaser.yml b/.goreleaser.yml index 9c5b5d7..a89c1ac 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -8,7 +8,7 @@ release: name_template: "v{{.Version}}" before: hooks: - - npm i + - npm ci - make precompile builds: - id: notray @@ -34,7 +34,7 @@ builds: - PKG_CONFIG_PATH=/usr/lib/{{ if eq .Arch "amd64" }}x86_64{{ else if eq .Arch "arm64" }}aarch64{{ else }}{{ .Arch }}{{ end }}-linux-gnu{{ if eq .Arch "arm" }}eabihf{{ end }}/pkgconfig:$PKG_CONFIG_PATH - GOARM={{ if eq .Arch "arm" }}7{{ end }} flags: - - -tags=e2ee,{{ .Env.JFA_GO_TAG }} + - -tags=e2ee,goolm,{{ .Env.JFA_GO_TAG }} ldflags: - -X main.version={{.Env.JFA_GO_VERSION}} -X main.commit={{.ShortCommit}} -X main.updater={{.Env.JFA_GO_UPDATER}} {{.Env.JFA_GO_STRIP}} -X main.cssVersion={{.Env.JFA_GO_CSS_VERSION}} -X main.buildTimeUnix={{.Env.JFA_GO_BUILD_TIME}} -X main.builtBy="{{.Env.JFA_GO_BUILT_BY}}" goos: @@ -65,7 +65,7 @@ builds: - CXX=x86_64-linux-gnu-gcc - PKG_CONFIG_PATH=/usr/lib/{{ if eq .Arch "amd64" }}x86_64{{ else if eq .Arch "arm64" }}aarch64{{ else }}{{ .Arch }}{{ end }}-linux-gnu{{ if eq .Arch "arm" }}eabihf{{ end }}/pkgconfig:$PKG_CONFIG_PATH flags: - - -tags=tray,e2ee,{{ .Env.JFA_GO_TAG }} + - -tags=tray,e2ee,goolm,{{ .Env.JFA_GO_TAG }} ldflags: - -X main.version={{.Env.JFA_GO_VERSION}} -X main.commit={{.ShortCommit}} -X main.updater={{.Env.JFA_GO_UPDATER}} {{.Env.JFA_GO_STRIP}} -X main.cssVersion={{.Env.JFA_GO_CSS_VERSION}} -X main.buildTimeUnix={{.Env.JFA_GO_BUILD_TIME}} -X main.builtBy="{{.Env.JFA_GO_BUILT_BY}}" goos: diff --git a/.woodpecker/stable.yaml b/.woodpecker/stable.yaml index c4d8bac..4a9fc22 100644 --- a/.woodpecker/stable.yaml +++ b/.woodpecker/stable.yaml @@ -49,9 +49,7 @@ steps: - jfa-go-mod-cache:/go/pkg/mod - jfa-go-npm-cache:/npm commands: - - curl -sfL https://goreleaser.com/static/run > ../goreleaser - - chmod +x ../goreleaser - - ./scripts/version.sh ../goreleaser + - ./scripts/version.sh goreleaser - name: deb-repo image: docker.io/hrfee/jfa-go-build-docker:latest environment: @@ -74,7 +72,7 @@ steps: - jfa-go-npm-cache:/npm commands: - sed -i 's#id="password_resets-watch_directory" placeholder="/config/jellyfin"#id="password_resets-watch_directory" value="/jf" disabled#g' ./build/data/html/setup.html - - env GOOS=linux INTERNAL=off ./scripts/version.sh ./goreleaser build --id notray-e2ee --clean + - env GOOS=linux INTERNAL=off ./scripts/version.sh goreleaser build --id notray-e2ee --clean - mv ./dist/notray-e2ee_linux_arm_6 ./dist/notray-e2ee_linux_arm - name: container image: docker.io/woodpeckerci/plugin-docker-buildx diff --git a/.woodpecker/unstable.yaml b/.woodpecker/unstable.yaml index b812f63..844a982 100644 --- a/.woodpecker/unstable.yaml +++ b/.woodpecker/unstable.yaml @@ -49,9 +49,7 @@ steps: - jfa-go-mod-cache:/go/pkg/mod - jfa-go-npm-cache:/npm commands: - - curl -sfL https://goreleaser.com/static/run > goreleaser - - chmod +x goreleaser - - ./scripts/version.sh ./goreleaser --snapshot --skip=publish --clean + - ./scripts/version.sh goreleaser --snapshot --skip=publish --clean - name: buildrone-binary image: docker.io/hrfee/jfa-go-build-docker:latest environment: @@ -91,7 +89,7 @@ steps: - jfa-go-npm-cache:/npm commands: - sed -i 's#id="password_resets-watch_directory" placeholder="/config/jellyfin"#id="password_resets-watch_directory" value="/jf" disabled#g' ./build/data/html/setup.html - - env GOOS=linux INTERNAL=off ./scripts/version.sh ./goreleaser build --snapshot --id notray-e2ee --clean + - env GOOS=linux INTERNAL=off ./scripts/version.sh goreleaser build --snapshot --id notray-e2ee --clean - mv ./dist/notray-e2ee_linux_arm_6 ./dist/notray-e2ee_linux_arm - name: container image: docker.io/woodpeckerci/plugin-docker-buildx diff --git a/Dockerfile b/Dockerfile index a013a39..ce32c8c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,26 +1,20 @@ -# Use this instead if hrfee/jfa-go-build-docker doesn't support your architecture -# FROM --platform=$BUILDPLATFORM golang:latest AS support FROM --platform=$BUILDPLATFORM docker.io/hrfee/jfa-go-build-docker:latest AS support -# FROM --platform=$BUILDPLATFORM jfa-go-bd AS support ARG BUILT_BY ENV JFA_GO_BUILT_BY=$BUILT_BY COPY . /opt/build -# RUN curl -sfL https://goreleaser.com/static/run > /goreleaser && chmod +x /goreleaser -RUN cd /opt/build; INTERNAL=off UPDATER=docker ./scripts/version.sh /goreleaser build --snapshot --skip=validate --clean --id notray-e2ee +RUN cd /opt/build; INTERNAL=off UPDATER=docker ./scripts/version.sh goreleaser build --snapshot --skip=validate --clean --id notray-e2ee RUN mv /opt/build/dist/*_linux_arm_6 /opt/build/dist/placeholder_linux_arm RUN sed -i 's#id="password_resets-watch_directory" placeholder="/config/jellyfin"#id="password_resets-watch_directory" value="/jf" disabled#g' /opt/build/build/data/html/setup.html -FROM golang:bookworm AS final +FROM gcr.io/distroless/base:latest AS final ARG TARGETARCH -COPY --from=support /opt/build/dist/*_linux_${TARGETARCH}* /opt/jfa-go -COPY --from=support /opt/build/build/data /opt/jfa-go/data - -RUN apt-get update -y && apt-get install libolm-dev -y +COPY --from=support /opt/build/dist/*_linux_${TARGETARCH}* /jfa-go +COPY --from=support /opt/build/build/data /jfa-go/data EXPOSE 8056 EXPOSE 8057 -CMD [ "/opt/jfa-go/jfa-go", "-data", "/data" ] +CMD [ "/jfa-go/jfa-go", "-data", "/data" ] diff --git a/Dockerfile.ci b/Dockerfile.ci index dc98bfe..188386b 100644 --- a/Dockerfile.ci +++ b/Dockerfile.ci @@ -1,12 +1,10 @@ -FROM golang:bookworm AS final +FROM gcr.io/distroless/base:latest AS final ARG TARGETARCH -COPY ./dist/notray-e2ee_linux_${TARGETARCH}* /opt/jfa-go -COPY ./build/data /opt/jfa-go/data - -RUN apt-get update -y && apt-get install libolm-dev -y +COPY ./dist/notray-e2ee_linux_${TARGETARCH}* /jfa-go +COPY ./build/data /jfa-go/data EXPOSE 8056 EXPOSE 8057 -CMD [ "/opt/jfa-go/jfa-go", "-data", "/data" ] +CMD [ "/jfa-go/jfa-go", "-data", "/data" ] diff --git a/Makefile b/Makefile index 23dd85d..8e9097e 100644 --- a/Makefile +++ b/Makefile @@ -48,7 +48,7 @@ ifeq ($(TRAY), on) endif ifeq ($(E2EE), on) - TAGS := $(TAGS) e2ee + TAGS := $(TAGS) e2ee goolm endif TAGS := $(TAGS)" @@ -125,7 +125,7 @@ $(DATA): $(CONFIG_DEFAULT): $(CONFIG_BASE) $(info Generating config-default.ini) - go run scripts/ini/main.go -in $(CONFIG_BASE) -out $(DATA)/config-default.ini + CGO_ENABLED=0 go run scripts/ini/main.go -in $(CONFIG_BASE) -out $(DATA)/config-default.ini configuration: $(CONFIG_DEFAULT) @@ -151,7 +151,7 @@ $(TYPESCRIPT_TARGET): $(TYPESCRIPT_FULLSRC) ts/tsconfig.json $(adding dark variants to typescript) # scripts/dark-variant.sh tempts # scripts/dark-variant.sh tempts/modules - go run scripts/variants/main.go -dir ts -out tempts + CGO_ENABLED=0 go run scripts/variants/main.go -dir ts -out tempts $(info compiling typescript) $(foreach tempsrc,$(TYPESCRIPT_TEMPSRC),$(ESBUILD) --target=es6 --bundle $(tempsrc) $(SOURCEMAP) --outfile=$(patsubst %.ts,%.js,$(subst tempts/,./$(DATA)/web/js/,$(tempsrc))) $(MINIFY);) $(COPYTS) @@ -216,7 +216,7 @@ COPY_TARGET = $(DATA)/jfa-go.service # $(DATA)/LICENSE $(LANG_TARGET) $(STATIC_TARGET) $(DATA)/web/css/$(CSSVERSION)bundle.css $(COPY_TARGET): $(INLINE_TARGET) $(STATIC_SRC) $(LANG_SRC) $(CONFIG_BASE) $(info copying $(CONFIG_BASE)) - go run scripts/yaml/main.go -in $(CONFIG_BASE) -out $(DATA)/$(shell basename $(CONFIG_BASE)) + CGO_ENABLED=0 go run scripts/yaml/main.go -in $(CONFIG_BASE) -out $(DATA)/$(shell basename $(CONFIG_BASE)) $(info copying crash page) cp $(DATA)/crash.html $(DATA)/html/ $(info copying static data) diff --git a/go.mod b/go.mod index 6f492a5..832a27d 100644 --- a/go.mod +++ b/go.mod @@ -43,11 +43,11 @@ require ( github.com/hrfee/jfa-go/logmessages v0.0.0-20251123165523-7c9f91711460 github.com/hrfee/jfa-go/ombi v0.0.0-20251123165523-7c9f91711460 github.com/hrfee/mediabrowser v0.3.33 + github.com/hrfee/simple-template v1.1.0 github.com/itchyny/timefmt-go v0.1.7 github.com/lithammer/shortuuid/v3 v3.0.7 github.com/lutischan-ferenc/systray v1.2.1 github.com/mailgun/mailgun-go/v4 v4.23.0 - github.com/mattn/go-sqlite3 v1.14.32 github.com/robert-nix/ansihtml v1.0.1 github.com/steambap/captcha v1.4.1 github.com/swaggo/files v1.0.1 @@ -57,6 +57,7 @@ require ( github.com/xhit/go-simple-mail/v2 v2.16.0 gopkg.in/ini.v1 v1.67.0 maunium.net/go/mautrix v0.26.0 + modernc.org/sqlite v1.40.1 ) require ( @@ -69,7 +70,6 @@ require ( github.com/cloudwego/base64x v0.1.6 // indirect github.com/dgraph-io/ristretto/v2 v2.3.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/energye/systray v1.0.2 // indirect github.com/gabriel-vasile/mimetype v1.4.11 // indirect github.com/gin-contrib/sse v1.1.0 // indirect github.com/go-chi/chi/v5 v5.2.3 // indirect @@ -95,7 +95,6 @@ require ( github.com/google/flatbuffers v25.9.23+incompatible // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect - github.com/hrfee/simple-template v1.1.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/compress v1.18.1 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect @@ -104,16 +103,22 @@ require ( github.com/mailgun/errors v0.4.0 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-sqlite3 v1.14.32 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/ncruces/go-sqlite3 v0.30.3 // indirect + github.com/ncruces/go-strftime v0.1.9 // indirect + github.com/ncruces/julianday v1.0.0 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/petermattis/goid v0.0.0-20251121121749-a11dd1a45f9a // indirect github.com/quic-go/qpack v0.6.0 // indirect github.com/quic-go/quic-go v0.57.0 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/rs/zerolog v1.34.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/swaggo/swag v1.16.6 // indirect github.com/technoweenie/multipartstreamer v1.0.1 // indirect + github.com/tetratelabs/wazero v1.10.1 // indirect github.com/tevino/abool v0.0.0-20220530134649-2bfc934cb23c // indirect github.com/tidwall/gjson v1.18.0 // indirect github.com/tidwall/match v1.2.0 // indirect @@ -140,4 +145,7 @@ require ( golang.org/x/text v0.31.0 // indirect golang.org/x/tools v0.39.0 // indirect google.golang.org/protobuf v1.36.10 // indirect + modernc.org/libc v1.66.10 // indirect + modernc.org/mathutil v1.7.1 // indirect + modernc.org/memory v1.11.0 // indirect ) diff --git a/go.sum b/go.sum index 6ad636c..a3292dd 100644 --- a/go.sum +++ b/go.sum @@ -52,8 +52,6 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/emersion/go-autostart v0.0.0-20250403115856-34830d6457d2 h1:CgF8+TNFvlnxEbplSgS70ZI4IUFEzVkY+ICNqTVE/AM= github.com/emersion/go-autostart v0.0.0-20250403115856-34830d6457d2/go.mod h1:buzQsO8HHkZX2Q45fdfGH1xejPjuDQaXH8btcYMFzPM= -github.com/energye/systray v1.0.2 h1:63R4prQkANtpM2CIA4UrDCuwZFt+FiygG77JYCsNmXc= -github.com/energye/systray v1.0.2/go.mod h1:sp7Q/q/I4/w5ebvpSuJVep71s9Bg7L9ZVp69gBASehM= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -143,7 +141,6 @@ github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw= github.com/goccy/go-yaml v1.18.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= -github.com/godbus/dbus/v5 v5.0.4 h1:9349emZab16e7zQvpmsbtjc18ykshndd8y2PG3sgJbA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.2.0 h1:3WexO+U+yg9T70v9FdHr9kCxYlazaAXUhx2VMkbfax8= github.com/godbus/dbus/v5 v5.2.0/go.mod h1:3AAv2+hPq5rdnr5txxxRwiGjPXamgoIHgz9FPBfOp3c= @@ -189,6 +186,8 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs= +github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= @@ -199,8 +198,6 @@ github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hrfee/mediabrowser v0.3.33 h1:kjUFZc46hNhbOEU4xZNyhGVNjfZ5lENmX95Md1thxiA= github.com/hrfee/mediabrowser v0.3.33/go.mod h1:PnHZbdxmbv1wCVdAQyM7nwPwpVj9fdKx2EcET7sAk+U= -github.com/hrfee/simple-template v1.0.0 h1:Yyq36RDZF9fT5SFpgFwgzk6ywQy2fdYa/Tl+jkcnF7c= -github.com/hrfee/simple-template v1.0.0/go.mod h1:s9a5QgfqbmT7j9WCC3GD5JuEqvihBEohyr+oYZmr4bA= github.com/hrfee/simple-template v1.1.0 h1:PNQDTgc2H0s19/pWuhRh4bncuNJjPrW0fIX77YtY78M= github.com/hrfee/simple-template v1.1.0/go.mod h1:s9a5QgfqbmT7j9WCC3GD5JuEqvihBEohyr+oYZmr4bA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= @@ -232,8 +229,6 @@ github.com/lithammer/shortuuid/v3 v3.0.7 h1:trX0KTHy4Pbwo/6ia8fscyHoGA+mf1jWbPJV github.com/lithammer/shortuuid/v3 v3.0.7/go.mod h1:vMk8ke37EmiewwolSO1NLW8vP4ZaKlRuDIi8tWWmAts= github.com/lutischan-ferenc/systray v1.2.1 h1:gPNrEpmg4hMwXyKNSlrkuuXqvxgqCYPjF5H/pG9I1+c= github.com/lutischan-ferenc/systray v1.2.1/go.mod h1:YYaJ28AVuhMrlI5JfqrMsYMIl3Aa4Q02bpXXCl9caqo= -github.com/lutischan-ferenc/systray v1.3.0 h1:O1jZ/nAXpUbGg0+vO1xKvGP6FE26f5Xh6PYrN/cLqbs= -github.com/lutischan-ferenc/systray v1.3.0/go.mod h1:YYaJ28AVuhMrlI5JfqrMsYMIl3Aa4Q02bpXXCl9caqo= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magisterquis/connectproxy v0.0.0-20200725203833-3582e84f0c9b h1:xZ59n7Frzh8CwyfAapUZLSg+gXH5m63YEaFCMpDHhpI= github.com/magisterquis/connectproxy v0.0.0-20200725203833-3582e84f0c9b/go.mod h1:uDd4sYVYsqcxAB8j+Q7uhL6IJCs/r1kxib1HV4bgOMg= @@ -266,6 +261,12 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/ncruces/go-sqlite3 v0.30.3 h1:X/CgWW9GzmIAkEPrifhKqf0cC15DuOVxAJaHFTTAURQ= +github.com/ncruces/go-sqlite3 v0.30.3/go.mod h1:AxKu9sRxkludimFocbktlY6LiYSkxiI5gTA8r+os/Nw= +github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= +github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= +github.com/ncruces/julianday v1.0.0 h1:fH0OKwa7NWvniGQtxdJRxAgkBMolni2BjDHaWTxqt7M= +github.com/ncruces/julianday v1.0.0/go.mod h1:Dusn2KvZrrovOMJuOt0TNXL6tB7U2E8kvza5fFc9G7g= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= @@ -280,6 +281,8 @@ github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8= github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII= github.com/quic-go/quic-go v0.57.0 h1:AsSSrrMs4qI/hLrKlTH/TGQeTMY0ib1pAOX7vA3AdqE= github.com/quic-go/quic-go v0.57.0/go.mod h1:ly4QBAjHA2VhdnxhojRsCUOeJwKYg+taDlos92xb1+s= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/robert-nix/ansihtml v1.0.1 h1:VTiyQ6/+AxSJoSSLsMecnkh8i0ZqOEdiRl/odOc64fc= github.com/robert-nix/ansihtml v1.0.1/go.mod h1:CJwclxYaTPc2RfcxtanEACsYuTksh4yDXcNeHHKZINE= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= @@ -330,6 +333,8 @@ github.com/swaggo/swag v1.16.6 h1:qBNcx53ZaX+M5dxVyTrgQ0PJ/ACK+NzhwcbieTt+9yI= github.com/swaggo/swag v1.16.6/go.mod h1:ngP2etMK5a0P3QBizic5MEwpRmluJZPHjXcMoj4Xesg= github.com/technoweenie/multipartstreamer v1.0.1 h1:XRztA5MXiR1TIRHxH2uNxXxaIkKQDeX7m2XsSOlQEnM= github.com/technoweenie/multipartstreamer v1.0.1/go.mod h1:jNVxdtShOxzAsukZwTSw6MDx5eUJoiEBsSvzDU9uzog= +github.com/tetratelabs/wazero v1.10.1 h1:2DugeJf6VVk58KTPszlNfeeN8AhhpwcZqkJj2wwFuH8= +github.com/tetratelabs/wazero v1.10.1/go.mod h1:DRm5twOQ5Gr1AoEdSi0CLjDQF1J9ZAuyqFIjl1KKfQU= github.com/tevino/abool v0.0.0-20220530134649-2bfc934cb23c h1:coVla7zpsycc+kA9NXpcvv2E4I7+ii6L5hZO2S6C3kw= github.com/tevino/abool v0.0.0-20220530134649-2bfc934cb23c/go.mod h1:qc66Pna1RiIsPa7O4Egxxs9OqkuxDX55zznh9K07Tzg= github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= @@ -454,7 +459,6 @@ golang.org/x/sys v0.0.0-20190610200419-93c9922d18ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -547,3 +551,29 @@ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= maunium.net/go/mautrix v0.26.0 h1:valc2VmZF+oIY4bMq4Cd5H9cEKMRe8eP4FM7iiaYLxI= maunium.net/go/mautrix v0.26.0/go.mod h1:NWMv+243NX/gDrLofJ2nNXJPrG8vzoM+WUCWph85S6Q= +modernc.org/cc/v4 v4.26.5 h1:xM3bX7Mve6G8K8b+T11ReenJOT+BmVqQj0FY5T4+5Y4= +modernc.org/cc/v4 v4.26.5/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= +modernc.org/ccgo/v4 v4.28.1 h1:wPKYn5EC/mYTqBO373jKjvX2n+3+aK7+sICCv4Fjy1A= +modernc.org/ccgo/v4 v4.28.1/go.mod h1:uD+4RnfrVgE6ec9NGguUNdhqzNIeeomeXf6CL0GTE5Q= +modernc.org/fileutil v1.3.40 h1:ZGMswMNc9JOCrcrakF1HrvmergNLAmxOPjizirpfqBA= +modernc.org/fileutil v1.3.40/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc= +modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= +modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= +modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks= +modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI= +modernc.org/libc v1.66.10 h1:yZkb3YeLx4oynyR+iUsXsybsX4Ubx7MQlSYEw4yj59A= +modernc.org/libc v1.66.10/go.mod h1:8vGSEwvoUoltr4dlywvHqjtAqHBaw0j1jI7iFBTAr2I= +modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= +modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= +modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI= +modernc.org/memory v1.11.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= +modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8= +modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= +modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= +modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= +modernc.org/sqlite v1.40.1 h1:VfuXcxcUWWKRBuP8+BR9L7VnmusMgBNNnBYGEe9w/iY= +modernc.org/sqlite v1.40.1/go.mod h1:9fjQZ0mB1LLP0GYrp39oOJXx/I2sxEnZtzCmEQIKvGE= +modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= +modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= +modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= diff --git a/matrix_crypto.go b/matrix_crypto.go index 83bd014..b15a009 100644 --- a/matrix_crypto.go +++ b/matrix_crypto.go @@ -8,7 +8,9 @@ import ( "github.com/hrfee/jfa-go/logger" lm "github.com/hrfee/jfa-go/logmessages" + _ "github.com/mattn/go-sqlite3" + "maunium.net/go/mautrix/crypto/cryptohelper" "maunium.net/go/mautrix/event" "maunium.net/go/mautrix/id" @@ -35,7 +37,17 @@ func InitMatrixCrypto(d *MatrixDaemon, logger *logger.Logger) error { dbPath := d.app.config.Section("files").Key("matrix_sql").String() var err error d.crypto = &Crypto{} + // bmss, err := NewBackedMemoryStateStore(d.app.storage.db) + // if err != nil { + // return err + // } + // d.bot.StateStore = bmss d.crypto.helper, err = cryptohelper.NewCryptoHelper(d.bot, []byte("jfa-go"), dbPath) + // bms, err := NewBackedMemoryStore(d.app.storage.db) + // if err != nil { + // return err + // } + // d.crypto.helper, err = cryptohelper.NewCryptoHelper(d.bot, []byte("jfa-go"), bms) if err != nil { return err } @@ -63,3 +75,55 @@ func EncryptRoom(d *MatrixDaemon, roomID id.RoomID) error { }) return err } + +/*type BackedMemoryStore struct { + *crypto.MemoryStore + db *badgerhold.Store +} + +func (b *BackedMemoryStore) save() error { + err := b.db.Upsert("MatrixEncryptionStore", b.MemoryStore) + defer func(err error) { log.Printf("MATRIX WRITE: err=%v\n", err) }(err) + return err +} + +func NewBackedMemoryStore(db *badgerhold.Store) (*BackedMemoryStore, error) { + b := &BackedMemoryStore{ + db: db, + } + b.MemoryStore = crypto.NewMemoryStore(b.save) + err := b.db.Get("MatrixEncryptionStore", b.MemoryStore) + if err != nil && !errors.Is(err, badgerhold.ErrNotFound) { + return nil, err + } + return b, nil +} + +type BackedMemoryStateStore struct { + *mautrix.MemoryStateStore + db *badgerhold.Store +} + +func (b *BackedMemoryStateStore) save() error { + err := b.db.Upsert("MatrixEncryptionStateStore", b.MemoryStateStore) + defer func(err error) { log.Printf("MATRIX WRITE: err=%v\n", err) }(err) + return err +} + +func NewBackedMemoryStateStore(db *badgerhold.Store) (*BackedMemoryStateStore, error) { + b := &BackedMemoryStateStore{ + db: db, + } + + store := mautrix.NewMemoryStateStore() + memStore, ok := store.(*mautrix.MemoryStateStore) + if !ok { + return nil, errors.New("didn't get a MemoryStateStore") + } + b.MemoryStateStore = memStore + err := b.db.Get("MatrixEncryptionStateStore", b.MemoryStateStore) + if err != nil && !errors.Is(err, badgerhold.ErrNotFound) { + return nil, err + } + return b, nil +}*/