Update goext to v0.0.291
This commit is contained in:
parent
51f5f1005a
commit
9f3e183d72
@ -10,12 +10,17 @@ HASH=$(shell git rev-parse HEAD)
|
|||||||
SWAGGO_VERSION=v1.8.12
|
SWAGGO_VERSION=v1.8.12
|
||||||
SWAGGO=github.com/swaggo/swag/cmd/swag@$(SWAGGO_VERSION)
|
SWAGGO=github.com/swaggo/swag/cmd/swag@$(SWAGGO_VERSION)
|
||||||
|
|
||||||
build: swagger pygmentize fmt
|
build: ids enums swagger pygmentize fmt
|
||||||
mkdir -p _build
|
mkdir -p _build
|
||||||
rm -f ./_build/scn_backend
|
rm -f ./_build/scn_backend
|
||||||
go generate ./...
|
|
||||||
CGO_ENABLED=1 go build -v -o _build/scn_backend -tags "timetzdata sqlite_fts5 sqlite_foreign_keys" ./cmd/scnserver
|
CGO_ENABLED=1 go build -v -o _build/scn_backend -tags "timetzdata sqlite_fts5 sqlite_foreign_keys" ./cmd/scnserver
|
||||||
|
|
||||||
|
enums:
|
||||||
|
go generate models/enums.go
|
||||||
|
|
||||||
|
ids:
|
||||||
|
go generate models/ids.go
|
||||||
|
|
||||||
run: build
|
run: build
|
||||||
mkdir -p .run-data
|
mkdir -p .run-data
|
||||||
_build/scn_backend
|
_build/scn_backend
|
||||||
|
20
scnserver/_gen/id-generate.go
Normal file
20
scnserver/_gen/id-generate.go
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"gogs.mikescher.com/BlackForestBytes/goext/bfcodegen"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
dest := os.Args[2]
|
||||||
|
|
||||||
|
wd, err := os.Getwd()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = bfcodegen.GenerateCharsetIDSpecs(wd, dest)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
@ -4,20 +4,20 @@ go 1.19
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/gin-gonic/gin v1.9.1
|
github.com/gin-gonic/gin v1.9.1
|
||||||
github.com/go-playground/validator/v10 v10.14.1
|
github.com/go-playground/validator/v10 v10.15.5
|
||||||
github.com/go-sql-driver/mysql v1.7.1
|
github.com/go-sql-driver/mysql v1.7.1
|
||||||
github.com/jmoiron/sqlx v1.3.5
|
github.com/jmoiron/sqlx v1.3.5
|
||||||
github.com/mattn/go-sqlite3 v1.14.17
|
github.com/mattn/go-sqlite3 v1.14.17
|
||||||
github.com/rs/zerolog v1.29.1
|
github.com/rs/zerolog v1.31.0
|
||||||
gogs.mikescher.com/BlackForestBytes/goext v0.0.218
|
gogs.mikescher.com/BlackForestBytes/goext v0.0.291
|
||||||
gopkg.in/loremipsum.v1 v1.1.2
|
gopkg.in/loremipsum.v1 v1.1.2
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/bytedance/sonic v1.10.0-rc3 // indirect
|
github.com/bytedance/sonic v1.10.2 // indirect
|
||||||
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect
|
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect
|
||||||
github.com/chenzhuoyu/iasm v0.9.0 // indirect
|
github.com/chenzhuoyu/iasm v0.9.0 // indirect
|
||||||
github.com/gabriel-vasile/mimetype v1.4.2 // indirect
|
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
|
||||||
github.com/gin-contrib/sse v0.1.0 // indirect
|
github.com/gin-contrib/sse v0.1.0 // indirect
|
||||||
github.com/go-playground/locales v0.14.1 // indirect
|
github.com/go-playground/locales v0.14.1 // indirect
|
||||||
github.com/go-playground/universal-translator v0.18.1 // indirect
|
github.com/go-playground/universal-translator v0.18.1 // indirect
|
||||||
@ -27,18 +27,20 @@ require (
|
|||||||
github.com/klauspost/cpuid/v2 v2.2.5 // indirect
|
github.com/klauspost/cpuid/v2 v2.2.5 // indirect
|
||||||
github.com/leodido/go-urn v1.2.4 // indirect
|
github.com/leodido/go-urn v1.2.4 // 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.19 // indirect
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||||
github.com/pelletier/go-toml/v2 v2.0.9 // indirect
|
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
|
||||||
|
github.com/rs/xid v1.5.0 // indirect
|
||||||
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
|
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
|
||||||
github.com/ugorji/go/codec v1.2.11 // indirect
|
github.com/ugorji/go/codec v1.2.11 // indirect
|
||||||
golang.org/x/arch v0.4.0 // indirect
|
go.mongodb.org/mongo-driver v1.12.1 // indirect
|
||||||
golang.org/x/crypto v0.11.0 // indirect
|
golang.org/x/arch v0.5.0 // indirect
|
||||||
golang.org/x/net v0.12.0 // indirect
|
golang.org/x/crypto v0.14.0 // indirect
|
||||||
golang.org/x/sys v0.10.0 // indirect
|
golang.org/x/net v0.17.0 // indirect
|
||||||
golang.org/x/term v0.10.0 // indirect
|
golang.org/x/sys v0.13.0 // indirect
|
||||||
golang.org/x/text v0.11.0 // indirect
|
golang.org/x/term v0.13.0 // indirect
|
||||||
|
golang.org/x/text v0.13.0 // indirect
|
||||||
google.golang.org/protobuf v1.31.0 // indirect
|
google.golang.org/protobuf v1.31.0 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
)
|
)
|
||||||
|
126
scnserver/go.sum
126
scnserver/go.sum
@ -1,11 +1,8 @@
|
|||||||
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
|
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
|
||||||
github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s=
|
|
||||||
github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
|
|
||||||
github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM=
|
github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM=
|
||||||
github.com/bytedance/sonic v1.10.0-rc3 h1:uNSnscRapXTwUgTyOF0GVljYD08p9X/Lbr9MweSV3V0=
|
github.com/bytedance/sonic v1.10.2 h1:GQebETVBxYB7JGWJtLBi07OVzWwt+8dWA00gEVW2ZFE=
|
||||||
github.com/bytedance/sonic v1.10.0-rc3/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4=
|
github.com/bytedance/sonic v1.10.2/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4=
|
||||||
github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
|
github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
|
||||||
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams=
|
|
||||||
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
|
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
|
||||||
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d h1:77cEq6EriyTZ0g/qfRdp61a3Uu/AWrgIq2s0ClJV1g0=
|
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d h1:77cEq6EriyTZ0g/qfRdp61a3Uu/AWrgIq2s0ClJV1g0=
|
||||||
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d/go.mod h1:8EPpVsBuRksnlj1mLy4AWzRNQYxauNi62uWcE3to6eA=
|
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d/go.mod h1:8EPpVsBuRksnlj1mLy4AWzRNQYxauNi62uWcE3to6eA=
|
||||||
@ -15,8 +12,8 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV
|
|||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=
|
github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
|
||||||
github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=
|
github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
|
||||||
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
|
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
|
||||||
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
|
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
|
||||||
github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
|
github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
|
||||||
@ -26,8 +23,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o
|
|||||||
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
|
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
|
||||||
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
|
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
|
||||||
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
|
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
|
||||||
github.com/go-playground/validator/v10 v10.14.1 h1:9c50NUPC30zyuKprjL3vNZ0m5oG+jU0zvx4AqHGnv4k=
|
github.com/go-playground/validator/v10 v10.15.5 h1:LEBecTWb/1j5TNY1YYG2RcOUN3R7NLylN+x8TTueE24=
|
||||||
github.com/go-playground/validator/v10 v10.14.1/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
|
github.com/go-playground/validator/v10 v10.15.5/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
|
||||||
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
||||||
github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
|
github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
|
||||||
github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
|
github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
|
||||||
@ -35,6 +32,8 @@ github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
|
|||||||
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||||
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
||||||
|
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||||
|
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
|
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
|
||||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||||
@ -43,6 +42,7 @@ github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g=
|
|||||||
github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ=
|
github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ=
|
||||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||||
|
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
||||||
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
||||||
github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg=
|
github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg=
|
||||||
github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
|
github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
|
||||||
@ -51,13 +51,12 @@ github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
|
|||||||
github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
|
github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
|
||||||
github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0=
|
github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0=
|
||||||
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||||
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
|
|
||||||
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
||||||
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
||||||
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
|
|
||||||
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.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
|
|
||||||
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
|
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-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
||||||
github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM=
|
github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM=
|
||||||
github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
|
github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
|
||||||
@ -66,16 +65,16 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w
|
|||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
||||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||||
github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ=
|
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
|
||||||
github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4=
|
github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4=
|
||||||
github.com/pelletier/go-toml/v2 v2.0.9 h1:uH2qQXheeefCCkuBBSLi7jCiSmj3VRh2+Goq2N7Xxu0=
|
github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
|
||||||
github.com/pelletier/go-toml/v2 v2.0.9/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
|
|
||||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
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/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
|
github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc=
|
||||||
github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc=
|
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
|
||||||
github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU=
|
github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A=
|
||||||
|
github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||||
@ -85,55 +84,68 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
|
|||||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||||
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||||
github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
|
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
||||||
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
|
||||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||||
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
|
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
|
||||||
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
|
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
|
||||||
github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=
|
github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=
|
||||||
github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
|
github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
|
||||||
gogs.mikescher.com/BlackForestBytes/goext v0.0.163 h1:GYC34wLOdBM/CgAov0AyznfHGd09Km106Ijmp8cZmp4=
|
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
|
||||||
gogs.mikescher.com/BlackForestBytes/goext v0.0.163/go.mod h1:Tood+vqmPqS/meYRnUcGz837wqHkP8BykVpY1h8TWoI=
|
github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4=
|
||||||
gogs.mikescher.com/BlackForestBytes/goext v0.0.216 h1:cr28oRYNBMNohRyjb0nHNZg0OLE/NVq82zbkVYuNS1M=
|
github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM=
|
||||||
gogs.mikescher.com/BlackForestBytes/goext v0.0.216/go.mod h1:eBL+dE41RaoQw38oLVzxSxLPsFq6sGFug7o3i7Br+SY=
|
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
|
||||||
gogs.mikescher.com/BlackForestBytes/goext v0.0.217 h1:Z0vLwOgCzVi3nJLriPRBtFTyXhC9KjeAmk2DqvT7gPM=
|
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||||
gogs.mikescher.com/BlackForestBytes/goext v0.0.217/go.mod h1:eBL+dE41RaoQw38oLVzxSxLPsFq6sGFug7o3i7Br+SY=
|
go.mongodb.org/mongo-driver v1.12.1 h1:nLkghSU8fQNaK7oUmDhQFsnrtcoNy7Z6LVFKsEecqgE=
|
||||||
gogs.mikescher.com/BlackForestBytes/goext v0.0.218 h1:ly69FPNGqcTc1o6Qf+P6HpHtKmOxG1/fWLj/Aqzi5Rg=
|
go.mongodb.org/mongo-driver v1.12.1/go.mod h1:/rGBTebI3XYboVmgz+Wv3Bcbl3aD0QF9zl6kDDw18rQ=
|
||||||
gogs.mikescher.com/BlackForestBytes/goext v0.0.218/go.mod h1:eBL+dE41RaoQw38oLVzxSxLPsFq6sGFug7o3i7Br+SY=
|
gogs.mikescher.com/BlackForestBytes/goext v0.0.291 h1:yiRHw8wV9LEZUKljvQ2MBHgeSAI6ZzajDS+FJRGnzVc=
|
||||||
|
gogs.mikescher.com/BlackForestBytes/goext v0.0.291/go.mod h1:TtMY+/pv09fOldLO3noZ6Yfcy9KU9MjVQ0KQ9nraTeI=
|
||||||
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
|
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
|
||||||
golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k=
|
golang.org/x/arch v0.5.0 h1:jpGode6huXQxcskEIpOCvrU+tzo81b6+oFLUYXWtH/Y=
|
||||||
golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
|
golang.org/x/arch v0.5.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
|
||||||
golang.org/x/arch v0.4.0 h1:A8WCeEWhLwPBKNbFi5Wv5UTCBx5zzubnXDlMOFAzFMc=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/arch v0.4.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM=
|
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I=
|
golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
|
||||||
golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA=
|
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
|
||||||
golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50=
|
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
|
||||||
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
|
||||||
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s=
|
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
|
||||||
golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA=
|
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo=
|
golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek=
|
||||||
golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c=
|
golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
|
||||||
golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
||||||
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
|
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
|
||||||
|
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||||
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
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/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=
|
||||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||||
google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
|
|
||||||
google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
|
||||||
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
|
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
|
||||||
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||||
|
3
scnserver/models/enums.go
Normal file
3
scnserver/models/enums.go
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
package models
|
||||||
|
|
||||||
|
//go:generate go run ../_gen/enum-generate.go -- enums_gen.go
|
@ -3,31 +3,9 @@
|
|||||||
package models
|
package models
|
||||||
|
|
||||||
import "gogs.mikescher.com/BlackForestBytes/goext/langext"
|
import "gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||||
|
import "gogs.mikescher.com/BlackForestBytes/goext/enums"
|
||||||
|
|
||||||
const ChecksumGenerator = "38908fc9adc16eb3a1266e4bca06e50ebc8613c5d3c9a4fea39314115f66544e"
|
const ChecksumEnumGenerator = "8926e4a9845e67086109bef7ca447371ab5c0a94fcfd988f14fd4ee98da9e932" // GoExtVersion: 0.0.291
|
||||||
|
|
||||||
type Enum interface {
|
|
||||||
Valid() bool
|
|
||||||
ValuesAny() []any
|
|
||||||
ValuesMeta() []EnumMetaValue
|
|
||||||
VarName() string
|
|
||||||
}
|
|
||||||
|
|
||||||
type StringEnum interface {
|
|
||||||
Enum
|
|
||||||
String() string
|
|
||||||
}
|
|
||||||
|
|
||||||
type DescriptionEnum interface {
|
|
||||||
Enum
|
|
||||||
Description() string
|
|
||||||
}
|
|
||||||
|
|
||||||
type EnumMetaValue struct {
|
|
||||||
VarName string `json:"varName"`
|
|
||||||
Value any `json:"value"`
|
|
||||||
Description *string `json:"description"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// ================================ ClientType ================================
|
// ================================ ClientType ================================
|
||||||
//
|
//
|
||||||
@ -58,7 +36,7 @@ func (e ClientType) ValuesAny() []any {
|
|||||||
return langext.ArrCastToAny(__ClientTypeValues)
|
return langext.ArrCastToAny(__ClientTypeValues)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e ClientType) ValuesMeta() []EnumMetaValue {
|
func (e ClientType) ValuesMeta() []enums.EnumMetaValue {
|
||||||
return ClientTypeValuesMeta()
|
return ClientTypeValuesMeta()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,8 +51,8 @@ func (e ClientType) VarName() string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e ClientType) Meta() EnumMetaValue {
|
func (e ClientType) Meta() enums.EnumMetaValue {
|
||||||
return EnumMetaValue{VarName: e.VarName(), Value: e, Description: nil}
|
return enums.EnumMetaValue{VarName: e.VarName(), Value: e, Description: nil}
|
||||||
}
|
}
|
||||||
|
|
||||||
func ParseClientType(vv string) (ClientType, bool) {
|
func ParseClientType(vv string) (ClientType, bool) {
|
||||||
@ -90,8 +68,8 @@ func ClientTypeValues() []ClientType {
|
|||||||
return __ClientTypeValues
|
return __ClientTypeValues
|
||||||
}
|
}
|
||||||
|
|
||||||
func ClientTypeValuesMeta() []EnumMetaValue {
|
func ClientTypeValuesMeta() []enums.EnumMetaValue {
|
||||||
return []EnumMetaValue{
|
return []enums.EnumMetaValue{
|
||||||
ClientTypeAndroid.Meta(),
|
ClientTypeAndroid.Meta(),
|
||||||
ClientTypeIOS.Meta(),
|
ClientTypeIOS.Meta(),
|
||||||
}
|
}
|
||||||
@ -128,7 +106,7 @@ func (e DeliveryStatus) ValuesAny() []any {
|
|||||||
return langext.ArrCastToAny(__DeliveryStatusValues)
|
return langext.ArrCastToAny(__DeliveryStatusValues)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e DeliveryStatus) ValuesMeta() []EnumMetaValue {
|
func (e DeliveryStatus) ValuesMeta() []enums.EnumMetaValue {
|
||||||
return DeliveryStatusValuesMeta()
|
return DeliveryStatusValuesMeta()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,8 +121,8 @@ func (e DeliveryStatus) VarName() string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e DeliveryStatus) Meta() EnumMetaValue {
|
func (e DeliveryStatus) Meta() enums.EnumMetaValue {
|
||||||
return EnumMetaValue{VarName: e.VarName(), Value: e, Description: nil}
|
return enums.EnumMetaValue{VarName: e.VarName(), Value: e, Description: nil}
|
||||||
}
|
}
|
||||||
|
|
||||||
func ParseDeliveryStatus(vv string) (DeliveryStatus, bool) {
|
func ParseDeliveryStatus(vv string) (DeliveryStatus, bool) {
|
||||||
@ -160,8 +138,8 @@ func DeliveryStatusValues() []DeliveryStatus {
|
|||||||
return __DeliveryStatusValues
|
return __DeliveryStatusValues
|
||||||
}
|
}
|
||||||
|
|
||||||
func DeliveryStatusValuesMeta() []EnumMetaValue {
|
func DeliveryStatusValuesMeta() []enums.EnumMetaValue {
|
||||||
return []EnumMetaValue{
|
return []enums.EnumMetaValue{
|
||||||
DeliveryStatusRetry.Meta(),
|
DeliveryStatusRetry.Meta(),
|
||||||
DeliveryStatusSuccess.Meta(),
|
DeliveryStatusSuccess.Meta(),
|
||||||
DeliveryStatusFailed.Meta(),
|
DeliveryStatusFailed.Meta(),
|
||||||
@ -208,7 +186,7 @@ func (e TokenPerm) ValuesAny() []any {
|
|||||||
return langext.ArrCastToAny(__TokenPermValues)
|
return langext.ArrCastToAny(__TokenPermValues)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e TokenPerm) ValuesMeta() []EnumMetaValue {
|
func (e TokenPerm) ValuesMeta() []enums.EnumMetaValue {
|
||||||
return TokenPermValuesMeta()
|
return TokenPermValuesMeta()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,8 +208,8 @@ func (e TokenPerm) VarName() string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e TokenPerm) Meta() EnumMetaValue {
|
func (e TokenPerm) Meta() enums.EnumMetaValue {
|
||||||
return EnumMetaValue{VarName: e.VarName(), Value: e, Description: langext.Ptr(e.Description())}
|
return enums.EnumMetaValue{VarName: e.VarName(), Value: e, Description: langext.Ptr(e.Description())}
|
||||||
}
|
}
|
||||||
|
|
||||||
func ParseTokenPerm(vv string) (TokenPerm, bool) {
|
func ParseTokenPerm(vv string) (TokenPerm, bool) {
|
||||||
@ -247,8 +225,8 @@ func TokenPermValues() []TokenPerm {
|
|||||||
return __TokenPermValues
|
return __TokenPermValues
|
||||||
}
|
}
|
||||||
|
|
||||||
func TokenPermValuesMeta() []EnumMetaValue {
|
func TokenPermValuesMeta() []enums.EnumMetaValue {
|
||||||
return []EnumMetaValue{
|
return []enums.EnumMetaValue{
|
||||||
PermAdmin.Meta(),
|
PermAdmin.Meta(),
|
||||||
PermChannelRead.Meta(),
|
PermChannelRead.Meta(),
|
||||||
PermChannelSend.Meta(),
|
PermChannelSend.Meta(),
|
||||||
|
@ -1,19 +1,11 @@
|
|||||||
package models
|
package models
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/rand"
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"github.com/go-playground/validator/v10"
|
|
||||||
"github.com/rs/zerolog/log"
|
|
||||||
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
|
||||||
"gogs.mikescher.com/BlackForestBytes/goext/rext"
|
"gogs.mikescher.com/BlackForestBytes/goext/rext"
|
||||||
"math/big"
|
|
||||||
"reflect"
|
|
||||||
"regexp"
|
|
||||||
"strings"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//go:generate go run ../_gen/id-generate.go -- ids_gen.go
|
||||||
|
|
||||||
type EntityID interface {
|
type EntityID interface {
|
||||||
String() string
|
String() string
|
||||||
Valid() error
|
Valid() error
|
||||||
@ -23,389 +15,11 @@ type EntityID interface {
|
|||||||
Regex() rext.Regex
|
Regex() rext.Regex
|
||||||
}
|
}
|
||||||
|
|
||||||
const idlen = 24
|
type UserID string //@csid:type [USR]
|
||||||
|
type ChannelID string //@csid:type [CHA]
|
||||||
const checklen = 1
|
type DeliveryID string //@csid:type [DEL]
|
||||||
|
type MessageID string //@csid:type [MSG]
|
||||||
const idCharset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
|
type SubscriptionID string //@csid:type [SUB]
|
||||||
const idCharsetLen = len(idCharset)
|
type ClientID string //@csid:type [CLN]
|
||||||
|
type RequestID string //@csid:type [REQ]
|
||||||
var charSetReverseMap = generateCharsetMap()
|
type KeyTokenID string //@csid:type [TOK]
|
||||||
|
|
||||||
const (
|
|
||||||
prefixUserID = "USR"
|
|
||||||
prefixChannelID = "CHA"
|
|
||||||
prefixDeliveryID = "DEL"
|
|
||||||
prefixMessageID = "MSG"
|
|
||||||
prefixSubscriptionID = "SUB"
|
|
||||||
prefixClientID = "CLN"
|
|
||||||
prefixRequestID = "REQ"
|
|
||||||
prefixKeyTokenID = "TOK"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
regexUserID = generateRegex(prefixUserID)
|
|
||||||
regexChannelID = generateRegex(prefixChannelID)
|
|
||||||
regexDeliveryID = generateRegex(prefixDeliveryID)
|
|
||||||
regexMessageID = generateRegex(prefixMessageID)
|
|
||||||
regexSubscriptionID = generateRegex(prefixSubscriptionID)
|
|
||||||
regexClientID = generateRegex(prefixClientID)
|
|
||||||
regexRequestID = generateRegex(prefixRequestID)
|
|
||||||
regexKeyTokenID = generateRegex(prefixKeyTokenID)
|
|
||||||
)
|
|
||||||
|
|
||||||
func generateRegex(prefix string) rext.Regex {
|
|
||||||
return rext.W(regexp.MustCompile(fmt.Sprintf("^%s[%s]{%d}[%s]{%d}$", prefix, idCharset, idlen-len(prefix)-checklen, idCharset, checklen)))
|
|
||||||
}
|
|
||||||
|
|
||||||
func generateCharsetMap() []int {
|
|
||||||
result := make([]int, 128)
|
|
||||||
for i := 0; i < len(result); i++ {
|
|
||||||
result[i] = -1
|
|
||||||
}
|
|
||||||
for idx, chr := range idCharset {
|
|
||||||
result[int(chr)] = idx
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
func generateID(prefix string) string {
|
|
||||||
k := ""
|
|
||||||
max := big.NewInt(int64(idCharsetLen))
|
|
||||||
checksum := 0
|
|
||||||
for i := 0; i < idlen-len(prefix)-checklen; i++ {
|
|
||||||
v, err := rand.Int(rand.Reader, max)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
v64 := v.Int64()
|
|
||||||
k += string(idCharset[v64])
|
|
||||||
checksum = (checksum + int(v64)) % (idCharsetLen)
|
|
||||||
}
|
|
||||||
checkstr := string(idCharset[checksum%idCharsetLen])
|
|
||||||
return prefix + k + checkstr
|
|
||||||
}
|
|
||||||
|
|
||||||
func validateID(prefix string, value string) error {
|
|
||||||
if len(value) != idlen {
|
|
||||||
return errors.New("id has the wrong length")
|
|
||||||
}
|
|
||||||
|
|
||||||
if !strings.HasPrefix(value, prefix) {
|
|
||||||
return errors.New("id is missing the correct prefix")
|
|
||||||
}
|
|
||||||
|
|
||||||
checksum := 0
|
|
||||||
for i := len(prefix); i < len(value)-checklen; i++ {
|
|
||||||
ichr := int(value[i])
|
|
||||||
if ichr < 0 || ichr >= len(charSetReverseMap) || charSetReverseMap[ichr] == -1 {
|
|
||||||
return errors.New("id contains invalid characters")
|
|
||||||
}
|
|
||||||
checksum = (checksum + charSetReverseMap[ichr]) % (idCharsetLen)
|
|
||||||
}
|
|
||||||
|
|
||||||
checkstr := string(idCharset[checksum%idCharsetLen])
|
|
||||||
|
|
||||||
if !strings.HasSuffix(value, checkstr) {
|
|
||||||
return errors.New("id checkstring is invalid")
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func getRawData(prefix string, value string) string {
|
|
||||||
if len(value) != idlen {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return value[len(prefix) : idlen-checklen]
|
|
||||||
}
|
|
||||||
|
|
||||||
func getCheckString(prefix string, value string) string {
|
|
||||||
if len(value) != idlen {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return value[idlen-checklen:]
|
|
||||||
}
|
|
||||||
|
|
||||||
func ValidateEntityID(vfl validator.FieldLevel) bool {
|
|
||||||
if !vfl.Field().CanInterface() {
|
|
||||||
log.Error().Msgf("Failed to validate EntityID (cannot interface ?!?)")
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
ifvalue := vfl.Field().Interface()
|
|
||||||
|
|
||||||
if value1, ok := ifvalue.(EntityID); ok {
|
|
||||||
|
|
||||||
if vfl.Field().Type().Kind() == reflect.Pointer && langext.IsNil(value1) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := value1.Valid(); err != nil {
|
|
||||||
log.Debug().Msgf("Failed to validate EntityID '%s' (%s)", value1.String(), err.Error())
|
|
||||||
return false
|
|
||||||
} else {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
log.Error().Msgf("Failed to validate EntityID (wrong type: %T)", ifvalue)
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
|
|
||||||
type UserID string
|
|
||||||
|
|
||||||
func NewUserID() UserID {
|
|
||||||
return UserID(generateID(prefixUserID))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id UserID) Valid() error {
|
|
||||||
return validateID(prefixUserID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id UserID) String() string {
|
|
||||||
return string(id)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id UserID) Prefix() string {
|
|
||||||
return prefixUserID
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id UserID) Raw() string {
|
|
||||||
return getRawData(prefixUserID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id UserID) CheckString() string {
|
|
||||||
return getCheckString(prefixUserID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id UserID) Regex() rext.Regex {
|
|
||||||
return regexUserID
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
|
|
||||||
type ChannelID string
|
|
||||||
|
|
||||||
func NewChannelID() ChannelID {
|
|
||||||
return ChannelID(generateID(prefixChannelID))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id ChannelID) Valid() error {
|
|
||||||
return validateID(prefixChannelID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id ChannelID) String() string {
|
|
||||||
return string(id)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id ChannelID) Prefix() string {
|
|
||||||
return prefixChannelID
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id ChannelID) Raw() string {
|
|
||||||
return getRawData(prefixChannelID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id ChannelID) CheckString() string {
|
|
||||||
return getCheckString(prefixChannelID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id ChannelID) Regex() rext.Regex {
|
|
||||||
return regexChannelID
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
|
|
||||||
type DeliveryID string
|
|
||||||
|
|
||||||
func NewDeliveryID() DeliveryID {
|
|
||||||
return DeliveryID(generateID(prefixDeliveryID))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id DeliveryID) Valid() error {
|
|
||||||
return validateID(prefixDeliveryID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id DeliveryID) String() string {
|
|
||||||
return string(id)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id DeliveryID) Prefix() string {
|
|
||||||
return prefixDeliveryID
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id DeliveryID) Raw() string {
|
|
||||||
return getRawData(prefixDeliveryID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id DeliveryID) CheckString() string {
|
|
||||||
return getCheckString(prefixDeliveryID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id DeliveryID) Regex() rext.Regex {
|
|
||||||
return regexDeliveryID
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
|
|
||||||
type MessageID string
|
|
||||||
|
|
||||||
func NewMessageID() MessageID {
|
|
||||||
return MessageID(generateID(prefixMessageID))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id MessageID) Valid() error {
|
|
||||||
return validateID(prefixMessageID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id MessageID) String() string {
|
|
||||||
return string(id)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id MessageID) Prefix() string {
|
|
||||||
return prefixMessageID
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id MessageID) Raw() string {
|
|
||||||
return getRawData(prefixMessageID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id MessageID) CheckString() string {
|
|
||||||
return getCheckString(prefixMessageID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id MessageID) Regex() rext.Regex {
|
|
||||||
return regexMessageID
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
|
|
||||||
type SubscriptionID string
|
|
||||||
|
|
||||||
func NewSubscriptionID() SubscriptionID {
|
|
||||||
return SubscriptionID(generateID(prefixSubscriptionID))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id SubscriptionID) Valid() error {
|
|
||||||
return validateID(prefixSubscriptionID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id SubscriptionID) String() string {
|
|
||||||
return string(id)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id SubscriptionID) Prefix() string {
|
|
||||||
return prefixSubscriptionID
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id SubscriptionID) Raw() string {
|
|
||||||
return getRawData(prefixSubscriptionID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id SubscriptionID) CheckString() string {
|
|
||||||
return getCheckString(prefixSubscriptionID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id SubscriptionID) Regex() rext.Regex {
|
|
||||||
return regexSubscriptionID
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
|
|
||||||
type ClientID string
|
|
||||||
|
|
||||||
func NewClientID() ClientID {
|
|
||||||
return ClientID(generateID(prefixClientID))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id ClientID) Valid() error {
|
|
||||||
return validateID(prefixClientID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id ClientID) String() string {
|
|
||||||
return string(id)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id ClientID) Prefix() string {
|
|
||||||
return prefixClientID
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id ClientID) Raw() string {
|
|
||||||
return getRawData(prefixClientID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id ClientID) CheckString() string {
|
|
||||||
return getCheckString(prefixClientID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id ClientID) Regex() rext.Regex {
|
|
||||||
return regexClientID
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
|
|
||||||
type RequestID string
|
|
||||||
|
|
||||||
func NewRequestID() RequestID {
|
|
||||||
return RequestID(generateID(prefixRequestID))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id RequestID) Valid() error {
|
|
||||||
return validateID(prefixRequestID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id RequestID) String() string {
|
|
||||||
return string(id)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id RequestID) Prefix() string {
|
|
||||||
return prefixRequestID
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id RequestID) Raw() string {
|
|
||||||
return getRawData(prefixRequestID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id RequestID) CheckString() string {
|
|
||||||
return getCheckString(prefixRequestID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id RequestID) Regex() rext.Regex {
|
|
||||||
return regexRequestID
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
|
|
||||||
type KeyTokenID string
|
|
||||||
|
|
||||||
func NewKeyTokenID() KeyTokenID {
|
|
||||||
return KeyTokenID(generateID(prefixKeyTokenID))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id KeyTokenID) Valid() error {
|
|
||||||
return validateID(prefixKeyTokenID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id KeyTokenID) String() string {
|
|
||||||
return string(id)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id KeyTokenID) Prefix() string {
|
|
||||||
return prefixKeyTokenID
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id KeyTokenID) Raw() string {
|
|
||||||
return getRawData(prefixKeyTokenID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id KeyTokenID) CheckString() string {
|
|
||||||
return getCheckString(prefixKeyTokenID, string(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (id KeyTokenID) Regex() rext.Regex {
|
|
||||||
return regexKeyTokenID
|
|
||||||
}
|
|
||||||
|
388
scnserver/models/ids_gen.go
Normal file
388
scnserver/models/ids_gen.go
Normal file
@ -0,0 +1,388 @@
|
|||||||
|
// Code generated by id-generate.go DO NOT EDIT.
|
||||||
|
|
||||||
|
package models
|
||||||
|
|
||||||
|
import "crypto/rand"
|
||||||
|
import "fmt"
|
||||||
|
import "github.com/go-playground/validator/v10"
|
||||||
|
import "github.com/rs/zerolog/log"
|
||||||
|
import "gogs.mikescher.com/BlackForestBytes/goext/exerr"
|
||||||
|
import "gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||||
|
import "gogs.mikescher.com/BlackForestBytes/goext/rext"
|
||||||
|
import "math/big"
|
||||||
|
import "reflect"
|
||||||
|
import "regexp"
|
||||||
|
import "strings"
|
||||||
|
|
||||||
|
const ChecksumCharsetIDGenerator = "8926e4a9845e67086109bef7ca447371ab5c0a94fcfd988f14fd4ee98da9e932" // GoExtVersion: 0.0.291
|
||||||
|
|
||||||
|
const idlen = 24
|
||||||
|
|
||||||
|
const checklen = 1
|
||||||
|
|
||||||
|
const idCharset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
|
||||||
|
const idCharsetLen = len(idCharset)
|
||||||
|
|
||||||
|
var charSetReverseMap = generateCharsetMap()
|
||||||
|
|
||||||
|
const (
|
||||||
|
prefixUserID = "USR"
|
||||||
|
prefixChannelID = "CHA"
|
||||||
|
prefixDeliveryID = "DEL"
|
||||||
|
prefixMessageID = "MSG"
|
||||||
|
prefixSubscriptionID = "SUB"
|
||||||
|
prefixClientID = "CLN"
|
||||||
|
prefixRequestID = "REQ"
|
||||||
|
prefixKeyTokenID = "TOK"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
regexUserID = generateRegex(prefixUserID)
|
||||||
|
regexChannelID = generateRegex(prefixChannelID)
|
||||||
|
regexDeliveryID = generateRegex(prefixDeliveryID)
|
||||||
|
regexMessageID = generateRegex(prefixMessageID)
|
||||||
|
regexSubscriptionID = generateRegex(prefixSubscriptionID)
|
||||||
|
regexClientID = generateRegex(prefixClientID)
|
||||||
|
regexRequestID = generateRegex(prefixRequestID)
|
||||||
|
regexKeyTokenID = generateRegex(prefixKeyTokenID)
|
||||||
|
)
|
||||||
|
|
||||||
|
func generateRegex(prefix string) rext.Regex {
|
||||||
|
return rext.W(regexp.MustCompile(fmt.Sprintf("^%s[%s]{%d}[%s]{%d}$", prefix, idCharset, idlen-len(prefix)-checklen, idCharset, checklen)))
|
||||||
|
}
|
||||||
|
|
||||||
|
func generateCharsetMap() []int {
|
||||||
|
result := make([]int, 128)
|
||||||
|
for i := 0; i < len(result); i++ {
|
||||||
|
result[i] = -1
|
||||||
|
}
|
||||||
|
for idx, chr := range idCharset {
|
||||||
|
result[int(chr)] = idx
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
func generateID(prefix string) string {
|
||||||
|
k := ""
|
||||||
|
max := big.NewInt(int64(idCharsetLen))
|
||||||
|
checksum := 0
|
||||||
|
for i := 0; i < idlen-len(prefix)-checklen; i++ {
|
||||||
|
v, err := rand.Int(rand.Reader, max)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
v64 := v.Int64()
|
||||||
|
k += string(idCharset[v64])
|
||||||
|
checksum = (checksum + int(v64)) % (idCharsetLen)
|
||||||
|
}
|
||||||
|
checkstr := string(idCharset[checksum%idCharsetLen])
|
||||||
|
return prefix + k + checkstr
|
||||||
|
}
|
||||||
|
|
||||||
|
func validateID(prefix string, value string) error {
|
||||||
|
if len(value) != idlen {
|
||||||
|
return exerr.New(exerr.TypeInvalidCSID, "id has the wrong length").Str("value", value).Build()
|
||||||
|
}
|
||||||
|
|
||||||
|
if !strings.HasPrefix(value, prefix) {
|
||||||
|
return exerr.New(exerr.TypeInvalidCSID, "id is missing the correct prefix").Str("value", value).Str("prefix", prefix).Build()
|
||||||
|
}
|
||||||
|
|
||||||
|
checksum := 0
|
||||||
|
for i := len(prefix); i < len(value)-checklen; i++ {
|
||||||
|
ichr := int(value[i])
|
||||||
|
if ichr < 0 || ichr >= len(charSetReverseMap) || charSetReverseMap[ichr] == -1 {
|
||||||
|
return exerr.New(exerr.TypeInvalidCSID, "id contains invalid characters").Str("value", value).Build()
|
||||||
|
}
|
||||||
|
checksum = (checksum + charSetReverseMap[ichr]) % (idCharsetLen)
|
||||||
|
}
|
||||||
|
|
||||||
|
checkstr := string(idCharset[checksum%idCharsetLen])
|
||||||
|
|
||||||
|
if !strings.HasSuffix(value, checkstr) {
|
||||||
|
return exerr.New(exerr.TypeInvalidCSID, "id checkstring is invalid").Str("value", value).Str("checkstr", checkstr).Build()
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func getRawData(prefix string, value string) string {
|
||||||
|
if len(value) != idlen {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return value[len(prefix) : idlen-checklen]
|
||||||
|
}
|
||||||
|
|
||||||
|
func getCheckString(prefix string, value string) string {
|
||||||
|
if len(value) != idlen {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return value[idlen-checklen:]
|
||||||
|
}
|
||||||
|
|
||||||
|
func ValidateEntityID(vfl validator.FieldLevel) bool {
|
||||||
|
if !vfl.Field().CanInterface() {
|
||||||
|
log.Error().Msgf("Failed to validate EntityID (cannot interface ?!?)")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
ifvalue := vfl.Field().Interface()
|
||||||
|
|
||||||
|
if value1, ok := ifvalue.(EntityID); ok {
|
||||||
|
|
||||||
|
if vfl.Field().Type().Kind() == reflect.Pointer && langext.IsNil(value1) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := value1.Valid(); err != nil {
|
||||||
|
log.Debug().Msgf("Failed to validate EntityID '%s' (%s)", value1.String(), err.Error())
|
||||||
|
return false
|
||||||
|
} else {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
log.Error().Msgf("Failed to validate EntityID (wrong type: %T)", ifvalue)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ================================ UserID (ids.go) ================================
|
||||||
|
|
||||||
|
func NewUserID() UserID {
|
||||||
|
return UserID(generateID(prefixUserID))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id UserID) Valid() error {
|
||||||
|
return validateID(prefixUserID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i UserID) String() string {
|
||||||
|
return string(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i UserID) Prefix() string {
|
||||||
|
return prefixUserID
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id UserID) Raw() string {
|
||||||
|
return getRawData(prefixUserID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id UserID) CheckString() string {
|
||||||
|
return getCheckString(prefixUserID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id UserID) Regex() rext.Regex {
|
||||||
|
return regexUserID
|
||||||
|
}
|
||||||
|
|
||||||
|
// ================================ ChannelID (ids.go) ================================
|
||||||
|
|
||||||
|
func NewChannelID() ChannelID {
|
||||||
|
return ChannelID(generateID(prefixChannelID))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id ChannelID) Valid() error {
|
||||||
|
return validateID(prefixChannelID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i ChannelID) String() string {
|
||||||
|
return string(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i ChannelID) Prefix() string {
|
||||||
|
return prefixChannelID
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id ChannelID) Raw() string {
|
||||||
|
return getRawData(prefixChannelID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id ChannelID) CheckString() string {
|
||||||
|
return getCheckString(prefixChannelID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id ChannelID) Regex() rext.Regex {
|
||||||
|
return regexChannelID
|
||||||
|
}
|
||||||
|
|
||||||
|
// ================================ DeliveryID (ids.go) ================================
|
||||||
|
|
||||||
|
func NewDeliveryID() DeliveryID {
|
||||||
|
return DeliveryID(generateID(prefixDeliveryID))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id DeliveryID) Valid() error {
|
||||||
|
return validateID(prefixDeliveryID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i DeliveryID) String() string {
|
||||||
|
return string(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i DeliveryID) Prefix() string {
|
||||||
|
return prefixDeliveryID
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id DeliveryID) Raw() string {
|
||||||
|
return getRawData(prefixDeliveryID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id DeliveryID) CheckString() string {
|
||||||
|
return getCheckString(prefixDeliveryID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id DeliveryID) Regex() rext.Regex {
|
||||||
|
return regexDeliveryID
|
||||||
|
}
|
||||||
|
|
||||||
|
// ================================ MessageID (ids.go) ================================
|
||||||
|
|
||||||
|
func NewMessageID() MessageID {
|
||||||
|
return MessageID(generateID(prefixMessageID))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id MessageID) Valid() error {
|
||||||
|
return validateID(prefixMessageID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i MessageID) String() string {
|
||||||
|
return string(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i MessageID) Prefix() string {
|
||||||
|
return prefixMessageID
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id MessageID) Raw() string {
|
||||||
|
return getRawData(prefixMessageID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id MessageID) CheckString() string {
|
||||||
|
return getCheckString(prefixMessageID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id MessageID) Regex() rext.Regex {
|
||||||
|
return regexMessageID
|
||||||
|
}
|
||||||
|
|
||||||
|
// ================================ SubscriptionID (ids.go) ================================
|
||||||
|
|
||||||
|
func NewSubscriptionID() SubscriptionID {
|
||||||
|
return SubscriptionID(generateID(prefixSubscriptionID))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id SubscriptionID) Valid() error {
|
||||||
|
return validateID(prefixSubscriptionID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i SubscriptionID) String() string {
|
||||||
|
return string(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i SubscriptionID) Prefix() string {
|
||||||
|
return prefixSubscriptionID
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id SubscriptionID) Raw() string {
|
||||||
|
return getRawData(prefixSubscriptionID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id SubscriptionID) CheckString() string {
|
||||||
|
return getCheckString(prefixSubscriptionID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id SubscriptionID) Regex() rext.Regex {
|
||||||
|
return regexSubscriptionID
|
||||||
|
}
|
||||||
|
|
||||||
|
// ================================ ClientID (ids.go) ================================
|
||||||
|
|
||||||
|
func NewClientID() ClientID {
|
||||||
|
return ClientID(generateID(prefixClientID))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id ClientID) Valid() error {
|
||||||
|
return validateID(prefixClientID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i ClientID) String() string {
|
||||||
|
return string(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i ClientID) Prefix() string {
|
||||||
|
return prefixClientID
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id ClientID) Raw() string {
|
||||||
|
return getRawData(prefixClientID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id ClientID) CheckString() string {
|
||||||
|
return getCheckString(prefixClientID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id ClientID) Regex() rext.Regex {
|
||||||
|
return regexClientID
|
||||||
|
}
|
||||||
|
|
||||||
|
// ================================ RequestID (ids.go) ================================
|
||||||
|
|
||||||
|
func NewRequestID() RequestID {
|
||||||
|
return RequestID(generateID(prefixRequestID))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id RequestID) Valid() error {
|
||||||
|
return validateID(prefixRequestID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i RequestID) String() string {
|
||||||
|
return string(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i RequestID) Prefix() string {
|
||||||
|
return prefixRequestID
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id RequestID) Raw() string {
|
||||||
|
return getRawData(prefixRequestID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id RequestID) CheckString() string {
|
||||||
|
return getCheckString(prefixRequestID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id RequestID) Regex() rext.Regex {
|
||||||
|
return regexRequestID
|
||||||
|
}
|
||||||
|
|
||||||
|
// ================================ KeyTokenID (ids.go) ================================
|
||||||
|
|
||||||
|
func NewKeyTokenID() KeyTokenID {
|
||||||
|
return KeyTokenID(generateID(prefixKeyTokenID))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id KeyTokenID) Valid() error {
|
||||||
|
return validateID(prefixKeyTokenID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i KeyTokenID) String() string {
|
||||||
|
return string(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i KeyTokenID) Prefix() string {
|
||||||
|
return prefixKeyTokenID
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id KeyTokenID) Raw() string {
|
||||||
|
return getRawData(prefixKeyTokenID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id KeyTokenID) CheckString() string {
|
||||||
|
return getCheckString(prefixKeyTokenID, string(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (id KeyTokenID) Regex() rext.Regex {
|
||||||
|
return regexKeyTokenID
|
||||||
|
}
|
@ -5,8 +5,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
//go:generate go run ../_gen/enum-generate.go -- enums_gen.go
|
|
||||||
|
|
||||||
func timeOptFmt(t *time.Time, fmt string) *string {
|
func timeOptFmt(t *time.Time, fmt string) *string {
|
||||||
if t == nil {
|
if t == nil {
|
||||||
return nil
|
return nil
|
||||||
|
@ -958,13 +958,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"/api/v2/messages/{mid}": {
|
"/api/v2/messages/{mid}": {
|
||||||
"delete": {
|
"get": {
|
||||||
"description": "The user must own the message and request the resource with the ADMIN Key",
|
"description": "The user must either own the message and request the resource with the READ or ADMIN Key\nOr the user must subscribe to the corresponding channel (and be confirmed) and request the resource with the READ or ADMIN Key\nThe returned message is never trimmed",
|
||||||
"tags": [
|
"tags": [
|
||||||
"API-v2"
|
"API-v2"
|
||||||
],
|
],
|
||||||
"summary": "Delete a single message",
|
"summary": "Get a single message (untrimmed)",
|
||||||
"operationId": "api-messages-delete",
|
"operationId": "api-messages-get",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
@ -1007,13 +1007,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"patch": {
|
"delete": {
|
||||||
"description": "The user must either own the message and request the resource with the READ or ADMIN Key\nOr the user must subscribe to the corresponding channel (and be confirmed) and request the resource with the READ or ADMIN Key\nThe returned message is never trimmed",
|
"description": "The user must own the message and request the resource with the ADMIN Key",
|
||||||
"tags": [
|
"tags": [
|
||||||
"API-v2"
|
"API-v2"
|
||||||
],
|
],
|
||||||
"summary": "Get a single message (untrimmed)",
|
"summary": "Delete a single message",
|
||||||
"operationId": "api-messages-get",
|
"operationId": "api-messages-delete",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
@ -2449,6 +2449,104 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/external/v1/uptime-kuma": {
|
||||||
|
"post": {
|
||||||
|
"description": "All parameter can be set via query-parameter or the json body. Only UserID, UserKey and Title are required",
|
||||||
|
"tags": [
|
||||||
|
"External"
|
||||||
|
],
|
||||||
|
"summary": "Send a new message",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"name": "channel",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"name": "channel_down",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"name": "channel_up",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"example": "P3TNH8mvv14fm",
|
||||||
|
"name": "key",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"name": "priority",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"name": "priority_down",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"name": "priority_up",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"name": "senderName",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"example": "7725",
|
||||||
|
"name": "user_id",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": " ",
|
||||||
|
"name": "post_body",
|
||||||
|
"in": "body",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/handler.UptimeKuma.body"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/handler.UptimeKuma.response"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Bad Request",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/ginresp.apiError"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "The user_id was not found or the user_key is wrong",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/ginresp.apiError"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"403": {
|
||||||
|
"description": "The user has exceeded its daily quota - wait 24 hours or upgrade your account",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/ginresp.apiError"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "An internal server error occurred - try again later",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/ginresp.apiError"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/send": {
|
"/send": {
|
||||||
"post": {
|
"post": {
|
||||||
"description": "All parameter can be set via query-parameter or the json body. Only UserID, UserKey and Title are required",
|
"description": "All parameter can be set via query-parameter or the json body. Only UserID, UserKey and Title are required",
|
||||||
@ -2629,72 +2727,120 @@
|
|||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
|
"example": "test",
|
||||||
|
"name": "channel",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"example": "This is a message",
|
||||||
"name": "content",
|
"name": "content",
|
||||||
"in": "query"
|
"in": "query"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
|
"example": "P3TNH8mvv14fm",
|
||||||
|
"name": "key",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"example": "db8b0e6a-a08c-4646",
|
||||||
"name": "msg_id",
|
"name": "msg_id",
|
||||||
"in": "query"
|
"in": "query"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"enum": [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2
|
||||||
|
],
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
|
"example": 1,
|
||||||
"name": "priority",
|
"name": "priority",
|
||||||
"in": "query"
|
"in": "query"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"example": "example-server",
|
||||||
|
"name": "sender_name",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "number",
|
"type": "number",
|
||||||
|
"example": 1669824037,
|
||||||
"name": "timestamp",
|
"name": "timestamp",
|
||||||
"in": "query"
|
"in": "query"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
|
"example": "Hello World",
|
||||||
"name": "title",
|
"name": "title",
|
||||||
"in": "query"
|
"in": "query"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "integer",
|
"type": "string",
|
||||||
|
"example": "7725",
|
||||||
"name": "user_id",
|
"name": "user_id",
|
||||||
"in": "query"
|
"in": "query"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"name": "user_key",
|
"example": "test",
|
||||||
"in": "query"
|
"name": "channel",
|
||||||
|
"in": "formData"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
|
"example": "This is a message",
|
||||||
"name": "content",
|
"name": "content",
|
||||||
"in": "formData"
|
"in": "formData"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
|
"example": "P3TNH8mvv14fm",
|
||||||
|
"name": "key",
|
||||||
|
"in": "formData"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"example": "db8b0e6a-a08c-4646",
|
||||||
"name": "msg_id",
|
"name": "msg_id",
|
||||||
"in": "formData"
|
"in": "formData"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"enum": [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2
|
||||||
|
],
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
|
"example": 1,
|
||||||
"name": "priority",
|
"name": "priority",
|
||||||
"in": "formData"
|
"in": "formData"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"example": "example-server",
|
||||||
|
"name": "sender_name",
|
||||||
|
"in": "formData"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "number",
|
"type": "number",
|
||||||
|
"example": 1669824037,
|
||||||
"name": "timestamp",
|
"name": "timestamp",
|
||||||
"in": "formData"
|
"in": "formData"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
|
"example": "Hello World",
|
||||||
"name": "title",
|
"name": "title",
|
||||||
"in": "formData"
|
"in": "formData"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"type": "integer",
|
|
||||||
"name": "user_id",
|
|
||||||
"in": "formData"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"name": "user_key",
|
"example": "7725",
|
||||||
|
"name": "user_id",
|
||||||
"in": "formData"
|
"in": "formData"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -2702,7 +2848,7 @@
|
|||||||
"200": {
|
"200": {
|
||||||
"description": "OK",
|
"description": "OK",
|
||||||
"schema": {
|
"schema": {
|
||||||
"$ref": "#/definitions/handler.SendMessageCompat.response"
|
"$ref": "#/definitions/handler.SendMessage.response"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"400": {
|
"400": {
|
||||||
@ -2731,69 +2877,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"/webhook/uptime-kuma": {
|
|
||||||
"post": {
|
|
||||||
"description": "All parameter can be set via query-parameter or the json body. Only UserID, UserKey and Title are required",
|
|
||||||
"tags": [
|
|
||||||
"External"
|
|
||||||
],
|
|
||||||
"summary": "Send a new message",
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"type": "string",
|
|
||||||
"example": "P3TNH8mvv14fm",
|
|
||||||
"name": "key",
|
|
||||||
"in": "query"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "string",
|
|
||||||
"example": "7725",
|
|
||||||
"name": "user_id",
|
|
||||||
"in": "query"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": " ",
|
|
||||||
"name": "post_body",
|
|
||||||
"in": "body",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/handler.UptimeKumaWebHook.uptimeKumaWebhookBody"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "OK",
|
|
||||||
"schema": {
|
|
||||||
"type": "object"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"400": {
|
|
||||||
"description": "Bad Request",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/ginresp.apiError"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"401": {
|
|
||||||
"description": "The user_id was not found or the user_key is wrong",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/ginresp.apiError"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"403": {
|
|
||||||
"description": "The user has exceeded its daily quota - wait 24 hours or upgrade your account",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/ginresp.apiError"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"500": {
|
|
||||||
"description": "An internal server error occurred - try again later",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/ginresp.apiError"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"definitions": {
|
"definitions": {
|
||||||
@ -3323,41 +3406,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"handler.SendMessageCompat.response": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"errhighlight": {
|
|
||||||
"type": "integer"
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"$ref": "#/definitions/apierr.APIError"
|
|
||||||
},
|
|
||||||
"is_pro": {
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
"message": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"messagecount": {
|
|
||||||
"type": "integer"
|
|
||||||
},
|
|
||||||
"quota": {
|
|
||||||
"type": "integer"
|
|
||||||
},
|
|
||||||
"quota_max": {
|
|
||||||
"type": "integer"
|
|
||||||
},
|
|
||||||
"scn_msg_id": {
|
|
||||||
"type": "integer"
|
|
||||||
},
|
|
||||||
"success": {
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
"suppress_send": {
|
|
||||||
"type": "boolean"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"handler.Sleep.response": {
|
"handler.Sleep.response": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@ -3449,7 +3497,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"handler.UptimeKumaWebHook.uptimeKumaWebhookBody": {
|
"handler.UptimeKuma.body": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"heartbeat": {
|
"heartbeat": {
|
||||||
@ -3461,6 +3509,9 @@
|
|||||||
"msg": {
|
"msg": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"status": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
"time": {
|
"time": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@ -3488,6 +3539,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"handler.UptimeKuma.response": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"message_id": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"handler.pingResponse": {
|
"handler.pingResponse": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
@ -376,29 +376,6 @@ definitions:
|
|||||||
suppress_send:
|
suppress_send:
|
||||||
type: boolean
|
type: boolean
|
||||||
type: object
|
type: object
|
||||||
handler.SendMessageCompat.response:
|
|
||||||
properties:
|
|
||||||
errhighlight:
|
|
||||||
type: integer
|
|
||||||
error:
|
|
||||||
$ref: '#/definitions/apierr.APIError'
|
|
||||||
is_pro:
|
|
||||||
type: boolean
|
|
||||||
message:
|
|
||||||
type: string
|
|
||||||
messagecount:
|
|
||||||
type: integer
|
|
||||||
quota:
|
|
||||||
type: integer
|
|
||||||
quota_max:
|
|
||||||
type: integer
|
|
||||||
scn_msg_id:
|
|
||||||
type: integer
|
|
||||||
success:
|
|
||||||
type: boolean
|
|
||||||
suppress_send:
|
|
||||||
type: boolean
|
|
||||||
type: object
|
|
||||||
handler.Sleep.response:
|
handler.Sleep.response:
|
||||||
properties:
|
properties:
|
||||||
duration:
|
duration:
|
||||||
@ -458,7 +435,7 @@ definitions:
|
|||||||
user_id:
|
user_id:
|
||||||
type: integer
|
type: integer
|
||||||
type: object
|
type: object
|
||||||
handler.UptimeKumaWebHook.uptimeKumaWebhookBody:
|
handler.UptimeKuma.body:
|
||||||
properties:
|
properties:
|
||||||
heartbeat:
|
heartbeat:
|
||||||
properties:
|
properties:
|
||||||
@ -466,6 +443,8 @@ definitions:
|
|||||||
type: string
|
type: string
|
||||||
msg:
|
msg:
|
||||||
type: string
|
type: string
|
||||||
|
status:
|
||||||
|
type: integer
|
||||||
time:
|
time:
|
||||||
type: string
|
type: string
|
||||||
timezone:
|
timezone:
|
||||||
@ -483,6 +462,11 @@ definitions:
|
|||||||
msg:
|
msg:
|
||||||
type: string
|
type: string
|
||||||
type: object
|
type: object
|
||||||
|
handler.UptimeKuma.response:
|
||||||
|
properties:
|
||||||
|
message_id:
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
handler.pingResponse:
|
handler.pingResponse:
|
||||||
properties:
|
properties:
|
||||||
info:
|
info:
|
||||||
@ -1418,7 +1402,7 @@ paths:
|
|||||||
summary: Delete a single message
|
summary: Delete a single message
|
||||||
tags:
|
tags:
|
||||||
- API-v2
|
- API-v2
|
||||||
patch:
|
get:
|
||||||
description: |-
|
description: |-
|
||||||
The user must either own the message and request the resource with the READ or ADMIN Key
|
The user must either own the message and request the resource with the READ or ADMIN Key
|
||||||
Or the user must subscribe to the corresponding channel (and be confirmed) and request the resource with the READ or ADMIN Key
|
Or the user must subscribe to the corresponding channel (and be confirmed) and request the resource with the READ or ADMIN Key
|
||||||
@ -2414,6 +2398,70 @@ paths:
|
|||||||
summary: Update a subscription (e.g. confirm)
|
summary: Update a subscription (e.g. confirm)
|
||||||
tags:
|
tags:
|
||||||
- API-v2
|
- API-v2
|
||||||
|
/external/v1/uptime-kuma:
|
||||||
|
post:
|
||||||
|
description: All parameter can be set via query-parameter or the json body.
|
||||||
|
Only UserID, UserKey and Title are required
|
||||||
|
parameters:
|
||||||
|
- in: query
|
||||||
|
name: channel
|
||||||
|
type: string
|
||||||
|
- in: query
|
||||||
|
name: channel_down
|
||||||
|
type: string
|
||||||
|
- in: query
|
||||||
|
name: channel_up
|
||||||
|
type: string
|
||||||
|
- example: P3TNH8mvv14fm
|
||||||
|
in: query
|
||||||
|
name: key
|
||||||
|
type: string
|
||||||
|
- in: query
|
||||||
|
name: priority
|
||||||
|
type: integer
|
||||||
|
- in: query
|
||||||
|
name: priority_down
|
||||||
|
type: integer
|
||||||
|
- in: query
|
||||||
|
name: priority_up
|
||||||
|
type: integer
|
||||||
|
- in: query
|
||||||
|
name: senderName
|
||||||
|
type: string
|
||||||
|
- example: "7725"
|
||||||
|
in: query
|
||||||
|
name: user_id
|
||||||
|
type: string
|
||||||
|
- description: ' '
|
||||||
|
in: body
|
||||||
|
name: post_body
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/handler.UptimeKuma.body'
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/handler.UptimeKuma.response'
|
||||||
|
"400":
|
||||||
|
description: Bad Request
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/ginresp.apiError'
|
||||||
|
"401":
|
||||||
|
description: The user_id was not found or the user_key is wrong
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/ginresp.apiError'
|
||||||
|
"403":
|
||||||
|
description: The user has exceeded its daily quota - wait 24 hours or upgrade
|
||||||
|
your account
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/ginresp.apiError'
|
||||||
|
"500":
|
||||||
|
description: An internal server error occurred - try again later
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/ginresp.apiError'
|
||||||
|
summary: Send a new message
|
||||||
|
tags:
|
||||||
|
- External
|
||||||
/send:
|
/send:
|
||||||
post:
|
post:
|
||||||
description: All parameter can be set via query-parameter or the json body.
|
description: All parameter can be set via query-parameter or the json body.
|
||||||
@ -2535,53 +2583,91 @@ paths:
|
|||||||
description: All parameter can be set via query-parameter or form-data body.
|
description: All parameter can be set via query-parameter or form-data body.
|
||||||
Only UserID, UserKey and Title are required
|
Only UserID, UserKey and Title are required
|
||||||
parameters:
|
parameters:
|
||||||
- in: query
|
- example: test
|
||||||
|
in: query
|
||||||
|
name: channel
|
||||||
|
type: string
|
||||||
|
- example: This is a message
|
||||||
|
in: query
|
||||||
name: content
|
name: content
|
||||||
type: string
|
type: string
|
||||||
- in: query
|
- example: P3TNH8mvv14fm
|
||||||
|
in: query
|
||||||
|
name: key
|
||||||
|
type: string
|
||||||
|
- example: db8b0e6a-a08c-4646
|
||||||
|
in: query
|
||||||
name: msg_id
|
name: msg_id
|
||||||
type: string
|
type: string
|
||||||
- in: query
|
- enum:
|
||||||
|
- 0
|
||||||
|
- 1
|
||||||
|
- 2
|
||||||
|
example: 1
|
||||||
|
in: query
|
||||||
name: priority
|
name: priority
|
||||||
type: integer
|
type: integer
|
||||||
- in: query
|
- example: example-server
|
||||||
|
in: query
|
||||||
|
name: sender_name
|
||||||
|
type: string
|
||||||
|
- example: 1669824037
|
||||||
|
in: query
|
||||||
name: timestamp
|
name: timestamp
|
||||||
type: number
|
type: number
|
||||||
- in: query
|
- example: Hello World
|
||||||
|
in: query
|
||||||
name: title
|
name: title
|
||||||
type: string
|
type: string
|
||||||
- in: query
|
- example: "7725"
|
||||||
|
in: query
|
||||||
name: user_id
|
name: user_id
|
||||||
type: integer
|
|
||||||
- in: query
|
|
||||||
name: user_key
|
|
||||||
type: string
|
type: string
|
||||||
- in: formData
|
- example: test
|
||||||
|
in: formData
|
||||||
|
name: channel
|
||||||
|
type: string
|
||||||
|
- example: This is a message
|
||||||
|
in: formData
|
||||||
name: content
|
name: content
|
||||||
type: string
|
type: string
|
||||||
- in: formData
|
- example: P3TNH8mvv14fm
|
||||||
|
in: formData
|
||||||
|
name: key
|
||||||
|
type: string
|
||||||
|
- example: db8b0e6a-a08c-4646
|
||||||
|
in: formData
|
||||||
name: msg_id
|
name: msg_id
|
||||||
type: string
|
type: string
|
||||||
- in: formData
|
- enum:
|
||||||
|
- 0
|
||||||
|
- 1
|
||||||
|
- 2
|
||||||
|
example: 1
|
||||||
|
in: formData
|
||||||
name: priority
|
name: priority
|
||||||
type: integer
|
type: integer
|
||||||
- in: formData
|
- example: example-server
|
||||||
|
in: formData
|
||||||
|
name: sender_name
|
||||||
|
type: string
|
||||||
|
- example: 1669824037
|
||||||
|
in: formData
|
||||||
name: timestamp
|
name: timestamp
|
||||||
type: number
|
type: number
|
||||||
- in: formData
|
- example: Hello World
|
||||||
|
in: formData
|
||||||
name: title
|
name: title
|
||||||
type: string
|
type: string
|
||||||
- in: formData
|
- example: "7725"
|
||||||
|
in: formData
|
||||||
name: user_id
|
name: user_id
|
||||||
type: integer
|
|
||||||
- in: formData
|
|
||||||
name: user_key
|
|
||||||
type: string
|
type: string
|
||||||
responses:
|
responses:
|
||||||
"200":
|
"200":
|
||||||
description: OK
|
description: OK
|
||||||
schema:
|
schema:
|
||||||
$ref: '#/definitions/handler.SendMessageCompat.response'
|
$ref: '#/definitions/handler.SendMessage.response'
|
||||||
"400":
|
"400":
|
||||||
description: Bad Request
|
description: Bad Request
|
||||||
schema:
|
schema:
|
||||||
@ -2601,49 +2687,6 @@ paths:
|
|||||||
summary: Send a new message (compatibility)
|
summary: Send a new message (compatibility)
|
||||||
tags:
|
tags:
|
||||||
- External
|
- External
|
||||||
/webhook/uptime-kuma:
|
|
||||||
post:
|
|
||||||
description: All parameter can be set via query-parameter or the json body.
|
|
||||||
Only UserID, UserKey and Title are required
|
|
||||||
parameters:
|
|
||||||
- example: P3TNH8mvv14fm
|
|
||||||
in: query
|
|
||||||
name: key
|
|
||||||
type: string
|
|
||||||
- example: "7725"
|
|
||||||
in: query
|
|
||||||
name: user_id
|
|
||||||
type: string
|
|
||||||
- description: ' '
|
|
||||||
in: body
|
|
||||||
name: post_body
|
|
||||||
schema:
|
|
||||||
$ref: '#/definitions/handler.UptimeKumaWebHook.uptimeKumaWebhookBody'
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: OK
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
"400":
|
|
||||||
description: Bad Request
|
|
||||||
schema:
|
|
||||||
$ref: '#/definitions/ginresp.apiError'
|
|
||||||
"401":
|
|
||||||
description: The user_id was not found or the user_key is wrong
|
|
||||||
schema:
|
|
||||||
$ref: '#/definitions/ginresp.apiError'
|
|
||||||
"403":
|
|
||||||
description: The user has exceeded its daily quota - wait 24 hours or upgrade
|
|
||||||
your account
|
|
||||||
schema:
|
|
||||||
$ref: '#/definitions/ginresp.apiError'
|
|
||||||
"500":
|
|
||||||
description: An internal server error occurred - try again later
|
|
||||||
schema:
|
|
||||||
$ref: '#/definitions/ginresp.apiError'
|
|
||||||
summary: Send a new message
|
|
||||||
tags:
|
|
||||||
- External
|
|
||||||
swagger: "2.0"
|
swagger: "2.0"
|
||||||
tags:
|
tags:
|
||||||
- name: External
|
- name: External
|
||||||
|
Loading…
Reference in New Issue
Block a user