front end fixes
This commit is contained in:
@@ -5,7 +5,6 @@ go 1.23
|
|||||||
toolchain go1.24.1
|
toolchain go1.24.1
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/labstack/echo/v5 v5.0.0-20230722203903-ec5b858dab61
|
|
||||||
github.com/meilisearch/meilisearch-go v0.29.0
|
github.com/meilisearch/meilisearch-go v0.29.0
|
||||||
github.com/pocketbase/dbx v1.11.0
|
github.com/pocketbase/dbx v1.11.0
|
||||||
github.com/pocketbase/pocketbase v0.23.12
|
github.com/pocketbase/pocketbase v0.23.12
|
||||||
@@ -43,7 +42,6 @@ require (
|
|||||||
github.com/gabriel-vasile/mimetype v1.4.7 // indirect
|
github.com/gabriel-vasile/mimetype v1.4.7 // indirect
|
||||||
github.com/ganigeorgiev/fexpr v0.4.1 // indirect
|
github.com/ganigeorgiev/fexpr v0.4.1 // indirect
|
||||||
github.com/go-ozzo/ozzo-validation/v4 v4.3.0 // indirect
|
github.com/go-ozzo/ozzo-validation/v4 v4.3.0 // indirect
|
||||||
github.com/goccy/go-json v0.10.3 // indirect
|
|
||||||
github.com/golang-jwt/jwt/v4 v4.5.1 // indirect
|
github.com/golang-jwt/jwt/v4 v4.5.1 // indirect
|
||||||
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
|
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
|
||||||
github.com/google/uuid v1.6.0 // indirect
|
github.com/google/uuid v1.6.0 // indirect
|
||||||
@@ -55,7 +53,6 @@ require (
|
|||||||
github.com/mailru/easyjson v0.7.7 // indirect
|
github.com/mailru/easyjson v0.7.7 // indirect
|
||||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
github.com/mattn/go-sqlite3 v1.14.22 // indirect
|
|
||||||
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
|
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
|
||||||
github.com/ncruces/go-strftime v0.1.9 // indirect
|
github.com/ncruces/go-strftime v0.1.9 // indirect
|
||||||
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
|
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
|
||||||
@@ -64,8 +61,6 @@ require (
|
|||||||
github.com/spf13/pflag v1.0.5 // indirect
|
github.com/spf13/pflag v1.0.5 // indirect
|
||||||
github.com/twpayne/go-gpx v1.4.1
|
github.com/twpayne/go-gpx v1.4.1
|
||||||
github.com/twpayne/go-polyline v1.1.1
|
github.com/twpayne/go-polyline v1.1.1
|
||||||
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
|
||||||
github.com/valyala/fasttemplate v1.2.2 // indirect
|
|
||||||
go.opencensus.io v0.24.0 // indirect
|
go.opencensus.io v0.24.0 // indirect
|
||||||
gocloud.dev v0.40.0 // indirect
|
gocloud.dev v0.40.0 // indirect
|
||||||
golang.org/x/crypto v0.31.0 // indirect
|
golang.org/x/crypto v0.31.0 // indirect
|
||||||
@@ -76,7 +71,6 @@ require (
|
|||||||
golang.org/x/sys v0.28.0 // indirect
|
golang.org/x/sys v0.28.0 // indirect
|
||||||
golang.org/x/term v0.27.0 // indirect
|
golang.org/x/term v0.27.0 // indirect
|
||||||
golang.org/x/text v0.21.0 // indirect
|
golang.org/x/text v0.21.0 // indirect
|
||||||
golang.org/x/time v0.8.0 // indirect
|
|
||||||
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
|
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
|
||||||
google.golang.org/api v0.214.0 // indirect
|
google.golang.org/api v0.214.0 // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241219192143-6b3ec007d9bb // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20241219192143-6b3ec007d9bb // indirect
|
||||||
|
|||||||
148
db/go.sum
148
db/go.sum
@@ -1,12 +1,12 @@
|
|||||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
cloud.google.com/go v0.115.1 h1:Jo0SM9cQnSkYfp44+v+NQXHpcHqlnRJk2qxh6yvxxxQ=
|
cloud.google.com/go v0.115.0 h1:CnFSK6Xo3lDYRoBKEcAtia6VSC837/ZkJuRduSFnr14=
|
||||||
cloud.google.com/go v0.115.1/go.mod h1:DuujITeaufu3gL68/lOFIirVNJwQeyf5UXyi+Wbgknc=
|
cloud.google.com/go v0.115.0/go.mod h1:8jIM5vVgoAEoiVxQ/O4BFTfHqulPZgs/ufEzMcFMdWU=
|
||||||
cloud.google.com/go/auth v0.9.1 h1:+pMtLEV2k0AXKvs/tGZojuj6QaioxfUjOpMsG5Gtx+w=
|
cloud.google.com/go/auth v0.13.0 h1:8Fu8TZy167JkW8Tj3q7dIkr2v4cndv41ouecJx0PAHs=
|
||||||
cloud.google.com/go/auth v0.9.1/go.mod h1:Sw8ocT5mhhXxFklyhT12Eiy0ed6tTrPMCJjSI8KhYLk=
|
cloud.google.com/go/auth v0.13.0/go.mod h1:COOjD9gwfKNKz+IIduatIhYJQIc0mG3H102r/EMxX6Q=
|
||||||
cloud.google.com/go/auth/oauth2adapt v0.2.4 h1:0GWE/FUsXhf6C+jAkWgYm7X9tK8cuEIfy19DBn6B6bY=
|
cloud.google.com/go/auth/oauth2adapt v0.2.6 h1:V6a6XDu2lTwPZWOawrAa9HUK+DB2zfJyTuciBG5hFkU=
|
||||||
cloud.google.com/go/auth/oauth2adapt v0.2.4/go.mod h1:jC/jOpwFP6JBxhB3P5Rr0a9HLMC/Pe3eaL4NmdvqPtc=
|
cloud.google.com/go/auth/oauth2adapt v0.2.6/go.mod h1:AlmsELtlEBnaNTL7jCj8VQFLy6mbZv0s4Q7NGBeQ5E8=
|
||||||
cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY=
|
cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I=
|
||||||
cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY=
|
cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
|
||||||
cloud.google.com/go/iam v1.1.13 h1:7zWBXG9ERbMLrzQBRhFliAV+kjcRToDTgQT3CTwYyv4=
|
cloud.google.com/go/iam v1.1.13 h1:7zWBXG9ERbMLrzQBRhFliAV+kjcRToDTgQT3CTwYyv4=
|
||||||
cloud.google.com/go/iam v1.1.13/go.mod h1:K8mY0uSXwEXS30KrnVb+j54LB/ntfZu1dr+4zFMNbus=
|
cloud.google.com/go/iam v1.1.13/go.mod h1:K8mY0uSXwEXS30KrnVb+j54LB/ntfZu1dr+4zFMNbus=
|
||||||
cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs=
|
cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs=
|
||||||
@@ -29,78 +29,42 @@ github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3d
|
|||||||
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
|
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
|
||||||
github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU=
|
github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU=
|
||||||
github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
|
github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
|
||||||
github.com/aws/aws-sdk-go-v2 v1.32.2 h1:AkNLZEyYMLnx/Q/mSKkcMqwNFXMAvFto9bNsHqcTduI=
|
|
||||||
github.com/aws/aws-sdk-go-v2 v1.32.2/go.mod h1:2SK5n0a2karNTv5tbP1SjsX0uhttou00v/HpXKM1ZUo=
|
|
||||||
github.com/aws/aws-sdk-go-v2 v1.32.7 h1:ky5o35oENWi0JYWUZkB7WYvVPP+bcRF5/Iq7JWSb5Rw=
|
github.com/aws/aws-sdk-go-v2 v1.32.7 h1:ky5o35oENWi0JYWUZkB7WYvVPP+bcRF5/Iq7JWSb5Rw=
|
||||||
github.com/aws/aws-sdk-go-v2 v1.32.7/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U=
|
github.com/aws/aws-sdk-go-v2 v1.32.7/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U=
|
||||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 h1:70PVAiL15/aBMh5LThwgXdSQorVr91L127ttckI9QQU=
|
|
||||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4/go.mod h1:/MQxMqci8tlqDH+pjmoLu1i0tbWCUP1hhyMRuFxpQCw=
|
|
||||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 h1:lL7IfaFzngfx0ZwUGOZdsFFnQ5uLvR0hWqqhyE7Q9M8=
|
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 h1:lL7IfaFzngfx0ZwUGOZdsFFnQ5uLvR0hWqqhyE7Q9M8=
|
||||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7/go.mod h1:QraP0UcVlQJsmHfioCrveWOC1nbiWUl3ej08h4mXWoc=
|
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7/go.mod h1:QraP0UcVlQJsmHfioCrveWOC1nbiWUl3ej08h4mXWoc=
|
||||||
github.com/aws/aws-sdk-go-v2/config v1.27.31 h1:kxBoRsjhT3pq0cKthgj6RU6bXTm/2SgdoUMyrVw0rAI=
|
|
||||||
github.com/aws/aws-sdk-go-v2/config v1.27.31/go.mod h1:z04nZdSWFPaDwK3DdJOG2r+scLQzMYuJeW0CujEm9FM=
|
|
||||||
github.com/aws/aws-sdk-go-v2/config v1.28.7 h1:GduUnoTXlhkgnxTD93g1nv4tVPILbdNQOzav+Wpg7AE=
|
github.com/aws/aws-sdk-go-v2/config v1.28.7 h1:GduUnoTXlhkgnxTD93g1nv4tVPILbdNQOzav+Wpg7AE=
|
||||||
github.com/aws/aws-sdk-go-v2/config v1.28.7/go.mod h1:vZGX6GVkIE8uECSUHB6MWAUsd4ZcG2Yq/dMa4refR3M=
|
github.com/aws/aws-sdk-go-v2/config v1.28.7/go.mod h1:vZGX6GVkIE8uECSUHB6MWAUsd4ZcG2Yq/dMa4refR3M=
|
||||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.30 h1:aau/oYFtibVovr2rDt8FHlU17BTicFEMAi29V1U+L5Q=
|
|
||||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.30/go.mod h1:BPJ/yXV92ZVq6G8uYvbU0gSl8q94UB63nMT5ctNO38g=
|
|
||||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.48 h1:IYdLD1qTJ0zanRavulofmqut4afs45mOWEI+MzZtTfQ=
|
github.com/aws/aws-sdk-go-v2/credentials v1.17.48 h1:IYdLD1qTJ0zanRavulofmqut4afs45mOWEI+MzZtTfQ=
|
||||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.48/go.mod h1:tOscxHN3CGmuX9idQ3+qbkzrjVIx32lqDSU1/0d/qXs=
|
github.com/aws/aws-sdk-go-v2/credentials v1.17.48/go.mod h1:tOscxHN3CGmuX9idQ3+qbkzrjVIx32lqDSU1/0d/qXs=
|
||||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12 h1:yjwoSyDZF8Jth+mUk5lSPJCkMC0lMy6FaCD51jm6ayE=
|
|
||||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12/go.mod h1:fuR57fAgMk7ot3WcNQfb6rSEn+SUffl7ri+aa8uKysI=
|
|
||||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.22 h1:kqOrpojG71DxJm/KDPO+Z/y1phm1JlC8/iT+5XRmAn8=
|
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.22 h1:kqOrpojG71DxJm/KDPO+Z/y1phm1JlC8/iT+5XRmAn8=
|
||||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.22/go.mod h1:NtSFajXVVL8TA2QNngagVZmUtXciyrHOt7xgz4faS/M=
|
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.22/go.mod h1:NtSFajXVVL8TA2QNngagVZmUtXciyrHOt7xgz4faS/M=
|
||||||
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.15 h1:ijB7hr56MngOiELJe0C5aQRaBQ11LveNgWFyG02AUto=
|
|
||||||
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.15/go.mod h1:0QEmQSSWMVfiAk93l1/ayR9DQ9+jwni7gHS2NARZXB0=
|
|
||||||
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.44 h1:2zxMLXLedpB4K1ilbJFxtMKsVKaexOqDttOhc0QGm3Q=
|
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.44 h1:2zxMLXLedpB4K1ilbJFxtMKsVKaexOqDttOhc0QGm3Q=
|
||||||
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.44/go.mod h1:VuLHdqwjSvgftNC7yqPWyGVhEwPmJpeRi07gOgOfHF8=
|
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.44/go.mod h1:VuLHdqwjSvgftNC7yqPWyGVhEwPmJpeRi07gOgOfHF8=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16 h1:TNyt/+X43KJ9IJJMjKfa3bNTiZbUP7DeCxfbTROESwY=
|
|
||||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16/go.mod h1:2DwJF39FlNAUiX5pAc0UNeiz16lK2t7IaFcm0LFHEgc=
|
|
||||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.26 h1:I/5wmGMffY4happ8NOCuIUEWGUvvFp5NSeQcXl9RHcI=
|
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.26 h1:I/5wmGMffY4happ8NOCuIUEWGUvvFp5NSeQcXl9RHcI=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.26/go.mod h1:FR8f4turZtNy6baO0KJ5FJUmXH/cSkI9fOngs0yl6mA=
|
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.26/go.mod h1:FR8f4turZtNy6baO0KJ5FJUmXH/cSkI9fOngs0yl6mA=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16 h1:jYfy8UPmd+6kJW5YhY0L1/KftReOGxI/4NtVSTh9O/I=
|
|
||||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16/go.mod h1:7ZfEPZxkW42Afq4uQB8H2E2e6ebh6mXTueEpYzjCzcs=
|
|
||||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.26 h1:zXFLuEuMMUOvEARXFUVJdfqZ4bvvSgdGRq/ATcrQxzM=
|
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.26 h1:zXFLuEuMMUOvEARXFUVJdfqZ4bvvSgdGRq/ATcrQxzM=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.26/go.mod h1:3o2Wpy0bogG1kyOPrgkXA8pgIfEEv0+m19O9D5+W8y8=
|
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.26/go.mod h1:3o2Wpy0bogG1kyOPrgkXA8pgIfEEv0+m19O9D5+W8y8=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ=
|
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc=
|
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16 h1:mimdLQkIX1zr8GIPY1ZtALdBQGxcASiBd2MOp8m/dMc=
|
|
||||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16/go.mod h1:YHk6owoSwrIsok+cAH9PENCOGoH5PU2EllX4vLtSrsY=
|
|
||||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.26 h1:GeNJsIFHB+WW5ap2Tec4K6dzcVTsRbsT1Lra46Hv9ME=
|
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.26 h1:GeNJsIFHB+WW5ap2Tec4K6dzcVTsRbsT1Lra46Hv9ME=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.26/go.mod h1:zfgMpwHDXX2WGoG84xG2H+ZlPTkJUU4YUvx2svLQYWo=
|
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.26/go.mod h1:zfgMpwHDXX2WGoG84xG2H+ZlPTkJUU4YUvx2svLQYWo=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 h1:KypMCbLPPHEmf9DgMGw51jMj77VfGPAN2Kv4cfhlfgI=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4/go.mod h1:Vz1JQXliGcQktFTN/LN6uGppAIRoLBR2bMvIMP0gOjc=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 h1:iXtILhvDxB6kPvEXgsDhGaZCSC6LQET5ZHSdJozeI0Y=
|
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 h1:iXtILhvDxB6kPvEXgsDhGaZCSC6LQET5ZHSdJozeI0Y=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1/go.mod h1:9nu0fVANtYiAePIBh2/pFUSwtJ402hLnp854CNoDOeE=
|
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1/go.mod h1:9nu0fVANtYiAePIBh2/pFUSwtJ402hLnp854CNoDOeE=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.18 h1:GckUnpm4EJOAio1c8o25a+b3lVfwVzC9gnSBqiiNmZM=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.18/go.mod h1:Br6+bxfG33Dk3ynmkhsW2Z/t9D4+lRqdLDNCKi85w0U=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.7 h1:tB4tNw83KcajNAzaIMhkhVI2Nt8fAZd5A5ro113FEMY=
|
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.7 h1:tB4tNw83KcajNAzaIMhkhVI2Nt8fAZd5A5ro113FEMY=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.7/go.mod h1:lvpyBGkZ3tZ9iSsUIcC2EWp+0ywa7aK3BLT+FwZi+mQ=
|
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.7/go.mod h1:lvpyBGkZ3tZ9iSsUIcC2EWp+0ywa7aK3BLT+FwZi+mQ=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18 h1:tJ5RnkHCiSH0jyd6gROjlJtNwov0eGYNz8s8nFcR0jQ=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18/go.mod h1:++NHzT+nAF7ZPrHPsA+ENvsXkOO8wEu+C6RXltAG4/c=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.7 h1:8eUsivBQzZHqe/3FE+cqwfH+0p5Jo8PFM/QYQSmeZ+M=
|
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.7 h1:8eUsivBQzZHqe/3FE+cqwfH+0p5Jo8PFM/QYQSmeZ+M=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.7/go.mod h1:kLPQvGUmxn/fqiCrDeohwG33bq2pQpGeY62yRO6Nrh0=
|
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.7/go.mod h1:kLPQvGUmxn/fqiCrDeohwG33bq2pQpGeY62yRO6Nrh0=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16 h1:jg16PhLPUiHIj8zYIW6bqzeQSuHVEiWnGA0Brz5Xv2I=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16/go.mod h1:Uyk1zE1VVdsHSU7096h/rwnXDzOzYQVl+FNPhPw7ShY=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.7 h1:Hi0KGbrnr57bEHWM0bJ1QcBzxLrL/k2DHvGYhb8+W1w=
|
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.7 h1:Hi0KGbrnr57bEHWM0bJ1QcBzxLrL/k2DHvGYhb8+W1w=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.7/go.mod h1:wKNgWgExdjjrm4qvfbTorkvocEstaoDl4WCvGfeCy9c=
|
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.7/go.mod h1:wKNgWgExdjjrm4qvfbTorkvocEstaoDl4WCvGfeCy9c=
|
||||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.60.1 h1:mx2ucgtv+MWzJesJY9Ig/8AFHgoE5FwLXwUVgW/FGdI=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.60.1/go.mod h1:BSPI0EfnYUuNHPS0uqIo5VrRwzie+Fp+YhQOUs16sKI=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.71.1 h1:aOVVZJgWbaH+EJYPvEgkNhCEbXXvH7+oML36oaPK3zE=
|
github.com/aws/aws-sdk-go-v2/service/s3 v1.71.1 h1:aOVVZJgWbaH+EJYPvEgkNhCEbXXvH7+oML36oaPK3zE=
|
||||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.71.1/go.mod h1:r+xl5yzMk9083rMR+sJ5TYj9Tihvf/l1oxzZXDgGj2Q=
|
github.com/aws/aws-sdk-go-v2/service/s3 v1.71.1/go.mod h1:r+xl5yzMk9083rMR+sJ5TYj9Tihvf/l1oxzZXDgGj2Q=
|
||||||
github.com/aws/aws-sdk-go-v2/service/sso v1.22.5 h1:zCsFCKvbj25i7p1u94imVoO447I/sFv8qq+lGJhRN0c=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/sso v1.22.5/go.mod h1:ZeDX1SnKsVlejeuz41GiajjZpRSWR7/42q/EyA/QEiM=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/sso v1.24.8 h1:CvuUmnXI7ebaUAhbJcDy9YQx8wHR69eZ9I7q5hszt/g=
|
github.com/aws/aws-sdk-go-v2/service/sso v1.24.8 h1:CvuUmnXI7ebaUAhbJcDy9YQx8wHR69eZ9I7q5hszt/g=
|
||||||
github.com/aws/aws-sdk-go-v2/service/sso v1.24.8/go.mod h1:XDeGv1opzwm8ubxddF0cgqkZWsyOtw4lr6dxwmb6YQg=
|
github.com/aws/aws-sdk-go-v2/service/sso v1.24.8/go.mod h1:XDeGv1opzwm8ubxddF0cgqkZWsyOtw4lr6dxwmb6YQg=
|
||||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5 h1:SKvPgvdvmiTWoi0GAJ7AsJfOz3ngVkD/ERbs5pUnHNI=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5/go.mod h1:20sz31hv/WsPa3HhU3hfrIet2kxM4Pe0r20eBZ20Tac=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.7 h1:F2rBfNAL5UyswqoeWv9zs74N/NanhK16ydHW1pahX6E=
|
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.7 h1:F2rBfNAL5UyswqoeWv9zs74N/NanhK16ydHW1pahX6E=
|
||||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.7/go.mod h1:JfyQ0g2JG8+Krq0EuZNnRwX0mU0HrwY/tG6JNfcqh4k=
|
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.7/go.mod h1:JfyQ0g2JG8+Krq0EuZNnRwX0mU0HrwY/tG6JNfcqh4k=
|
||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.30.5 h1:OMsEmCyz2i89XwRwPouAJvhj81wINh+4UK+k/0Yo/q8=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.30.5/go.mod h1:vmSqFK+BVIwVpDAGZB3CoCXHzurt4qBE8lf+I/kRTh0=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.33.3 h1:Xgv/hyNgvLda/M9l9qxXc4UFSgppnRczLxlMs5Ae/QY=
|
github.com/aws/aws-sdk-go-v2/service/sts v1.33.3 h1:Xgv/hyNgvLda/M9l9qxXc4UFSgppnRczLxlMs5Ae/QY=
|
||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.33.3/go.mod h1:5Gn+d+VaaRgsjewpMvGazt0WfcFO+Md4wLOuBfGR9Bc=
|
github.com/aws/aws-sdk-go-v2/service/sts v1.33.3/go.mod h1:5Gn+d+VaaRgsjewpMvGazt0WfcFO+Md4wLOuBfGR9Bc=
|
||||||
github.com/aws/smithy-go v1.22.0 h1:uunKnWlcoL3zO7q+gG2Pk53joueEOsnNB28QdMsmiMM=
|
|
||||||
github.com/aws/smithy-go v1.22.0/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
|
|
||||||
github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro=
|
github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro=
|
||||||
github.com/aws/smithy-go v1.22.1/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
|
github.com/aws/smithy-go v1.22.1/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||||
@@ -123,16 +87,12 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
|
|||||||
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.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||||
github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4=
|
|
||||||
github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI=
|
|
||||||
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
|
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
|
||||||
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
|
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
|
||||||
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
|
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
|
||||||
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
||||||
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
|
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
|
||||||
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
|
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
|
||||||
github.com/gabriel-vasile/mimetype v1.4.5 h1:J7wGKdGu33ocBOhGy0z653k/lFKLFDPJMG8Gql0kxn4=
|
|
||||||
github.com/gabriel-vasile/mimetype v1.4.5/go.mod h1:ibHel+/kbxn9x2407k1izTA1S81ku1z/DlgOW2QE0M4=
|
|
||||||
github.com/gabriel-vasile/mimetype v1.4.7 h1:SKFKl7kD0RiPdbht0s7hFtjl489WcQ1VyPW8ZzUMYCA=
|
github.com/gabriel-vasile/mimetype v1.4.7 h1:SKFKl7kD0RiPdbht0s7hFtjl489WcQ1VyPW8ZzUMYCA=
|
||||||
github.com/gabriel-vasile/mimetype v1.4.7/go.mod h1:GDlAgAyIRT27BhFl53XNAFtfjzOkLaF35JdEG0P7LtU=
|
github.com/gabriel-vasile/mimetype v1.4.7/go.mod h1:GDlAgAyIRT27BhFl53XNAFtfjzOkLaF35JdEG0P7LtU=
|
||||||
github.com/ganigeorgiev/fexpr v0.4.1 h1:hpUgbUEEWIZhSDBtf4M9aUNfQQ0BZkGRaMePy7Gcx5k=
|
github.com/ganigeorgiev/fexpr v0.4.1 h1:hpUgbUEEWIZhSDBtf4M9aUNfQQ0BZkGRaMePy7Gcx5k=
|
||||||
@@ -146,16 +106,11 @@ github.com/go-ozzo/ozzo-validation/v4 v4.3.0/go.mod h1:2NKgrcHl3z6cJs+3Oo940FPRi
|
|||||||
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
||||||
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
|
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
|
||||||
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
|
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
|
||||||
github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA=
|
|
||||||
github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
|
|
||||||
github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
|
|
||||||
github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
|
github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
|
||||||
github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo=
|
github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo=
|
||||||
github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
|
github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||||
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
|
|
||||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
|
||||||
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=
|
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=
|
||||||
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
|
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
|
||||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||||
@@ -179,8 +134,8 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
|
|||||||
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||||
github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5 h1:5iH8iuqE5apketRbSFBy+X1V0o+l+8NF1avt4HWl7cA=
|
github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k=
|
||||||
github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
|
github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo=
|
||||||
github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM=
|
github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM=
|
||||||
github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA=
|
github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA=
|
||||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
@@ -188,10 +143,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
|||||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/google/wire v0.6.0 h1:HBkoIh4BdSxoyo9PveV8giw7ZsaBOvzWKfcg/6MrVwI=
|
github.com/google/wire v0.6.0 h1:HBkoIh4BdSxoyo9PveV8giw7ZsaBOvzWKfcg/6MrVwI=
|
||||||
github.com/google/wire v0.6.0/go.mod h1:F4QhpQ9EDIdJ1Mbop/NZBRB+5yrR6qg3BnctaoUk6NA=
|
github.com/google/wire v0.6.0/go.mod h1:F4QhpQ9EDIdJ1Mbop/NZBRB+5yrR6qg3BnctaoUk6NA=
|
||||||
github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=
|
github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw=
|
||||||
github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
|
github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA=
|
||||||
github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s=
|
|
||||||
github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A=
|
|
||||||
github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrkurSS/Q=
|
github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrkurSS/Q=
|
||||||
github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA=
|
github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA=
|
||||||
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
|
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
|
||||||
@@ -212,8 +165,6 @@ github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
|||||||
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||||
github.com/labstack/echo/v5 v5.0.0-20230722203903-ec5b858dab61 h1:FwuzbVh87iLiUQj1+uQUsuw9x5t9m5n5g7rG7o4svW4=
|
|
||||||
github.com/labstack/echo/v5 v5.0.0-20230722203903-ec5b858dab61/go.mod h1:paQfF1YtHe+GrGg5fOgjsjoCX/UKDr9bc1DoWpZfns8=
|
|
||||||
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
|
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
|
||||||
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
|
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
|
||||||
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
||||||
@@ -223,8 +174,6 @@ github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd
|
|||||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
|
|
||||||
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
|
|
||||||
github.com/meilisearch/meilisearch-go v0.29.0 h1:HZ9NEKN59USINQ/DXJge/aaXq8IrsKbXGTdAoBaaDz4=
|
github.com/meilisearch/meilisearch-go v0.29.0 h1:HZ9NEKN59USINQ/DXJge/aaXq8IrsKbXGTdAoBaaDz4=
|
||||||
github.com/meilisearch/meilisearch-go v0.29.0/go.mod h1:2cRCAn4ddySUsFfNDLVPod/plRibQsJkXF/4gLhxbOk=
|
github.com/meilisearch/meilisearch-go v0.29.0/go.mod h1:2cRCAn4ddySUsFfNDLVPod/plRibQsJkXF/4gLhxbOk=
|
||||||
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
|
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
|
||||||
@@ -234,12 +183,8 @@ github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdh
|
|||||||
github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
|
github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/pocketbase/dbx v1.10.1 h1:cw+vsyfCJD8YObOVeqb93YErnlxwYMkNZ4rwN0G0AaA=
|
|
||||||
github.com/pocketbase/dbx v1.10.1/go.mod h1:xXRCIAKTHMgUCyCKZm55pUOdvFziJjQfXaWKhu2vhMs=
|
|
||||||
github.com/pocketbase/dbx v1.11.0 h1:LpZezioMfT3K4tLrqA55wWFw1EtH1pM4tzSVa7kgszU=
|
github.com/pocketbase/dbx v1.11.0 h1:LpZezioMfT3K4tLrqA55wWFw1EtH1pM4tzSVa7kgszU=
|
||||||
github.com/pocketbase/dbx v1.11.0/go.mod h1:xXRCIAKTHMgUCyCKZm55pUOdvFziJjQfXaWKhu2vhMs=
|
github.com/pocketbase/dbx v1.11.0/go.mod h1:xXRCIAKTHMgUCyCKZm55pUOdvFziJjQfXaWKhu2vhMs=
|
||||||
github.com/pocketbase/pocketbase v0.22.26 h1:8hoD9xCEOaZfDpP23FkFH6A51QDfM0gK+vnxlTCyNXw=
|
|
||||||
github.com/pocketbase/pocketbase v0.22.26/go.mod h1:h2ojT2pqBWH9LLl1aiawkwXiICKtzZA/kjM/8VhydR4=
|
|
||||||
github.com/pocketbase/pocketbase v0.23.12 h1:HB4THFbzaliF0C3wvpx+kNOZxIwCEMDqN3/17gn5N7E=
|
github.com/pocketbase/pocketbase v0.23.12 h1:HB4THFbzaliF0C3wvpx+kNOZxIwCEMDqN3/17gn5N7E=
|
||||||
github.com/pocketbase/pocketbase v0.23.12/go.mod h1:OcFJNMO0Vzt3f9+lweMbup6iL7V13ckxu1pdEY6FeM0=
|
github.com/pocketbase/pocketbase v0.23.12/go.mod h1:OcFJNMO0Vzt3f9+lweMbup6iL7V13ckxu1pdEY6FeM0=
|
||||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
@@ -248,8 +193,6 @@ github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qq
|
|||||||
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
|
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
|
||||||
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
|
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
|
||||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w=
|
|
||||||
github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
|
|
||||||
github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y=
|
github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y=
|
||||||
github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
|
github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
|
||||||
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
|
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
|
||||||
@@ -275,25 +218,23 @@ github.com/twpayne/go-gpx v1.4.1 h1:Y41EDC/r49OH6pTAQUk4Qpcp9z96fOvVLchRq/P4iys=
|
|||||||
github.com/twpayne/go-gpx v1.4.1/go.mod h1:6bVeKyVqzHRZ25UdFOWxv0f6SMW0P9lO7GO1aNNznEU=
|
github.com/twpayne/go-gpx v1.4.1/go.mod h1:6bVeKyVqzHRZ25UdFOWxv0f6SMW0P9lO7GO1aNNznEU=
|
||||||
github.com/twpayne/go-polyline v1.1.1 h1:/tSF1BR7rN4HWj4XKqvRUNrCiYVMCvywxTFVofvDV0w=
|
github.com/twpayne/go-polyline v1.1.1 h1:/tSF1BR7rN4HWj4XKqvRUNrCiYVMCvywxTFVofvDV0w=
|
||||||
github.com/twpayne/go-polyline v1.1.1/go.mod h1:ybd9IWWivW/rlXPXuuckeKUyF3yrIim+iqA7kSl4NFY=
|
github.com/twpayne/go-polyline v1.1.1/go.mod h1:ybd9IWWivW/rlXPXuuckeKUyF3yrIim+iqA7kSl4NFY=
|
||||||
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
|
||||||
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
|
||||||
github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo=
|
|
||||||
github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
|
|
||||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||||
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
|
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
|
||||||
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
|
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
|
||||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 h1:9G6E0TXzGFVfTnawRzrPl83iHOAV7L8NJiR8RSGYV1g=
|
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 h1:r6I7RJCN86bpD/FQwedZ0vSixDpwuWREjW9oRMsmqDc=
|
||||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0/go.mod h1:azvtTADFQJA8mX80jIH/akaE7h+dbm/sVuaHqN13w74=
|
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI=
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA=
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk=
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg=
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8=
|
||||||
go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo=
|
go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY=
|
||||||
go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4=
|
go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE=
|
||||||
go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q=
|
go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE=
|
||||||
go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s=
|
go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY=
|
||||||
go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g=
|
go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk=
|
||||||
go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI=
|
go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0=
|
||||||
gocloud.dev v0.39.0 h1:EYABYGhAalPUaMrbSKOr5lejxoxvXj99nE8XFtsDgds=
|
go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc=
|
||||||
gocloud.dev v0.39.0/go.mod h1:drz+VyYNBvrMTW0KZiBAYEdl8lbNZx+OQ7oQvdrFmSQ=
|
go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8=
|
||||||
|
go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys=
|
||||||
|
go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A=
|
||||||
gocloud.dev v0.40.0 h1:f8LgP+4WDqOG/RXoUcyLpeIAGOcAbZrZbDQCUee10ng=
|
gocloud.dev v0.40.0 h1:f8LgP+4WDqOG/RXoUcyLpeIAGOcAbZrZbDQCUee10ng=
|
||||||
gocloud.dev v0.40.0/go.mod h1:drz+VyYNBvrMTW0KZiBAYEdl8lbNZx+OQ7oQvdrFmSQ=
|
gocloud.dev v0.40.0/go.mod h1:drz+VyYNBvrMTW0KZiBAYEdl8lbNZx+OQ7oQvdrFmSQ=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
@@ -303,16 +244,14 @@ golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
|
|||||||
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
|
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||||
golang.org/x/image v0.19.0 h1:D9FX4QWkLfkeqaC62SonffIIuYdOk/UE2XKUBgRIBIQ=
|
|
||||||
golang.org/x/image v0.19.0/go.mod h1:y0zrRqlQRWQ5PXaYCOMLTW2fpsxZ8Qh9I/ohnInJEys=
|
|
||||||
golang.org/x/image v0.23.0 h1:HseQ7c2OpPKTPVzNjG5fwJsOTCiiwS4QdsYi5XU6H68=
|
golang.org/x/image v0.23.0 h1:HseQ7c2OpPKTPVzNjG5fwJsOTCiiwS4QdsYi5XU6H68=
|
||||||
golang.org/x/image v0.23.0/go.mod h1:wJJBTdLfCCf3tiHa1fNxpZmUI4mmoZvwMCPP0ddoNKY=
|
golang.org/x/image v0.23.0/go.mod h1:wJJBTdLfCCf3tiHa1fNxpZmUI4mmoZvwMCPP0ddoNKY=
|
||||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
|
golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4=
|
||||||
golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
|
golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
@@ -326,8 +265,6 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
|
|||||||
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
|
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
|
||||||
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
|
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA=
|
|
||||||
golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
|
||||||
golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE=
|
golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE=
|
||||||
golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
@@ -360,8 +297,7 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
|||||||
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
|
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
|
||||||
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
|
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
|
||||||
golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
|
golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg=
|
||||||
golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
|
||||||
golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
@@ -370,16 +306,12 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3
|
|||||||
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ=
|
golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8=
|
||||||
golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0=
|
golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20240716161551-93cc26a95ae9 h1:LLhsEBxRTBLuKlQxFBYUOU8xyFgXv6cOTp2HASDlsDk=
|
|
||||||
golang.org/x/xerrors v0.0.0-20240716161551-93cc26a95ae9/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
|
|
||||||
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY=
|
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY=
|
||||||
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
|
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
|
||||||
google.golang.org/api v0.194.0 h1:dztZKG9HgtIpbI35FhfuSNR/zmaMVdxNlntHj1sIS4s=
|
|
||||||
google.golang.org/api v0.194.0/go.mod h1:AgvUFdojGANh3vI+P7EVnxj3AISHllxGCJSFmggmnd0=
|
|
||||||
google.golang.org/api v0.214.0 h1:h2Gkq07OYi6kusGOaT/9rnNljuXmqPnaig7WGPmKbwA=
|
google.golang.org/api v0.214.0 h1:h2Gkq07OYi6kusGOaT/9rnNljuXmqPnaig7WGPmKbwA=
|
||||||
google.golang.org/api v0.214.0/go.mod h1:bYPpLG8AyeMWwDU6NXoB00xC0DFkikVvd5MfwoxjLqE=
|
google.golang.org/api v0.214.0/go.mod h1:bYPpLG8AyeMWwDU6NXoB00xC0DFkikVvd5MfwoxjLqE=
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
@@ -388,12 +320,10 @@ google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID
|
|||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||||
google.golang.org/genproto v0.0.0-20240814211410-ddb44dafa142 h1:oLiyxGgE+rt22duwci1+TG7bg2/L1LQsXwfjPlmuJA0=
|
google.golang.org/genproto v0.0.0-20240812133136-8ffd90a71988 h1:CT2Thj5AuPV9phrYMtzX11k+XkzMGfRAet42PmoTATM=
|
||||||
google.golang.org/genproto v0.0.0-20240814211410-ddb44dafa142/go.mod h1:G11eXq53iI5Q+kyNOmCvnzBaxEA2Q/Ik5Tj7nqBE8j4=
|
google.golang.org/genproto v0.0.0-20240812133136-8ffd90a71988/go.mod h1:7uvplUBj4RjHAxIZ//98LzOvrQ04JBkaixRmCMI29hc=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240812133136-8ffd90a71988 h1:+/tmTy5zAieooKIXfzDm9KiA3Bv6JBwriRN9LY+yayk=
|
google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 h1:CkkIfIt50+lT6NHAVoRYEyAvQGFM7xEwXUUywFvEb3Q=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240812133136-8ffd90a71988/go.mod h1:4+X6GvPs+25wZKbQq9qyAXrwIRExv7w0Ea6MgZLZiDM=
|
google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576/go.mod h1:1R3kvZ1dtP3+4p4d3G8uJ8rFk/fWlScl38vanWACI08=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed h1:J6izYgfBXAI3xTKLgxzTmUltdYaLsuBxFCgDHWJ/eXg=
|
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=
|
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241219192143-6b3ec007d9bb h1:3oy2tynMOP1QbTC0MsNNAV+Se8M2Bd0A5+x1QHyw+pI=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20241219192143-6b3ec007d9bb h1:3oy2tynMOP1QbTC0MsNNAV+Se8M2Bd0A5+x1QHyw+pI=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241219192143-6b3ec007d9bb/go.mod h1:lcTa1sDdWEIHMWlITnIczmw5w60CF9ffkb8Z+DVmmjA=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20241219192143-6b3ec007d9bb/go.mod h1:lcTa1sDdWEIHMWlITnIczmw5w60CF9ffkb8Z+DVmmjA=
|
||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
@@ -401,8 +331,6 @@ google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac
|
|||||||
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
||||||
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
|
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
|
||||||
google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc=
|
|
||||||
google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ=
|
|
||||||
google.golang.org/grpc v1.69.2 h1:U3S9QEtbXC0bYNvRtcoklF3xGtLViumSYxWykJS+7AU=
|
google.golang.org/grpc v1.69.2 h1:U3S9QEtbXC0bYNvRtcoklF3xGtLViumSYxWykJS+7AU=
|
||||||
google.golang.org/grpc v1.69.2/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4=
|
google.golang.org/grpc v1.69.2/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4=
|
||||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||||
@@ -414,8 +342,6 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
|
|||||||
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||||
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||||
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||||
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
|
|
||||||
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
|
|
||||||
google.golang.org/protobuf v1.36.0 h1:mjIs9gYtt56AzC4ZaffQuh88TZurBGhIJMBZGSxNerQ=
|
google.golang.org/protobuf v1.36.0 h1:mjIs9gYtt56AzC4ZaffQuh88TZurBGhIJMBZGSxNerQ=
|
||||||
google.golang.org/protobuf v1.36.0/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
google.golang.org/protobuf v1.36.0/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
@@ -434,8 +360,6 @@ modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE=
|
|||||||
modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ=
|
modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ=
|
||||||
modernc.org/gc/v2 v2.4.1 h1:9cNzOqPyMJBvrUipmynX0ZohMhcxPtMccYgGOJdOiBw=
|
modernc.org/gc/v2 v2.4.1 h1:9cNzOqPyMJBvrUipmynX0ZohMhcxPtMccYgGOJdOiBw=
|
||||||
modernc.org/gc/v2 v2.4.1/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU=
|
modernc.org/gc/v2 v2.4.1/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU=
|
||||||
modernc.org/gc/v3 v3.0.0-20240801135723-a856999a2e4a h1:CfbpOLEo2IwNzJdMvE8aiRbPMxoTpgAJeyePh0SmO8M=
|
|
||||||
modernc.org/gc/v3 v3.0.0-20240801135723-a856999a2e4a/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4=
|
|
||||||
modernc.org/gc/v3 v3.0.0-20241213165251-3bc300f6d0c9 h1:ovz6yUKX71igz2yvk4NpiCL5fvdjZAI+DhuDEGx1xyU=
|
modernc.org/gc/v3 v3.0.0-20241213165251-3bc300f6d0c9 h1:ovz6yUKX71igz2yvk4NpiCL5fvdjZAI+DhuDEGx1xyU=
|
||||||
modernc.org/gc/v3 v3.0.0-20241213165251-3bc300f6d0c9/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4=
|
modernc.org/gc/v3 v3.0.0-20241213165251-3bc300f6d0c9/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4=
|
||||||
modernc.org/libc v1.55.3 h1:AzcW1mhlPNrRtjS5sS+eW2ISCgSOLLNyFzRh/V3Qj/U=
|
modernc.org/libc v1.55.3 h1:AzcW1mhlPNrRtjS5sS+eW2ISCgSOLLNyFzRh/V3Qj/U=
|
||||||
@@ -448,8 +372,6 @@ modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4=
|
|||||||
modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
|
modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
|
||||||
modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc=
|
modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc=
|
||||||
modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss=
|
modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss=
|
||||||
modernc.org/sqlite v1.32.0 h1:6BM4uGza7bWypsw4fdLRsLxut6bHe4c58VeqjRgST8s=
|
|
||||||
modernc.org/sqlite v1.32.0/go.mod h1:UqoylwmTb9F+IqXERT8bW9zzOWN8qwAIcLdzeBZs4hA=
|
|
||||||
modernc.org/sqlite v1.34.4 h1:sjdARozcL5KJBvYQvLlZEmctRgW9xqIZc2ncN7PU0P8=
|
modernc.org/sqlite v1.34.4 h1:sjdARozcL5KJBvYQvLlZEmctRgW9xqIZc2ncN7PU0P8=
|
||||||
modernc.org/sqlite v1.34.4/go.mod h1:3QQFCG2SEMtc2nv+Wq4cQCH7Hjcg+p/RMlS1XK+zwbk=
|
modernc.org/sqlite v1.34.4/go.mod h1:3QQFCG2SEMtc2nv+Wq4cQCH7Hjcg+p/RMlS1XK+zwbk=
|
||||||
modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA=
|
modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA=
|
||||||
|
|||||||
@@ -14,14 +14,13 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/pocketbase/dbx"
|
"github.com/pocketbase/dbx"
|
||||||
"github.com/pocketbase/pocketbase"
|
|
||||||
"github.com/pocketbase/pocketbase/core"
|
"github.com/pocketbase/pocketbase/core"
|
||||||
"github.com/pocketbase/pocketbase/tools/filesystem"
|
"github.com/pocketbase/pocketbase/tools/filesystem"
|
||||||
"github.com/pocketbase/pocketbase/tools/security"
|
"github.com/pocketbase/pocketbase/tools/security"
|
||||||
"github.com/twpayne/go-gpx"
|
"github.com/twpayne/go-gpx"
|
||||||
)
|
)
|
||||||
|
|
||||||
func SyncKomoot(app *pocketbase.PocketBase) error {
|
func SyncKomoot(app core.App) error {
|
||||||
integrations, err := app.FindAllRecords("integrations", dbx.NewExp("true"))
|
integrations, err := app.FindAllRecords("integrations", dbx.NewExp("true"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -174,7 +173,7 @@ func (k *KomootApi) fetchDetailedTour(tour KomootTour) (*DetailedKomootTour, err
|
|||||||
return data, nil
|
return data, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func syncTrailWithTours(app *pocketbase.PocketBase, k *KomootApi, i KomootIntegration, user string, tours []KomootTour) (bool, error) {
|
func syncTrailWithTours(app core.App, k *KomootApi, i KomootIntegration, user string, tours []KomootTour) (bool, error) {
|
||||||
hasNewTours := false
|
hasNewTours := false
|
||||||
for _, tour := range tours {
|
for _, tour := range tours {
|
||||||
trails, err := app.FindRecordsByFilter("trails", "external_id = {:id}", "", 1, 0, dbx.Params{"id": strconv.Itoa(int(tour.ID))})
|
trails, err := app.FindRecordsByFilter("trails", "external_id = {:id}", "", 1, 0, dbx.Params{"id": strconv.Itoa(int(tour.ID))})
|
||||||
@@ -206,7 +205,7 @@ func syncTrailWithTours(app *pocketbase.PocketBase, k *KomootApi, i KomootIntegr
|
|||||||
return hasNewTours, nil
|
return hasNewTours, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func createTrailFromTour(app *pocketbase.PocketBase, detailedTour *DetailedKomootTour, gpx *filesystem.File, user string, wpIds []string) error {
|
func createTrailFromTour(app core.App, detailedTour *DetailedKomootTour, gpx *filesystem.File, user string, wpIds []string) error {
|
||||||
collection, err := app.FindCollectionByNameOrId("trails")
|
collection, err := app.FindCollectionByNameOrId("trails")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -268,9 +267,12 @@ func createTrailFromTour(app *pocketbase.PocketBase, detailedTour *DetailedKomoo
|
|||||||
"author": user,
|
"author": user,
|
||||||
})
|
})
|
||||||
|
|
||||||
record.Set("photos", photos)
|
if photos != nil {
|
||||||
|
record.Set("photos", photos)
|
||||||
record.Set("gpx", gpx)
|
}
|
||||||
|
if gpx != nil {
|
||||||
|
record.Set("gpx", gpx)
|
||||||
|
}
|
||||||
|
|
||||||
if err := app.Save(record); err != nil {
|
if err := app.Save(record); err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -279,7 +281,7 @@ func createTrailFromTour(app *pocketbase.PocketBase, detailedTour *DetailedKomoo
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func createWaypointsFromTour(app *pocketbase.PocketBase, tour *DetailedKomootTour, user string) ([]string, error) {
|
func createWaypointsFromTour(app core.App, tour *DetailedKomootTour, user string) ([]string, error) {
|
||||||
collection, err := app.FindCollectionByNameOrId("waypoints")
|
collection, err := app.FindCollectionByNameOrId("waypoints")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -319,7 +321,9 @@ func createWaypointsFromTour(app *pocketbase.PocketBase, tour *DetailedKomootTou
|
|||||||
"distance_from_start": 0,
|
"distance_from_start": 0,
|
||||||
})
|
})
|
||||||
|
|
||||||
record.Set("photos", photos)
|
if photos != nil {
|
||||||
|
record.Set("photos", photos)
|
||||||
|
}
|
||||||
|
|
||||||
if err := app.Save(record); err != nil {
|
if err := app.Save(record); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/pocketbase/dbx"
|
"github.com/pocketbase/dbx"
|
||||||
"github.com/pocketbase/pocketbase"
|
|
||||||
"github.com/pocketbase/pocketbase/core"
|
"github.com/pocketbase/pocketbase/core"
|
||||||
"github.com/pocketbase/pocketbase/tools/filesystem"
|
"github.com/pocketbase/pocketbase/tools/filesystem"
|
||||||
"github.com/pocketbase/pocketbase/tools/security"
|
"github.com/pocketbase/pocketbase/tools/security"
|
||||||
@@ -24,7 +23,7 @@ type StravaApi struct {
|
|||||||
AceessToken string
|
AceessToken string
|
||||||
}
|
}
|
||||||
|
|
||||||
func SyncStrava(app *pocketbase.PocketBase) error {
|
func SyncStrava(app core.App) error {
|
||||||
integrations, err := app.FindAllRecords("integrations", dbx.NewExp("true"))
|
integrations, err := app.FindAllRecords("integrations", dbx.NewExp("true"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -222,7 +221,7 @@ func fetchStravaActivities(accessToken string, page int) ([]StravaActivity, erro
|
|||||||
return activities, nil
|
return activities, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func syncTrailsWithRoutes(app *pocketbase.PocketBase, accessToken string, user string, routes []StravaRoute) (bool, error) {
|
func syncTrailsWithRoutes(app core.App, accessToken string, user string, routes []StravaRoute) (bool, error) {
|
||||||
hasNewRoutes := false
|
hasNewRoutes := false
|
||||||
for _, route := range routes {
|
for _, route := range routes {
|
||||||
trails, err := app.FindRecordsByFilter("trails", "external_id = {:id}", "", 1, 0, dbx.Params{"id": route.IDStr})
|
trails, err := app.FindRecordsByFilter("trails", "external_id = {:id}", "", 1, 0, dbx.Params{"id": route.IDStr})
|
||||||
@@ -289,7 +288,7 @@ func fetchRouteGPX(route StravaRoute, accessToken string) (*filesystem.File, err
|
|||||||
return gpxFile, nil
|
return gpxFile, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func createTrailFromRoute(app *pocketbase.PocketBase, route StravaRoute, gpx *filesystem.File, user string, wpIds []string) error {
|
func createTrailFromRoute(app core.App, route StravaRoute, gpx *filesystem.File, user string, wpIds []string) error {
|
||||||
collection, err := app.FindCollectionByNameOrId("trails")
|
collection, err := app.FindCollectionByNameOrId("trails")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -338,7 +337,9 @@ func createTrailFromRoute(app *pocketbase.PocketBase, route StravaRoute, gpx *fi
|
|||||||
"author": user,
|
"author": user,
|
||||||
})
|
})
|
||||||
|
|
||||||
record.Set("gpx", gpx)
|
if gpx != nil {
|
||||||
|
record.Set("gpx", gpx)
|
||||||
|
}
|
||||||
|
|
||||||
if err := app.Save(record); err != nil {
|
if err := app.Save(record); err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -347,7 +348,7 @@ func createTrailFromRoute(app *pocketbase.PocketBase, route StravaRoute, gpx *fi
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func createWaypointsFromRoute(app *pocketbase.PocketBase, route StravaRoute, user string) ([]string, error) {
|
func createWaypointsFromRoute(app core.App, route StravaRoute, user string) ([]string, error) {
|
||||||
collection, err := app.FindCollectionByNameOrId("waypoints")
|
collection, err := app.FindCollectionByNameOrId("waypoints")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -374,7 +375,7 @@ func createWaypointsFromRoute(app *pocketbase.PocketBase, route StravaRoute, use
|
|||||||
return wpIds, nil
|
return wpIds, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func syncTrailsWithActivities(app *pocketbase.PocketBase, accessToken string, user string, activities []StravaActivity) (bool, error) {
|
func syncTrailsWithActivities(app core.App, accessToken string, user string, activities []StravaActivity) (bool, error) {
|
||||||
hasNewActivites := false
|
hasNewActivites := false
|
||||||
for _, activity := range activities {
|
for _, activity := range activities {
|
||||||
trails, err := app.FindRecordsByFilter("trails", "external_id = {:id}", "", 1, 0, dbx.Params{"id": strconv.Itoa(int(activity.ID))})
|
trails, err := app.FindRecordsByFilter("trails", "external_id = {:id}", "", 1, 0, dbx.Params{"id": strconv.Itoa(int(activity.ID))})
|
||||||
@@ -430,7 +431,7 @@ func fetchDetailedActivity(activity StravaActivity, accessToken string) (*Detail
|
|||||||
return &detailedActivity, nil
|
return &detailedActivity, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func createTrailFromActivity(app *pocketbase.PocketBase, activity *DetailedStravaActivity, gpx *filesystem.File, user string) error {
|
func createTrailFromActivity(app core.App, activity *DetailedStravaActivity, gpx *filesystem.File, user string) error {
|
||||||
collection, err := app.FindCollectionByNameOrId("trails")
|
collection, err := app.FindCollectionByNameOrId("trails")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -509,9 +510,13 @@ func createTrailFromActivity(app *pocketbase.PocketBase, activity *DetailedStrav
|
|||||||
"author": user,
|
"author": user,
|
||||||
})
|
})
|
||||||
|
|
||||||
record.Set("photos", photo)
|
if photo != nil {
|
||||||
|
record.Set("photos", photo)
|
||||||
|
}
|
||||||
|
|
||||||
record.Set("gpx", gpx)
|
if gpx != nil {
|
||||||
|
record.Set("gpx", gpx)
|
||||||
|
}
|
||||||
|
|
||||||
if err := app.Save(record); err != nil {
|
if err := app.Save(record); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
225
db/main.go
225
db/main.go
@@ -53,34 +53,34 @@ func registerMigrations(app *pocketbase.PocketBase) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func setupEventHandlers(app *pocketbase.PocketBase, client meilisearch.ServiceManager) {
|
func setupEventHandlers(app *pocketbase.PocketBase, client meilisearch.ServiceManager) {
|
||||||
app.OnRecordAfterCreateSuccess("users").BindFunc(createUserHandler(app, client))
|
app.OnRecordAfterCreateSuccess("users").BindFunc(createUserHandler(client))
|
||||||
|
|
||||||
app.OnRecordAfterCreateSuccess("trails").BindFunc(createTrailHandler(app, client))
|
app.OnRecordAfterCreateSuccess("trails").BindFunc(createTrailHandler(client))
|
||||||
app.OnRecordAfterUpdateSuccess("trails").BindFunc(updateTrailHandler(app, client))
|
app.OnRecordAfterUpdateSuccess("trails").BindFunc(updateTrailHandler(client))
|
||||||
app.OnRecordAfterDeleteSuccess("trails").BindFunc(deleteTrailHandler(client))
|
app.OnRecordAfterDeleteSuccess("trails").BindFunc(deleteTrailHandler(client))
|
||||||
|
|
||||||
app.OnRecordAfterCreateSuccess("trail_share").BindFunc(createTrailShareHandler(app, client))
|
app.OnRecordAfterCreateSuccess("trail_share").BindFunc(createTrailShareHandler(client))
|
||||||
app.OnRecordAfterDeleteSuccess("trail_share").BindFunc(deleteTrailShareHandler(client))
|
app.OnRecordAfterDeleteSuccess("trail_share").BindFunc(deleteTrailShareHandler(client))
|
||||||
|
|
||||||
app.OnRecordAfterCreateSuccess("lists").BindFunc(createListHandler(app, client))
|
app.OnRecordAfterCreateSuccess("lists").BindFunc(createListHandler(client))
|
||||||
app.OnRecordAfterUpdateSuccess("lists").BindFunc(updateListHandler(client))
|
app.OnRecordAfterUpdateSuccess("lists").BindFunc(updateListHandler(client))
|
||||||
app.OnRecordAfterDeleteSuccess("lists").BindFunc(deleteListHandler(client))
|
app.OnRecordAfterDeleteSuccess("lists").BindFunc(deleteListHandler(client))
|
||||||
|
|
||||||
app.OnRecordAfterCreateSuccess("list_share").BindFunc(createListShareHandler(app, client))
|
app.OnRecordAfterCreateSuccess("list_share").BindFunc(createListShareHandler(client))
|
||||||
app.OnRecordAfterDeleteSuccess("list_share").BindFunc(deleteListShareHandler(client))
|
app.OnRecordAfterDeleteSuccess("list_share").BindFunc(deleteListShareHandler(client))
|
||||||
|
|
||||||
app.OnRecordAfterCreateSuccess("follows").BindFunc(createFollowHandler(app))
|
app.OnRecordAfterCreateSuccess("follows").BindFunc(createFollowHandler())
|
||||||
app.OnRecordAfterCreateSuccess("comments").BindFunc(createCommentHandler(app))
|
app.OnRecordAfterCreateSuccess("comments").BindFunc(createCommentHandler())
|
||||||
|
|
||||||
app.OnRecordsListRequest("integrations").BindFunc(listIntegrationHandler())
|
app.OnRecordsListRequest("integrations").BindFunc(listIntegrationHandler())
|
||||||
app.OnRecordCreateRequest("integrations").BindFunc(createIntegrationHandler(app))
|
app.OnRecordCreateRequest("integrations").BindFunc(createIntegrationHandler())
|
||||||
app.OnRecordUpdateRequest("integrations").BindFunc(updateIntegrationHandler(app))
|
app.OnRecordUpdateRequest("integrations").BindFunc(updateIntegrationHandler())
|
||||||
|
|
||||||
app.OnRecordRequestEmailChangeRequest("users").BindFunc(changeUserEmailHandler(app))
|
app.OnRecordRequestEmailChangeRequest("users").BindFunc(changeUserEmailHandler())
|
||||||
app.OnServe().BindFunc(onBeforeServeHandler(app, client))
|
app.OnServe().BindFunc(onBeforeServeHandler(client))
|
||||||
}
|
}
|
||||||
|
|
||||||
func createUserHandler(app *pocketbase.PocketBase, client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
|
func createUserHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
|
||||||
return func(e *core.RecordEvent) error {
|
return func(e *core.RecordEvent) error {
|
||||||
userId := e.Record.Id
|
userId := e.Record.Id
|
||||||
|
|
||||||
@@ -98,15 +98,19 @@ func createUserHandler(app *pocketbase.PocketBase, client meilisearch.ServiceMan
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
e.Record.Set("token", token)
|
e.Record.Set("token", token)
|
||||||
if err := app.Save(e.Record); err != nil {
|
if err := e.App.Save(e.Record); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return createDefaultUserSettings(app, e.Record.Id)
|
err = createDefaultUserSettings(e.App, e.Record.Id)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return e.Next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func createDefaultUserSettings(app *pocketbase.PocketBase, userId string) error {
|
func createDefaultUserSettings(app core.App, userId string) error {
|
||||||
collection, err := app.FindCollectionByNameOrId("settings")
|
collection, err := app.FindCollectionByNameOrId("settings")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -119,10 +123,10 @@ func createDefaultUserSettings(app *pocketbase.PocketBase, userId string) error
|
|||||||
return app.Save(settings)
|
return app.Save(settings)
|
||||||
}
|
}
|
||||||
|
|
||||||
func createTrailHandler(app *pocketbase.PocketBase, client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
|
func createTrailHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
|
||||||
return func(e *core.RecordEvent) error {
|
return func(e *core.RecordEvent) error {
|
||||||
record := e.Record
|
record := e.Record
|
||||||
author, err := app.FindRecordById("users", record.GetString(("author")))
|
author, err := e.App.FindRecordById("users", record.GetString(("author")))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -140,20 +144,27 @@ func createTrailHandler(app *pocketbase.PocketBase, client meilisearch.ServiceMa
|
|||||||
Seen: false,
|
Seen: false,
|
||||||
Author: record.GetString("author"),
|
Author: record.GetString("author"),
|
||||||
}
|
}
|
||||||
return util.SendNotificationToFollowers(app, notification)
|
err = util.SendNotificationToFollowers(e.App, notification)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return e.Next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateTrailHandler(app *pocketbase.PocketBase, client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
|
func updateTrailHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
|
||||||
return func(e *core.RecordEvent) error {
|
return func(e *core.RecordEvent) error {
|
||||||
record := e.Record
|
record := e.Record
|
||||||
author, err := app.FindRecordById("users", record.GetString(("author")))
|
author, err := e.App.FindRecordById("users", record.GetString(("author")))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return util.UpdateTrail(record, author, client)
|
err = util.UpdateTrail(record, author, client)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return e.Next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -161,16 +172,19 @@ func deleteTrailHandler(client meilisearch.ServiceManager) func(e *core.RecordEv
|
|||||||
return func(e *core.RecordEvent) error {
|
return func(e *core.RecordEvent) error {
|
||||||
record := e.Record
|
record := e.Record
|
||||||
_, err := client.Index("trails").DeleteDocument(record.Id)
|
_, err := client.Index("trails").DeleteDocument(record.Id)
|
||||||
return err
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return e.Next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func createTrailShareHandler(app *pocketbase.PocketBase, client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
|
func createTrailShareHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
|
||||||
return func(e *core.RecordEvent) error {
|
return func(e *core.RecordEvent) error {
|
||||||
record := e.Record
|
record := e.Record
|
||||||
|
|
||||||
trailId := record.GetString("trail")
|
trailId := record.GetString("trail")
|
||||||
shares, err := app.FindAllRecords("trail_share",
|
shares, err := e.App.FindAllRecords("trail_share",
|
||||||
dbx.NewExp("trail = {:trailId}", dbx.Params{"trailId": trailId}),
|
dbx.NewExp("trail = {:trailId}", dbx.Params{"trailId": trailId}),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -186,7 +200,7 @@ func createTrailShareHandler(app *pocketbase.PocketBase, client meilisearch.Serv
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if errs := app.ExpandRecord(record, []string{"trail", "trail.author"}, nil); len(errs) > 0 {
|
if errs := e.App.ExpandRecord(record, []string{"trail", "trail.author"}, nil); len(errs) > 0 {
|
||||||
return fmt.Errorf("failed to expand: %v", errs)
|
return fmt.Errorf("failed to expand: %v", errs)
|
||||||
}
|
}
|
||||||
shareTrail := record.ExpandedOne("trail")
|
shareTrail := record.ExpandedOne("trail")
|
||||||
@@ -202,7 +216,11 @@ func createTrailShareHandler(app *pocketbase.PocketBase, client meilisearch.Serv
|
|||||||
Seen: false,
|
Seen: false,
|
||||||
Author: shareTrailAuthor.Id,
|
Author: shareTrailAuthor.Id,
|
||||||
}
|
}
|
||||||
return util.SendNotification(app, notification, record.GetString("user"))
|
err = util.SendNotification(e.App, notification, record.GetString("user"))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return e.Next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -211,11 +229,15 @@ func deleteTrailShareHandler(client meilisearch.ServiceManager) func(e *core.Rec
|
|||||||
record := e.Record
|
record := e.Record
|
||||||
|
|
||||||
trailId := record.GetString("trail")
|
trailId := record.GetString("trail")
|
||||||
return util.UpdateTrailShares(trailId, []string{}, client)
|
err := util.UpdateTrailShares(trailId, []string{}, client)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return e.Next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func createListHandler(app *pocketbase.PocketBase, client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
|
func createListHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
|
||||||
return func(e *core.RecordEvent) error {
|
return func(e *core.RecordEvent) error {
|
||||||
record := e.Record
|
record := e.Record
|
||||||
|
|
||||||
@@ -223,7 +245,7 @@ func createListHandler(app *pocketbase.PocketBase, client meilisearch.ServiceMan
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if !record.GetBool("public") {
|
if !record.GetBool("public") {
|
||||||
return nil
|
return e.Next()
|
||||||
}
|
}
|
||||||
notification := util.Notification{
|
notification := util.Notification{
|
||||||
Type: util.ListCreate,
|
Type: util.ListCreate,
|
||||||
@@ -234,14 +256,23 @@ func createListHandler(app *pocketbase.PocketBase, client meilisearch.ServiceMan
|
|||||||
Seen: false,
|
Seen: false,
|
||||||
Author: record.GetString("author"),
|
Author: record.GetString("author"),
|
||||||
}
|
}
|
||||||
return util.SendNotificationToFollowers(app, notification)
|
err := util.SendNotificationToFollowers(e.App, notification)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return e.Next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateListHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
|
func updateListHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
|
||||||
return func(e *core.RecordEvent) error {
|
return func(e *core.RecordEvent) error {
|
||||||
record := e.Record
|
record := e.Record
|
||||||
return util.UpdateList(record, client)
|
err := util.UpdateList(record, client)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return e.Next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -249,15 +280,19 @@ func deleteListHandler(client meilisearch.ServiceManager) func(e *core.RecordEve
|
|||||||
return func(e *core.RecordEvent) error {
|
return func(e *core.RecordEvent) error {
|
||||||
record := e.Record
|
record := e.Record
|
||||||
_, err := client.Index("lists").DeleteDocument(record.Id)
|
_, err := client.Index("lists").DeleteDocument(record.Id)
|
||||||
return err
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return e.Next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func createListShareHandler(app *pocketbase.PocketBase, client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
|
func createListShareHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
|
||||||
return func(e *core.RecordEvent) error {
|
return func(e *core.RecordEvent) error {
|
||||||
record := e.Record
|
record := e.Record
|
||||||
listId := record.GetString("list")
|
listId := record.GetString("list")
|
||||||
shares, err := app.FindAllRecords("list_share",
|
shares, err := e.App.FindAllRecords("list_share",
|
||||||
dbx.NewExp("list = {:listId}", dbx.Params{"listId": listId}),
|
dbx.NewExp("list = {:listId}", dbx.Params{"listId": listId}),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -273,7 +308,7 @@ func createListShareHandler(app *pocketbase.PocketBase, client meilisearch.Servi
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if errs := app.ExpandRecord(record, []string{"list", "list.author"}, nil); len(errs) > 0 {
|
if errs := e.App.ExpandRecord(record, []string{"list", "list.author"}, nil); len(errs) > 0 {
|
||||||
return fmt.Errorf("failed to expand: %v", errs)
|
return fmt.Errorf("failed to expand: %v", errs)
|
||||||
}
|
}
|
||||||
shareList := record.ExpandedOne("list")
|
shareList := record.ExpandedOne("list")
|
||||||
@@ -289,7 +324,11 @@ func createListShareHandler(app *pocketbase.PocketBase, client meilisearch.Servi
|
|||||||
Seen: false,
|
Seen: false,
|
||||||
Author: shareListAuthor.Id,
|
Author: shareListAuthor.Id,
|
||||||
}
|
}
|
||||||
return util.SendNotification(app, notification, record.GetString("user"))
|
err = util.SendNotification(e.App, notification, record.GetString("user"))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return e.Next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -297,14 +336,18 @@ func deleteListShareHandler(client meilisearch.ServiceManager) func(e *core.Reco
|
|||||||
return func(e *core.RecordEvent) error {
|
return func(e *core.RecordEvent) error {
|
||||||
record := e.Record
|
record := e.Record
|
||||||
listId := record.GetString("list")
|
listId := record.GetString("list")
|
||||||
return util.UpdateListShares(listId, []string{}, client)
|
err := util.UpdateListShares(listId, []string{}, client)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return e.Next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func createFollowHandler(app *pocketbase.PocketBase) func(e *core.RecordEvent) error {
|
func createFollowHandler() func(e *core.RecordEvent) error {
|
||||||
return func(e *core.RecordEvent) error {
|
return func(e *core.RecordEvent) error {
|
||||||
record := e.Record
|
record := e.Record
|
||||||
if errs := app.ExpandRecord(record, []string{"follower"}, nil); len(errs) > 0 {
|
if errs := e.App.ExpandRecord(record, []string{"follower"}, nil); len(errs) > 0 {
|
||||||
return fmt.Errorf("failed to expand: %v", errs)
|
return fmt.Errorf("failed to expand: %v", errs)
|
||||||
}
|
}
|
||||||
follower := record.ExpandedOne("follower")
|
follower := record.ExpandedOne("follower")
|
||||||
@@ -317,15 +360,19 @@ func createFollowHandler(app *pocketbase.PocketBase) func(e *core.RecordEvent) e
|
|||||||
Seen: false,
|
Seen: false,
|
||||||
Author: record.GetString("follower"),
|
Author: record.GetString("follower"),
|
||||||
}
|
}
|
||||||
return util.SendNotification(app, notification, record.GetString("followee"))
|
err := util.SendNotification(e.App, notification, record.GetString("followee"))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return e.Next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func createCommentHandler(app *pocketbase.PocketBase) func(e *core.RecordEvent) error {
|
func createCommentHandler() func(e *core.RecordEvent) error {
|
||||||
return func(e *core.RecordEvent) error {
|
return func(e *core.RecordEvent) error {
|
||||||
record := e.Record
|
record := e.Record
|
||||||
|
|
||||||
if errs := app.ExpandRecord(record, []string{"trail", "author"}, nil); len(errs) > 0 {
|
if errs := e.App.ExpandRecord(record, []string{"trail", "author"}, nil); len(errs) > 0 {
|
||||||
return fmt.Errorf("failed to expand: %v", errs)
|
return fmt.Errorf("failed to expand: %v", errs)
|
||||||
}
|
}
|
||||||
commentAuthor := record.ExpandedOne("author")
|
commentAuthor := record.ExpandedOne("author")
|
||||||
@@ -342,14 +389,18 @@ func createCommentHandler(app *pocketbase.PocketBase) func(e *core.RecordEvent)
|
|||||||
Seen: false,
|
Seen: false,
|
||||||
Author: record.GetString("author"),
|
Author: record.GetString("author"),
|
||||||
}
|
}
|
||||||
return util.SendNotification(app, notification, commentTrail.GetString("author"))
|
err := util.SendNotification(e.App, notification, commentTrail.GetString("author"))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return e.Next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func listIntegrationHandler() func(e *core.RecordsListRequestEvent) error {
|
func listIntegrationHandler() func(e *core.RecordsListRequestEvent) error {
|
||||||
return func(e *core.RecordsListRequestEvent) error {
|
return func(e *core.RecordsListRequestEvent) error {
|
||||||
if e.HasSuperuserAuth() {
|
if e.HasSuperuserAuth() {
|
||||||
return nil
|
return e.Next()
|
||||||
}
|
}
|
||||||
for _, r := range e.Records {
|
for _, r := range e.Records {
|
||||||
|
|
||||||
@@ -359,13 +410,13 @@ func listIntegrationHandler() func(e *core.RecordsListRequestEvent) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return e.Next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func createIntegrationHandler(app *pocketbase.PocketBase) func(e *core.RecordRequestEvent) error {
|
func createIntegrationHandler() func(e *core.RecordRequestEvent) error {
|
||||||
return func(e *core.RecordRequestEvent) error {
|
return func(e *core.RecordRequestEvent) error {
|
||||||
err := encryptIntegrationSecrets(app, e.Record)
|
err := encryptIntegrationSecrets(e.App, e.Record)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -378,13 +429,13 @@ func createIntegrationHandler(app *pocketbase.PocketBase) func(e *core.RecordReq
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return e.Next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateIntegrationHandler(app *pocketbase.PocketBase) func(e *core.RecordRequestEvent) error {
|
func updateIntegrationHandler() func(e *core.RecordRequestEvent) error {
|
||||||
return func(e *core.RecordRequestEvent) error {
|
return func(e *core.RecordRequestEvent) error {
|
||||||
err := encryptIntegrationSecrets(app, e.Record)
|
err := encryptIntegrationSecrets(e.App, e.Record)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -397,7 +448,7 @@ func updateIntegrationHandler(app *pocketbase.PocketBase) func(e *core.RecordReq
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return e.Next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func censorIntegrationSecrets(r *core.Record) error {
|
func censorIntegrationSecrets(r *core.Record) error {
|
||||||
@@ -411,6 +462,9 @@ func censorIntegrationSecrets(r *core.Record) error {
|
|||||||
if err := json.Unmarshal([]byte(integrationString), &integration); err != nil {
|
if err := json.Unmarshal([]byte(integrationString), &integration); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if integration == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
for _, secretKey := range secretKeys {
|
for _, secretKey := range secretKeys {
|
||||||
integration[secretKey] = ""
|
integration[secretKey] = ""
|
||||||
}
|
}
|
||||||
@@ -425,7 +479,7 @@ func censorIntegrationSecrets(r *core.Record) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func encryptIntegrationSecrets(app *pocketbase.PocketBase, r *core.Record) error {
|
func encryptIntegrationSecrets(app core.App, r *core.Record) error {
|
||||||
encryptionKey := os.Getenv("POCKETBASE_ENCRYPTION_KEY")
|
encryptionKey := os.Getenv("POCKETBASE_ENCRYPTION_KEY")
|
||||||
if len(encryptionKey) == 0 {
|
if len(encryptionKey) == 0 {
|
||||||
return apis.NewBadRequestError("POCKETBASE_ENCRYPTION_KEY not set", nil)
|
return apis.NewBadRequestError("POCKETBASE_ENCRYPTION_KEY not set", nil)
|
||||||
@@ -459,6 +513,9 @@ func encryptIntegrationSecrets(app *pocketbase.PocketBase, r *core.Record) error
|
|||||||
if err := json.Unmarshal([]byte(originalString), &originalIntegration); err != nil {
|
if err := json.Unmarshal([]byte(originalString), &originalIntegration); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if integration == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
integration[secretKey] = originalIntegration[secretKey]
|
integration[secretKey] = originalIntegration[secretKey]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -474,30 +531,30 @@ func encryptIntegrationSecrets(app *pocketbase.PocketBase, r *core.Record) error
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func changeUserEmailHandler(app *pocketbase.PocketBase) func(e *core.RecordRequestEmailChangeRequestEvent) error {
|
func changeUserEmailHandler() func(e *core.RecordRequestEmailChangeRequestEvent) error {
|
||||||
return func(e *core.RecordRequestEmailChangeRequestEvent) error {
|
return func(e *core.RecordRequestEmailChangeRequestEvent) error {
|
||||||
|
|
||||||
e.Record.Set("email", e.Record.Email())
|
e.Record.Set("email", e.NewEmail)
|
||||||
if err := app.Save(e.Record); err != nil {
|
if err := e.App.Save(e.Record); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func onBeforeServeHandler(app *pocketbase.PocketBase, client meilisearch.ServiceManager) func(e *core.ServeEvent) error {
|
func onBeforeServeHandler(client meilisearch.ServiceManager) func(se *core.ServeEvent) error {
|
||||||
return func(e *core.ServeEvent) error {
|
return func(se *core.ServeEvent) error {
|
||||||
registerRoutes(e, app, client)
|
registerRoutes(se, client)
|
||||||
registerCronJobs(app)
|
registerCronJobs(se.App)
|
||||||
bootstrapData(app, client)
|
bootstrapData(se.App, client)
|
||||||
|
|
||||||
return e.Next()
|
return se.Next()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func registerRoutes(e *core.ServeEvent, app *pocketbase.PocketBase, client meilisearch.ServiceManager) {
|
func registerRoutes(se *core.ServeEvent, client meilisearch.ServiceManager) {
|
||||||
e.Router.GET("/public/search/token", func(e *core.RequestEvent) error {
|
se.Router.GET("/public/search/token", func(e *core.RequestEvent) error {
|
||||||
searchRules := map[string]interface{}{
|
searchRules := map[string]interface{}{
|
||||||
"lists": map[string]string{
|
"lists": map[string]string{
|
||||||
"filter": "public = true",
|
"filter": "public = true",
|
||||||
@@ -512,15 +569,19 @@ func registerRoutes(e *core.ServeEvent, app *pocketbase.PocketBase, client meili
|
|||||||
}
|
}
|
||||||
return e.JSON(http.StatusOK, map[string]string{"token": token})
|
return e.JSON(http.StatusOK, map[string]string{"token": token})
|
||||||
})
|
})
|
||||||
e.Router.GET("/trail/recommend", func(e *core.RequestEvent) error {
|
se.Router.GET("/trail/recommend", func(e *core.RequestEvent) error {
|
||||||
qSize := e.Request.URL.Query().Get("size")
|
qSize := e.Request.URL.Query().Get("size")
|
||||||
size, err := strconv.Atoi(qSize)
|
size, err := strconv.Atoi(qSize)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
size = 4
|
size = 4
|
||||||
}
|
}
|
||||||
userId := e.Auth.Id
|
|
||||||
|
|
||||||
trails, err := app.FindRecordsByFilter(
|
userId := ""
|
||||||
|
if e.Auth != nil {
|
||||||
|
userId = e.Auth.Id
|
||||||
|
}
|
||||||
|
|
||||||
|
trails, err := e.App.FindRecordsByFilter(
|
||||||
"trails",
|
"trails",
|
||||||
"author = {:userId} || public = true || ({:userId} != '' && trail_share_via_trail.user ?= {:userId})",
|
"author = {:userId} || public = true || ({:userId} != '' && trail_share_via_trail.user ?= {:userId})",
|
||||||
"",
|
"",
|
||||||
@@ -542,7 +603,7 @@ func registerRoutes(e *core.ServeEvent, app *pocketbase.PocketBase, client meili
|
|||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
e.Router.POST("/integration/strava/token", func(e *core.RequestEvent) error {
|
se.Router.POST("/integration/strava/token", func(e *core.RequestEvent) error {
|
||||||
encryptionKey := os.Getenv("POCKETBASE_ENCRYPTION_KEY")
|
encryptionKey := os.Getenv("POCKETBASE_ENCRYPTION_KEY")
|
||||||
if len(encryptionKey) == 0 {
|
if len(encryptionKey) == 0 {
|
||||||
return apis.NewBadRequestError("POCKETBASE_ENCRYPTION_KEY not set", nil)
|
return apis.NewBadRequestError("POCKETBASE_ENCRYPTION_KEY not set", nil)
|
||||||
@@ -553,9 +614,12 @@ func registerRoutes(e *core.ServeEvent, app *pocketbase.PocketBase, client meili
|
|||||||
return apis.NewBadRequestError("Failed to read request data", err)
|
return apis.NewBadRequestError("Failed to read request data", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
userId := e.Auth.Id
|
userId := ""
|
||||||
|
if e.Auth != nil {
|
||||||
|
userId = e.Auth.Id
|
||||||
|
}
|
||||||
|
|
||||||
integrations, err := app.FindAllRecords("integrations", dbx.NewExp("user = {:id}", dbx.Params{"id": userId}))
|
integrations, err := e.App.FindAllRecords("integrations", dbx.NewExp("user = {:id}", dbx.Params{"id": userId}))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -604,22 +668,25 @@ func registerRoutes(e *core.ServeEvent, app *pocketbase.PocketBase, client meili
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
integration.Set("strava", string(b))
|
integration.Set("strava", string(b))
|
||||||
err = app.Save(integration)
|
err = e.App.Save(integration)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return e.JSON(http.StatusOK, nil)
|
return e.JSON(http.StatusOK, nil)
|
||||||
})
|
})
|
||||||
|
|
||||||
e.Router.GET("/integration/komoot/login", func(e *core.RequestEvent) error {
|
se.Router.GET("/integration/komoot/login", func(e *core.RequestEvent) error {
|
||||||
encryptionKey := os.Getenv("POCKETBASE_ENCRYPTION_KEY")
|
encryptionKey := os.Getenv("POCKETBASE_ENCRYPTION_KEY")
|
||||||
if len(encryptionKey) == 0 {
|
if len(encryptionKey) == 0 {
|
||||||
return apis.NewBadRequestError("POCKETBASE_ENCRYPTION_KEY not set", nil)
|
return apis.NewBadRequestError("POCKETBASE_ENCRYPTION_KEY not set", nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
userId := e.Auth.Id
|
userId := ""
|
||||||
|
if e.Auth != nil {
|
||||||
|
userId = e.Auth.Id
|
||||||
|
}
|
||||||
|
|
||||||
integrations, err := app.FindAllRecords("integrations", dbx.NewExp("user = {:id}", dbx.Params{"id": userId}))
|
integrations, err := e.App.FindAllRecords("integrations", dbx.NewExp("user = {:id}", dbx.Params{"id": userId}))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -652,7 +719,7 @@ func registerRoutes(e *core.ServeEvent, app *pocketbase.PocketBase, client meili
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func registerCronJobs(app *pocketbase.PocketBase) {
|
func registerCronJobs(app core.App) {
|
||||||
schedule := os.Getenv("POCKETBASE_CRON_SYNC_SCHEDULE")
|
schedule := os.Getenv("POCKETBASE_CRON_SYNC_SCHEDULE")
|
||||||
if len(schedule) == 0 {
|
if len(schedule) == 0 {
|
||||||
schedule = "0 2 * * *"
|
schedule = "0 2 * * *"
|
||||||
@@ -674,13 +741,13 @@ func registerCronJobs(app *pocketbase.PocketBase) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func bootstrapData(app *pocketbase.PocketBase, client meilisearch.ServiceManager) error {
|
func bootstrapData(app core.App, client meilisearch.ServiceManager) error {
|
||||||
bootstrapCategories(app)
|
bootstrapCategories(app)
|
||||||
bootstrapMeilisearchTrails(app, client)
|
bootstrapMeilisearchTrails(app, client)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func bootstrapCategories(app *pocketbase.PocketBase) error {
|
func bootstrapCategories(app core.App) error {
|
||||||
query := app.RecordQuery("categories")
|
query := app.RecordQuery("categories")
|
||||||
records := []*core.Record{}
|
records := []*core.Record{}
|
||||||
|
|
||||||
@@ -705,7 +772,7 @@ func bootstrapCategories(app *pocketbase.PocketBase) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func bootstrapMeilisearchTrails(app *pocketbase.PocketBase, client meilisearch.ServiceManager) error {
|
func bootstrapMeilisearchTrails(app core.App, client meilisearch.ServiceManager) error {
|
||||||
query := app.RecordQuery("trails")
|
query := app.RecordQuery("trails")
|
||||||
trails := []*core.Record{}
|
trails := []*core.Record{}
|
||||||
|
|
||||||
|
|||||||
44
db/migrations/1742172170_updated__superusers.go
Normal file
44
db/migrations/1742172170_updated__superusers.go
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
package migrations
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
|
||||||
|
"github.com/pocketbase/pocketbase/core"
|
||||||
|
m "github.com/pocketbase/pocketbase/migrations"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
m.Register(func(app core.App) error {
|
||||||
|
collection, err := app.FindCollectionByNameOrId("pbc_3142635823")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// update collection data
|
||||||
|
if err := json.Unmarshal([]byte(`{
|
||||||
|
"resetPasswordTemplate": {
|
||||||
|
"body": "<p>Hello,</p>\n<p>Click on the button below to reset your password.</p>\n<p>\n <a class=\"btn\" href=\"{APP_URL}/auth/confirm-reset/{TOKEN}\" target=\"_blank\" rel=\"noopener\">Reset password</a>\n</p>\n<p><i>If you didn't ask to reset your password, you can ignore this email.</i></p>\n<p>\n Thanks,<br/>\n {APP_NAME} team\n</p>"
|
||||||
|
}
|
||||||
|
}`), &collection); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return app.Save(collection)
|
||||||
|
}, func(app core.App) error {
|
||||||
|
collection, err := app.FindCollectionByNameOrId("pbc_3142635823")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// update collection data
|
||||||
|
if err := json.Unmarshal([]byte(`{
|
||||||
|
"resetPasswordTemplate": {
|
||||||
|
"body": "<p>Hello,</p>\n<p>Click on the button below to reset your password.</p>\n<p>\n <a class=\"btn\" href=\"{APP_URL}/_/#/auth/confirm-password-reset/{TOKEN}\" target=\"_blank\" rel=\"noopener\">Reset password</a>\n</p>\n<p><i>If you didn't ask to reset your password, you can ignore this email.</i></p>\n<p>\n Thanks,<br/>\n {APP_NAME} team\n</p>"
|
||||||
|
}
|
||||||
|
}`), &collection); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return app.Save(collection)
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -5,7 +5,6 @@ import (
|
|||||||
"net/mail"
|
"net/mail"
|
||||||
|
|
||||||
"github.com/pocketbase/dbx"
|
"github.com/pocketbase/dbx"
|
||||||
"github.com/pocketbase/pocketbase"
|
|
||||||
"github.com/pocketbase/pocketbase/core"
|
"github.com/pocketbase/pocketbase/core"
|
||||||
"github.com/pocketbase/pocketbase/tools/mailer"
|
"github.com/pocketbase/pocketbase/tools/mailer"
|
||||||
)
|
)
|
||||||
@@ -33,7 +32,7 @@ type NotificationSettings struct {
|
|||||||
Email bool `json:"email"`
|
Email bool `json:"email"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func getNotificationPermissions(app *pocketbase.PocketBase, user string, notificationType NotificationType) (*NotificationSettings, error) {
|
func getNotificationPermissions(app core.App, user string, notificationType NotificationType) (*NotificationSettings, error) {
|
||||||
settings, err := app.FindFirstRecordByFilter("settings", "user={:user}", dbx.Params{"user": user})
|
settings, err := app.FindFirstRecordByFilter("settings", "user={:user}", dbx.Params{"user": user})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -53,7 +52,7 @@ func getNotificationPermissions(app *pocketbase.PocketBase, user string, notific
|
|||||||
return &settingsForType, nil
|
return &settingsForType, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func SendNotification(app *pocketbase.PocketBase, notification Notification, recipient string) error {
|
func SendNotification(app core.App, notification Notification, recipient string) error {
|
||||||
if notification.Author == recipient {
|
if notification.Author == recipient {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -109,7 +108,7 @@ func SendNotification(app *pocketbase.PocketBase, notification Notification, rec
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func SendNotificationToFollowers(app *pocketbase.PocketBase, notification Notification) error {
|
func SendNotificationToFollowers(app core.App, notification Notification) error {
|
||||||
followers, err := app.FindRecordsByFilter("follows", "followee={:user}", "", -1, 0, dbx.Params{"user": notification.Author})
|
followers, err := app.FindRecordsByFilter("follows", "followee={:user}", "", -1, 0, dbx.Params{"user": notification.Author})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { currentUser } from '$lib/stores/user_store';
|
|||||||
|
|
||||||
pb.authStore.loadFromCookie(document.cookie)
|
pb.authStore.loadFromCookie(document.cookie)
|
||||||
pb.authStore.onChange(() => {
|
pb.authStore.onChange(() => {
|
||||||
currentUser.set(pb.authStore.model as User)
|
currentUser.set(pb.authStore.record as User)
|
||||||
const secure = location.protocol === "https:"
|
const secure = location.protocol === "https:"
|
||||||
document.cookie = pb.authStore.exportToCookie({ httpOnly: false, secure: secure, sameSite: "Lax" })
|
document.cookie = pb.authStore.exportToCookie({ httpOnly: false, secure: secure, sameSite: "Lax" })
|
||||||
}, true)
|
}, true)
|
||||||
@@ -56,9 +56,9 @@ const auth: Handle = async ({ event, resolve }) => {
|
|||||||
|
|
||||||
|
|
||||||
// validate the user existence and if the path is acceesible
|
// validate the user existence and if the path is acceesible
|
||||||
if (!pb.authStore.model && isRouteProtected(url.pathname)) {
|
if (!pb.authStore.record && isRouteProtected(url.pathname)) {
|
||||||
throw redirect(302, '/login?r=' + url.pathname);
|
throw redirect(302, '/login?r=' + url.pathname);
|
||||||
} else if (pb.authStore.model && url.pathname === "/login") {
|
} else if (pb.authStore.record && url.pathname === "/login") {
|
||||||
throw redirect(302, '/');
|
throw redirect(302, '/');
|
||||||
} else if (envPub.PUBLIC_DISABLE_SIGNUP === "true" && url.pathname === "/register") {
|
} else if (envPub.PUBLIC_DISABLE_SIGNUP === "true" && url.pathname === "/register") {
|
||||||
throw redirect(302, '/');
|
throw redirect(302, '/');
|
||||||
@@ -76,9 +76,9 @@ const auth: Handle = async ({ event, resolve }) => {
|
|||||||
|
|
||||||
let meiliApiKey: string = "";
|
let meiliApiKey: string = "";
|
||||||
let settings: Settings | undefined;
|
let settings: Settings | undefined;
|
||||||
if (pb.authStore.model) {
|
if (pb.authStore.record) {
|
||||||
meiliApiKey = pb.authStore.model.token
|
meiliApiKey = pb.authStore.record.token
|
||||||
settings = await pb.collection('settings').getFirstListItem<Settings>(`user="${pb.authStore.model.id}"`, { requestKey: null })
|
settings = await pb.collection('settings').getFirstListItem<Settings>(`user="${pb.authStore.record.id}"`, { requestKey: null })
|
||||||
} else {
|
} else {
|
||||||
const r = await event.fetch(pb.buildURL("/public/search/token"));
|
const r = await event.fetch(pb.buildURL("/public/search/token"));
|
||||||
const response = await r.json();
|
const response = await r.json();
|
||||||
@@ -88,15 +88,15 @@ const auth: Handle = async ({ event, resolve }) => {
|
|||||||
|
|
||||||
event.locals.ms = ms
|
event.locals.ms = ms
|
||||||
event.locals.pb = pb
|
event.locals.pb = pb
|
||||||
event.locals.user = pb.authStore.model
|
event.locals.user = pb.authStore.record
|
||||||
event.locals.settings = settings
|
event.locals.settings = settings
|
||||||
|
|
||||||
const lang = settings?.language ?? event.request.headers.get('accept-language')?.split(',')[0]
|
const lang = settings?.language ?? event.request.headers.get('accept-language')?.split(',')[0]
|
||||||
|
|
||||||
if (lang) {
|
if (lang) {
|
||||||
locale.set(lang)
|
locale.set(lang)
|
||||||
if (pb.authStore.model) {
|
if (pb.authStore.record) {
|
||||||
pb.authStore.model!.language = lang;
|
pb.authStore.record!.language = lang;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -108,7 +108,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let user = $derived(browser ? $currentUser : pb.authStore.model);
|
let user = $derived(browser ? $currentUser : pb.authStore.record);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Drawer bind:open={drawerOpen}>
|
<Drawer bind:open={drawerOpen}>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
let showInfo: boolean = $state(false);
|
let showInfo: boolean = $state(false);
|
||||||
let loading: boolean = $state(false);
|
let loading: boolean = $state(false);
|
||||||
let infoLoaded: boolean = $state(false);
|
let infoLoaded: boolean = $state(false);
|
||||||
let subjectIsOwned: boolean = subject.author == pb.authStore.model?.id;
|
let subjectIsOwned: boolean = subject.author == pb.authStore.record?.id;
|
||||||
let author: UserAnonymous | undefined = $state();
|
let author: UserAnonymous | undefined = $state();
|
||||||
|
|
||||||
async function fetchInfo() {
|
async function fetchInfo() {
|
||||||
|
|||||||
@@ -74,13 +74,13 @@
|
|||||||
/>
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
{#if (trail.public || trailIsShared) && pb.authStore.model}
|
{#if (trail.public || trailIsShared) && pb.authStore.record}
|
||||||
<div
|
<div
|
||||||
class="flex absolute top-4 right-4 {trail.public && trailIsShared
|
class="flex absolute top-4 right-4 {trail.public && trailIsShared
|
||||||
? 'w-14'
|
? 'w-14'
|
||||||
: 'w-8'} h-8 rounded-full items-center justify-center bg-background text-content"
|
: 'w-8'} h-8 rounded-full items-center justify-center bg-background text-content"
|
||||||
>
|
>
|
||||||
{#if trail.public && pb.authStore.model}
|
{#if trail.public && pb.authStore.record}
|
||||||
<span
|
<span
|
||||||
class="tooltip"
|
class="tooltip"
|
||||||
class:mr-2={trail.public && trailIsShared}
|
class:mr-2={trail.public && trailIsShared}
|
||||||
|
|||||||
@@ -62,10 +62,10 @@
|
|||||||
]
|
]
|
||||||
: []),
|
: []),
|
||||||
{ text: $_("print"), value: "print", icon: "print" },
|
{ text: $_("print"), value: "print", icon: "print" },
|
||||||
...(trail.author != pb.authStore.model?.id
|
...(trail.author != pb.authStore.record?.id
|
||||||
? []
|
? []
|
||||||
: [{ text: $_("add-to-list"), value: "list", icon: "bookmark" }]),
|
: [{ text: $_("add-to-list"), value: "list", icon: "bookmark" }]),
|
||||||
...(trail.author != pb.authStore.model?.id
|
...(trail.author != pb.authStore.record?.id
|
||||||
? []
|
? []
|
||||||
: [{ text: $_("share"), value: "share", icon: "share" }]),
|
: [{ text: $_("share"), value: "share", icon: "share" }]),
|
||||||
...(allowEdit
|
...(allowEdit
|
||||||
|
|||||||
@@ -169,7 +169,7 @@
|
|||||||
placeholder={`${$_("filter-categories")}...`}
|
placeholder={`${$_("filter-categories")}...`}
|
||||||
></MultiSelect>
|
></MultiSelect>
|
||||||
<hr class="my-4 border-separator" />
|
<hr class="my-4 border-separator" />
|
||||||
{#if pb.authStore.model}
|
{#if pb.authStore.record}
|
||||||
<UserSearch
|
<UserSearch
|
||||||
onclick={(item) => setAuthorFilter(item)}
|
onclick={(item) => setAuthorFilter(item)}
|
||||||
onclear={() => {
|
onclear={() => {
|
||||||
|
|||||||
@@ -62,7 +62,7 @@
|
|||||||
const tabs = [
|
const tabs = [
|
||||||
$_("summit-book"),
|
$_("summit-book"),
|
||||||
$_("photos"),
|
$_("photos"),
|
||||||
...(pb.authStore.model ? [$_("comment", { values: { n: 2 } })] : []),
|
...(pb.authStore.record ? [$_("comment", { values: { n: 2 } })] : []),
|
||||||
];
|
];
|
||||||
|
|
||||||
const trailIsShared =
|
const trailIsShared =
|
||||||
@@ -192,14 +192,14 @@
|
|||||||
<div
|
<div
|
||||||
class="absolute bottom-0 w-full h-full bg-gradient-to-b from-transparent to-black opacity-60"
|
class="absolute bottom-0 w-full h-full bg-gradient-to-b from-transparent to-black opacity-60"
|
||||||
></div>
|
></div>
|
||||||
{#if (trail.public || trailIsShared) && pb.authStore.model}
|
{#if (trail.public || trailIsShared) && pb.authStore.record}
|
||||||
<div
|
<div
|
||||||
class="flex absolute top-6 right-6 {trail.public &&
|
class="flex absolute top-6 right-6 {trail.public &&
|
||||||
trailIsShared
|
trailIsShared
|
||||||
? 'w-16'
|
? 'w-16'
|
||||||
: 'w-8'} h-8 rounded-full items-center justify-center bg-white text-primary"
|
: 'w-8'} h-8 rounded-full items-center justify-center bg-white text-primary"
|
||||||
>
|
>
|
||||||
{#if trail.public && pb.authStore.model}
|
{#if trail.public && pb.authStore.record}
|
||||||
<span
|
<span
|
||||||
class:tooltip={mode != "map"}
|
class:tooltip={mode != "map"}
|
||||||
class:mr-3={trail.public && trailIsShared}
|
class:mr-3={trail.public && trailIsShared}
|
||||||
|
|||||||
@@ -54,7 +54,7 @@
|
|||||||
<h4 class="font-semibold text-lg">
|
<h4 class="font-semibold text-lg">
|
||||||
{trail.name}
|
{trail.name}
|
||||||
</h4>
|
</h4>
|
||||||
{#if trail.public && pb.authStore.model}
|
{#if trail.public && pb.authStore.record}
|
||||||
<span class="tooltip ml-3" data-title={$_("public")}>
|
<span class="tooltip ml-3" data-title={$_("public")}>
|
||||||
<i class="fa fa-globe"></i>
|
<i class="fa fa-globe"></i>
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -18,5 +18,5 @@ register('zh', () => import('./locales/zh.json'))
|
|||||||
|
|
||||||
init({
|
init({
|
||||||
fallbackLocale: defaultLocale,
|
fallbackLocale: defaultLocale,
|
||||||
initialLocale: browser ? pb.authStore.model?.language ?? window.navigator.language : defaultLocale,
|
initialLocale: browser ? pb.authStore.record?.language ?? window.navigator.language : defaultLocale,
|
||||||
})
|
})
|
||||||
@@ -28,11 +28,11 @@ export async function comments_index(trail: Trail) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function comments_create(comment: Comment) {
|
export async function comments_create(comment: Comment) {
|
||||||
if (!pb.authStore.model) {
|
if (!pb.authStore.record) {
|
||||||
throw new Error("Unauthenticated");
|
throw new Error("Unauthenticated");
|
||||||
}
|
}
|
||||||
|
|
||||||
comment.author = pb.authStore.model!.id;
|
comment.author = pb.authStore.record!.id;
|
||||||
|
|
||||||
let r = await fetch('/api/v1/comment', {
|
let r = await fetch('/api/v1/comment', {
|
||||||
method: 'PUT',
|
method: 'PUT',
|
||||||
|
|||||||
@@ -25,11 +25,11 @@ export async function integrations_index(f: (url: RequestInfo | URL, config?: Re
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function integrations_create(integration: Integration) {
|
export async function integrations_create(integration: Integration) {
|
||||||
if (!pb.authStore.model) {
|
if (!pb.authStore.record) {
|
||||||
throw new Error("Unauthenticated");
|
throw new Error("Unauthenticated");
|
||||||
}
|
}
|
||||||
|
|
||||||
integration.user = pb.authStore.model!.id;
|
integration.user = pb.authStore.record!.id;
|
||||||
|
|
||||||
let r = await fetch('/api/v1/integration', {
|
let r = await fetch('/api/v1/integration', {
|
||||||
method: 'PUT',
|
method: 'PUT',
|
||||||
|
|||||||
@@ -121,11 +121,11 @@ export async function lists_show(id: string, f: (url: RequestInfo | URL, config?
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function lists_create(list: List, avatar?: File) {
|
export async function lists_create(list: List, avatar?: File) {
|
||||||
if (!pb.authStore.model) {
|
if (!pb.authStore.record) {
|
||||||
throw new Error("Unauthenticated");
|
throw new Error("Unauthenticated");
|
||||||
}
|
}
|
||||||
|
|
||||||
list.author = pb.authStore.model!.id;
|
list.author = pb.authStore.record!.id;
|
||||||
|
|
||||||
let r = await fetch('/api/v1/list', {
|
let r = await fetch('/api/v1/list', {
|
||||||
method: 'PUT',
|
method: 'PUT',
|
||||||
@@ -241,13 +241,13 @@ function buildFilterText(filter: ListFilter): string {
|
|||||||
if (filter.author?.length) {
|
if (filter.author?.length) {
|
||||||
filterText += `&&author="${filter.author}"`
|
filterText += `&&author="${filter.author}"`
|
||||||
}
|
}
|
||||||
if (pb.authStore.model) {
|
if (pb.authStore.record) {
|
||||||
if (filter.public === false && filter.shared === false) {
|
if (filter.public === false && filter.shared === false) {
|
||||||
filterText += `&&author="${pb.authStore.model.id}"`
|
filterText += `&&author="${pb.authStore.record.id}"`
|
||||||
} else if (filter.public === true && filter.shared === false) {
|
} else if (filter.public === true && filter.shared === false) {
|
||||||
filterText += `&&(public=true||list_share_via_list.user!="${pb.authStore.model.id}"||author="${pb.authStore.model.id}")`
|
filterText += `&&(public=true||list_share_via_list.user!="${pb.authStore.record.id}"||author="${pb.authStore.record.id}")`
|
||||||
} else if (filter.public === false && filter.shared === true) {
|
} else if (filter.public === false && filter.shared === true) {
|
||||||
filterText += `&&(public=false||list_share_via_list.user="${pb.authStore.model.id}"||author="${pb.authStore.model.id}")`
|
filterText += `&&(public=false||list_share_via_list.user="${pb.authStore.record.id}"||author="${pb.authStore.record.id}")`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return filterText
|
return filterText
|
||||||
@@ -268,17 +268,17 @@ function buildSearchFilterText(filter: ListFilter): string {
|
|||||||
if (filter.public !== undefined) {
|
if (filter.public !== undefined) {
|
||||||
filterText += `(public = ${filter.public}`
|
filterText += `(public = ${filter.public}`
|
||||||
|
|
||||||
if (!filter.author?.length || filter.author == pb.authStore.model?.id) {
|
if (!filter.author?.length || filter.author == pb.authStore.record?.id) {
|
||||||
filterText += ` OR author = ${pb.authStore.model?.id}`
|
filterText += ` OR author = ${pb.authStore.record?.id}`
|
||||||
}
|
}
|
||||||
filterText += ")"
|
filterText += ")"
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filter.shared !== undefined) {
|
if (filter.shared !== undefined) {
|
||||||
if (filter.shared === true) {
|
if (filter.shared === true) {
|
||||||
filterText += ` OR shares = ${pb.authStore.model?.id}`
|
filterText += ` OR shares = ${pb.authStore.record?.id}`
|
||||||
} else {
|
} else {
|
||||||
filterText += ` AND NOT shares = ${pb.authStore.model?.id}`
|
filterText += ` AND NOT shares = ${pb.authStore.record?.id}`
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ export async function summit_logs_index(author: string, filter?: SummitLogFilter
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function summit_logs_create(summitLog: SummitLog, f: (url: RequestInfo | URL, config?: RequestInit) => Promise<Response> = fetch) {
|
export async function summit_logs_create(summitLog: SummitLog, f: (url: RequestInfo | URL, config?: RequestInit) => Promise<Response> = fetch) {
|
||||||
summitLog.author = pb.authStore.model!.id
|
summitLog.author = pb.authStore.record!.id
|
||||||
|
|
||||||
let r = await f('/api/v1/summit-log', {
|
let r = await f('/api/v1/summit-log', {
|
||||||
method: 'PUT',
|
method: 'PUT',
|
||||||
@@ -101,7 +101,7 @@ export async function summit_logs_create(summitLog: SummitLog, f: (url: RequestI
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function summit_logs_update(oldSummitLog: SummitLog, newSummitLog: SummitLog) {
|
export async function summit_logs_update(oldSummitLog: SummitLog, newSummitLog: SummitLog) {
|
||||||
newSummitLog.author = pb.authStore.model!.id
|
newSummitLog.author = pb.authStore.record!.id
|
||||||
|
|
||||||
let r = await fetch('/api/v1/summit-log/' + newSummitLog.id, {
|
let r = await fetch('/api/v1/summit-log/' + newSummitLog.id, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ export async function trails_create(trail: Trail, photos: File[], gpx: File | Bl
|
|||||||
trail.summit_logs.push(model.id!);
|
trail.summit_logs.push(model.id!);
|
||||||
}
|
}
|
||||||
|
|
||||||
trail.author = pb.authStore.model!.id
|
trail.author = pb.authStore.record!.id
|
||||||
|
|
||||||
let r = await f(`/api/v1/trail?` + new URLSearchParams({
|
let r = await f(`/api/v1/trail?` + new URLSearchParams({
|
||||||
expand: "category,waypoints,summit_logs,trail_share_via_trail",
|
expand: "category,waypoints,summit_logs,trail_share_via_trail",
|
||||||
@@ -501,17 +501,17 @@ function buildFilterText(filter: TrailFilter, includeGeo: boolean): string {
|
|||||||
if (filter.public !== undefined) {
|
if (filter.public !== undefined) {
|
||||||
filterText += `(public = ${filter.public}`
|
filterText += `(public = ${filter.public}`
|
||||||
|
|
||||||
if (!filter.author?.length || filter.author == pb.authStore.model?.id) {
|
if (!filter.author?.length || filter.author == pb.authStore.record?.id) {
|
||||||
filterText += ` OR author = ${pb.authStore.model?.id}`
|
filterText += ` OR author = ${pb.authStore.record?.id}`
|
||||||
}
|
}
|
||||||
filterText += ")"
|
filterText += ")"
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filter.shared !== undefined) {
|
if (filter.shared !== undefined) {
|
||||||
if (filter.shared === true) {
|
if (filter.shared === true) {
|
||||||
filterText += ` OR shares = ${pb.authStore.model?.id}`
|
filterText += ` OR shares = ${pb.authStore.record?.id}`
|
||||||
} else {
|
} else {
|
||||||
filterText += ` AND NOT shares = ${pb.authStore.model?.id}`
|
filterText += ` AND NOT shares = ${pb.authStore.record?.id}`
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ export async function users_create(user: User) {
|
|||||||
|
|
||||||
export async function users_search(q: string, includeSelf: boolean = true) {
|
export async function users_search(q: string, includeSelf: boolean = true) {
|
||||||
let r = await fetch('/api/v1/user/anonymous?' + new URLSearchParams({
|
let r = await fetch('/api/v1/user/anonymous?' + new URLSearchParams({
|
||||||
"filter": `username~"${q}"${includeSelf ? '' : `&&id!="${pb.authStore.model?.id}"`}`,
|
"filter": `username~"${q}"${includeSelf ? '' : `&&id!="${pb.authStore.record?.id}"`}`,
|
||||||
}), {
|
}), {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
})
|
})
|
||||||
@@ -62,7 +62,7 @@ export async function users_auth_methods(f: (url: RequestInfo | URL, config?: Re
|
|||||||
const response = await r.json();
|
const response = await r.json();
|
||||||
throw new APIError(r.status, response.message, response.detail)
|
throw new APIError(r.status, response.message, response.detail)
|
||||||
}
|
}
|
||||||
return await r.json()
|
return await r.json() as AuthMethodsList
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ export const waypoint: Writable<Waypoint> = writable(new Waypoint(0, 0));
|
|||||||
|
|
||||||
export async function waypoints_create(waypoint: Waypoint, f: (url: RequestInfo | URL, config?: RequestInit) => Promise<Response> = fetch) {
|
export async function waypoints_create(waypoint: Waypoint, f: (url: RequestInfo | URL, config?: RequestInit) => Promise<Response> = fetch) {
|
||||||
|
|
||||||
waypoint.author = pb.authStore.model!.id
|
waypoint.author = pb.authStore.record!.id
|
||||||
|
|
||||||
let r = await f('/api/v1/waypoint', {
|
let r = await f('/api/v1/waypoint', {
|
||||||
method: 'PUT',
|
method: 'PUT',
|
||||||
@@ -45,7 +45,7 @@ export async function waypoints_create(waypoint: Waypoint, f: (url: RequestInfo
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function waypoints_update(oldWaypoint: Waypoint, newWaypoint: Waypoint) {
|
export async function waypoints_update(oldWaypoint: Waypoint, newWaypoint: Waypoint) {
|
||||||
newWaypoint.author = pb.authStore.model!.id
|
newWaypoint.author = pb.authStore.record!.id
|
||||||
|
|
||||||
let r = await fetch('/api/v1/waypoint/' + newWaypoint.id, {
|
let r = await fetch('/api/v1/waypoint/' + newWaypoint.id, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
|
|||||||
@@ -12,10 +12,10 @@ export async function GET(event: RequestEvent) {
|
|||||||
try {
|
try {
|
||||||
const r = await pb.collection('users').listAuthMethods();
|
const r = await pb.collection('users').listAuthMethods();
|
||||||
|
|
||||||
for (const provider of r.authProviders) {
|
for (const provider of r.oauth2.providers) {
|
||||||
const imageURL = `${env.PUBLIC_POCKETBASE_URL}/_/images/oauth2/${provider.name}.svg`
|
const imageURL = `${env.PUBLIC_POCKETBASE_URL}/_/images/oauth2/${provider.name}.svg`
|
||||||
provider['img' as keyof typeof provider] = await imageUrlToBase64(imageURL, event.fetch);
|
provider['img' as keyof typeof provider] = await imageUrlToBase64(imageURL, event.fetch);
|
||||||
provider['url' as keyof typeof provider] = `${provider.authUrl}${redirectURL}`
|
provider['url' as keyof typeof provider] = `${provider.authURL}${redirectURL}`
|
||||||
}
|
}
|
||||||
return json(r)
|
return json(r)
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ export async function GET(event: RequestEvent) {
|
|||||||
parts.push(encodeURIComponent(safeParams.data.record));
|
parts.push(encodeURIComponent(safeParams.data.record));
|
||||||
parts.push(encodeURIComponent(safeParams.data.file));
|
parts.push(encodeURIComponent(safeParams.data.file));
|
||||||
|
|
||||||
let fileURL = pb.buildUrl(parts.join("/"));
|
let fileURL = pb.buildURL(parts.join("/"));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const r = await event.fetch(fileURL)
|
const r = await event.fetch(fileURL)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ export async function GET(event: RequestEvent) {
|
|||||||
try {
|
try {
|
||||||
const r = await list<List>(event, Collection.lists);
|
const r = await list<List>(event, Collection.lists);
|
||||||
for (const t of r.items) {
|
for (const t of r.items) {
|
||||||
if (!t.author || !pb.authStore.model) {
|
if (!t.author || !pb.authStore.record) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!t.expand) {
|
if (!t.expand) {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ export async function GET(event: RequestEvent) {
|
|||||||
const r = await list<SummitLog>(event, Collection.summit_logs);
|
const r = await list<SummitLog>(event, Collection.summit_logs);
|
||||||
|
|
||||||
for (const t of r.items) {
|
for (const t of r.items) {
|
||||||
if (!t.author || !pb.authStore.model) {
|
if (!t.author || !pb.authStore.record) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!t.expand) {
|
if (!t.expand) {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ export async function GET(event: RequestEvent) {
|
|||||||
const r = await list<Trail>(event, Collection.trails);
|
const r = await list<Trail>(event, Collection.trails);
|
||||||
|
|
||||||
for (const t of r.items) {
|
for (const t of r.items) {
|
||||||
if (!t.author || !pb.authStore.model) {
|
if (!t.author || !pb.authStore.record) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!t.expand) {
|
if (!t.expand) {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ export async function GET(event: RequestEvent) {
|
|||||||
try {
|
try {
|
||||||
const r = await show<Trail>(event, Collection.trails)
|
const r = await show<Trail>(event, Collection.trails)
|
||||||
|
|
||||||
if (pb.authStore.model) {
|
if (pb.authStore.record) {
|
||||||
if (!r.expand) {
|
if (!r.expand) {
|
||||||
r.expand = {} as any
|
r.expand = {} as any
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { handleError } from '$lib/util/api_util';
|
|||||||
import { error, json, type RequestEvent } from '@sveltejs/kit';
|
import { error, json, type RequestEvent } from '@sveltejs/kit';
|
||||||
|
|
||||||
export async function GET(event: RequestEvent) {
|
export async function GET(event: RequestEvent) {
|
||||||
if (!pb.authStore.model) {
|
if (!pb.authStore.record) {
|
||||||
return json({
|
return json({
|
||||||
max_lat: 0,
|
max_lat: 0,
|
||||||
min_lat: 0,
|
min_lat: 0,
|
||||||
@@ -13,7 +13,7 @@ export async function GET(event: RequestEvent) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const r = await pb.collection('trails_bounding_box').getOne<TrailBoundingBox>(pb.authStore.model!.id)
|
const r = await pb.collection('trails_bounding_box').getOne<TrailBoundingBox>(pb.authStore.record!.id)
|
||||||
return json(r)
|
return json(r)
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
throw handleError(e);
|
throw handleError(e);
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { handleError } from '$lib/util/api_util';
|
|||||||
import { error, json, type RequestEvent } from '@sveltejs/kit';
|
import { error, json, type RequestEvent } from '@sveltejs/kit';
|
||||||
|
|
||||||
export async function GET(event: RequestEvent) {
|
export async function GET(event: RequestEvent) {
|
||||||
if (!pb.authStore.model) {
|
if (!pb.authStore.record) {
|
||||||
return json({
|
return json({
|
||||||
min_distance: 0,
|
min_distance: 0,
|
||||||
max_distance: 20000,
|
max_distance: 20000,
|
||||||
@@ -15,7 +15,7 @@ export async function GET(event: RequestEvent) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const r = await pb.collection('trails_filter').getOne<TrailFilterValues>(pb.authStore.model!.id)
|
const r = await pb.collection('trails_filter').getOne<TrailFilterValues>(pb.authStore.record!.id)
|
||||||
return json(r)
|
return json(r)
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
throw handleError(e);
|
throw handleError(e);
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ export async function GET(event: RequestEvent) {
|
|||||||
const searchParams = Object.fromEntries(event.url.searchParams);
|
const searchParams = Object.fromEntries(event.url.searchParams);
|
||||||
const safeSearchParams = TrailRecommendSchema.parse(searchParams);
|
const safeSearchParams = TrailRecommendSchema.parse(searchParams);
|
||||||
|
|
||||||
const r = await event.fetch(pb.buildUrl("/trail/recommend?" + new URLSearchParams({
|
const r = await event.fetch(pb.buildURL("/trail/recommend?" + new URLSearchParams({
|
||||||
size: safeSearchParams.size?.toString() ?? ""
|
size: safeSearchParams.size?.toString() ?? ""
|
||||||
})));
|
})));
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@ export async function GET(event: RequestEvent) {
|
|||||||
const result: Trail[] = await r.json();
|
const result: Trail[] = await r.json();
|
||||||
|
|
||||||
for (const t of result) {
|
for (const t of result) {
|
||||||
if (!t.author || !pb.authStore.model) {
|
if (!t.author || !pb.authStore.record) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!t.expand) {
|
if (!t.expand) {
|
||||||
|
|||||||
@@ -23,9 +23,9 @@ export async function POST(event: RequestEvent) {
|
|||||||
|
|
||||||
const safeData = UserUpdateSchema.parse(data);
|
const safeData = UserUpdateSchema.parse(data);
|
||||||
|
|
||||||
if (safeData.email && safeData.email != pb.authStore.model!.email) {
|
if (safeData.email && safeData.email != pb.authStore.record!.email) {
|
||||||
const r = await pb.collection('users').requestEmailChange(safeData.email);
|
const r = await pb.collection('users').requestEmailChange(safeData.email);
|
||||||
pb.authStore.model!.email = safeData.email;
|
pb.authStore.record!.email = safeData.email;
|
||||||
}
|
}
|
||||||
const r = await pb.collection('users').update<User>(safeParams.id, safeData)
|
const r = await pb.collection('users').update<User>(safeParams.id, safeData)
|
||||||
if (safeData.password) {
|
if (safeData.password) {
|
||||||
|
|||||||
@@ -15,21 +15,19 @@
|
|||||||
import { type AuthProviderInfo } from "pocketbase";
|
import { type AuthProviderInfo } from "pocketbase";
|
||||||
import { _ } from "svelte-i18n";
|
import { _ } from "svelte-i18n";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
import type { PageProps } from "./$types";
|
||||||
|
|
||||||
let loading: boolean = $state(false);
|
let loading: boolean = $state(false);
|
||||||
|
|
||||||
const authProviders = page.data.authMethods.authProviders;
|
let { data: pageData }: PageProps = $props();
|
||||||
|
|
||||||
|
const authProviders = pageData.authMethods.oauth2.providers;
|
||||||
let loginLabel = $state("");
|
let loginLabel = $state("");
|
||||||
|
|
||||||
if (
|
if (pageData.authMethods.password) {
|
||||||
page.data.authMethods.usernamePassword &&
|
loginLabel = `${$_("username")}/${$_("email")}`;
|
||||||
page.data.authMethods.emailPassword
|
}else if (pageData.authMethods.password) {
|
||||||
) {
|
|
||||||
loginLabel = `${$_("username")}/${$_("email")}`;
|
loginLabel = `${$_("username")}/${$_("email")}`;
|
||||||
} else if (page.data.authMethods.usernamePassword) {
|
|
||||||
loginLabel = `${$_("username")}`;
|
|
||||||
} else if (page.data.authMethods.emailPassword) {
|
|
||||||
loginLabel = `${$_("email")}`;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const { form, errors, data } = createForm<User>({
|
const { form, errors, data } = createForm<User>({
|
||||||
@@ -100,7 +98,7 @@
|
|||||||
<LogoTextTwoLineLight></LogoTextTwoLineLight>
|
<LogoTextTwoLineLight></LogoTextTwoLineLight>
|
||||||
{/if}
|
{/if}
|
||||||
<h4 class="text-xl font-semibold">{$_("slogan")}</h4>
|
<h4 class="text-xl font-semibold">{$_("slogan")}</h4>
|
||||||
{#if page.data.authMethods.usernamePassword || page.data.authMethods.emailPassword}
|
{#if page.data.authMethods.password}
|
||||||
<div class="space-y-6 w-80">
|
<div class="space-y-6 w-80">
|
||||||
<TextField
|
<TextField
|
||||||
name="username"
|
name="username"
|
||||||
@@ -147,13 +145,13 @@
|
|||||||
<div class="w-80 space-y-4">
|
<div class="w-80 space-y-4">
|
||||||
{#each authProviders as provider}
|
{#each authProviders as provider}
|
||||||
<a
|
<a
|
||||||
href={provider.url}
|
href={(provider as any).url}
|
||||||
class="btn-secondary inline-flex min-w-full justify-center"
|
class="btn-secondary inline-flex min-w-full justify-center"
|
||||||
onclick={() => setProvider(provider)}
|
onclick={() => setProvider(provider)}
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
class="w-5 aspect-square mr-4"
|
class="w-5 aspect-square mr-4"
|
||||||
src={provider.img}
|
src={(provider as any).img}
|
||||||
alt="Provider logo"
|
alt="Provider logo"
|
||||||
/>
|
/>
|
||||||
Login with {provider.displayName}
|
Login with {provider.displayName}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ export const load: Load = async ({ params, fetch }) => {
|
|||||||
return error(400, "Bad Request")
|
return error(400, "Bad Request")
|
||||||
}
|
}
|
||||||
const categories = await categories_index(fetch)
|
const categories = await categories_index(fetch)
|
||||||
const lists = await lists_index({ q: "", author: pb.authStore.model?.id ?? "" }, 1, -1, fetch)
|
const lists = await lists_index({ q: "", author: pb.authStore.record?.id ?? "" }, 1, -1, fetch)
|
||||||
|
|
||||||
let trail: Trail;
|
let trail: Trail;
|
||||||
if (params.id === "new") {
|
if (params.id === "new") {
|
||||||
|
|||||||
Reference in New Issue
Block a user