mirror of
https://github.com/MizuchiLabs/mantrae.git
synced 2025-12-16 20:05:17 -06:00
better crud handler
This commit is contained in:
5
Makefile
5
Makefile
@@ -14,6 +14,10 @@ all: clean build
|
||||
clean:
|
||||
rm -rf $(PWD)/$(BIN) $(PWD)/$(BIN)-agent $(PWD)/web/build $(PWD)/builds
|
||||
|
||||
.PHONY: run
|
||||
run:
|
||||
go run -tags=dev .
|
||||
|
||||
.PHONY: audit
|
||||
audit-security:
|
||||
- gosec --exclude=G104 ./...
|
||||
@@ -62,6 +66,7 @@ upgrade:
|
||||
go get -u && go mod tidy
|
||||
cd web && pnpm update
|
||||
|
||||
|
||||
.PHONY: db-up
|
||||
db-up:
|
||||
goose sqlite3 data/mantrae.db -dir internal/store/migrations up-by-one
|
||||
|
||||
4
buf.lock
4
buf.lock
@@ -2,5 +2,5 @@
|
||||
version: v2
|
||||
deps:
|
||||
- name: buf.build/bufbuild/protovalidate
|
||||
commit: 9f2d3c737feb481a83375159c0733275
|
||||
digest: b5:19d3b83f7df2d284ff5935f4622d7f27e7464a93c210edb536e92a52bcc69b2a18da1312e96b5461601eba7b3764d5e90321bd62e6966870e7dbc2e4dedd98d6
|
||||
commit: 6c6e0d3c608e4549802254a2eee81bc8
|
||||
digest: b5:a7ca081f38656fc0f5aaa685cc111d3342876723851b47ca6b80cbb810cbb2380f8c444115c495ada58fa1f85eff44e68dc54a445761c195acdb5e8d9af675b6
|
||||
|
||||
2
buf.yaml
2
buf.yaml
@@ -9,4 +9,4 @@ breaking:
|
||||
use:
|
||||
- FILE
|
||||
deps:
|
||||
- buf.build/bufbuild/protovalidate:v0.13.3
|
||||
- buf.build/bufbuild/protovalidate:v0.14.2
|
||||
|
||||
65
go.mod
65
go.mod
@@ -1,63 +1,64 @@
|
||||
module github.com/mizuchilabs/mantrae
|
||||
|
||||
go 1.24.4
|
||||
go 1.24.5
|
||||
|
||||
require (
|
||||
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.6-20250625184727-c923a0c2a132.1
|
||||
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.6-20250717185734-6c6e0d3c608e.1
|
||||
connectrpc.com/connect v1.18.1
|
||||
connectrpc.com/cors v0.1.0
|
||||
connectrpc.com/grpchealth v1.4.0
|
||||
connectrpc.com/grpcreflect v1.3.0
|
||||
connectrpc.com/validate v0.3.0
|
||||
github.com/aws/aws-sdk-go-v2 v1.36.5
|
||||
github.com/aws/aws-sdk-go-v2/config v1.29.17
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.70
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.84.0
|
||||
github.com/aws/aws-sdk-go-v2 v1.36.6
|
||||
github.com/aws/aws-sdk-go-v2/config v1.29.18
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.71
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.84.1
|
||||
github.com/caarlos0/env/v11 v11.3.1
|
||||
github.com/cloudflare/cloudflare-go v0.115.0
|
||||
github.com/coreos/go-oidc/v3 v3.14.1
|
||||
github.com/docker/docker v27.4.1+incompatible
|
||||
github.com/docker/docker v28.3.2+incompatible
|
||||
github.com/domodwyer/mailyak/v3 v3.6.2
|
||||
github.com/golang-jwt/jwt/v5 v5.2.3
|
||||
github.com/google/uuid v1.6.0
|
||||
github.com/hypersequent/zen v0.0.0-20250317110808-f521ea1d4fc3
|
||||
github.com/hypersequent/zen v0.0.0-20250722075626-67d8f7873a72
|
||||
github.com/joeig/go-powerdns/v3 v3.16.0
|
||||
github.com/pressly/goose/v3 v3.24.3
|
||||
github.com/rs/cors v1.11.1
|
||||
github.com/stretchr/testify v1.10.0
|
||||
github.com/traefik/paerser v0.2.2
|
||||
github.com/traefik/traefik/v3 v3.4.4
|
||||
github.com/traefik/traefik/v3 v3.4.5
|
||||
golang.org/x/crypto v0.40.0
|
||||
golang.org/x/net v0.42.0
|
||||
golang.org/x/oauth2 v0.30.0
|
||||
golang.org/x/sync v0.16.0
|
||||
google.golang.org/protobuf v1.36.6
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
modernc.org/sqlite v1.38.0
|
||||
sigs.k8s.io/yaml v1.5.0
|
||||
modernc.org/sqlite v1.38.1
|
||||
)
|
||||
|
||||
require (
|
||||
buf.build/go/protovalidate v0.13.1 // indirect
|
||||
buf.build/go/protovalidate v0.14.0 // indirect
|
||||
cel.dev/expr v0.24.0 // indirect
|
||||
github.com/Microsoft/go-winio v0.6.2 // indirect
|
||||
github.com/antlr4-go/antlr/v4 v4.13.1 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.11 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.32 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.36 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.36 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.33 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.37 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.37 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.36 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.37 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.4 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.4 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.17 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.17 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.25.5 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.34.0 // indirect
|
||||
github.com/aws/smithy-go v1.22.4 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.5 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.18 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.18 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.25.6 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.4 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.34.1 // indirect
|
||||
github.com/aws/smithy-go v1.22.5 // indirect
|
||||
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
|
||||
github.com/cenkalti/backoff/v5 v5.0.2 // indirect
|
||||
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
|
||||
github.com/containerd/errdefs v1.0.0 // indirect
|
||||
github.com/containerd/errdefs/pkg v0.3.0 // indirect
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
||||
github.com/distribution/reference v0.6.0 // indirect
|
||||
github.com/docker/go-connections v0.5.0 // indirect
|
||||
@@ -65,7 +66,7 @@ require (
|
||||
github.com/dustin/go-humanize v1.0.1 // indirect
|
||||
github.com/felixge/httpsnoop v1.0.4 // indirect
|
||||
github.com/fsnotify/fsnotify v1.9.0 // indirect
|
||||
github.com/go-acme/lego/v4 v4.24.0 // indirect
|
||||
github.com/go-acme/lego/v4 v4.25.1 // indirect
|
||||
github.com/go-jose/go-jose/v4 v4.1.1 // indirect
|
||||
github.com/go-kit/log v0.2.1 // indirect
|
||||
github.com/go-logfmt/logfmt v0.6.0 // indirect
|
||||
@@ -85,6 +86,7 @@ require (
|
||||
github.com/mfridman/interpolate v0.0.2 // indirect
|
||||
github.com/miekg/dns v1.1.67 // indirect
|
||||
github.com/moby/docker-image-spec v1.3.1 // indirect
|
||||
github.com/moby/sys/atomicwriter v0.1.0 // indirect
|
||||
github.com/ncruces/go-strftime v0.1.9 // indirect
|
||||
github.com/opencontainers/go-digest v1.0.0 // indirect
|
||||
github.com/opencontainers/image-spec v1.1.0 // indirect
|
||||
@@ -97,7 +99,7 @@ require (
|
||||
github.com/stoewer/go-strcase v1.3.1 // indirect
|
||||
github.com/unrolled/render v1.7.0 // indirect
|
||||
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect
|
||||
go.opentelemetry.io/otel v1.37.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.13.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.13.0 // indirect
|
||||
@@ -111,18 +113,17 @@ require (
|
||||
go.opentelemetry.io/otel/trace v1.37.0 // indirect
|
||||
go.opentelemetry.io/proto/otlp v1.7.0 // indirect
|
||||
go.uber.org/multierr v1.11.0 // indirect
|
||||
go.yaml.in/yaml/v2 v2.4.2 // indirect
|
||||
golang.org/x/exp v0.0.0-20250711185948-6ae5c78190dc // indirect
|
||||
golang.org/x/exp v0.0.0-20250718183923-645b1fa84792 // indirect
|
||||
golang.org/x/mod v0.26.0 // indirect
|
||||
golang.org/x/sys v0.34.0 // indirect
|
||||
golang.org/x/text v0.27.0 // indirect
|
||||
golang.org/x/time v0.12.0 // indirect
|
||||
golang.org/x/tools v0.35.0 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250715232539-7130f93afb79 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250715232539-7130f93afb79 // indirect
|
||||
google.golang.org/grpc v1.73.0 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250721164621-a45f3dfb1074 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250721164621-a45f3dfb1074 // indirect
|
||||
google.golang.org/grpc v1.74.2 // indirect
|
||||
gotest.tools/v3 v3.5.2 // indirect
|
||||
modernc.org/libc v1.66.3 // indirect
|
||||
modernc.org/libc v1.66.4 // indirect
|
||||
modernc.org/mathutil v1.7.1 // indirect
|
||||
modernc.org/memory v1.11.0 // indirect
|
||||
)
|
||||
|
||||
134
go.sum
134
go.sum
@@ -1,7 +1,7 @@
|
||||
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.6-20250625184727-c923a0c2a132.1 h1:6tCo3lsKNLqUjRPhyc8JuYWYUiQkulufxSDOfG1zgWQ=
|
||||
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.6-20250625184727-c923a0c2a132.1/go.mod h1:avRlCjnFzl98VPaeCtJ24RrV/wwHFzB8sWXhj26+n/U=
|
||||
buf.build/go/protovalidate v0.13.1 h1:6loHDTWdY/1qmqmt1MijBIKeN4T9Eajrqb9isT1W1s8=
|
||||
buf.build/go/protovalidate v0.13.1/go.mod h1:C/QcOn/CjXRn5udUwYBiLs8y1TGy7RS+GOSKqjS77aU=
|
||||
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.6-20250717185734-6c6e0d3c608e.1 h1:Lg6klmCi3v7VvpqeeLEER9/m5S8y9e9DjhqQnSCNy4k=
|
||||
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.6-20250717185734-6c6e0d3c608e.1/go.mod h1:avRlCjnFzl98VPaeCtJ24RrV/wwHFzB8sWXhj26+n/U=
|
||||
buf.build/go/protovalidate v0.14.0 h1:kr/rC/no+DtRyYX+8KXLDxNnI1rINz0imk5K44ZpZ3A=
|
||||
buf.build/go/protovalidate v0.14.0/go.mod h1:+F/oISho9MO7gJQNYC2VWLzcO1fTPmaTA08SDYJZncA=
|
||||
cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY=
|
||||
cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
|
||||
connectrpc.com/connect v1.18.1 h1:PAg7CjSAGvscaf6YZKUefjoih5Z/qYkyaTrBW8xvYPw=
|
||||
@@ -22,50 +22,54 @@ github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERo
|
||||
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
|
||||
github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ=
|
||||
github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw=
|
||||
github.com/aws/aws-sdk-go-v2 v1.36.5 h1:0OF9RiEMEdDdZEMqF9MRjevyxAQcf6gY+E7vwBILFj0=
|
||||
github.com/aws/aws-sdk-go-v2 v1.36.5/go.mod h1:EYrzvCCN9CMUTa5+6lf6MM4tq3Zjp8UhSGR/cBsjai0=
|
||||
github.com/aws/aws-sdk-go-v2 v1.36.6 h1:zJqGjVbRdTPojeCGWn5IR5pbJwSQSBh5RWFTQcEQGdU=
|
||||
github.com/aws/aws-sdk-go-v2 v1.36.6/go.mod h1:EYrzvCCN9CMUTa5+6lf6MM4tq3Zjp8UhSGR/cBsjai0=
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.11 h1:12SpdwU8Djs+YGklkinSSlcrPyj3H4VifVsKf78KbwA=
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.11/go.mod h1:dd+Lkp6YmMryke+qxW/VnKyhMBDTYP41Q2Bb+6gNZgY=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.29.17 h1:jSuiQ5jEe4SAMH6lLRMY9OVC+TqJLP5655pBGjmnjr0=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.29.17/go.mod h1:9P4wwACpbeXs9Pm9w1QTh6BwWwJjwYvJ1iCt5QbCXh8=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.70 h1:ONnH5CM16RTXRkS8Z1qg7/s2eDOhHhaXVd72mmyv4/0=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.70/go.mod h1:M+lWhhmomVGgtuPOhO85u4pEa3SmssPTdcYpP/5J/xc=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.32 h1:KAXP9JSHO1vKGCr5f4O6WmlVKLFFXgWYAGoJosorxzU=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.32/go.mod h1:h4Sg6FQdexC1yYG9RDnOvLbW1a/P986++/Y/a+GyEM8=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.36 h1:SsytQyTMHMDPspp+spo7XwXTP44aJZZAC7fBV2C5+5s=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.36/go.mod h1:Q1lnJArKRXkenyog6+Y+zr7WDpk4e6XlR6gs20bbeNo=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.36 h1:i2vNHQiXUvKhs3quBR6aqlgJaiaexz/aNvdCktW/kAM=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.36/go.mod h1:UdyGa7Q91id/sdyHPwth+043HhmP6yP9MBHgbZM0xo8=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.29.18 h1:x4T1GRPnqKV8HMJOMtNktbpQMl3bIsfx8KbqmveUO2I=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.29.18/go.mod h1:bvz8oXugIsH8K7HLhBv06vDqnFv3NsGDt2Znpk7zmOU=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.71 h1:r2w4mQWnrTMJjOyIsZtGp3R3XGY3nqHn8C26C2lQWgA=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.71/go.mod h1:E7VF3acIup4GB5ckzbKFrCK0vTvEQxOxgdq4U3vcMCY=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.33 h1:D9ixiWSG4lyUBL2DDNK924Px9V/NBVpML90MHqyTADY=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.33/go.mod h1:caS/m4DI+cij2paz3rtProRBI4s/+TCiWoaWZuQ9010=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.37 h1:osMWfm/sC/L4tvEdQ65Gri5ZZDCUpuYJZbTTDrsn4I0=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.37/go.mod h1:ZV2/1fbjOPr4G4v38G3Ww5TBT4+hmsK45s/rxu1fGy0=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.37 h1:v+X21AvTb2wZ+ycg1gx+orkB/9U6L7AOp93R7qYxsxM=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.37/go.mod h1:G0uM1kyssELxmJ2VZEfG0q2npObR3BAkF3c1VsfVnfs=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo=
|
||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.36 h1:GMYy2EOWfzdP3wfVAGXBNKY5vK4K8vMET4sYOYltmqs=
|
||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.36/go.mod h1:gDhdAV6wL3PmPqBhiPbnlS447GoWs8HTTOYef9/9Inw=
|
||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.37 h1:XTZZ0I3SZUHAtBLBU6395ad+VOblE0DwQP6MuaNeics=
|
||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.37/go.mod h1:Pi6ksbniAWVwu2S8pEzcYPyhUkAcLaufxN7PfAUQjBk=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.4 h1:CXV68E2dNqhuynZJPB80bhPQwAKqBWVer887figW6Jc=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.4/go.mod h1:/xFi9KtvBXP97ppCz1TAEvU1Uf66qvid89rbem3wCzQ=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.4 h1:nAP2GYbfh8dd2zGZqFRSMlq+/F6cMPBUuCsGAMkN074=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.4/go.mod h1:LT10DsiGjLWh4GbjInf9LQejkYEhBgBCjLG5+lvk4EE=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.17 h1:t0E6FzREdtCsiLIoLCWsYliNsRBgyGD/MCK571qk4MI=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.17/go.mod h1:ygpklyoaypuyDvOM5ujWGrYWpAK3h7ugnmKCU/76Ys4=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.17 h1:qcLWgdhq45sDM9na4cvXax9dyLitn8EYBRl8Ak4XtG4=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.17/go.mod h1:M+jkjBFZ2J6DJrjMv2+vkBbuht6kxJYtJiwoVgX4p4U=
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.84.0 h1:0reDqfEN+tB+sozj2r92Bep8MEwBZgtAXTND1Kk9OXg=
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.84.0/go.mod h1:kUklwasNoCn5YpyAqC/97r6dzTA1SRKJfKq16SXeoDU=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.25.5 h1:AIRJ3lfb2w/1/8wOOSqYb9fUKGwQbtysJ2H1MofRUPg=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.25.5/go.mod h1:b7SiVprpU+iGazDUqvRSLf5XmCdn+JtT1on7uNL6Ipc=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.3 h1:BpOxT3yhLwSJ77qIY3DoHAQjZsc4HEGfMCE4NGy3uFg=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.3/go.mod h1:vq/GQR1gOFLquZMSrxUK/cpvKCNVYibNyJ1m7JrU88E=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.34.0 h1:NFOJ/NXEGV4Rq//71Hs1jC/NvPs1ezajK+yQmkwnPV0=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.34.0/go.mod h1:7ph2tGpfQvwzgistp2+zga9f+bCjlQJPkPUmMgDSD7w=
|
||||
github.com/aws/smithy-go v1.22.4 h1:uqXzVZNuNexwc/xrh6Tb56u89WDlJY6HS+KC0S4QSjw=
|
||||
github.com/aws/smithy-go v1.22.4/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.5 h1:M5/B8JUaCI8+9QD+u3S/f4YHpvqE9RpSkV3rf0Iks2w=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.5/go.mod h1:Bktzci1bwdbpuLiu3AOksiNPMl/LLKmX1TWmqp2xbvs=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.18 h1:vvbXsA2TVO80/KT7ZqCbx934dt6PY+vQ8hZpUZ/cpYg=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.18/go.mod h1:m2JJHledjBGNMsLOF1g9gbAxprzq3KjC8e4lxtn+eWg=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.18 h1:OS2e0SKqsU2LiJPqL8u9x41tKc6MMEHrWjLVLn3oysg=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.18/go.mod h1:+Yrk+MDGzlNGxCXieljNeWpoZTCQUQVL+Jk9hGGJ8qM=
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.84.1 h1:RkHXU9jP0DptGy7qKI8CBGsUJruWz0v5IgwBa2DwWcU=
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.84.1/go.mod h1:3xAOf7tdKF+qbb+XpU+EPhNXAdun3Lu1RcDrj8KC24I=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.25.6 h1:rGtWqkQbPk7Bkwuv3NzpE/scwwL9sC1Ul3tn9x83DUI=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.25.6/go.mod h1:u4ku9OLv4TO4bCPdxf4fA1upaMaJmP9ZijGk3AAOC6Q=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.4 h1:OV/pxyXh+eMA0TExHEC4jyWdumLxNbzz1P0zJoezkJc=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.4/go.mod h1:8Mm5VGYwtm+r305FfPSuc+aFkrypeylGYhFim6XEPoc=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.34.1 h1:aUrLQwJfZtwv3/ZNG2xRtEen+NqI3iesuacjP51Mv1s=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.34.1/go.mod h1:3wFBZKoWnX3r+Sm7in79i54fBmNfwhdNdQuscCw7QIk=
|
||||
github.com/aws/smithy-go v1.22.5 h1:P9ATCXPMb2mPjYBgueqJNCA5S9UfktsW0tTxi+a7eqw=
|
||||
github.com/aws/smithy-go v1.22.5/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI=
|
||||
github.com/caarlos0/env/v11 v11.3.1 h1:cArPWC15hWmEt+gWk7YBi7lEXTXCvpaSdCiZE2X5mCA=
|
||||
github.com/caarlos0/env/v11 v11.3.1/go.mod h1:qupehSf/Y0TUTsxKywqRt/vJjN5nz6vauiYEUUr8P4U=
|
||||
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
|
||||
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
|
||||
github.com/cenkalti/backoff/v5 v5.0.2 h1:rIfFVxEf1QsI7E1ZHfp/B4DF/6QBAUhmgkxc0H7Zss8=
|
||||
github.com/cenkalti/backoff/v5 v5.0.2/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
|
||||
github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM=
|
||||
github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
|
||||
github.com/cloudflare/cloudflare-go v0.115.0 h1:84/dxeeXweCc0PN5Cto44iTA8AkG1fyT11yPO5ZB7sM=
|
||||
github.com/cloudflare/cloudflare-go v0.115.0/go.mod h1:Ds6urDwn/TF2uIU24mu7H91xkKP8gSAHxQ44DSZgVmU=
|
||||
github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI=
|
||||
github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M=
|
||||
github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE=
|
||||
github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk=
|
||||
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
|
||||
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
|
||||
github.com/coreos/go-oidc/v3 v3.14.1 h1:9ePWwfdwC4QKRlCXsJGou56adA/owXczOzwKdOumLqk=
|
||||
@@ -77,8 +81,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
|
||||
github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
|
||||
github.com/docker/docker v27.4.1+incompatible h1:ZJvcY7gfwHn1JF48PfbyXg7Jyt9ZCWDW+GGXOIxEwp4=
|
||||
github.com/docker/docker v27.4.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/docker v28.3.2+incompatible h1:wn66NJ6pWB1vBZIilP8G3qQPqHy5XymfYn5vsqeA5oA=
|
||||
github.com/docker/docker v28.3.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
|
||||
github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
|
||||
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
|
||||
@@ -91,8 +95,8 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2
|
||||
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
||||
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
|
||||
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
|
||||
github.com/go-acme/lego/v4 v4.24.0 h1:pe0q49JKxfSGEP3lkgkMVQrZM1KbD+e0dpJ2McYsiVw=
|
||||
github.com/go-acme/lego/v4 v4.24.0/go.mod h1:hkstZY6D0jylIrZbuNmEQrWQxTIfaJH7prwaWvKDOjw=
|
||||
github.com/go-acme/lego/v4 v4.25.1 h1:AYPUM7quPN/g2PcjjWw8sAMz3eV+Z8UWkr1kitDOyVA=
|
||||
github.com/go-acme/lego/v4 v4.25.1/go.mod h1:OORYyVNZPaNdIdVYCGSBNRNZDIjhQbPuFxwGDgWj/yM=
|
||||
github.com/go-jose/go-jose/v4 v4.1.1 h1:JYhSgy4mXXzAdF3nUx3ygx347LRXJRrpgyU3adRmkAI=
|
||||
github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA=
|
||||
github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
|
||||
@@ -136,8 +140,8 @@ github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKe
|
||||
github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
|
||||
github.com/http-wasm/http-wasm-host-go v0.7.0 h1:+1KrRyOO6tWiDB24QrtSYyDmzFLBBs3jioKaUT0mq1c=
|
||||
github.com/http-wasm/http-wasm-host-go v0.7.0/go.mod h1:adXKcLmL7yuavH/e0kBAp7b3TgAHTo/enCduyN5bXGM=
|
||||
github.com/hypersequent/zen v0.0.0-20250317110808-f521ea1d4fc3 h1:hql4suSs7RG3+t5UyjdPXIzBmXg6AyFoqRRF+TPR3yY=
|
||||
github.com/hypersequent/zen v0.0.0-20250317110808-f521ea1d4fc3/go.mod h1:uJ9mqUok1RHIAoVlkWxPHJqXNLwhLzh7jCUbp2V9Rws=
|
||||
github.com/hypersequent/zen v0.0.0-20250722075626-67d8f7873a72 h1:UZDF6GL/6lKg4U+s0BoliT6SMmFtv3H+iRe074FDtVQ=
|
||||
github.com/hypersequent/zen v0.0.0-20250722075626-67d8f7873a72/go.mod h1:uJ9mqUok1RHIAoVlkWxPHJqXNLwhLzh7jCUbp2V9Rws=
|
||||
github.com/jarcoal/httpmock v1.4.0 h1:BvhqnH0JAYbNudL2GMJKgOHe2CtKlzJ/5rWKyp+hc2k=
|
||||
github.com/jarcoal/httpmock v1.4.0/go.mod h1:ftW1xULwo+j0R0JJkJIIi7UKigZUXCLLanykgjwBXL0=
|
||||
github.com/joeig/go-powerdns/v3 v3.16.0 h1:d6k0dVlBYr+B9P5U+74rVY1VmQxUG6Qdtlb3F33cBLQ=
|
||||
@@ -163,6 +167,10 @@ github.com/miekg/dns v1.1.67 h1:kg0EHj0G4bfT5/oOys6HhZw4vmMlnoZ+gDu8tJ/AlI0=
|
||||
github.com/miekg/dns v1.1.67/go.mod h1:fujopn7TB3Pu3JM69XaawiU0wqjpL9/8xGop5UrTPps=
|
||||
github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
|
||||
github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
|
||||
github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw=
|
||||
github.com/moby/sys/atomicwriter v0.1.0/go.mod h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs=
|
||||
github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU=
|
||||
github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko=
|
||||
github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
|
||||
github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||
@@ -211,8 +219,8 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf
|
||||
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/traefik/paerser v0.2.2 h1:cpzW/ZrQrBh3mdwD/jnp6aXASiUFKOVr6ldP+keJTcQ=
|
||||
github.com/traefik/paerser v0.2.2/go.mod h1:7BBDd4FANoVgaTZG+yh26jI6CA2nds7D/4VTEdIsh24=
|
||||
github.com/traefik/traefik/v3 v3.4.4 h1:nyED7zCMwiDMDk3Ir2dIEulZ0MmFcUoe3tGGFriRlHs=
|
||||
github.com/traefik/traefik/v3 v3.4.4/go.mod h1:Y4hpTBVjDgNp4YlTMp4cope+H0aZ8isgFD50QIyxxa0=
|
||||
github.com/traefik/traefik/v3 v3.4.5 h1:vamkf2bL9ZUlir8h0vpfYZXGFcrnuiMCcAGMZhiLWJ8=
|
||||
github.com/traefik/traefik/v3 v3.4.5/go.mod h1:rwq0+07S6ugXdFuB250anSgLQFOVDFvqurNR1BVDocw=
|
||||
github.com/unrolled/render v1.7.0 h1:1yke01/tZiZpiXfUG+zqB+6fq3G4I+KDmnh0EhPq7So=
|
||||
github.com/unrolled/render v1.7.0/go.mod h1:LwQSeDhjml8NLjIO9GJO1/1qpFJxtfVIpzxXKjfVkoI=
|
||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
@@ -221,8 +229,8 @@ go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJyS
|
||||
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
|
||||
go.opentelemetry.io/collector/pdata v1.10.0 h1:oLyPLGvPTQrcRT64ZVruwvmH/u3SHTfNo01pteS4WOE=
|
||||
go.opentelemetry.io/collector/pdata v1.10.0/go.mod h1:IHxHsp+Jq/xfjORQMDJjSH6jvedOSTOyu3nbxqhWSYE=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 h1:CV7UdSGJt/Ao6Gp4CXckLxVRRsRgDHoI8XjbL3PDl8s=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0/go.mod h1:FRmFuRJfag1IZ2dPkHnEoSFVgTVPUd2qf5Vi69hLb8I=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
|
||||
go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ=
|
||||
go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.13.0 h1:z6lNIajgEBVtQZHjfw2hAccPEBDs+nx58VemmXWa2ec=
|
||||
@@ -245,8 +253,8 @@ go.opentelemetry.io/otel/sdk/log v0.13.0 h1:I3CGUszjM926OphK8ZdzF+kLqFvfRY/IIoFq
|
||||
go.opentelemetry.io/otel/sdk/log v0.13.0/go.mod h1:lOrQyCCXmpZdN7NchXb6DOZZa1N5G1R2tm5GMMTpDBw=
|
||||
go.opentelemetry.io/otel/sdk/log/logtest v0.13.0 h1:9yio6AFZ3QD9j9oqshV1Ibm9gPLlHNxurno5BreMtIA=
|
||||
go.opentelemetry.io/otel/sdk/log/logtest v0.13.0/go.mod h1:QOGiAJHl+fob8Nu85ifXfuQYmJTFAvcrxL6w5/tu168=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.35.0 h1:1RriWBmCKgkeHEhM7a2uMjMUfP7MsOF5JpUCaEqEI9o=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
|
||||
go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4=
|
||||
go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0=
|
||||
go.opentelemetry.io/proto/otlp v1.7.0 h1:jX1VolD6nHuFzOYso2E73H85i92Mv8JQYk0K9vz09os=
|
||||
@@ -255,17 +263,13 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
||||
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
|
||||
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
|
||||
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
|
||||
go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI=
|
||||
go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU=
|
||||
go.yaml.in/yaml/v3 v3.0.3 h1:bXOww4E/J3f66rav3pX3m8w6jDE4knZjGOw8b5Y6iNE=
|
||||
go.yaml.in/yaml/v3 v3.0.3/go.mod h1:tBHosrYAkRZjRAOREWbDnBXUf08JOwYq++0QNwQiWzI=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM=
|
||||
golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY=
|
||||
golang.org/x/exp v0.0.0-20250711185948-6ae5c78190dc h1:TS73t7x3KarrNd5qAipmspBDS1rkMcgVG/fS1aRb4Rc=
|
||||
golang.org/x/exp v0.0.0-20250711185948-6ae5c78190dc/go.mod h1:A+z0yzpGtvnG90cToK5n2tu8UJVP2XUATh+r+sfOOOc=
|
||||
golang.org/x/exp v0.0.0-20250718183923-645b1fa84792 h1:R9PFI6EUdfVKgwKjZef7QIwGcBKu86OEFpJ9nUEP2l4=
|
||||
golang.org/x/exp v0.0.0-20250718183923-645b1fa84792/go.mod h1:A+z0yzpGtvnG90cToK5n2tu8UJVP2XUATh+r+sfOOOc=
|
||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg=
|
||||
@@ -311,12 +315,12 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250715232539-7130f93afb79 h1:iOye66xuaAK0WnkPuhQPUFy8eJcmwUXqGGP3om6IxX8=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250715232539-7130f93afb79/go.mod h1:HKJDgKsFUnv5VAGeQjz8kxcgDP0HoE0iZNp0OdZNlhE=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250715232539-7130f93afb79 h1:1ZwqphdOdWYXsUHgMpU/101nCtf/kSp9hOrcvFsnl10=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250715232539-7130f93afb79/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
|
||||
google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok=
|
||||
google.golang.org/grpc v1.73.0/go.mod h1:50sbHOUqWoCQGI8V2HQLJM0B+LMlIUjNSZmow7EVBQc=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250721164621-a45f3dfb1074 h1:mVXdvnmR3S3BQOqHECm9NGMjYiRtEvDYcqAqedTXY6s=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250721164621-a45f3dfb1074/go.mod h1:vYFwMYFbmA8vl6Z/krj/h7+U/AqpHknwJX4Uqgfyc7I=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250721164621-a45f3dfb1074 h1:qJW29YvkiJmXOYMu5Tf8lyrTp3dOS+K4z6IixtLaCf8=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250721164621-a45f3dfb1074/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
|
||||
google.golang.org/grpc v1.74.2 h1:WoosgB65DlWVC9FqI82dGsZhWFNBSLjQ84bjROOpMu4=
|
||||
google.golang.org/grpc v1.74.2/go.mod h1:CtQ+BGjaAIXHs/5YS3i473GqwBBa1zGQNevxdeBEXrM=
|
||||
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
|
||||
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
@@ -337,8 +341,8 @@ modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI=
|
||||
modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito=
|
||||
modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks=
|
||||
modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI=
|
||||
modernc.org/libc v1.66.3 h1:cfCbjTUcdsKyyZZfEUKfoHcP3S0Wkvz3jgSzByEWVCQ=
|
||||
modernc.org/libc v1.66.3/go.mod h1:XD9zO8kt59cANKvHPXpx7yS2ELPheAey0vjIuZOhOU8=
|
||||
modernc.org/libc v1.66.4 h1:EW4EaqAVngI6f5KWiFibu41IYFMv/F7KEtR+NRHrS/Q=
|
||||
modernc.org/libc v1.66.4/go.mod h1:XD9zO8kt59cANKvHPXpx7yS2ELPheAey0vjIuZOhOU8=
|
||||
modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU=
|
||||
modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg=
|
||||
modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI=
|
||||
@@ -347,11 +351,9 @@ modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8=
|
||||
modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns=
|
||||
modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w=
|
||||
modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE=
|
||||
modernc.org/sqlite v1.38.0 h1:+4OrfPQ8pxHKuWG4md1JpR/EYAh3Md7TdejuuzE7EUI=
|
||||
modernc.org/sqlite v1.38.0/go.mod h1:1Bj+yES4SVvBZ4cBOpVZ6QgesMCKpJZDq0nxYzOpmNE=
|
||||
modernc.org/sqlite v1.38.1 h1:jNnIjleVta+DKSAr3TnkKK87EEhjPhBLzi6hvIX9Bas=
|
||||
modernc.org/sqlite v1.38.1/go.mod h1:cPTJYSlgg3Sfg046yBShXENNtPrWrDX8bsbAQBzgQ5E=
|
||||
modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0=
|
||||
modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A=
|
||||
modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
|
||||
modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
|
||||
sigs.k8s.io/yaml v1.5.0 h1:M10b2U7aEUY6hRtU870n2VTPgR5RZiL/I6Lcc2F4NUQ=
|
||||
sigs.k8s.io/yaml v1.5.0/go.mod h1:wZs27Rbxoai4C0f8/9urLZtZtF3avA3gKvGyPdDqTO4=
|
||||
|
||||
@@ -13,10 +13,10 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/mizuchilabs/mantrae/internal/config"
|
||||
"github.com/mizuchilabs/mantrae/internal/convert"
|
||||
"github.com/mizuchilabs/mantrae/internal/storage"
|
||||
"github.com/mizuchilabs/mantrae/internal/traefik"
|
||||
"github.com/traefik/traefik/v3/pkg/config/dynamic"
|
||||
"sigs.k8s.io/yaml"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
func UploadAvatar(a *config.App) http.HandlerFunc {
|
||||
@@ -173,7 +173,7 @@ func UploadBackup(a *config.App) http.HandlerFunc {
|
||||
return
|
||||
}
|
||||
|
||||
if err = convert.DynamicToDB(r.Context(), *a.Conn.GetQuery(), profileIDValue, dynamic); err != nil {
|
||||
if err = traefik.DynamicToDB(r.Context(), *a.Conn.GetQuery(), profileIDValue, dynamic); err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -159,7 +159,6 @@ func (s *Server) registerServices() {
|
||||
mantraev1connect.BackupServiceName,
|
||||
mantraev1connect.UtilServiceName,
|
||||
mantraev1connect.AuditLogServiceName,
|
||||
// mantraev1connect.EventServiceName,
|
||||
}
|
||||
|
||||
checker := grpchealth.NewStaticChecker(serviceNames...)
|
||||
@@ -256,10 +255,6 @@ func (s *Server) registerServices() {
|
||||
service.NewAuditLogService(s.app),
|
||||
opts...,
|
||||
))
|
||||
// s.mux.Handle(mantraev1connect.NewEventServiceHandler(
|
||||
// service.NewEventService(s.app),
|
||||
// opts...,
|
||||
// ))
|
||||
|
||||
// HTTP middlewares -------------------------------------------------------
|
||||
mw := middlewares.NewMiddlewareHandler(s.app)
|
||||
|
||||
@@ -10,7 +10,6 @@ import (
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/mizuchilabs/mantrae/internal/config"
|
||||
"github.com/mizuchilabs/mantrae/internal/convert"
|
||||
"github.com/mizuchilabs/mantrae/internal/settings"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
"github.com/mizuchilabs/mantrae/pkg/meta"
|
||||
@@ -33,9 +32,8 @@ func (s *AgentService) GetAgent(
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.GetAgentResponse{
|
||||
Agent: convert.AgentToProto(&result),
|
||||
Agent: result.ToProto(),
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -43,38 +41,31 @@ func (s *AgentService) CreateAgent(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.CreateAgentRequest],
|
||||
) (*connect.Response[mantraev1.CreateAgentResponse], error) {
|
||||
id, err := uuid.NewV7()
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
params := db.CreateAgentParams{
|
||||
ID: uuid.NewString(),
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
}
|
||||
|
||||
serverURL, err := s.app.Conn.GetQuery().GetSetting(ctx, settings.KeyServerURL)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
if serverURL.Value == "" {
|
||||
serverURL, ok := s.app.SM.Get(ctx, settings.KeyServerURL)
|
||||
if !ok || serverURL == "" {
|
||||
return nil, connect.NewError(
|
||||
connect.CodeInvalidArgument,
|
||||
connect.CodeInternal,
|
||||
errors.New("server url is required, check your settings"),
|
||||
)
|
||||
}
|
||||
|
||||
token, err := s.createToken(id.String(), req.Msg.ProfileId)
|
||||
token, err := s.createToken(params.ID, req.Msg.ProfileId)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
params.Token = *token
|
||||
|
||||
result, err := s.app.Conn.GetQuery().CreateAgent(ctx, db.CreateAgentParams{
|
||||
ID: id.String(),
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
Token: *token,
|
||||
})
|
||||
result, err := s.app.Conn.GetQuery().CreateAgent(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.CreateAgentResponse{
|
||||
Agent: convert.AgentToProto(&result),
|
||||
Agent: result.ToProto(),
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -82,19 +73,20 @@ func (s *AgentService) UpdateAgentIP(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.UpdateAgentIPRequest],
|
||||
) (*connect.Response[mantraev1.UpdateAgentIPResponse], error) {
|
||||
if err := s.app.Conn.GetQuery().UpdateAgentIP(ctx, db.UpdateAgentIPParams{
|
||||
params := db.UpdateAgentIPParams{
|
||||
ID: req.Msg.Id,
|
||||
ActiveIp: &req.Msg.Ip,
|
||||
}); err != nil {
|
||||
}
|
||||
|
||||
if err := s.app.Conn.GetQuery().UpdateAgentIP(ctx, params); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
result, err := s.app.Conn.GetQuery().GetAgent(ctx, req.Msg.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.UpdateAgentIPResponse{
|
||||
Agent: convert.AgentToProto(&result),
|
||||
Agent: result.ToProto(),
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -105,7 +97,6 @@ func (s *AgentService) DeleteAgent(
|
||||
if err := s.app.Conn.GetQuery().DeleteAgent(ctx, req.Msg.Id); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.DeleteAgentResponse{}), nil
|
||||
}
|
||||
|
||||
@@ -113,30 +104,26 @@ func (s *AgentService) ListAgents(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.ListAgentsRequest],
|
||||
) (*connect.Response[mantraev1.ListAgentsResponse], error) {
|
||||
var params db.ListAgentsParams
|
||||
params.ProfileID = req.Msg.ProfileId
|
||||
if req.Msg.Limit == nil {
|
||||
params.Limit = 100
|
||||
} else {
|
||||
params.Limit = *req.Msg.Limit
|
||||
}
|
||||
if req.Msg.Offset == nil {
|
||||
params.Offset = 0
|
||||
} else {
|
||||
params.Offset = *req.Msg.Offset
|
||||
params := db.ListAgentsParams{
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
Limit: req.Msg.Limit,
|
||||
Offset: req.Msg.Offset,
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().ListAgents(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
totalCount, err := s.app.Conn.GetQuery().CountAgents(ctx)
|
||||
totalCount, err := s.app.Conn.GetQuery().CountAgents(ctx, req.Msg.ProfileId)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
agents := make([]*mantraev1.Agent, 0, len(result))
|
||||
for _, a := range result {
|
||||
agents = append(agents, a.ToProto())
|
||||
}
|
||||
return connect.NewResponse(&mantraev1.ListAgentsResponse{
|
||||
Agents: convert.AgentsToProto(result),
|
||||
Agents: agents,
|
||||
TotalCount: totalCount,
|
||||
}), nil
|
||||
}
|
||||
@@ -189,7 +176,7 @@ func (s *AgentService) HealthCheck(
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.HealthCheckResponse{
|
||||
Agent: convert.AgentToProto(&result),
|
||||
Agent: result.ToProto(),
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -197,24 +184,24 @@ func (s *AgentService) RotateAgentToken(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.RotateAgentTokenRequest],
|
||||
) (*connect.Response[mantraev1.RotateAgentTokenResponse], error) {
|
||||
agent, err := s.app.Conn.GetQuery().GetAgent(ctx, req.Msg.Id)
|
||||
result, err := s.app.Conn.GetQuery().GetAgent(ctx, req.Msg.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
token, err := s.createToken(agent.ID, agent.ProfileID)
|
||||
token, err := s.createToken(result.ID, result.ProfileID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err = s.app.Conn.GetQuery().UpdateAgentToken(ctx, db.UpdateAgentTokenParams{
|
||||
ID: agent.ID,
|
||||
ID: result.ID,
|
||||
Token: *token,
|
||||
}); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.RotateAgentTokenResponse{
|
||||
Agent: convert.AgentToProto(&agent),
|
||||
Agent: result.ToProto(),
|
||||
}), nil
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@ import (
|
||||
"connectrpc.com/connect"
|
||||
|
||||
"github.com/mizuchilabs/mantrae/internal/config"
|
||||
"github.com/mizuchilabs/mantrae/internal/convert"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
@@ -23,16 +22,9 @@ func (s *AuditLogService) ListAuditLogs(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.ListAuditLogsRequest],
|
||||
) (*connect.Response[mantraev1.ListAuditLogsResponse], error) {
|
||||
var params db.ListAuditLogsParams
|
||||
if req.Msg.Limit == nil {
|
||||
params.Limit = 100
|
||||
} else {
|
||||
params.Limit = *req.Msg.Limit
|
||||
}
|
||||
if req.Msg.Offset == nil {
|
||||
params.Offset = 0
|
||||
} else {
|
||||
params.Offset = *req.Msg.Offset
|
||||
params := db.ListAuditLogsParams{
|
||||
Limit: req.Msg.Limit,
|
||||
Offset: req.Msg.Offset,
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().ListAuditLogs(ctx, params)
|
||||
@@ -44,8 +36,12 @@ func (s *AuditLogService) ListAuditLogs(
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
auditLogs := make([]*mantraev1.AuditLog, 0, len(result))
|
||||
for _, l := range result {
|
||||
auditLogs = append(auditLogs, l.ToProto())
|
||||
}
|
||||
return connect.NewResponse(&mantraev1.ListAuditLogsResponse{
|
||||
AuditLogs: convert.AuditLogsToProto(result),
|
||||
AuditLogs: auditLogs,
|
||||
TotalCount: totalCount,
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
|
||||
"connectrpc.com/connect"
|
||||
"github.com/mizuchilabs/mantrae/internal/config"
|
||||
"github.com/mizuchilabs/mantrae/internal/convert"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
|
||||
@@ -27,7 +27,6 @@ func (s *BackupService) CreateBackup(
|
||||
if err := s.app.BM.Create(ctx); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.CreateBackupResponse{}), nil
|
||||
}
|
||||
|
||||
@@ -45,7 +44,7 @@ func (s *BackupService) ListBackups(
|
||||
backups = append(backups, &mantraev1.Backup{
|
||||
Name: file.Name,
|
||||
Size: file.Size,
|
||||
CreatedAt: convert.SafeTimestamp(file.Timestamp),
|
||||
CreatedAt: db.SafeTimestamp(file.Timestamp),
|
||||
})
|
||||
}
|
||||
return connect.NewResponse(&mantraev1.ListBackupsResponse{Backups: backups}), nil
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"connectrpc.com/connect"
|
||||
|
||||
"github.com/mizuchilabs/mantrae/internal/config"
|
||||
"github.com/mizuchilabs/mantrae/internal/convert"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/schema"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
@@ -29,9 +28,8 @@ func (s *DnsProviderService) GetDnsProvider(
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.GetDnsProviderResponse{
|
||||
DnsProvider: convert.DNSProviderToProto(&result),
|
||||
DnsProvider: result.ToProto(),
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -78,7 +76,7 @@ func (s *DnsProviderService) CreateDnsProvider(
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(&mantraev1.CreateDnsProviderResponse{
|
||||
DnsProvider: convert.DNSProviderToProto(&result),
|
||||
DnsProvider: result.ToProto(),
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -126,7 +124,7 @@ func (s *DnsProviderService) UpdateDnsProvider(
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(&mantraev1.UpdateDnsProviderResponse{
|
||||
DnsProvider: convert.DNSProviderToProto(&result),
|
||||
DnsProvider: result.ToProto(),
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -144,16 +142,9 @@ func (s *DnsProviderService) ListDnsProviders(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.ListDnsProvidersRequest],
|
||||
) (*connect.Response[mantraev1.ListDnsProvidersResponse], error) {
|
||||
var params db.ListDnsProvidersParams
|
||||
if req.Msg.Limit == nil {
|
||||
params.Limit = 100
|
||||
} else {
|
||||
params.Limit = *req.Msg.Limit
|
||||
}
|
||||
if req.Msg.Offset == nil {
|
||||
params.Offset = 0
|
||||
} else {
|
||||
params.Offset = *req.Msg.Offset
|
||||
params := db.ListDnsProvidersParams{
|
||||
Limit: req.Msg.Limit,
|
||||
Offset: req.Msg.Offset,
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().ListDnsProviders(ctx, params)
|
||||
@@ -165,8 +156,12 @@ func (s *DnsProviderService) ListDnsProviders(
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
dnsProviders := make([]*mantraev1.DnsProvider, 0, len(result))
|
||||
for _, p := range result {
|
||||
dnsProviders = append(dnsProviders, p.ToProto())
|
||||
}
|
||||
return connect.NewResponse(&mantraev1.ListDnsProvidersResponse{
|
||||
DnsProviders: convert.DNSProvidersToProto(result),
|
||||
DnsProviders: dnsProviders,
|
||||
TotalCount: totalCount,
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"connectrpc.com/connect"
|
||||
|
||||
"github.com/mizuchilabs/mantrae/internal/config"
|
||||
"github.com/mizuchilabs/mantrae/internal/convert"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
@@ -29,7 +28,7 @@ func (s *EntryPointService) GetEntryPoint(
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(&mantraev1.GetEntryPointResponse{
|
||||
EntryPoint: convert.EntryPointToProto(&result),
|
||||
EntryPoint: result.ToProto(),
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -54,7 +53,7 @@ func (s *EntryPointService) CreateEntryPoint(
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(&mantraev1.CreateEntryPointResponse{
|
||||
EntryPoint: convert.EntryPointToProto(&result),
|
||||
EntryPoint: result.ToProto(),
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -84,7 +83,7 @@ func (s *EntryPointService) UpdateEntryPoint(
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(&mantraev1.UpdateEntryPointResponse{
|
||||
EntryPoint: convert.EntryPointToProto(&result),
|
||||
EntryPoint: result.ToProto(),
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -95,7 +94,6 @@ func (s *EntryPointService) DeleteEntryPoint(
|
||||
if err := s.updateRouterEntrypoints(ctx, req.Msg.Id, ""); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
if err := s.app.Conn.GetQuery().DeleteEntryPointByID(ctx, req.Msg.Id); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
@@ -106,30 +104,27 @@ func (s *EntryPointService) ListEntryPoints(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.ListEntryPointsRequest],
|
||||
) (*connect.Response[mantraev1.ListEntryPointsResponse], error) {
|
||||
var params db.ListEntryPointsParams
|
||||
params.ProfileID = req.Msg.ProfileId
|
||||
if req.Msg.Limit == nil {
|
||||
params.Limit = 100
|
||||
} else {
|
||||
params.Limit = *req.Msg.Limit
|
||||
}
|
||||
if req.Msg.Offset == nil {
|
||||
params.Offset = 0
|
||||
} else {
|
||||
params.Offset = *req.Msg.Offset
|
||||
params := db.ListEntryPointsParams{
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
Limit: req.Msg.Limit,
|
||||
Offset: req.Msg.Offset,
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().ListEntryPoints(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
totalCount, err := s.app.Conn.GetQuery().CountEntryPoints(ctx)
|
||||
totalCount, err := s.app.Conn.GetQuery().CountEntryPoints(ctx, req.Msg.ProfileId)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
entryPoints := make([]*mantraev1.EntryPoint, 0, len(result))
|
||||
for _, e := range result {
|
||||
entryPoints = append(entryPoints, e.ToProto())
|
||||
}
|
||||
return connect.NewResponse(&mantraev1.ListEntryPointsResponse{
|
||||
EntryPoints: convert.EntryPointsToProto(result),
|
||||
EntryPoints: entryPoints,
|
||||
TotalCount: totalCount,
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"connectrpc.com/connect"
|
||||
"github.com/mizuchilabs/mantrae/internal/config"
|
||||
"github.com/mizuchilabs/mantrae/internal/events"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
|
||||
type EventService struct {
|
||||
app *config.App
|
||||
}
|
||||
|
||||
func NewEventService(app *config.App) *EventService {
|
||||
return &EventService{app: app}
|
||||
}
|
||||
|
||||
func (s *EventService) ProfileEvents(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.ProfileEventsRequest],
|
||||
stream *connect.ServerStream[mantraev1.ProfileEventsResponse],
|
||||
) error {
|
||||
// Create filtered event channel
|
||||
eventChan := make(chan *mantraev1.ProfileEvent, 100)
|
||||
|
||||
// Register with broadcaster
|
||||
filter := &events.EventFilter{
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
ResourceTypes: req.Msg.ResourceTypes,
|
||||
}
|
||||
|
||||
s.app.Event.RegisterProfileClient(filter, eventChan)
|
||||
defer s.app.Event.UnregisterProfileClient(eventChan)
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return ctx.Err()
|
||||
case event := <-eventChan:
|
||||
res := &mantraev1.ProfileEventsResponse{Event: event}
|
||||
if err := stream.Send(res); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (s *EventService) GlobalEvents(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.GlobalEventsRequest],
|
||||
stream *connect.ServerStream[mantraev1.GlobalEventsResponse],
|
||||
) error {
|
||||
eventChan := make(chan *mantraev1.GlobalEvent, 100)
|
||||
filter := &events.GlobalEventFilter{ResourceTypes: req.Msg.ResourceTypes}
|
||||
|
||||
s.app.Event.RegisterGlobalClient(filter, eventChan)
|
||||
defer s.app.Event.UnregisterGlobalClient(eventChan)
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return ctx.Err()
|
||||
case event := <-eventChan:
|
||||
res := &mantraev1.GlobalEventsResponse{Event: event}
|
||||
if err := stream.Send(res); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,382 +11,143 @@ import (
|
||||
"connectrpc.com/connect"
|
||||
|
||||
"github.com/mizuchilabs/mantrae/internal/config"
|
||||
"github.com/mizuchilabs/mantrae/internal/convert"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/schema"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
|
||||
type MiddlewareService struct {
|
||||
app *config.App
|
||||
app *config.App
|
||||
dispatch map[mantraev1.MiddlewareType]MiddlewareOps
|
||||
}
|
||||
|
||||
func NewMiddlewareService(app *config.App) *MiddlewareService {
|
||||
return &MiddlewareService{app: app}
|
||||
return &MiddlewareService{
|
||||
app: app,
|
||||
dispatch: map[mantraev1.MiddlewareType]MiddlewareOps{
|
||||
mantraev1.MiddlewareType_MIDDLEWARE_TYPE_HTTP: NewHTTPMiddlewareOps(app),
|
||||
mantraev1.MiddlewareType_MIDDLEWARE_TYPE_TCP: NewTCPMiddlewareOps(app),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (s *MiddlewareService) GetMiddleware(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.GetMiddlewareRequest],
|
||||
) (*connect.Response[mantraev1.GetMiddlewareResponse], error) {
|
||||
var middleware *mantraev1.Middleware
|
||||
|
||||
switch req.Msg.Type {
|
||||
case mantraev1.MiddlewareType_MIDDLEWARE_TYPE_HTTP:
|
||||
result, err := s.app.Conn.GetQuery().GetHttpMiddleware(ctx, req.Msg.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
middleware = convert.HTTPMiddlewareToProto(&result)
|
||||
case mantraev1.MiddlewareType_MIDDLEWARE_TYPE_TCP:
|
||||
result, err := s.app.Conn.GetQuery().GetTcpMiddleware(ctx, req.Msg.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
middleware = convert.TCPMiddlewareToProto(&result)
|
||||
|
||||
default:
|
||||
ops, ok := s.dispatch[req.Msg.Type]
|
||||
if !ok {
|
||||
return nil, connect.NewError(
|
||||
connect.CodeInvalidArgument,
|
||||
errors.New("invalid middleware type"),
|
||||
)
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.GetMiddlewareResponse{Middleware: middleware}), nil
|
||||
result, err := ops.Get(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(result), nil
|
||||
}
|
||||
|
||||
func (s *MiddlewareService) CreateMiddleware(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.CreateMiddlewareRequest],
|
||||
) (*connect.Response[mantraev1.CreateMiddlewareResponse], error) {
|
||||
var middleware *mantraev1.Middleware
|
||||
var err error
|
||||
|
||||
switch req.Msg.Type {
|
||||
case mantraev1.MiddlewareType_MIDDLEWARE_TYPE_HTTP:
|
||||
params := db.CreateHttpMiddlewareParams{
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
Name: req.Msg.Name,
|
||||
IsDefault: req.Msg.IsDefault,
|
||||
}
|
||||
if req.Msg.AgentId != "" {
|
||||
params.AgentID = &req.Msg.AgentId
|
||||
}
|
||||
if req.Msg.IsDefault {
|
||||
if err = s.app.Conn.GetQuery().UnsetDefaultHttpMiddleware(ctx); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
}
|
||||
params.Config, err = convert.UnmarshalStruct[schema.HTTPMiddleware](req.Msg.Config)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
if err = params.Config.Verify(); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().CreateHttpMiddleware(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
middleware = convert.HTTPMiddlewareToProto(&result)
|
||||
|
||||
case mantraev1.MiddlewareType_MIDDLEWARE_TYPE_TCP:
|
||||
params := db.CreateTcpMiddlewareParams{
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
Name: req.Msg.Name,
|
||||
IsDefault: req.Msg.IsDefault,
|
||||
}
|
||||
if req.Msg.AgentId != "" {
|
||||
params.AgentID = &req.Msg.AgentId
|
||||
}
|
||||
if req.Msg.IsDefault {
|
||||
if err = s.app.Conn.GetQuery().UnsetDefaultTcpMiddleware(ctx); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
}
|
||||
params.Config, err = convert.UnmarshalStruct[schema.TCPMiddleware](req.Msg.Config)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().CreateTcpMiddleware(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
middleware = convert.TCPMiddlewareToProto(&result)
|
||||
|
||||
default:
|
||||
ops, ok := s.dispatch[req.Msg.Type]
|
||||
if !ok {
|
||||
return nil, connect.NewError(
|
||||
connect.CodeInvalidArgument,
|
||||
errors.New("invalid middleware type"),
|
||||
)
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.CreateMiddlewareResponse{Middleware: middleware}), nil
|
||||
result, err := ops.Create(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(result), nil
|
||||
}
|
||||
|
||||
func (s *MiddlewareService) UpdateMiddleware(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.UpdateMiddlewareRequest],
|
||||
) (*connect.Response[mantraev1.UpdateMiddlewareResponse], error) {
|
||||
var middleware *mantraev1.Middleware
|
||||
var err error
|
||||
|
||||
switch req.Msg.Type {
|
||||
case mantraev1.MiddlewareType_MIDDLEWARE_TYPE_HTTP:
|
||||
params := db.UpdateHttpMiddlewareParams{
|
||||
ID: req.Msg.Id,
|
||||
Name: req.Msg.Name,
|
||||
Enabled: req.Msg.Enabled,
|
||||
IsDefault: req.Msg.IsDefault,
|
||||
}
|
||||
params.Config, err = convert.UnmarshalStruct[schema.HTTPMiddleware](req.Msg.Config)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
if req.Msg.IsDefault {
|
||||
if err = s.app.Conn.GetQuery().UnsetDefaultHttpMiddleware(ctx); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
}
|
||||
|
||||
// Update router middlewares
|
||||
oldMiddleware, err := s.app.Conn.GetQuery().GetHttpMiddleware(ctx, params.ID)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
oldMiddlewareProto := convert.HTTPMiddlewareToProto(&oldMiddleware)
|
||||
if err = s.updateRouterMiddlewares(ctx, oldMiddlewareProto, req.Msg.Name); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().UpdateHttpMiddleware(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
middleware = convert.HTTPMiddlewareToProto(&result)
|
||||
|
||||
case mantraev1.MiddlewareType_MIDDLEWARE_TYPE_TCP:
|
||||
params := db.UpdateTcpMiddlewareParams{
|
||||
ID: req.Msg.Id,
|
||||
Name: req.Msg.Name,
|
||||
Enabled: req.Msg.Enabled,
|
||||
IsDefault: req.Msg.IsDefault,
|
||||
}
|
||||
params.Config, err = convert.UnmarshalStruct[schema.TCPMiddleware](req.Msg.Config)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
if req.Msg.IsDefault {
|
||||
if err = s.app.Conn.GetQuery().UnsetDefaultTcpMiddleware(ctx); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
}
|
||||
|
||||
// Update router middlewares
|
||||
oldMiddleware, err := s.app.Conn.GetQuery().GetTcpMiddleware(ctx, params.ID)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
oldMiddlewareProto := convert.TCPMiddlewareToProto(&oldMiddleware)
|
||||
if err = s.updateRouterMiddlewares(ctx, oldMiddlewareProto, req.Msg.Name); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().UpdateTcpMiddleware(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
middleware = convert.TCPMiddlewareToProto(&result)
|
||||
default:
|
||||
ops, ok := s.dispatch[req.Msg.Type]
|
||||
if !ok {
|
||||
return nil, connect.NewError(
|
||||
connect.CodeInvalidArgument,
|
||||
errors.New("invalid middleware type"),
|
||||
)
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.UpdateMiddlewareResponse{Middleware: middleware}), nil
|
||||
result, err := ops.Update(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(result), nil
|
||||
}
|
||||
|
||||
func (s *MiddlewareService) DeleteMiddleware(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.DeleteMiddlewareRequest],
|
||||
) (*connect.Response[mantraev1.DeleteMiddlewareResponse], error) {
|
||||
switch req.Msg.Type {
|
||||
case mantraev1.MiddlewareType_MIDDLEWARE_TYPE_HTTP:
|
||||
middleware, err := s.app.Conn.GetQuery().GetHttpMiddleware(ctx, req.Msg.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
mwProto := convert.HTTPMiddlewareToProto(&middleware)
|
||||
if err := s.updateRouterMiddlewares(ctx, mwProto, ""); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
if err := s.app.Conn.GetQuery().DeleteHttpMiddleware(ctx, req.Msg.Id); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
case mantraev1.MiddlewareType_MIDDLEWARE_TYPE_TCP:
|
||||
middleware, err := s.app.Conn.GetQuery().GetTcpMiddleware(ctx, req.Msg.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
mwProto := convert.TCPMiddlewareToProto(&middleware)
|
||||
if err := s.updateRouterMiddlewares(ctx, mwProto, ""); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
if err := s.app.Conn.GetQuery().DeleteTcpMiddleware(ctx, req.Msg.Id); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
ops, ok := s.dispatch[req.Msg.Type]
|
||||
if !ok {
|
||||
return nil, connect.NewError(
|
||||
connect.CodeInvalidArgument,
|
||||
errors.New("invalid middleware type"),
|
||||
)
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.DeleteMiddlewareResponse{}), nil
|
||||
result, err := ops.Delete(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(result), nil
|
||||
}
|
||||
|
||||
func (s *MiddlewareService) ListMiddlewares(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.ListMiddlewaresRequest],
|
||||
) (*connect.Response[mantraev1.ListMiddlewaresResponse], error) {
|
||||
var limit int64
|
||||
var offset int64
|
||||
if req.Msg.Limit == nil {
|
||||
limit = 100
|
||||
} else {
|
||||
limit = *req.Msg.Limit
|
||||
}
|
||||
if req.Msg.Offset == nil {
|
||||
offset = 0
|
||||
} else {
|
||||
offset = *req.Msg.Offset
|
||||
}
|
||||
|
||||
var middlewares []*mantraev1.Middleware
|
||||
var totalCount int64
|
||||
|
||||
if req.Msg.Type == nil {
|
||||
if req.Msg.AgentId == nil {
|
||||
result, err := s.app.Conn.GetQuery().
|
||||
ListMiddlewaresByProfile(ctx, db.ListMiddlewaresByProfileParams{
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
ProfileID_2: req.Msg.ProfileId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
totalCount, err = s.app.Conn.GetQuery().
|
||||
CountMiddlewaresByProfile(ctx, db.CountMiddlewaresByProfileParams{
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
ProfileID_2: req.Msg.ProfileId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
middlewares = convert.MiddlewaresByProfileToProto(result)
|
||||
} else {
|
||||
result, err := s.app.Conn.GetQuery().
|
||||
ListMiddlewaresByAgent(ctx, db.ListMiddlewaresByAgentParams{
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
AgentID: req.Msg.AgentId,
|
||||
AgentID_2: req.Msg.AgentId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
totalCount, err = s.app.Conn.GetQuery().
|
||||
CountMiddlewaresByAgent(ctx, db.CountMiddlewaresByAgentParams{
|
||||
AgentID: req.Msg.AgentId,
|
||||
AgentID_2: req.Msg.AgentId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
middlewares = convert.MiddlewaresByAgentToProto(result)
|
||||
}
|
||||
} else {
|
||||
var err error
|
||||
switch *req.Msg.Type {
|
||||
case mantraev1.MiddlewareType_MIDDLEWARE_TYPE_HTTP:
|
||||
if req.Msg.AgentId == nil {
|
||||
totalCount, err = s.app.Conn.GetQuery().CountHttpMiddlewaresByProfile(ctx, req.Msg.ProfileId)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
result, err := s.app.Conn.GetQuery().ListHttpMiddlewares(ctx, db.ListHttpMiddlewaresParams{
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
middlewares = convert.HTTPMiddlewaresToProto(result)
|
||||
} else {
|
||||
totalCount, err = s.app.Conn.GetQuery().CountHttpMiddlewaresByAgent(ctx, req.Msg.AgentId)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
result, err := s.app.Conn.GetQuery().ListHttpMiddlewaresByAgent(ctx, db.ListHttpMiddlewaresByAgentParams{
|
||||
AgentID: req.Msg.AgentId,
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
middlewares = convert.HTTPMiddlewaresToProto(result)
|
||||
}
|
||||
|
||||
case mantraev1.MiddlewareType_MIDDLEWARE_TYPE_TCP:
|
||||
if req.Msg.AgentId == nil {
|
||||
totalCount, err = s.app.Conn.GetQuery().CountTcpMiddlewaresByProfile(ctx, req.Msg.ProfileId)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
result, err := s.app.Conn.GetQuery().ListTcpMiddlewares(ctx, db.ListTcpMiddlewaresParams{
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
middlewares = convert.TCPMiddlewaresToProto(result)
|
||||
} else {
|
||||
totalCount, err = s.app.Conn.GetQuery().CountTcpMiddlewaresByAgent(ctx, req.Msg.AgentId)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
result, err := s.app.Conn.GetQuery().ListTcpMiddlewaresByAgent(ctx, db.ListTcpMiddlewaresByAgentParams{
|
||||
AgentID: req.Msg.AgentId,
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
middlewares = convert.TCPMiddlewaresToProto(result)
|
||||
}
|
||||
|
||||
default:
|
||||
if req.Msg.Type != nil {
|
||||
ops, ok := s.dispatch[*req.Msg.Type]
|
||||
if !ok {
|
||||
return nil, connect.NewError(
|
||||
connect.CodeInvalidArgument,
|
||||
errors.New("invalid middleware type"),
|
||||
)
|
||||
}
|
||||
|
||||
result, err := ops.List(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(result), nil
|
||||
} else {
|
||||
// Get HTTP middlewares
|
||||
httpOps := s.dispatch[mantraev1.MiddlewareType_MIDDLEWARE_TYPE_HTTP]
|
||||
httpResult, err := httpOps.List(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.ListMiddlewaresResponse{
|
||||
Middlewares: middlewares,
|
||||
TotalCount: totalCount,
|
||||
}), nil
|
||||
// Get TCP middlewares
|
||||
tcpOps := s.dispatch[mantraev1.MiddlewareType_MIDDLEWARE_TYPE_TCP]
|
||||
tcpResult, err := tcpOps.List(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
// Combine results
|
||||
allMiddlewares := append(httpResult.Middlewares, tcpResult.Middlewares...)
|
||||
totalCount := httpResult.TotalCount + tcpResult.TotalCount
|
||||
|
||||
return connect.NewResponse(&mantraev1.ListMiddlewaresResponse{
|
||||
Middlewares: allMiddlewares,
|
||||
TotalCount: totalCount,
|
||||
}), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (s *MiddlewareService) GetMiddlewarePlugins(
|
||||
@@ -407,11 +168,11 @@ func (s *MiddlewareService) GetMiddlewarePlugins(
|
||||
if err := json.NewDecoder(resp.Body).Decode(&allPlugins); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
cleanPlugins := slices.DeleteFunc(allPlugins, func(p schema.Plugin) bool {
|
||||
filtered := slices.DeleteFunc(allPlugins, func(p schema.Plugin) bool {
|
||||
return p.Type != "middleware"
|
||||
})
|
||||
var plugins []*mantraev1.Plugin
|
||||
for _, p := range cleanPlugins {
|
||||
for _, p := range filtered {
|
||||
plugins = append(plugins, &mantraev1.Plugin{
|
||||
Id: p.ID,
|
||||
Name: p.Name,
|
||||
@@ -437,65 +198,3 @@ func (s *MiddlewareService) GetMiddlewarePlugins(
|
||||
|
||||
return connect.NewResponse(&mantraev1.GetMiddlewarePluginsResponse{Plugins: plugins}), nil
|
||||
}
|
||||
|
||||
// Helper functions
|
||||
func (s *MiddlewareService) updateRouterMiddlewares(
|
||||
ctx context.Context,
|
||||
middleware *mantraev1.Middleware,
|
||||
newMiddleware string,
|
||||
) error {
|
||||
switch middleware.Type {
|
||||
case mantraev1.MiddlewareType_MIDDLEWARE_TYPE_HTTP:
|
||||
router, err := s.app.Conn.GetQuery().
|
||||
GetHttpRoutersUsingMiddleware(ctx, db.GetHttpRoutersUsingMiddlewareParams{
|
||||
ProfileID: middleware.ProfileId,
|
||||
ID: middleware.Id,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, r := range router {
|
||||
if idx := slices.Index(r.Config.Middlewares, middleware.Name); idx != -1 {
|
||||
r.Config.Middlewares = slices.Delete(r.Config.Middlewares, idx, idx+1)
|
||||
}
|
||||
if newMiddleware != "" {
|
||||
r.Config.Middlewares = append(r.Config.Middlewares, newMiddleware)
|
||||
}
|
||||
if _, err := s.app.Conn.GetQuery().UpdateHttpRouter(ctx, db.UpdateHttpRouterParams{
|
||||
ID: r.ID,
|
||||
Enabled: r.Enabled,
|
||||
Config: r.Config,
|
||||
Name: r.Name,
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
case mantraev1.MiddlewareType_MIDDLEWARE_TYPE_TCP:
|
||||
router, err := s.app.Conn.GetQuery().
|
||||
GetTcpRoutersUsingMiddleware(ctx, db.GetTcpRoutersUsingMiddlewareParams{
|
||||
ProfileID: middleware.ProfileId,
|
||||
ID: middleware.Id,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, r := range router {
|
||||
if idx := slices.Index(r.Config.Middlewares, middleware.Name); idx != -1 {
|
||||
r.Config.Middlewares = slices.Delete(r.Config.Middlewares, idx, idx+1)
|
||||
}
|
||||
if newMiddleware != "" {
|
||||
r.Config.Middlewares = append(r.Config.Middlewares, newMiddleware)
|
||||
}
|
||||
if _, err := s.app.Conn.GetQuery().UpdateTcpRouter(ctx, db.UpdateTcpRouterParams{
|
||||
ID: r.ID,
|
||||
Enabled: r.Enabled,
|
||||
Config: r.Config,
|
||||
Name: r.Name,
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
415
internal/api/service/middleware_ops.go
Normal file
415
internal/api/service/middleware_ops.go
Normal file
@@ -0,0 +1,415 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"slices"
|
||||
|
||||
"github.com/mizuchilabs/mantrae/internal/config"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/schema"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
|
||||
type MiddlewareOps interface {
|
||||
Get(
|
||||
ctx context.Context,
|
||||
req *mantraev1.GetMiddlewareRequest,
|
||||
) (*mantraev1.GetMiddlewareResponse, error)
|
||||
Create(
|
||||
ctx context.Context,
|
||||
req *mantraev1.CreateMiddlewareRequest,
|
||||
) (*mantraev1.CreateMiddlewareResponse, error)
|
||||
Update(
|
||||
ctx context.Context,
|
||||
req *mantraev1.UpdateMiddlewareRequest,
|
||||
) (*mantraev1.UpdateMiddlewareResponse, error)
|
||||
Delete(
|
||||
ctx context.Context,
|
||||
req *mantraev1.DeleteMiddlewareRequest,
|
||||
) (*mantraev1.DeleteMiddlewareResponse, error)
|
||||
List(
|
||||
ctx context.Context,
|
||||
req *mantraev1.ListMiddlewaresRequest,
|
||||
) (*mantraev1.ListMiddlewaresResponse, error)
|
||||
}
|
||||
|
||||
type HTTPMiddlewareOps struct {
|
||||
app *config.App
|
||||
}
|
||||
|
||||
type TCPMiddlewareOps struct {
|
||||
app *config.App
|
||||
}
|
||||
|
||||
func NewHTTPMiddlewareOps(app *config.App) *HTTPMiddlewareOps {
|
||||
return &HTTPMiddlewareOps{app: app}
|
||||
}
|
||||
|
||||
func NewTCPMiddlewareOps(app *config.App) *TCPMiddlewareOps {
|
||||
return &TCPMiddlewareOps{app: app}
|
||||
}
|
||||
|
||||
// HTTP Middleware Operations -------------------------------------------------
|
||||
|
||||
func (s *HTTPMiddlewareOps) Get(
|
||||
ctx context.Context,
|
||||
req *mantraev1.GetMiddlewareRequest,
|
||||
) (*mantraev1.GetMiddlewareResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().GetHttpMiddleware(ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.GetMiddlewareResponse{
|
||||
Middleware: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *HTTPMiddlewareOps) Create(
|
||||
ctx context.Context,
|
||||
req *mantraev1.CreateMiddlewareRequest,
|
||||
) (*mantraev1.CreateMiddlewareResponse, error) {
|
||||
params := db.CreateHttpMiddlewareParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
Name: req.Name,
|
||||
IsDefault: req.IsDefault,
|
||||
}
|
||||
|
||||
var err error
|
||||
params.Config, err = db.UnmarshalStruct[schema.HTTPMiddleware](req.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err = params.Config.Verify(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if req.IsDefault {
|
||||
if err = s.app.Conn.GetQuery().UnsetDefaultHttpMiddleware(ctx); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().CreateHttpMiddleware(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.CreateMiddlewareResponse{
|
||||
Middleware: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *HTTPMiddlewareOps) Update(
|
||||
ctx context.Context,
|
||||
req *mantraev1.UpdateMiddlewareRequest,
|
||||
) (*mantraev1.UpdateMiddlewareResponse, error) {
|
||||
params := db.UpdateHttpMiddlewareParams{
|
||||
ID: req.Id,
|
||||
Name: req.Name,
|
||||
Enabled: req.Enabled,
|
||||
IsDefault: req.IsDefault,
|
||||
}
|
||||
|
||||
var err error
|
||||
params.Config, err = db.UnmarshalStruct[schema.HTTPMiddleware](req.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err = params.Config.Verify(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if req.IsDefault {
|
||||
if err = s.app.Conn.GetQuery().UnsetDefaultHttpMiddleware(ctx); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
// Get old middleware for router update
|
||||
middleware, err := s.app.Conn.GetQuery().GetHttpMiddleware(ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Make sure routers using this middleware use the new name
|
||||
routers, err := s.app.Conn.GetQuery().
|
||||
GetHttpRoutersUsingMiddleware(ctx, db.GetHttpRoutersUsingMiddlewareParams{
|
||||
ProfileID: middleware.ProfileID,
|
||||
ID: middleware.ID,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, r := range routers {
|
||||
if idx := slices.Index(r.Config.Middlewares, req.Name); idx != -1 {
|
||||
r.Config.Middlewares = slices.Delete(r.Config.Middlewares, idx, idx+1)
|
||||
}
|
||||
r.Config.Middlewares = append(r.Config.Middlewares, req.Name)
|
||||
if _, err = s.app.Conn.GetQuery().UpdateHttpRouter(ctx, db.UpdateHttpRouterParams{
|
||||
ID: r.ID,
|
||||
Enabled: r.Enabled,
|
||||
Config: r.Config,
|
||||
Name: r.Name,
|
||||
}); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().UpdateHttpMiddleware(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.UpdateMiddlewareResponse{
|
||||
Middleware: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *HTTPMiddlewareOps) Delete(
|
||||
ctx context.Context,
|
||||
req *mantraev1.DeleteMiddlewareRequest,
|
||||
) (*mantraev1.DeleteMiddlewareResponse, error) {
|
||||
middleware, err := s.app.Conn.GetQuery().GetHttpMiddleware(ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Make sure to delete the middleware from related routers
|
||||
routers, err := s.app.Conn.GetQuery().
|
||||
GetHttpRoutersUsingMiddleware(ctx, db.GetHttpRoutersUsingMiddlewareParams{
|
||||
ProfileID: middleware.ProfileID,
|
||||
ID: middleware.ID,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, r := range routers {
|
||||
if idx := slices.Index(r.Config.Middlewares, middleware.Name); idx != -1 {
|
||||
r.Config.Middlewares = slices.Delete(r.Config.Middlewares, idx, idx+1)
|
||||
}
|
||||
if _, err := s.app.Conn.GetQuery().UpdateHttpRouter(ctx, db.UpdateHttpRouterParams{
|
||||
ID: r.ID,
|
||||
Enabled: r.Enabled,
|
||||
Config: r.Config,
|
||||
Name: r.Name,
|
||||
}); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
if err := s.app.Conn.GetQuery().DeleteHttpMiddleware(ctx, req.Id); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.DeleteMiddlewareResponse{}, nil
|
||||
}
|
||||
|
||||
func (s *HTTPMiddlewareOps) List(
|
||||
ctx context.Context,
|
||||
req *mantraev1.ListMiddlewaresRequest,
|
||||
) (*mantraev1.ListMiddlewaresResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().
|
||||
ListHttpMiddlewares(ctx, db.ListHttpMiddlewaresParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
Limit: req.Limit,
|
||||
Offset: req.Offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
totalCount, err := s.app.Conn.GetQuery().
|
||||
CountHttpMiddlewares(ctx, db.CountHttpMiddlewaresParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
middlewares := make([]*mantraev1.Middleware, 0, len(result))
|
||||
for _, m := range result {
|
||||
middlewares = append(middlewares, m.ToProto())
|
||||
}
|
||||
return &mantraev1.ListMiddlewaresResponse{
|
||||
Middlewares: middlewares,
|
||||
TotalCount: totalCount,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// TCP Middleware Operations --------------------------------------------------
|
||||
|
||||
func (s *TCPMiddlewareOps) Get(
|
||||
ctx context.Context,
|
||||
req *mantraev1.GetMiddlewareRequest,
|
||||
) (*mantraev1.GetMiddlewareResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().GetTcpMiddleware(ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.GetMiddlewareResponse{
|
||||
Middleware: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *TCPMiddlewareOps) Create(
|
||||
ctx context.Context,
|
||||
req *mantraev1.CreateMiddlewareRequest,
|
||||
) (*mantraev1.CreateMiddlewareResponse, error) {
|
||||
params := db.CreateTcpMiddlewareParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
Name: req.Name,
|
||||
IsDefault: req.IsDefault,
|
||||
}
|
||||
|
||||
var err error
|
||||
params.Config, err = db.UnmarshalStruct[schema.TCPMiddleware](req.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if req.IsDefault {
|
||||
if err = s.app.Conn.GetQuery().UnsetDefaultTcpMiddleware(ctx); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().CreateTcpMiddleware(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.CreateMiddlewareResponse{
|
||||
Middleware: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *TCPMiddlewareOps) Update(
|
||||
ctx context.Context,
|
||||
req *mantraev1.UpdateMiddlewareRequest,
|
||||
) (*mantraev1.UpdateMiddlewareResponse, error) {
|
||||
params := db.UpdateTcpMiddlewareParams{
|
||||
Name: req.Name,
|
||||
Enabled: req.Enabled,
|
||||
IsDefault: req.IsDefault,
|
||||
ID: req.Id,
|
||||
}
|
||||
|
||||
var err error
|
||||
params.Config, err = db.UnmarshalStruct[schema.TCPMiddleware](req.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if req.IsDefault {
|
||||
if err = s.app.Conn.GetQuery().UnsetDefaultTcpMiddleware(ctx); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
// Get old middleware for router update
|
||||
middleware, err := s.app.Conn.GetQuery().GetTcpMiddleware(ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Make sure routers using this middleware use the new name
|
||||
routers, err := s.app.Conn.GetQuery().
|
||||
GetTcpRoutersUsingMiddleware(ctx, db.GetTcpRoutersUsingMiddlewareParams{
|
||||
ProfileID: middleware.ProfileID,
|
||||
ID: middleware.ID,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, r := range routers {
|
||||
if idx := slices.Index(r.Config.Middlewares, req.Name); idx != -1 {
|
||||
r.Config.Middlewares = slices.Delete(r.Config.Middlewares, idx, idx+1)
|
||||
}
|
||||
r.Config.Middlewares = append(r.Config.Middlewares, req.Name)
|
||||
if _, err = s.app.Conn.GetQuery().UpdateTcpRouter(ctx, db.UpdateTcpRouterParams{
|
||||
ID: r.ID,
|
||||
Enabled: r.Enabled,
|
||||
Config: r.Config,
|
||||
Name: r.Name,
|
||||
}); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().UpdateTcpMiddleware(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.UpdateMiddlewareResponse{
|
||||
Middleware: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *TCPMiddlewareOps) Delete(
|
||||
ctx context.Context,
|
||||
req *mantraev1.DeleteMiddlewareRequest,
|
||||
) (*mantraev1.DeleteMiddlewareResponse, error) {
|
||||
middleware, err := s.app.Conn.GetQuery().GetTcpMiddleware(ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Make sure to delete the middleware from related routers
|
||||
routers, err := s.app.Conn.GetQuery().
|
||||
GetTcpRoutersUsingMiddleware(ctx, db.GetTcpRoutersUsingMiddlewareParams{
|
||||
ProfileID: middleware.ProfileID,
|
||||
ID: middleware.ID,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, r := range routers {
|
||||
if idx := slices.Index(r.Config.Middlewares, middleware.Name); idx != -1 {
|
||||
r.Config.Middlewares = slices.Delete(r.Config.Middlewares, idx, idx+1)
|
||||
}
|
||||
if _, err := s.app.Conn.GetQuery().UpdateTcpRouter(ctx, db.UpdateTcpRouterParams{
|
||||
ID: r.ID,
|
||||
Enabled: r.Enabled,
|
||||
Config: r.Config,
|
||||
Name: r.Name,
|
||||
}); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
if err := s.app.Conn.GetQuery().DeleteTcpMiddleware(ctx, req.Id); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.DeleteMiddlewareResponse{}, nil
|
||||
}
|
||||
|
||||
func (s *TCPMiddlewareOps) List(
|
||||
ctx context.Context,
|
||||
req *mantraev1.ListMiddlewaresRequest,
|
||||
) (*mantraev1.ListMiddlewaresResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().
|
||||
ListTcpMiddlewares(ctx, db.ListTcpMiddlewaresParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
Limit: req.Limit,
|
||||
Offset: req.Offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
totalCount, err := s.app.Conn.GetQuery().CountTcpMiddlewares(ctx, db.CountTcpMiddlewaresParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
middlewares := make([]*mantraev1.Middleware, 0, len(result))
|
||||
for _, m := range result {
|
||||
middlewares = append(middlewares, m.ToProto())
|
||||
}
|
||||
return &mantraev1.ListMiddlewaresResponse{
|
||||
Middlewares: middlewares,
|
||||
TotalCount: totalCount,
|
||||
}, nil
|
||||
}
|
||||
@@ -6,7 +6,6 @@ import (
|
||||
"connectrpc.com/connect"
|
||||
|
||||
"github.com/mizuchilabs/mantrae/internal/config"
|
||||
"github.com/mizuchilabs/mantrae/internal/convert"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
"github.com/mizuchilabs/mantrae/pkg/util"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
@@ -29,7 +28,7 @@ func (s *ProfileService) GetProfile(
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(&mantraev1.GetProfileResponse{
|
||||
Profile: convert.ProfileToProto(&result),
|
||||
Profile: result.ToProto(),
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -48,7 +47,7 @@ func (s *ProfileService) CreateProfile(
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(&mantraev1.CreateProfileResponse{
|
||||
Profile: convert.ProfileToProto(&result),
|
||||
Profile: result.ToProto(),
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -70,7 +69,7 @@ func (s *ProfileService) UpdateProfile(
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(&mantraev1.UpdateProfileResponse{
|
||||
Profile: convert.ProfileToProto(&result),
|
||||
Profile: result.ToProto(),
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -78,8 +77,7 @@ func (s *ProfileService) DeleteProfile(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.DeleteProfileRequest],
|
||||
) (*connect.Response[mantraev1.DeleteProfileResponse], error) {
|
||||
err := s.app.Conn.GetQuery().DeleteProfile(ctx, req.Msg.Id)
|
||||
if err != nil {
|
||||
if err := s.app.Conn.GetQuery().DeleteProfile(ctx, req.Msg.Id); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(&mantraev1.DeleteProfileResponse{}), nil
|
||||
@@ -89,29 +87,27 @@ func (s *ProfileService) ListProfiles(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.ListProfilesRequest],
|
||||
) (*connect.Response[mantraev1.ListProfilesResponse], error) {
|
||||
var params db.ListProfilesParams
|
||||
if req.Msg.Limit == nil {
|
||||
params.Limit = 100
|
||||
} else {
|
||||
params.Limit = *req.Msg.Limit
|
||||
}
|
||||
if req.Msg.Offset == nil {
|
||||
params.Offset = 0
|
||||
} else {
|
||||
params.Offset = *req.Msg.Offset
|
||||
params := db.ListProfilesParams{
|
||||
Limit: req.Msg.Limit,
|
||||
Offset: req.Msg.Offset,
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().ListProfiles(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
totalCount, err := s.app.Conn.GetQuery().CountProfiles(ctx)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
profiles := make([]*mantraev1.Profile, 0, len(result))
|
||||
for _, p := range result {
|
||||
profiles = append(profiles, p.ToProto())
|
||||
}
|
||||
return connect.NewResponse(&mantraev1.ListProfilesResponse{
|
||||
Profiles: convert.ProfilesToProto(result),
|
||||
Profiles: profiles,
|
||||
TotalCount: totalCount,
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -7,582 +7,149 @@ import (
|
||||
"connectrpc.com/connect"
|
||||
|
||||
"github.com/mizuchilabs/mantrae/internal/config"
|
||||
"github.com/mizuchilabs/mantrae/internal/convert"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/schema"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
|
||||
type RouterService struct {
|
||||
app *config.App
|
||||
app *config.App
|
||||
dispatch map[mantraev1.RouterType]RouterOps
|
||||
}
|
||||
|
||||
func NewRouterService(app *config.App) *RouterService {
|
||||
return &RouterService{app: app}
|
||||
return &RouterService{
|
||||
app: app,
|
||||
dispatch: map[mantraev1.RouterType]RouterOps{
|
||||
mantraev1.RouterType_ROUTER_TYPE_HTTP: NewHTTPRouterOps(app),
|
||||
mantraev1.RouterType_ROUTER_TYPE_TCP: NewTCPRouterOps(app),
|
||||
mantraev1.RouterType_ROUTER_TYPE_UDP: NewUDPRouterOps(app),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (s *RouterService) GetRouter(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.GetRouterRequest],
|
||||
) (*connect.Response[mantraev1.GetRouterResponse], error) {
|
||||
var router *mantraev1.Router
|
||||
|
||||
switch req.Msg.Type {
|
||||
case mantraev1.RouterType_ROUTER_TYPE_HTTP:
|
||||
resRouter, err := s.app.Conn.GetQuery().GetHttpRouter(ctx, req.Msg.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
resDNS, err := s.app.Conn.GetQuery().GetDnsProvidersByHttpRouter(ctx, req.Msg.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
protoDNS := convert.DNSProvidersToProto(resDNS)
|
||||
router = convert.HTTPRouterToProto(&resRouter, protoDNS)
|
||||
|
||||
case mantraev1.RouterType_ROUTER_TYPE_TCP:
|
||||
resRouter, err := s.app.Conn.GetQuery().GetTcpRouter(ctx, req.Msg.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
resDNS, err := s.app.Conn.GetQuery().GetDnsProvidersByTcpRouter(ctx, req.Msg.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
protoDNS := convert.DNSProvidersToProto(resDNS)
|
||||
router = convert.TCPRouterToProto(&resRouter, protoDNS)
|
||||
|
||||
case mantraev1.RouterType_ROUTER_TYPE_UDP:
|
||||
result, err := s.app.Conn.GetQuery().GetUdpRouter(ctx, req.Msg.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
router = convert.UDPRouterToProto(&result)
|
||||
|
||||
default:
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, errors.New("invalid router type"))
|
||||
ops, ok := s.dispatch[req.Msg.Type]
|
||||
if !ok {
|
||||
return nil, connect.NewError(
|
||||
connect.CodeInvalidArgument,
|
||||
errors.New("invalid router type"),
|
||||
)
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.GetRouterResponse{Router: router}), nil
|
||||
result, err := ops.Get(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(result), nil
|
||||
}
|
||||
|
||||
func (s *RouterService) CreateRouter(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.CreateRouterRequest],
|
||||
) (*connect.Response[mantraev1.CreateRouterResponse], error) {
|
||||
var router *mantraev1.Router
|
||||
var err error
|
||||
|
||||
switch req.Msg.Type {
|
||||
case mantraev1.RouterType_ROUTER_TYPE_HTTP:
|
||||
var params db.CreateHttpRouterParams
|
||||
params.ProfileID = req.Msg.ProfileId
|
||||
params.Name = req.Msg.Name
|
||||
if req.Msg.AgentId != "" {
|
||||
params.AgentID = &req.Msg.AgentId
|
||||
}
|
||||
|
||||
params.Config, err = convert.UnmarshalStruct[schema.HTTPRouter](req.Msg.Config)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
params.Config.Service = params.Name
|
||||
|
||||
result, err := s.app.Conn.GetQuery().CreateHttpRouter(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
resultDNS, err := s.app.Conn.GetQuery().GetDnsProvidersByHttpRouter(ctx, result.ID)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
protoDNS := convert.DNSProvidersToProto(resultDNS)
|
||||
router = convert.HTTPRouterToProto(&result, protoDNS)
|
||||
|
||||
case mantraev1.RouterType_ROUTER_TYPE_TCP:
|
||||
var params db.CreateTcpRouterParams
|
||||
params.ProfileID = req.Msg.ProfileId
|
||||
params.Name = req.Msg.Name
|
||||
if req.Msg.AgentId != "" {
|
||||
params.AgentID = &req.Msg.AgentId
|
||||
}
|
||||
|
||||
params.Config, err = convert.UnmarshalStruct[schema.TCPRouter](req.Msg.Config)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
params.Config.Service = params.Name
|
||||
|
||||
result, err := s.app.Conn.GetQuery().CreateTcpRouter(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
resultDNS, err := s.app.Conn.GetQuery().GetDnsProvidersByTcpRouter(ctx, result.ID)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
protoDNS := convert.DNSProvidersToProto(resultDNS)
|
||||
router = convert.TCPRouterToProto(&result, protoDNS)
|
||||
|
||||
case mantraev1.RouterType_ROUTER_TYPE_UDP:
|
||||
var params db.CreateUdpRouterParams
|
||||
params.ProfileID = req.Msg.ProfileId
|
||||
params.Name = req.Msg.Name
|
||||
if req.Msg.AgentId != "" {
|
||||
params.AgentID = &req.Msg.AgentId
|
||||
}
|
||||
|
||||
params.Config, err = convert.UnmarshalStruct[schema.UDPRouter](req.Msg.Config)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
params.Config.Service = params.Name
|
||||
|
||||
result, err := s.app.Conn.GetQuery().CreateUdpRouter(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
router = convert.UDPRouterToProto(&result)
|
||||
|
||||
default:
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, errors.New("invalid router type"))
|
||||
ops, ok := s.dispatch[req.Msg.Type]
|
||||
if !ok {
|
||||
return nil, connect.NewError(
|
||||
connect.CodeInvalidArgument,
|
||||
errors.New("invalid router type"),
|
||||
)
|
||||
}
|
||||
|
||||
// Broadcast event
|
||||
// s.app.Event.BroadcastProfileEvent(&mantraev1.ProfileEvent{
|
||||
// EventType: mantraev1.EventType_EVENT_TYPE_CREATED,
|
||||
// ResourceType: mantraev1.ResourceType_RESOURCE_TYPE_ROUTER,
|
||||
// ProfileId: req.Msg.ProfileId,
|
||||
// Timestamp: timestamppb.Now(),
|
||||
// Resource: &mantraev1.ProfileEvent_Router{
|
||||
// Router: router,
|
||||
// },
|
||||
// })
|
||||
|
||||
return connect.NewResponse(&mantraev1.CreateRouterResponse{Router: router}), nil
|
||||
result, err := ops.Create(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(result), nil
|
||||
}
|
||||
|
||||
func (s *RouterService) UpdateRouter(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.UpdateRouterRequest],
|
||||
) (*connect.Response[mantraev1.UpdateRouterResponse], error) {
|
||||
var router *mantraev1.Router
|
||||
var err error
|
||||
|
||||
switch req.Msg.Type {
|
||||
case mantraev1.RouterType_ROUTER_TYPE_HTTP:
|
||||
var params db.UpdateHttpRouterParams
|
||||
params.ID = req.Msg.Id
|
||||
params.Name = req.Msg.Name
|
||||
params.Enabled = req.Msg.Enabled
|
||||
params.Config, err = convert.UnmarshalStruct[schema.HTTPRouter](req.Msg.Config)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
params.Config.Service = params.Name
|
||||
|
||||
// Update DNS Providers
|
||||
existing, err := s.app.Conn.GetQuery().GetDnsProvidersByHttpRouter(ctx, params.ID)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
existingMap := make(map[int64]bool)
|
||||
for _, provider := range existing {
|
||||
existingMap[provider.ID] = true
|
||||
}
|
||||
|
||||
desiredMap := make(map[int64]bool)
|
||||
var desiredIDs []int64
|
||||
for _, protoProvider := range req.Msg.DnsProviders {
|
||||
desiredMap[protoProvider.Id] = true
|
||||
desiredIDs = append(desiredIDs, protoProvider.Id)
|
||||
}
|
||||
// Identify inserts
|
||||
for _, id := range desiredIDs {
|
||||
if !existingMap[id] {
|
||||
if err = s.app.Conn.GetQuery().
|
||||
CreateHttpRouterDNSProvider(ctx, db.CreateHttpRouterDNSProviderParams{
|
||||
HttpRouterID: params.ID,
|
||||
DnsProviderID: id,
|
||||
}); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Identify deletes
|
||||
for id := range existingMap {
|
||||
if !desiredMap[id] {
|
||||
if err = s.app.Conn.GetQuery().
|
||||
DeleteHttpRouterDNSProvider(ctx, db.DeleteHttpRouterDNSProviderParams{
|
||||
HttpRouterID: params.ID,
|
||||
DnsProviderID: id,
|
||||
}); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().UpdateHttpRouter(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
resultDNS, err := s.app.Conn.GetQuery().GetDnsProvidersByHttpRouter(ctx, result.ID)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
protoDNS := convert.DNSProvidersToProto(resultDNS)
|
||||
router = convert.HTTPRouterToProto(&result, protoDNS)
|
||||
|
||||
case mantraev1.RouterType_ROUTER_TYPE_TCP:
|
||||
var params db.UpdateTcpRouterParams
|
||||
params.ID = req.Msg.Id
|
||||
params.Name = req.Msg.Name
|
||||
params.Enabled = req.Msg.Enabled
|
||||
params.Config, err = convert.UnmarshalStruct[schema.TCPRouter](req.Msg.Config)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
params.Config.Service = params.Name
|
||||
|
||||
// Update DNS Providers
|
||||
existing, err := s.app.Conn.GetQuery().GetDnsProvidersByTcpRouter(ctx, params.ID)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
existingMap := make(map[int64]bool)
|
||||
for _, provider := range existing {
|
||||
existingMap[provider.ID] = true
|
||||
}
|
||||
|
||||
desiredMap := make(map[int64]bool)
|
||||
var desiredIDs []int64
|
||||
for _, protoProvider := range req.Msg.DnsProviders {
|
||||
desiredMap[protoProvider.Id] = true
|
||||
desiredIDs = append(desiredIDs, protoProvider.Id)
|
||||
}
|
||||
|
||||
// Identify inserts
|
||||
for _, id := range desiredIDs {
|
||||
if !existingMap[id] {
|
||||
if err = s.app.Conn.GetQuery().
|
||||
CreateTcpRouterDNSProvider(ctx, db.CreateTcpRouterDNSProviderParams{
|
||||
TcpRouterID: params.ID,
|
||||
DnsProviderID: id,
|
||||
}); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Identify deletes
|
||||
for id := range existingMap {
|
||||
if !desiredMap[id] {
|
||||
if err = s.app.Conn.GetQuery().
|
||||
DeleteTcpRouterDNSProvider(ctx, db.DeleteTcpRouterDNSProviderParams{
|
||||
TcpRouterID: params.ID,
|
||||
DnsProviderID: id,
|
||||
}); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().UpdateTcpRouter(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
resultDNS, err := s.app.Conn.GetQuery().GetDnsProvidersByTcpRouter(ctx, result.ID)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
protoDNS := convert.DNSProvidersToProto(resultDNS)
|
||||
router = convert.TCPRouterToProto(&result, protoDNS)
|
||||
|
||||
case mantraev1.RouterType_ROUTER_TYPE_UDP:
|
||||
var params db.UpdateUdpRouterParams
|
||||
params.ID = req.Msg.Id
|
||||
params.Name = req.Msg.Name
|
||||
params.Enabled = req.Msg.Enabled
|
||||
params.Config, err = convert.UnmarshalStruct[schema.UDPRouter](req.Msg.Config)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
params.Config.Service = params.Name
|
||||
|
||||
result, err := s.app.Conn.GetQuery().UpdateUdpRouter(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
router = convert.UDPRouterToProto(&result)
|
||||
|
||||
default:
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, errors.New("invalid router type"))
|
||||
ops, ok := s.dispatch[req.Msg.Type]
|
||||
if !ok {
|
||||
return nil, connect.NewError(
|
||||
connect.CodeInvalidArgument,
|
||||
errors.New("invalid router type"),
|
||||
)
|
||||
}
|
||||
|
||||
// Broadcast event
|
||||
// s.app.Event.BroadcastProfileEvent(&mantraev1.ProfileEvent{
|
||||
// EventType: mantraev1.EventType_EVENT_TYPE_UPDATED,
|
||||
// ResourceType: mantraev1.ResourceType_RESOURCE_TYPE_ROUTER,
|
||||
// ProfileId: router.ProfileId,
|
||||
// Timestamp: timestamppb.Now(),
|
||||
// Resource: &mantraev1.ProfileEvent_Router{
|
||||
// Router: router,
|
||||
// },
|
||||
// })
|
||||
|
||||
return connect.NewResponse(&mantraev1.UpdateRouterResponse{Router: router}), nil
|
||||
result, err := ops.Update(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(result), nil
|
||||
}
|
||||
|
||||
func (s *RouterService) DeleteRouter(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.DeleteRouterRequest],
|
||||
) (*connect.Response[mantraev1.DeleteRouterResponse], error) {
|
||||
switch req.Msg.Type {
|
||||
case mantraev1.RouterType_ROUTER_TYPE_HTTP:
|
||||
result, err := s.app.Conn.GetQuery().GetHttpRouter(ctx, req.Msg.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
if err := s.app.Conn.GetQuery().DeleteHttpRouter(ctx, req.Msg.Id); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
if result.Config.Service != "" {
|
||||
service, err := s.app.Conn.GetQuery().GetHttpServiceByName(ctx, result.Config.Service)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
if err := s.app.Conn.GetQuery().DeleteHttpService(ctx, service.ID); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
}
|
||||
|
||||
case mantraev1.RouterType_ROUTER_TYPE_TCP:
|
||||
result, err := s.app.Conn.GetQuery().GetTcpRouter(ctx, req.Msg.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
if err := s.app.Conn.GetQuery().DeleteTcpRouter(ctx, req.Msg.Id); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
if result.Config.Service != "" {
|
||||
service, err := s.app.Conn.GetQuery().GetTcpServiceByName(ctx, result.Config.Service)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
if err := s.app.Conn.GetQuery().DeleteTcpService(ctx, service.ID); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
}
|
||||
|
||||
case mantraev1.RouterType_ROUTER_TYPE_UDP:
|
||||
result, err := s.app.Conn.GetQuery().GetUdpRouter(ctx, req.Msg.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
if err := s.app.Conn.GetQuery().DeleteUdpRouter(ctx, req.Msg.Id); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
if result.Config.Service != "" {
|
||||
service, err := s.app.Conn.GetQuery().GetUdpServiceByName(ctx, result.Config.Service)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
if err := s.app.Conn.GetQuery().DeleteUdpService(ctx, service.ID); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
}
|
||||
|
||||
default:
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, errors.New("invalid router type"))
|
||||
ops, ok := s.dispatch[req.Msg.Type]
|
||||
if !ok {
|
||||
return nil, connect.NewError(
|
||||
connect.CodeInvalidArgument,
|
||||
errors.New("invalid router type"),
|
||||
)
|
||||
}
|
||||
|
||||
// s.app.Event.BroadcastProfileEvent(&mantraev1.ProfileEvent{
|
||||
// EventType: mantraev1.EventType_EVENT_TYPE_DELETED,
|
||||
// ResourceType: mantraev1.ResourceType_RESOURCE_TYPE_ROUTER,
|
||||
// ProfileId: router.ProfileId,
|
||||
// Timestamp: timestamppb.Now(),
|
||||
// Resource: &mantraev1.ProfileEvent_Router{
|
||||
// Router: router,
|
||||
// },
|
||||
// })
|
||||
|
||||
return connect.NewResponse(&mantraev1.DeleteRouterResponse{}), nil
|
||||
result, err := ops.Delete(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(result), nil
|
||||
}
|
||||
|
||||
func (s *RouterService) ListRouters(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.ListRoutersRequest],
|
||||
) (*connect.Response[mantraev1.ListRoutersResponse], error) {
|
||||
var limit int64
|
||||
var offset int64
|
||||
if req.Msg.Limit == nil {
|
||||
limit = 100
|
||||
} else {
|
||||
limit = *req.Msg.Limit
|
||||
}
|
||||
if req.Msg.Offset == nil {
|
||||
offset = 0
|
||||
} else {
|
||||
offset = *req.Msg.Offset
|
||||
}
|
||||
|
||||
var routers []*mantraev1.Router
|
||||
var totalCount int64
|
||||
|
||||
if req.Msg.Type == nil {
|
||||
if req.Msg.AgentId == nil {
|
||||
result, err := s.app.Conn.GetQuery().
|
||||
ListRoutersByProfile(ctx, db.ListRoutersByProfileParams{
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
ProfileID_2: req.Msg.ProfileId,
|
||||
ProfileID_3: req.Msg.ProfileId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
totalCount, err = s.app.Conn.GetQuery().
|
||||
CountRoutersByProfile(ctx, db.CountRoutersByProfileParams{
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
ProfileID_2: req.Msg.ProfileId,
|
||||
ProfileID_3: req.Msg.ProfileId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
routers = convert.RoutersByProfileToProto(result, s.app.Conn.GetQuery())
|
||||
} else {
|
||||
result, err := s.app.Conn.GetQuery().
|
||||
ListRoutersByAgent(ctx, db.ListRoutersByAgentParams{
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
AgentID: req.Msg.AgentId,
|
||||
AgentID_2: req.Msg.AgentId,
|
||||
AgentID_3: req.Msg.AgentId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
totalCount, err = s.app.Conn.GetQuery().
|
||||
CountRoutersByAgent(ctx, db.CountRoutersByAgentParams{
|
||||
AgentID: req.Msg.AgentId,
|
||||
AgentID_2: req.Msg.AgentId,
|
||||
AgentID_3: req.Msg.AgentId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
routers = convert.RoutersByAgentToProto(result, s.app.Conn.GetQuery())
|
||||
}
|
||||
} else {
|
||||
var err error
|
||||
switch *req.Msg.Type {
|
||||
case mantraev1.RouterType_ROUTER_TYPE_HTTP:
|
||||
if req.Msg.AgentId == nil {
|
||||
totalCount, err = s.app.Conn.GetQuery().CountHttpRoutersByProfile(ctx, req.Msg.ProfileId)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
result, err := s.app.Conn.GetQuery().ListHttpRouters(ctx, db.ListHttpRoutersParams{
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
routers = convert.HTTPRoutersToProto(result, s.app.Conn.GetQuery())
|
||||
} else {
|
||||
totalCount, err = s.app.Conn.GetQuery().CountHttpRoutersByAgent(ctx, req.Msg.AgentId)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
result, err := s.app.Conn.GetQuery().ListHttpRoutersByAgent(ctx, db.ListHttpRoutersByAgentParams{
|
||||
AgentID: req.Msg.AgentId,
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
routers = convert.HTTPRoutersToProto(result, s.app.Conn.GetQuery())
|
||||
}
|
||||
|
||||
case mantraev1.RouterType_ROUTER_TYPE_TCP:
|
||||
if req.Msg.AgentId == nil {
|
||||
totalCount, err = s.app.Conn.GetQuery().CountTcpRoutersByProfile(ctx, req.Msg.ProfileId)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
result, err := s.app.Conn.GetQuery().ListTcpRouters(ctx, db.ListTcpRoutersParams{
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
routers = convert.TCPRoutersToProto(result, s.app.Conn.GetQuery())
|
||||
} else {
|
||||
totalCount, err = s.app.Conn.GetQuery().CountTcpRoutersByAgent(ctx, req.Msg.AgentId)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
result, err := s.app.Conn.GetQuery().ListTcpRoutersByAgent(ctx, db.ListTcpRoutersByAgentParams{
|
||||
AgentID: req.Msg.AgentId,
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
routers = convert.TCPRoutersToProto(result, s.app.Conn.GetQuery())
|
||||
}
|
||||
|
||||
case mantraev1.RouterType_ROUTER_TYPE_UDP:
|
||||
if req.Msg.AgentId == nil {
|
||||
totalCount, err = s.app.Conn.GetQuery().CountUdpRoutersByProfile(ctx, req.Msg.ProfileId)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
result, err := s.app.Conn.GetQuery().ListUdpRouters(ctx, db.ListUdpRoutersParams{
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
routers = convert.UDPRoutersToProto(result)
|
||||
} else {
|
||||
totalCount, err = s.app.Conn.GetQuery().CountUdpRoutersByAgent(ctx, req.Msg.AgentId)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
result, err := s.app.Conn.GetQuery().ListUdpRoutersByAgent(ctx, db.ListUdpRoutersByAgentParams{
|
||||
AgentID: req.Msg.AgentId,
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
routers = convert.UDPRoutersToProto(result)
|
||||
}
|
||||
|
||||
default:
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, errors.New("invalid router type"))
|
||||
if req.Msg.Type != nil {
|
||||
ops, ok := s.dispatch[*req.Msg.Type]
|
||||
if !ok {
|
||||
return nil, connect.NewError(
|
||||
connect.CodeInvalidArgument,
|
||||
errors.New("invalid router type"),
|
||||
)
|
||||
}
|
||||
|
||||
result, err := ops.List(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(result), nil
|
||||
} else {
|
||||
// Get HTTP routers
|
||||
httpOps := s.dispatch[mantraev1.RouterType_ROUTER_TYPE_HTTP]
|
||||
httpResult, err := httpOps.List(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.ListRoutersResponse{
|
||||
Routers: routers,
|
||||
TotalCount: totalCount,
|
||||
}), nil
|
||||
// Get TCP routers
|
||||
tcpOps := s.dispatch[mantraev1.RouterType_ROUTER_TYPE_TCP]
|
||||
tcpResult, err := tcpOps.List(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
// Get UDP routers
|
||||
udpOps := s.dispatch[mantraev1.RouterType_ROUTER_TYPE_UDP]
|
||||
udpResult, err := udpOps.List(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
// Combine results
|
||||
allRouters := append(httpResult.Routers, tcpResult.Routers...)
|
||||
allRouters = append(allRouters, udpResult.Routers...)
|
||||
totalCount := httpResult.TotalCount + tcpResult.TotalCount + udpResult.TotalCount
|
||||
|
||||
return connect.NewResponse(&mantraev1.ListRoutersResponse{
|
||||
Routers: allRouters,
|
||||
TotalCount: totalCount,
|
||||
}), nil
|
||||
}
|
||||
}
|
||||
|
||||
534
internal/api/service/router_ops.go
Normal file
534
internal/api/service/router_ops.go
Normal file
@@ -0,0 +1,534 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"connectrpc.com/connect"
|
||||
|
||||
"github.com/mizuchilabs/mantrae/internal/config"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/schema"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
|
||||
type RouterOps interface {
|
||||
Get(
|
||||
ctx context.Context,
|
||||
req *mantraev1.GetRouterRequest,
|
||||
) (*mantraev1.GetRouterResponse, error)
|
||||
Create(
|
||||
ctx context.Context,
|
||||
req *mantraev1.CreateRouterRequest,
|
||||
) (*mantraev1.CreateRouterResponse, error)
|
||||
Update(
|
||||
ctx context.Context,
|
||||
req *mantraev1.UpdateRouterRequest,
|
||||
) (*mantraev1.UpdateRouterResponse, error)
|
||||
Delete(
|
||||
ctx context.Context,
|
||||
req *mantraev1.DeleteRouterRequest,
|
||||
) (*mantraev1.DeleteRouterResponse, error)
|
||||
List(
|
||||
ctx context.Context,
|
||||
req *mantraev1.ListRoutersRequest,
|
||||
) (*mantraev1.ListRoutersResponse, error)
|
||||
}
|
||||
|
||||
type HTTPRouterOps struct {
|
||||
app *config.App
|
||||
}
|
||||
|
||||
type TCPRouterOps struct {
|
||||
app *config.App
|
||||
}
|
||||
|
||||
type UDPRouterOps struct {
|
||||
app *config.App
|
||||
}
|
||||
|
||||
func NewHTTPRouterOps(app *config.App) *HTTPRouterOps {
|
||||
return &HTTPRouterOps{app: app}
|
||||
}
|
||||
|
||||
func NewTCPRouterOps(app *config.App) *TCPRouterOps {
|
||||
return &TCPRouterOps{app: app}
|
||||
}
|
||||
|
||||
func NewUDPRouterOps(app *config.App) *UDPRouterOps {
|
||||
return &UDPRouterOps{app: app}
|
||||
}
|
||||
|
||||
// HTTP Router Operations -----------------------------------------------------
|
||||
|
||||
func (s *HTTPRouterOps) Get(
|
||||
ctx context.Context,
|
||||
req *mantraev1.GetRouterRequest,
|
||||
) (*mantraev1.GetRouterResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().GetHttpRouter(ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return &mantraev1.GetRouterResponse{
|
||||
Router: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *HTTPRouterOps) Create(
|
||||
ctx context.Context,
|
||||
req *mantraev1.CreateRouterRequest,
|
||||
) (*mantraev1.CreateRouterResponse, error) {
|
||||
params := db.CreateHttpRouterParams{
|
||||
ProfileID: req.ProfileId,
|
||||
Name: req.Name,
|
||||
AgentID: req.AgentId,
|
||||
}
|
||||
|
||||
var err error
|
||||
params.Config, err = db.UnmarshalStruct[schema.HTTPRouter](req.Config)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
params.Config.Service = params.Name
|
||||
|
||||
result, err := s.app.Conn.GetQuery().CreateHttpRouter(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
router := result.ToProto()
|
||||
|
||||
dnsProviders, err := s.app.Conn.GetQuery().GetDnsProvidersByHttpRouter(ctx, result.ID)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
router.DnsProviders = make([]*mantraev1.DnsProvider, 0, len(dnsProviders))
|
||||
for _, p := range dnsProviders {
|
||||
router.DnsProviders = append(router.DnsProviders, p.ToProto())
|
||||
}
|
||||
|
||||
return &mantraev1.CreateRouterResponse{
|
||||
Router: router,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *HTTPRouterOps) Update(
|
||||
ctx context.Context,
|
||||
req *mantraev1.UpdateRouterRequest,
|
||||
) (*mantraev1.UpdateRouterResponse, error) {
|
||||
params := db.UpdateHttpRouterParams{
|
||||
ID: req.Id,
|
||||
Name: req.Name,
|
||||
Enabled: req.Enabled,
|
||||
}
|
||||
|
||||
var err error
|
||||
params.Config, err = db.UnmarshalStruct[schema.HTTPRouter](req.Config)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
params.Config.Service = params.Name
|
||||
|
||||
// Update DNS Providers
|
||||
existing, err := s.app.Conn.GetQuery().GetDnsProvidersByHttpRouter(ctx, params.ID)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
existingMap := make(map[int64]bool)
|
||||
for _, provider := range existing {
|
||||
existingMap[provider.ID] = true
|
||||
}
|
||||
|
||||
desiredMap := make(map[int64]bool)
|
||||
var desiredIDs []int64
|
||||
for _, protoProvider := range req.DnsProviders {
|
||||
desiredMap[protoProvider.Id] = true
|
||||
desiredIDs = append(desiredIDs, protoProvider.Id)
|
||||
}
|
||||
// Identify inserts
|
||||
for _, id := range desiredIDs {
|
||||
if !existingMap[id] {
|
||||
if err = s.app.Conn.GetQuery().
|
||||
CreateHttpRouterDNSProvider(ctx, db.CreateHttpRouterDNSProviderParams{
|
||||
HttpRouterID: params.ID,
|
||||
DnsProviderID: id,
|
||||
}); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Identify deletes
|
||||
for id := range existingMap {
|
||||
if !desiredMap[id] {
|
||||
if err = s.app.Conn.GetQuery().
|
||||
DeleteHttpRouterDNSProvider(ctx, db.DeleteHttpRouterDNSProviderParams{
|
||||
HttpRouterID: params.ID,
|
||||
DnsProviderID: id,
|
||||
}); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().UpdateHttpRouter(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
router := result.ToProto()
|
||||
|
||||
dnsProviders, err := s.app.Conn.GetQuery().GetDnsProvidersByHttpRouter(ctx, result.ID)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
router.DnsProviders = make([]*mantraev1.DnsProvider, 0, len(dnsProviders))
|
||||
for _, p := range dnsProviders {
|
||||
router.DnsProviders = append(router.DnsProviders, p.ToProto())
|
||||
}
|
||||
|
||||
return &mantraev1.UpdateRouterResponse{
|
||||
Router: router,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *HTTPRouterOps) Delete(
|
||||
ctx context.Context,
|
||||
req *mantraev1.DeleteRouterRequest,
|
||||
) (*mantraev1.DeleteRouterResponse, error) {
|
||||
router, err := s.app.Conn.GetQuery().GetHttpRouter(ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
if router.Config.Service != "" {
|
||||
service, err := s.app.Conn.GetQuery().GetHttpServiceByName(ctx, router.Config.Service)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
if err := s.app.Conn.GetQuery().DeleteHttpService(ctx, service.ID); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
}
|
||||
|
||||
if err := s.app.Conn.GetQuery().DeleteHttpRouter(ctx, req.Id); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return &mantraev1.DeleteRouterResponse{}, nil
|
||||
}
|
||||
|
||||
func (s *HTTPRouterOps) List(
|
||||
ctx context.Context,
|
||||
req *mantraev1.ListRoutersRequest,
|
||||
) (*mantraev1.ListRoutersResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().
|
||||
ListHttpRouters(ctx, db.ListHttpRoutersParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
Limit: req.Limit,
|
||||
Offset: req.Offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
totalCount, err := s.app.Conn.GetQuery().CountHttpRouters(ctx, db.CountHttpRoutersParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
routers := make([]*mantraev1.Router, 0, len(result))
|
||||
for _, r := range result {
|
||||
routers = append(routers, r.ToProto())
|
||||
}
|
||||
return &mantraev1.ListRoutersResponse{
|
||||
Routers: routers,
|
||||
TotalCount: totalCount,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// TCP Router Operations ------------------------------------------------------
|
||||
|
||||
func (s *TCPRouterOps) Get(
|
||||
ctx context.Context,
|
||||
req *mantraev1.GetRouterRequest,
|
||||
) (*mantraev1.GetRouterResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().GetTcpRouter(ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return &mantraev1.GetRouterResponse{
|
||||
Router: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *TCPRouterOps) Create(
|
||||
ctx context.Context,
|
||||
req *mantraev1.CreateRouterRequest,
|
||||
) (*mantraev1.CreateRouterResponse, error) {
|
||||
params := db.CreateTcpRouterParams{
|
||||
ProfileID: req.ProfileId,
|
||||
Name: req.Name,
|
||||
AgentID: req.AgentId,
|
||||
}
|
||||
|
||||
var err error
|
||||
params.Config, err = db.UnmarshalStruct[schema.TCPRouter](req.Config)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
params.Config.Service = params.Name
|
||||
|
||||
result, err := s.app.Conn.GetQuery().CreateTcpRouter(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return &mantraev1.CreateRouterResponse{
|
||||
Router: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *TCPRouterOps) Update(
|
||||
ctx context.Context,
|
||||
req *mantraev1.UpdateRouterRequest,
|
||||
) (*mantraev1.UpdateRouterResponse, error) {
|
||||
params := db.UpdateTcpRouterParams{
|
||||
ID: req.Id,
|
||||
Name: req.Name,
|
||||
Enabled: req.Enabled,
|
||||
}
|
||||
|
||||
var err error
|
||||
params.Config, err = db.UnmarshalStruct[schema.TCPRouter](req.Config)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
params.Config.Service = params.Name
|
||||
|
||||
// Update DNS Providers
|
||||
existing, err := s.app.Conn.GetQuery().GetDnsProvidersByTcpRouter(ctx, params.ID)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
existingMap := make(map[int64]bool)
|
||||
for _, provider := range existing {
|
||||
existingMap[provider.ID] = true
|
||||
}
|
||||
|
||||
desiredMap := make(map[int64]bool)
|
||||
var desiredIDs []int64
|
||||
for _, protoProvider := range req.DnsProviders {
|
||||
desiredMap[protoProvider.Id] = true
|
||||
desiredIDs = append(desiredIDs, protoProvider.Id)
|
||||
}
|
||||
// Identify inserts
|
||||
for _, id := range desiredIDs {
|
||||
if !existingMap[id] {
|
||||
if err = s.app.Conn.GetQuery().
|
||||
CreateTcpRouterDNSProvider(ctx, db.CreateTcpRouterDNSProviderParams{
|
||||
TcpRouterID: params.ID,
|
||||
DnsProviderID: id,
|
||||
}); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Identify deletes
|
||||
for id := range existingMap {
|
||||
if !desiredMap[id] {
|
||||
if err = s.app.Conn.GetQuery().
|
||||
DeleteTcpRouterDNSProvider(ctx, db.DeleteTcpRouterDNSProviderParams{
|
||||
TcpRouterID: params.ID,
|
||||
DnsProviderID: id,
|
||||
}); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().UpdateTcpRouter(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return &mantraev1.UpdateRouterResponse{
|
||||
Router: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *TCPRouterOps) Delete(
|
||||
ctx context.Context,
|
||||
req *mantraev1.DeleteRouterRequest,
|
||||
) (*mantraev1.DeleteRouterResponse, error) {
|
||||
router, err := s.app.Conn.GetQuery().GetTcpRouter(ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
if router.Config.Service != "" {
|
||||
service, err := s.app.Conn.GetQuery().GetTcpServiceByName(ctx, router.Config.Service)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
if err := s.app.Conn.GetQuery().DeleteTcpService(ctx, service.ID); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
}
|
||||
|
||||
if err := s.app.Conn.GetQuery().DeleteTcpRouter(ctx, req.Id); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return &mantraev1.DeleteRouterResponse{}, nil
|
||||
}
|
||||
|
||||
func (s *TCPRouterOps) List(
|
||||
ctx context.Context,
|
||||
req *mantraev1.ListRoutersRequest,
|
||||
) (*mantraev1.ListRoutersResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().
|
||||
ListTcpRouters(ctx, db.ListTcpRoutersParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
Limit: req.Limit,
|
||||
Offset: req.Offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
totalCount, err := s.app.Conn.GetQuery().CountTcpRouters(ctx, db.CountTcpRoutersParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
routers := make([]*mantraev1.Router, 0, len(result))
|
||||
for _, r := range result {
|
||||
routers = append(routers, r.ToProto())
|
||||
}
|
||||
return &mantraev1.ListRoutersResponse{
|
||||
Routers: routers,
|
||||
TotalCount: totalCount,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// UDP Router Operations ------------------------------------------------------
|
||||
|
||||
func (s *UDPRouterOps) Get(
|
||||
ctx context.Context,
|
||||
req *mantraev1.GetRouterRequest,
|
||||
) (*mantraev1.GetRouterResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().GetUdpRouter(ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return &mantraev1.GetRouterResponse{
|
||||
Router: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *UDPRouterOps) Create(
|
||||
ctx context.Context,
|
||||
req *mantraev1.CreateRouterRequest,
|
||||
) (*mantraev1.CreateRouterResponse, error) {
|
||||
params := db.CreateUdpRouterParams{
|
||||
ProfileID: req.ProfileId,
|
||||
Name: req.Name,
|
||||
AgentID: req.AgentId,
|
||||
}
|
||||
|
||||
var err error
|
||||
params.Config, err = db.UnmarshalStruct[schema.UDPRouter](req.Config)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
params.Config.Service = params.Name
|
||||
|
||||
result, err := s.app.Conn.GetQuery().CreateUdpRouter(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return &mantraev1.CreateRouterResponse{
|
||||
Router: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *UDPRouterOps) Update(
|
||||
ctx context.Context,
|
||||
req *mantraev1.UpdateRouterRequest,
|
||||
) (*mantraev1.UpdateRouterResponse, error) {
|
||||
params := db.UpdateUdpRouterParams{
|
||||
ID: req.Id,
|
||||
Name: req.Name,
|
||||
Enabled: req.Enabled,
|
||||
}
|
||||
|
||||
var err error
|
||||
params.Config, err = db.UnmarshalStruct[schema.UDPRouter](req.Config)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
params.Config.Service = params.Name
|
||||
|
||||
result, err := s.app.Conn.GetQuery().UpdateUdpRouter(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return &mantraev1.UpdateRouterResponse{
|
||||
Router: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *UDPRouterOps) Delete(
|
||||
ctx context.Context,
|
||||
req *mantraev1.DeleteRouterRequest,
|
||||
) (*mantraev1.DeleteRouterResponse, error) {
|
||||
router, err := s.app.Conn.GetQuery().GetUdpRouter(ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
if router.Config.Service != "" {
|
||||
service, err := s.app.Conn.GetQuery().GetUdpServiceByName(ctx, router.Config.Service)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
if err := s.app.Conn.GetQuery().DeleteUdpService(ctx, service.ID); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
}
|
||||
|
||||
if err := s.app.Conn.GetQuery().DeleteUdpRouter(ctx, req.Id); err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return &mantraev1.DeleteRouterResponse{}, nil
|
||||
}
|
||||
|
||||
func (s *UDPRouterOps) List(
|
||||
ctx context.Context,
|
||||
req *mantraev1.ListRoutersRequest,
|
||||
) (*mantraev1.ListRoutersResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().
|
||||
ListUdpRouters(ctx, db.ListUdpRoutersParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
Limit: req.Limit,
|
||||
Offset: req.Offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
totalCount, err := s.app.Conn.GetQuery().CountUdpRouters(ctx, db.CountUdpRoutersParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
routers := make([]*mantraev1.Router, 0, len(result))
|
||||
for _, r := range result {
|
||||
routers = append(routers, r.ToProto())
|
||||
}
|
||||
return &mantraev1.ListRoutersResponse{
|
||||
Routers: routers,
|
||||
TotalCount: totalCount,
|
||||
}, nil
|
||||
}
|
||||
@@ -3,319 +3,147 @@ package service
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"connectrpc.com/connect"
|
||||
"github.com/mizuchilabs/mantrae/internal/config"
|
||||
"github.com/mizuchilabs/mantrae/internal/convert"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/schema"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
|
||||
type ServersTransportService struct {
|
||||
app *config.App
|
||||
app *config.App
|
||||
dispatch map[mantraev1.ServersTransportType]ServersTransportOps
|
||||
}
|
||||
|
||||
func NewServersTransportService(app *config.App) *ServersTransportService {
|
||||
return &ServersTransportService{app: app}
|
||||
return &ServersTransportService{
|
||||
app: app,
|
||||
dispatch: map[mantraev1.ServersTransportType]ServersTransportOps{
|
||||
mantraev1.ServersTransportType_SERVERS_TRANSPORT_TYPE_HTTP: NewHTTPServersTransportOps(
|
||||
app,
|
||||
),
|
||||
mantraev1.ServersTransportType_SERVERS_TRANSPORT_TYPE_TCP: NewTCPServersTransportOps(
|
||||
app,
|
||||
),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (s *ServersTransportService) GetServersTransport(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.GetServersTransportRequest],
|
||||
) (*connect.Response[mantraev1.GetServersTransportResponse], error) {
|
||||
var serversTransport *mantraev1.ServersTransport
|
||||
|
||||
switch req.Msg.Type {
|
||||
case mantraev1.ServersTransportType_SERVERS_TRANSPORT_TYPE_HTTP:
|
||||
result, err := s.app.Conn.GetQuery().GetHttpServersTransport(ctx, req.Msg.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
serversTransport = convert.HTTPServersTransportToProto(&result)
|
||||
|
||||
case mantraev1.ServersTransportType_SERVERS_TRANSPORT_TYPE_TCP:
|
||||
result, err := s.app.Conn.GetQuery().GetTcpServersTransport(ctx, req.Msg.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
serversTransport = convert.TCPServersTransportToProto(&result)
|
||||
|
||||
default:
|
||||
return nil, fmt.Errorf("invalid servers transport type")
|
||||
ops, ok := s.dispatch[req.Msg.Type]
|
||||
if !ok {
|
||||
return nil, connect.NewError(
|
||||
connect.CodeInvalidArgument,
|
||||
errors.New("invalid servers transport type"),
|
||||
)
|
||||
}
|
||||
|
||||
return connect.NewResponse(
|
||||
&mantraev1.GetServersTransportResponse{ServersTransport: serversTransport},
|
||||
), nil
|
||||
result, err := ops.Get(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return connect.NewResponse(result), nil
|
||||
}
|
||||
|
||||
func (s *ServersTransportService) CreateServersTransport(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.CreateServersTransportRequest],
|
||||
) (*connect.Response[mantraev1.CreateServersTransportResponse], error) {
|
||||
var serversTransport *mantraev1.ServersTransport
|
||||
var err error
|
||||
|
||||
switch req.Msg.Type {
|
||||
case mantraev1.ServersTransportType_SERVERS_TRANSPORT_TYPE_HTTP:
|
||||
var params db.CreateHttpServersTransportParams
|
||||
params.ProfileID = req.Msg.ProfileId
|
||||
params.Name = req.Msg.Name
|
||||
if req.Msg.AgentId != "" {
|
||||
params.AgentID = &req.Msg.AgentId
|
||||
}
|
||||
|
||||
params.Config, err = convert.UnmarshalStruct[schema.HTTPServersTransport](req.Msg.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().CreateHttpServersTransport(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
serversTransport = convert.HTTPServersTransportToProto(&result)
|
||||
|
||||
case mantraev1.ServersTransportType_SERVERS_TRANSPORT_TYPE_TCP:
|
||||
var params db.CreateTcpServersTransportParams
|
||||
params.ProfileID = req.Msg.ProfileId
|
||||
params.Name = req.Msg.Name
|
||||
if req.Msg.AgentId != "" {
|
||||
params.AgentID = &req.Msg.AgentId
|
||||
}
|
||||
|
||||
params.Config, err = convert.UnmarshalStruct[schema.TCPServersTransport](req.Msg.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().CreateTcpServersTransport(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
serversTransport = convert.TCPServersTransportToProto(&result)
|
||||
|
||||
default:
|
||||
return nil, fmt.Errorf("invalid servers transport type")
|
||||
ops, ok := s.dispatch[req.Msg.Type]
|
||||
if !ok {
|
||||
return nil, connect.NewError(
|
||||
connect.CodeInvalidArgument,
|
||||
errors.New("invalid servers transport type"),
|
||||
)
|
||||
}
|
||||
|
||||
return connect.NewResponse(
|
||||
&mantraev1.CreateServersTransportResponse{ServersTransport: serversTransport},
|
||||
), nil
|
||||
result, err := ops.Create(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return connect.NewResponse(result), nil
|
||||
}
|
||||
|
||||
func (s *ServersTransportService) UpdateServersTransport(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.UpdateServersTransportRequest],
|
||||
) (*connect.Response[mantraev1.UpdateServersTransportResponse], error) {
|
||||
var serversTransport *mantraev1.ServersTransport
|
||||
var err error
|
||||
|
||||
switch req.Msg.Type {
|
||||
case mantraev1.ServersTransportType_SERVERS_TRANSPORT_TYPE_HTTP:
|
||||
var params db.UpdateHttpServersTransportParams
|
||||
params.ID = req.Msg.Id
|
||||
params.Name = req.Msg.Name
|
||||
params.Enabled = req.Msg.Enabled
|
||||
params.Config, err = convert.UnmarshalStruct[schema.HTTPServersTransport](req.Msg.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().UpdateHttpServersTransport(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
serversTransport = convert.HTTPServersTransportToProto(&result)
|
||||
|
||||
case mantraev1.ServersTransportType_SERVERS_TRANSPORT_TYPE_TCP:
|
||||
var params db.UpdateTcpServersTransportParams
|
||||
params.ID = req.Msg.Id
|
||||
params.Name = req.Msg.Name
|
||||
params.Enabled = req.Msg.Enabled
|
||||
params.Config, err = convert.UnmarshalStruct[schema.TCPServersTransport](req.Msg.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().UpdateTcpServersTransport(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
serversTransport = convert.TCPServersTransportToProto(&result)
|
||||
|
||||
default:
|
||||
return nil, fmt.Errorf("invalid servers transport type")
|
||||
ops, ok := s.dispatch[req.Msg.Type]
|
||||
if !ok {
|
||||
return nil, connect.NewError(
|
||||
connect.CodeInvalidArgument,
|
||||
errors.New("invalid servers transport type"),
|
||||
)
|
||||
}
|
||||
|
||||
return connect.NewResponse(
|
||||
&mantraev1.UpdateServersTransportResponse{ServersTransport: serversTransport},
|
||||
), nil
|
||||
result, err := ops.Update(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return connect.NewResponse(result), nil
|
||||
}
|
||||
|
||||
func (s *ServersTransportService) DeleteServersTransport(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.DeleteServersTransportRequest],
|
||||
) (*connect.Response[mantraev1.DeleteServersTransportResponse], error) {
|
||||
switch req.Msg.Type {
|
||||
case mantraev1.ServersTransportType_SERVERS_TRANSPORT_TYPE_HTTP:
|
||||
if err := s.app.Conn.GetQuery().DeleteHttpServersTransport(ctx, req.Msg.Id); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
case mantraev1.ServersTransportType_SERVERS_TRANSPORT_TYPE_TCP:
|
||||
if err := s.app.Conn.GetQuery().DeleteTcpServersTransport(ctx, req.Msg.Id); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
default:
|
||||
return nil, fmt.Errorf("invalid servers transport type")
|
||||
ops, ok := s.dispatch[req.Msg.Type]
|
||||
if !ok {
|
||||
return nil, connect.NewError(
|
||||
connect.CodeInvalidArgument,
|
||||
errors.New("invalid servers transport type"),
|
||||
)
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.DeleteServersTransportResponse{}), nil
|
||||
result, err := ops.Delete(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return connect.NewResponse(result), nil
|
||||
}
|
||||
|
||||
func (s *ServersTransportService) ListServersTransports(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.ListServersTransportsRequest],
|
||||
) (*connect.Response[mantraev1.ListServersTransportsResponse], error) {
|
||||
var limit int64
|
||||
var offset int64
|
||||
if req.Msg.Limit == nil {
|
||||
limit = 100
|
||||
} else {
|
||||
limit = *req.Msg.Limit
|
||||
}
|
||||
if req.Msg.Offset == nil {
|
||||
offset = 0
|
||||
} else {
|
||||
offset = *req.Msg.Offset
|
||||
}
|
||||
|
||||
var serversTransports []*mantraev1.ServersTransport
|
||||
var totalCount int64
|
||||
|
||||
if req.Msg.Type == nil {
|
||||
if req.Msg.AgentId == nil {
|
||||
result, err := s.app.Conn.GetQuery().
|
||||
ListServersTransportsByProfile(ctx, db.ListServersTransportsByProfileParams{
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
ProfileID_2: req.Msg.ProfileId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
totalCount, err = s.app.Conn.GetQuery().
|
||||
CountServersTransportsByProfile(ctx, db.CountServersTransportsByProfileParams{
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
ProfileID_2: req.Msg.ProfileId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
serversTransports = convert.ServersTransportsByProfileToProto(
|
||||
result,
|
||||
s.app.Conn.GetQuery(),
|
||||
if req.Msg.Type != nil {
|
||||
ops, ok := s.dispatch[*req.Msg.Type]
|
||||
if !ok {
|
||||
return nil, connect.NewError(
|
||||
connect.CodeInvalidArgument,
|
||||
errors.New("invalid servers transport type"),
|
||||
)
|
||||
} else {
|
||||
result, err := s.app.Conn.GetQuery().ListServersTransportsByAgent(ctx, db.ListServersTransportsByAgentParams{
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
AgentID: req.Msg.AgentId,
|
||||
AgentID_2: req.Msg.AgentId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
totalCount, err = s.app.Conn.GetQuery().CountServersTransportsByAgent(ctx, db.CountServersTransportsByAgentParams{
|
||||
AgentID: req.Msg.AgentId,
|
||||
AgentID_2: req.Msg.AgentId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
serversTransports = convert.ServersTransportsByAgentToProto(result, s.app.Conn.GetQuery())
|
||||
}
|
||||
} else {
|
||||
var err error
|
||||
switch *req.Msg.Type {
|
||||
case mantraev1.ServersTransportType_SERVERS_TRANSPORT_TYPE_HTTP:
|
||||
if req.Msg.AgentId == nil {
|
||||
totalCount, err = s.app.Conn.GetQuery().CountHttpServersTransportsByProfile(ctx, req.Msg.ProfileId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result, err := s.app.Conn.GetQuery().ListHttpServersTransports(ctx, db.ListHttpServersTransportsParams{
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
serversTransports = convert.HTTPServersTransportsToProto(result)
|
||||
} else {
|
||||
totalCount, err = s.app.Conn.GetQuery().CountHttpServersTransportsByAgent(ctx, req.Msg.AgentId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result, err := s.app.Conn.GetQuery().ListHttpServersTransportsByAgent(ctx, db.ListHttpServersTransportsByAgentParams{
|
||||
AgentID: req.Msg.AgentId,
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
serversTransports = convert.HTTPServersTransportsToProto(result)
|
||||
}
|
||||
|
||||
case mantraev1.ServersTransportType_SERVERS_TRANSPORT_TYPE_TCP:
|
||||
if req.Msg.AgentId == nil {
|
||||
totalCount, err = s.app.Conn.GetQuery().CountTcpServersTransportsByProfile(ctx, req.Msg.ProfileId)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
result, err := s.app.Conn.GetQuery().ListTcpServersTransports(ctx, db.ListTcpServersTransportsParams{
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
serversTransports = convert.TCPServersTransportsToProto(result)
|
||||
} else {
|
||||
totalCount, err = s.app.Conn.GetQuery().CountTcpServersTransportsByAgent(ctx, req.Msg.AgentId)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
result, err := s.app.Conn.GetQuery().ListTcpServersTransportsByAgent(ctx, db.ListTcpServersTransportsByAgentParams{
|
||||
AgentID: req.Msg.AgentId,
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
serversTransports = convert.TCPServersTransportsToProto(result)
|
||||
}
|
||||
|
||||
default:
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, errors.New("invalid servers transport type"))
|
||||
}
|
||||
|
||||
result, err := ops.List(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
return nil, err
|
||||
}
|
||||
return connect.NewResponse(result), nil
|
||||
} else {
|
||||
// Get HTTP servers transports
|
||||
httpOps := s.dispatch[mantraev1.ServersTransportType_SERVERS_TRANSPORT_TYPE_HTTP]
|
||||
httpResult, err := httpOps.List(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.ListServersTransportsResponse{
|
||||
ServersTransports: serversTransports,
|
||||
TotalCount: totalCount,
|
||||
}), nil
|
||||
// Get TCP servers transports
|
||||
tcpOps := s.dispatch[mantraev1.ServersTransportType_SERVERS_TRANSPORT_TYPE_TCP]
|
||||
tcpResult, err := tcpOps.List(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Combine results
|
||||
allServersTransports := append(httpResult.ServersTransports, tcpResult.ServersTransports...)
|
||||
totalCount := httpResult.TotalCount + tcpResult.TotalCount
|
||||
|
||||
return connect.NewResponse(&mantraev1.ListServersTransportsResponse{
|
||||
ServersTransports: allServersTransports,
|
||||
TotalCount: totalCount,
|
||||
}), nil
|
||||
}
|
||||
}
|
||||
|
||||
265
internal/api/service/servers_transport_ops.go
Normal file
265
internal/api/service/servers_transport_ops.go
Normal file
@@ -0,0 +1,265 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/mizuchilabs/mantrae/internal/config"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/schema"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
|
||||
type ServersTransportOps interface {
|
||||
Get(
|
||||
ctx context.Context,
|
||||
req *mantraev1.GetServersTransportRequest,
|
||||
) (*mantraev1.GetServersTransportResponse, error)
|
||||
Create(
|
||||
ctx context.Context,
|
||||
req *mantraev1.CreateServersTransportRequest,
|
||||
) (*mantraev1.CreateServersTransportResponse, error)
|
||||
Update(
|
||||
ctx context.Context,
|
||||
req *mantraev1.UpdateServersTransportRequest,
|
||||
) (*mantraev1.UpdateServersTransportResponse, error)
|
||||
Delete(
|
||||
ctx context.Context,
|
||||
req *mantraev1.DeleteServersTransportRequest,
|
||||
) (*mantraev1.DeleteServersTransportResponse, error)
|
||||
List(
|
||||
ctx context.Context,
|
||||
req *mantraev1.ListServersTransportsRequest,
|
||||
) (*mantraev1.ListServersTransportsResponse, error)
|
||||
}
|
||||
|
||||
type HTTPServersTransportOps struct {
|
||||
app *config.App
|
||||
}
|
||||
|
||||
type TCPServersTransportOps struct {
|
||||
app *config.App
|
||||
}
|
||||
|
||||
func NewHTTPServersTransportOps(app *config.App) *HTTPServersTransportOps {
|
||||
return &HTTPServersTransportOps{app: app}
|
||||
}
|
||||
|
||||
func NewTCPServersTransportOps(app *config.App) *TCPServersTransportOps {
|
||||
return &TCPServersTransportOps{app: app}
|
||||
}
|
||||
|
||||
// HTTP Servers Transport Operations ------------------------------------------
|
||||
|
||||
func (s *HTTPServersTransportOps) Get(
|
||||
ctx context.Context,
|
||||
req *mantraev1.GetServersTransportRequest,
|
||||
) (*mantraev1.GetServersTransportResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().GetHttpServersTransport(ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.GetServersTransportResponse{
|
||||
ServersTransport: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *HTTPServersTransportOps) Create(
|
||||
ctx context.Context,
|
||||
req *mantraev1.CreateServersTransportRequest,
|
||||
) (*mantraev1.CreateServersTransportResponse, error) {
|
||||
params := db.CreateHttpServersTransportParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
Name: req.Name,
|
||||
}
|
||||
|
||||
var err error
|
||||
params.Config, err = db.UnmarshalStruct[schema.HTTPServersTransport](req.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().CreateHttpServersTransport(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.CreateServersTransportResponse{
|
||||
ServersTransport: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *HTTPServersTransportOps) Update(
|
||||
ctx context.Context,
|
||||
req *mantraev1.UpdateServersTransportRequest,
|
||||
) (*mantraev1.UpdateServersTransportResponse, error) {
|
||||
params := db.UpdateHttpServersTransportParams{
|
||||
ID: req.Id,
|
||||
Name: req.Name,
|
||||
Enabled: req.Enabled,
|
||||
}
|
||||
|
||||
var err error
|
||||
params.Config, err = db.UnmarshalStruct[schema.HTTPServersTransport](req.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().UpdateHttpServersTransport(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.UpdateServersTransportResponse{
|
||||
ServersTransport: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *HTTPServersTransportOps) Delete(
|
||||
ctx context.Context,
|
||||
req *mantraev1.DeleteServersTransportRequest,
|
||||
) (*mantraev1.DeleteServersTransportResponse, error) {
|
||||
if err := s.app.Conn.GetQuery().DeleteHttpServersTransport(ctx, req.Id); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.DeleteServersTransportResponse{}, nil
|
||||
}
|
||||
|
||||
func (s *HTTPServersTransportOps) List(
|
||||
ctx context.Context,
|
||||
req *mantraev1.ListServersTransportsRequest,
|
||||
) (*mantraev1.ListServersTransportsResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().
|
||||
ListHttpServersTransports(ctx, db.ListHttpServersTransportsParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
Limit: req.Limit,
|
||||
Offset: req.Offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
totalCount, err := s.app.Conn.GetQuery().
|
||||
CountHttpServersTransports(ctx, db.CountHttpServersTransportsParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
serversTransports := make([]*mantraev1.ServersTransport, 0, len(result))
|
||||
for _, s := range result {
|
||||
serversTransports = append(serversTransports, s.ToProto())
|
||||
}
|
||||
return &mantraev1.ListServersTransportsResponse{
|
||||
ServersTransports: serversTransports,
|
||||
TotalCount: totalCount,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// TCP Servers Transport Operations -------------------------------------------
|
||||
|
||||
func (s *TCPServersTransportOps) Get(
|
||||
ctx context.Context,
|
||||
req *mantraev1.GetServersTransportRequest,
|
||||
) (*mantraev1.GetServersTransportResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().GetTcpServersTransport(ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.GetServersTransportResponse{
|
||||
ServersTransport: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *TCPServersTransportOps) Create(
|
||||
ctx context.Context,
|
||||
req *mantraev1.CreateServersTransportRequest,
|
||||
) (*mantraev1.CreateServersTransportResponse, error) {
|
||||
params := db.CreateTcpServersTransportParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
Name: req.Name,
|
||||
}
|
||||
|
||||
var err error
|
||||
params.Config, err = db.UnmarshalStruct[schema.TCPServersTransport](req.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().CreateTcpServersTransport(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.CreateServersTransportResponse{
|
||||
ServersTransport: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *TCPServersTransportOps) Update(
|
||||
ctx context.Context,
|
||||
req *mantraev1.UpdateServersTransportRequest,
|
||||
) (*mantraev1.UpdateServersTransportResponse, error) {
|
||||
params := db.UpdateTcpServersTransportParams{
|
||||
ID: req.Id,
|
||||
Name: req.Name,
|
||||
Enabled: req.Enabled,
|
||||
}
|
||||
|
||||
var err error
|
||||
params.Config, err = db.UnmarshalStruct[schema.TCPServersTransport](req.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().UpdateTcpServersTransport(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.UpdateServersTransportResponse{
|
||||
ServersTransport: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *TCPServersTransportOps) Delete(
|
||||
ctx context.Context,
|
||||
req *mantraev1.DeleteServersTransportRequest,
|
||||
) (*mantraev1.DeleteServersTransportResponse, error) {
|
||||
if err := s.app.Conn.GetQuery().DeleteTcpServersTransport(ctx, req.Id); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.DeleteServersTransportResponse{}, nil
|
||||
}
|
||||
|
||||
func (s *TCPServersTransportOps) List(
|
||||
ctx context.Context,
|
||||
req *mantraev1.ListServersTransportsRequest,
|
||||
) (*mantraev1.ListServersTransportsResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().
|
||||
ListTcpServersTransports(ctx, db.ListTcpServersTransportsParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
Limit: req.Limit,
|
||||
Offset: req.Offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
totalCount, err := s.app.Conn.GetQuery().
|
||||
CountTcpServersTransports(ctx, db.CountTcpServersTransportsParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
serversTransports := make([]*mantraev1.ServersTransport, 0, len(result))
|
||||
for _, s := range result {
|
||||
serversTransports = append(serversTransports, s.ToProto())
|
||||
}
|
||||
return &mantraev1.ListServersTransportsResponse{
|
||||
ServersTransports: serversTransports,
|
||||
TotalCount: totalCount,
|
||||
}, nil
|
||||
}
|
||||
@@ -3,404 +3,173 @@ package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"connectrpc.com/connect"
|
||||
|
||||
"github.com/mizuchilabs/mantrae/internal/config"
|
||||
"github.com/mizuchilabs/mantrae/internal/convert"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/schema"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
|
||||
type Service struct {
|
||||
app *config.App
|
||||
app *config.App
|
||||
dispatch map[mantraev1.ServiceType]ServiceOps
|
||||
}
|
||||
|
||||
func NewServiceService(app *config.App) *Service {
|
||||
return &Service{app: app}
|
||||
return &Service{
|
||||
app: app,
|
||||
dispatch: map[mantraev1.ServiceType]ServiceOps{
|
||||
mantraev1.ServiceType_SERVICE_TYPE_HTTP: NewHTTPServiceOps(app),
|
||||
mantraev1.ServiceType_SERVICE_TYPE_TCP: NewTCPServiceOps(app),
|
||||
mantraev1.ServiceType_SERVICE_TYPE_UDP: NewUDPServiceOps(app),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Service) GetService(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.GetServiceRequest],
|
||||
) (*connect.Response[mantraev1.GetServiceResponse], error) {
|
||||
var service *mantraev1.Service
|
||||
|
||||
switch req.Msg.Type {
|
||||
case mantraev1.ServiceType_SERVICE_TYPE_HTTP:
|
||||
result, err := s.app.Conn.GetQuery().GetHttpService(ctx, req.Msg.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
service = convert.HTTPServiceToProto(&result)
|
||||
|
||||
case mantraev1.ServiceType_SERVICE_TYPE_TCP:
|
||||
result, err := s.app.Conn.GetQuery().GetTcpService(ctx, req.Msg.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
service = convert.TCPServiceToProto(&result)
|
||||
|
||||
case mantraev1.ServiceType_SERVICE_TYPE_UDP:
|
||||
result, err := s.app.Conn.GetQuery().GetUdpService(ctx, req.Msg.Id)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
service = convert.UDPServiceToProto(&result)
|
||||
|
||||
default:
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, nil)
|
||||
ops, ok := s.dispatch[req.Msg.Type]
|
||||
if !ok {
|
||||
return nil, connect.NewError(
|
||||
connect.CodeInvalidArgument,
|
||||
errors.New("invalid service type"),
|
||||
)
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.GetServiceResponse{Service: service}), nil
|
||||
result, err := ops.Get(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(result), nil
|
||||
}
|
||||
|
||||
func (s *Service) CreateService(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.CreateServiceRequest],
|
||||
) (*connect.Response[mantraev1.CreateServiceResponse], error) {
|
||||
var service *mantraev1.Service
|
||||
var err error
|
||||
|
||||
switch req.Msg.Type {
|
||||
case mantraev1.ServiceType_SERVICE_TYPE_HTTP:
|
||||
var params db.CreateHttpServiceParams
|
||||
params.ProfileID = req.Msg.ProfileId
|
||||
params.Name = req.Msg.Name
|
||||
if req.Msg.AgentId != "" {
|
||||
params.AgentID = &req.Msg.AgentId
|
||||
}
|
||||
params.Config, err = convert.UnmarshalStruct[schema.HTTPService](req.Msg.Config)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().CreateHttpService(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
service = convert.HTTPServiceToProto(&result)
|
||||
|
||||
case mantraev1.ServiceType_SERVICE_TYPE_TCP:
|
||||
var params db.CreateTcpServiceParams
|
||||
params.ProfileID = req.Msg.ProfileId
|
||||
params.Name = req.Msg.Name
|
||||
if req.Msg.AgentId != "" {
|
||||
params.AgentID = &req.Msg.AgentId
|
||||
}
|
||||
params.Config, err = convert.UnmarshalStruct[schema.TCPService](req.Msg.Config)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().CreateTcpService(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
service = convert.TCPServiceToProto(&result)
|
||||
|
||||
case mantraev1.ServiceType_SERVICE_TYPE_UDP:
|
||||
var params db.CreateUdpServiceParams
|
||||
params.ProfileID = req.Msg.ProfileId
|
||||
params.Name = req.Msg.Name
|
||||
if req.Msg.AgentId != "" {
|
||||
params.AgentID = &req.Msg.AgentId
|
||||
}
|
||||
params.Config, err = convert.UnmarshalStruct[schema.UDPService](req.Msg.Config)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().CreateUdpService(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
service = convert.UDPServiceToProto(&result)
|
||||
|
||||
default:
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, nil)
|
||||
ops, ok := s.dispatch[req.Msg.Type]
|
||||
if !ok {
|
||||
return nil, connect.NewError(
|
||||
connect.CodeInvalidArgument,
|
||||
errors.New("invalid service type"),
|
||||
)
|
||||
}
|
||||
return connect.NewResponse(&mantraev1.CreateServiceResponse{Service: service}), nil
|
||||
|
||||
result, err := ops.Create(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(result), nil
|
||||
}
|
||||
|
||||
func (s *Service) UpdateService(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.UpdateServiceRequest],
|
||||
) (*connect.Response[mantraev1.UpdateServiceResponse], error) {
|
||||
var service *mantraev1.Service
|
||||
var err error
|
||||
|
||||
switch req.Msg.Type {
|
||||
case mantraev1.ServiceType_SERVICE_TYPE_HTTP:
|
||||
var params db.UpdateHttpServiceParams
|
||||
params.ID = req.Msg.Id
|
||||
params.Name = req.Msg.Name
|
||||
params.Enabled = req.Msg.Enabled
|
||||
params.Config, err = convert.UnmarshalStruct[schema.HTTPService](req.Msg.Config)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().UpdateHttpService(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
service = convert.HTTPServiceToProto(&result)
|
||||
|
||||
case mantraev1.ServiceType_SERVICE_TYPE_TCP:
|
||||
var params db.UpdateTcpServiceParams
|
||||
params.ID = req.Msg.Id
|
||||
params.Name = req.Msg.Name
|
||||
params.Enabled = req.Msg.Enabled
|
||||
params.Config, err = convert.UnmarshalStruct[schema.TCPService](req.Msg.Config)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().UpdateTcpService(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
service = convert.TCPServiceToProto(&result)
|
||||
|
||||
case mantraev1.ServiceType_SERVICE_TYPE_UDP:
|
||||
var params db.UpdateUdpServiceParams
|
||||
params.ID = req.Msg.Id
|
||||
params.Name = req.Msg.Name
|
||||
params.Enabled = req.Msg.Enabled
|
||||
params.Config, err = convert.UnmarshalStruct[schema.UDPService](req.Msg.Config)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().UpdateUdpService(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
service = convert.UDPServiceToProto(&result)
|
||||
|
||||
default:
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, nil)
|
||||
ops, ok := s.dispatch[req.Msg.Type]
|
||||
if !ok {
|
||||
return nil, connect.NewError(
|
||||
connect.CodeInvalidArgument,
|
||||
errors.New("invalid service type"),
|
||||
)
|
||||
}
|
||||
return connect.NewResponse(&mantraev1.UpdateServiceResponse{Service: service}), nil
|
||||
|
||||
result, err := ops.Update(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(result), nil
|
||||
}
|
||||
|
||||
func (s *Service) DeleteService(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.DeleteServiceRequest],
|
||||
) (*connect.Response[mantraev1.DeleteServiceResponse], error) {
|
||||
if err := s.app.Conn.GetQuery().DeleteHttpService(ctx, req.Msg.Id); err != nil {
|
||||
ops, ok := s.dispatch[req.Msg.Type]
|
||||
if !ok {
|
||||
return nil, connect.NewError(
|
||||
connect.CodeInvalidArgument,
|
||||
errors.New("invalid service type"),
|
||||
)
|
||||
}
|
||||
|
||||
result, err := ops.Delete(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(&mantraev1.DeleteServiceResponse{}), nil
|
||||
return connect.NewResponse(result), nil
|
||||
}
|
||||
|
||||
func (s *Service) ListServices(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.ListServicesRequest],
|
||||
) (*connect.Response[mantraev1.ListServicesResponse], error) {
|
||||
var limit int64
|
||||
var offset int64
|
||||
if req.Msg.Limit == nil {
|
||||
limit = 100
|
||||
} else {
|
||||
limit = *req.Msg.Limit
|
||||
}
|
||||
if req.Msg.Offset == nil {
|
||||
offset = 0
|
||||
} else {
|
||||
offset = *req.Msg.Offset
|
||||
}
|
||||
|
||||
var services []*mantraev1.Service
|
||||
var totalCount int64
|
||||
|
||||
if req.Msg.Type == nil {
|
||||
if req.Msg.AgentId == nil {
|
||||
result, err := s.app.Conn.GetQuery().
|
||||
ListServicesByProfile(ctx, db.ListServicesByProfileParams{
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
ProfileID_2: req.Msg.ProfileId,
|
||||
ProfileID_3: req.Msg.ProfileId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
totalCount, err = s.app.Conn.GetQuery().
|
||||
CountServicesByProfile(ctx, db.CountServicesByProfileParams{
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
ProfileID_2: req.Msg.ProfileId,
|
||||
ProfileID_3: req.Msg.ProfileId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
services = convert.ServicesByProfileToProto(result)
|
||||
} else {
|
||||
result, err := s.app.Conn.GetQuery().
|
||||
ListServicesByAgent(ctx, db.ListServicesByAgentParams{
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
AgentID: req.Msg.AgentId,
|
||||
AgentID_2: req.Msg.AgentId,
|
||||
AgentID_3: req.Msg.AgentId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
totalCount, err = s.app.Conn.GetQuery().
|
||||
CountServicesByAgent(ctx, db.CountServicesByAgentParams{
|
||||
AgentID: req.Msg.AgentId,
|
||||
AgentID_2: req.Msg.AgentId,
|
||||
AgentID_3: req.Msg.AgentId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
services = convert.ServicesByAgentToProto(result)
|
||||
}
|
||||
} else {
|
||||
var err error
|
||||
switch *req.Msg.Type {
|
||||
case mantraev1.ServiceType_SERVICE_TYPE_HTTP:
|
||||
if req.Msg.AgentId == nil {
|
||||
totalCount, err = s.app.Conn.GetQuery().CountHttpServicesByProfile(ctx, req.Msg.ProfileId)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
result, err := s.app.Conn.GetQuery().ListHttpServices(ctx, db.ListHttpServicesParams{
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
services = convert.HTTPServicesToProto(result)
|
||||
} else {
|
||||
totalCount, err = s.app.Conn.GetQuery().CountHttpServicesByAgent(ctx, req.Msg.AgentId)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
result, err := s.app.Conn.GetQuery().ListHttpServicesByAgent(ctx, db.ListHttpServicesByAgentParams{
|
||||
AgentID: req.Msg.AgentId,
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
services = convert.HTTPServicesToProto(result)
|
||||
}
|
||||
|
||||
case mantraev1.ServiceType_SERVICE_TYPE_TCP:
|
||||
if req.Msg.AgentId == nil {
|
||||
totalCount, err = s.app.Conn.GetQuery().CountTcpServicesByProfile(ctx, req.Msg.ProfileId)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
result, err := s.app.Conn.GetQuery().ListTcpServices(ctx, db.ListTcpServicesParams{
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
services = convert.TCPServicesToProto(result)
|
||||
} else {
|
||||
totalCount, err = s.app.Conn.GetQuery().CountTcpServicesByAgent(ctx, req.Msg.AgentId)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
result, err := s.app.Conn.GetQuery().ListTcpServicesByAgent(ctx, db.ListTcpServicesByAgentParams{
|
||||
AgentID: req.Msg.AgentId,
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
services = convert.TCPServicesToProto(result)
|
||||
}
|
||||
|
||||
case mantraev1.ServiceType_SERVICE_TYPE_UDP:
|
||||
if req.Msg.AgentId == nil {
|
||||
totalCount, err = s.app.Conn.GetQuery().CountUdpServicesByProfile(ctx, req.Msg.ProfileId)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
result, err := s.app.Conn.GetQuery().ListUdpServices(ctx, db.ListUdpServicesParams{
|
||||
ProfileID: req.Msg.ProfileId,
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
services = convert.UDPServicesToProto(result)
|
||||
} else {
|
||||
totalCount, err = s.app.Conn.GetQuery().CountUdpServicesByAgent(ctx, req.Msg.AgentId)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
result, err := s.app.Conn.GetQuery().ListUdpServicesByAgent(ctx, db.ListUdpServicesByAgentParams{
|
||||
AgentID: req.Msg.AgentId,
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
services = convert.UDPServicesToProto(result)
|
||||
}
|
||||
|
||||
default:
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, nil)
|
||||
if req.Msg.Type != nil {
|
||||
ops, ok := s.dispatch[*req.Msg.Type]
|
||||
if !ok {
|
||||
return nil, connect.NewError(
|
||||
connect.CodeInvalidArgument,
|
||||
errors.New("invalid service type"),
|
||||
)
|
||||
}
|
||||
|
||||
result, err := ops.List(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(result), nil
|
||||
} else {
|
||||
// Get HTTP services
|
||||
httpOps := s.dispatch[mantraev1.ServiceType_SERVICE_TYPE_HTTP]
|
||||
httpResult, err := httpOps.List(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.ListServicesResponse{
|
||||
Services: services,
|
||||
TotalCount: totalCount,
|
||||
}), nil
|
||||
// Get TCP services
|
||||
tcpOps := s.dispatch[mantraev1.ServiceType_SERVICE_TYPE_TCP]
|
||||
tcpResult, err := tcpOps.List(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
// Get UDP services
|
||||
udpOps := s.dispatch[mantraev1.ServiceType_SERVICE_TYPE_UDP]
|
||||
udpResult, err := udpOps.List(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
// Combine results
|
||||
allServices := append(httpResult.Services, tcpResult.Services...)
|
||||
allServices = append(allServices, udpResult.Services...)
|
||||
totalCount := httpResult.TotalCount + tcpResult.TotalCount + udpResult.TotalCount
|
||||
|
||||
return connect.NewResponse(&mantraev1.ListServicesResponse{
|
||||
Services: allServices,
|
||||
TotalCount: totalCount,
|
||||
}), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Service) GetServiceByRouter(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.GetServiceByRouterRequest],
|
||||
) (*connect.Response[mantraev1.GetServiceByRouterResponse], error) {
|
||||
var service *mantraev1.Service
|
||||
|
||||
switch req.Msg.Type {
|
||||
case mantraev1.RouterType_ROUTER_TYPE_HTTP:
|
||||
result, err := s.app.Conn.GetQuery().GetHttpServiceByName(ctx, req.Msg.Name)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
service = convert.HTTPServiceToProto(&result)
|
||||
case mantraev1.RouterType_ROUTER_TYPE_TCP:
|
||||
result, err := s.app.Conn.GetQuery().GetTcpServiceByName(ctx, req.Msg.Name)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
service = convert.TCPServiceToProto(&result)
|
||||
case mantraev1.RouterType_ROUTER_TYPE_UDP:
|
||||
result, err := s.app.Conn.GetQuery().GetUdpServiceByName(ctx, req.Msg.Name)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
service = convert.UDPServiceToProto(&result)
|
||||
default:
|
||||
return nil, connect.NewError(connect.CodeInvalidArgument, nil)
|
||||
ops, ok := s.dispatch[req.Msg.Type]
|
||||
if !ok {
|
||||
return nil, connect.NewError(
|
||||
connect.CodeInvalidArgument,
|
||||
errors.New("invalid service type"),
|
||||
)
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.GetServiceByRouterResponse{Service: service}), nil
|
||||
result, err := ops.GetByRouter(ctx, req.Msg)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(result), nil
|
||||
}
|
||||
|
||||
421
internal/api/service/service_ops.go
Normal file
421
internal/api/service/service_ops.go
Normal file
@@ -0,0 +1,421 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/mizuchilabs/mantrae/internal/config"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/schema"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
|
||||
type ServiceOps interface {
|
||||
Get(
|
||||
ctx context.Context,
|
||||
req *mantraev1.GetServiceRequest,
|
||||
) (*mantraev1.GetServiceResponse, error)
|
||||
GetByRouter(
|
||||
ctx context.Context,
|
||||
req *mantraev1.GetServiceByRouterRequest,
|
||||
) (*mantraev1.GetServiceByRouterResponse, error)
|
||||
Create(
|
||||
ctx context.Context,
|
||||
req *mantraev1.CreateServiceRequest,
|
||||
) (*mantraev1.CreateServiceResponse, error)
|
||||
Update(
|
||||
ctx context.Context,
|
||||
req *mantraev1.UpdateServiceRequest,
|
||||
) (*mantraev1.UpdateServiceResponse, error)
|
||||
Delete(
|
||||
ctx context.Context,
|
||||
req *mantraev1.DeleteServiceRequest,
|
||||
) (*mantraev1.DeleteServiceResponse, error)
|
||||
List(
|
||||
ctx context.Context,
|
||||
req *mantraev1.ListServicesRequest,
|
||||
) (*mantraev1.ListServicesResponse, error)
|
||||
}
|
||||
|
||||
type HTTPServiceOps struct {
|
||||
app *config.App
|
||||
}
|
||||
|
||||
type TCPServiceOps struct {
|
||||
app *config.App
|
||||
}
|
||||
|
||||
type UDPServiceOps struct {
|
||||
app *config.App
|
||||
}
|
||||
|
||||
func NewHTTPServiceOps(app *config.App) *HTTPServiceOps {
|
||||
return &HTTPServiceOps{app: app}
|
||||
}
|
||||
|
||||
func NewTCPServiceOps(app *config.App) *TCPServiceOps {
|
||||
return &TCPServiceOps{app: app}
|
||||
}
|
||||
|
||||
func NewUDPServiceOps(app *config.App) *UDPServiceOps {
|
||||
return &UDPServiceOps{app: app}
|
||||
}
|
||||
|
||||
// HTTP Service Operations ----------------------------------------------------
|
||||
|
||||
func (s *HTTPServiceOps) Get(
|
||||
ctx context.Context,
|
||||
req *mantraev1.GetServiceRequest,
|
||||
) (*mantraev1.GetServiceResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().GetHttpService(ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.GetServiceResponse{
|
||||
Service: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *HTTPServiceOps) GetByRouter(
|
||||
ctx context.Context,
|
||||
req *mantraev1.GetServiceByRouterRequest,
|
||||
) (*mantraev1.GetServiceByRouterResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().GetHttpServiceByName(ctx, req.Name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.GetServiceByRouterResponse{
|
||||
Service: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *HTTPServiceOps) Create(
|
||||
ctx context.Context,
|
||||
req *mantraev1.CreateServiceRequest,
|
||||
) (*mantraev1.CreateServiceResponse, error) {
|
||||
params := db.CreateHttpServiceParams{
|
||||
ProfileID: req.ProfileId,
|
||||
Name: req.Name,
|
||||
AgentID: req.AgentId,
|
||||
}
|
||||
|
||||
var err error
|
||||
params.Config, err = db.UnmarshalStruct[schema.HTTPService](req.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().CreateHttpService(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.CreateServiceResponse{
|
||||
Service: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *HTTPServiceOps) Update(
|
||||
ctx context.Context,
|
||||
req *mantraev1.UpdateServiceRequest,
|
||||
) (*mantraev1.UpdateServiceResponse, error) {
|
||||
params := db.UpdateHttpServiceParams{
|
||||
ID: req.Id,
|
||||
Name: req.Name,
|
||||
Enabled: req.Enabled,
|
||||
}
|
||||
|
||||
var err error
|
||||
params.Config, err = db.UnmarshalStruct[schema.HTTPService](req.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().UpdateHttpService(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.UpdateServiceResponse{
|
||||
Service: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *HTTPServiceOps) Delete(
|
||||
ctx context.Context,
|
||||
req *mantraev1.DeleteServiceRequest,
|
||||
) (*mantraev1.DeleteServiceResponse, error) {
|
||||
if err := s.app.Conn.GetQuery().DeleteHttpService(ctx, req.Id); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.DeleteServiceResponse{}, nil
|
||||
}
|
||||
|
||||
func (s *HTTPServiceOps) List(
|
||||
ctx context.Context,
|
||||
req *mantraev1.ListServicesRequest,
|
||||
) (*mantraev1.ListServicesResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().
|
||||
ListHttpServices(ctx, db.ListHttpServicesParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
Limit: req.Limit,
|
||||
Offset: req.Offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
totalCount, err := s.app.Conn.GetQuery().CountHttpServices(ctx, db.CountHttpServicesParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
services := make([]*mantraev1.Service, 0, len(result))
|
||||
for _, s := range result {
|
||||
services = append(services, s.ToProto())
|
||||
}
|
||||
return &mantraev1.ListServicesResponse{
|
||||
Services: services,
|
||||
TotalCount: totalCount,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// TCP Service Operations -----------------------------------------------------
|
||||
|
||||
func (s *TCPServiceOps) Get(
|
||||
ctx context.Context,
|
||||
req *mantraev1.GetServiceRequest,
|
||||
) (*mantraev1.GetServiceResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().GetTcpService(ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.GetServiceResponse{
|
||||
Service: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *TCPServiceOps) GetByRouter(
|
||||
ctx context.Context,
|
||||
req *mantraev1.GetServiceByRouterRequest,
|
||||
) (*mantraev1.GetServiceByRouterResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().GetTcpServiceByName(ctx, req.Name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.GetServiceByRouterResponse{
|
||||
Service: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *TCPServiceOps) Create(
|
||||
ctx context.Context,
|
||||
req *mantraev1.CreateServiceRequest,
|
||||
) (*mantraev1.CreateServiceResponse, error) {
|
||||
params := db.CreateTcpServiceParams{
|
||||
ProfileID: req.ProfileId,
|
||||
Name: req.Name,
|
||||
AgentID: req.AgentId,
|
||||
}
|
||||
|
||||
var err error
|
||||
params.Config, err = db.UnmarshalStruct[schema.TCPService](req.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().CreateTcpService(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.CreateServiceResponse{
|
||||
Service: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *TCPServiceOps) Update(
|
||||
ctx context.Context,
|
||||
req *mantraev1.UpdateServiceRequest,
|
||||
) (*mantraev1.UpdateServiceResponse, error) {
|
||||
params := db.UpdateTcpServiceParams{
|
||||
ID: req.Id,
|
||||
Name: req.Name,
|
||||
Enabled: req.Enabled,
|
||||
}
|
||||
|
||||
var err error
|
||||
params.Config, err = db.UnmarshalStruct[schema.TCPService](req.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().UpdateTcpService(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.UpdateServiceResponse{
|
||||
Service: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *TCPServiceOps) Delete(
|
||||
ctx context.Context,
|
||||
req *mantraev1.DeleteServiceRequest,
|
||||
) (*mantraev1.DeleteServiceResponse, error) {
|
||||
if err := s.app.Conn.GetQuery().DeleteTcpService(ctx, req.Id); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.DeleteServiceResponse{}, nil
|
||||
}
|
||||
|
||||
func (s *TCPServiceOps) List(
|
||||
ctx context.Context,
|
||||
req *mantraev1.ListServicesRequest,
|
||||
) (*mantraev1.ListServicesResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().
|
||||
ListTcpServices(ctx, db.ListTcpServicesParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
Limit: req.Limit,
|
||||
Offset: req.Offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
totalCount, err := s.app.Conn.GetQuery().CountTcpServices(ctx, db.CountTcpServicesParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
services := make([]*mantraev1.Service, 0, len(result))
|
||||
for _, s := range result {
|
||||
services = append(services, s.ToProto())
|
||||
}
|
||||
return &mantraev1.ListServicesResponse{
|
||||
Services: services,
|
||||
TotalCount: totalCount,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// UDP Service Operations -----------------------------------------------------
|
||||
|
||||
func (s *UDPServiceOps) Get(
|
||||
ctx context.Context,
|
||||
req *mantraev1.GetServiceRequest,
|
||||
) (*mantraev1.GetServiceResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().GetUdpService(ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.GetServiceResponse{
|
||||
Service: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *UDPServiceOps) GetByRouter(
|
||||
ctx context.Context,
|
||||
req *mantraev1.GetServiceByRouterRequest,
|
||||
) (*mantraev1.GetServiceByRouterResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().GetUdpServiceByName(ctx, req.Name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.GetServiceByRouterResponse{
|
||||
Service: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *UDPServiceOps) Create(
|
||||
ctx context.Context,
|
||||
req *mantraev1.CreateServiceRequest,
|
||||
) (*mantraev1.CreateServiceResponse, error) {
|
||||
params := db.CreateUdpServiceParams{
|
||||
ProfileID: req.ProfileId,
|
||||
Name: req.Name,
|
||||
AgentID: req.AgentId,
|
||||
}
|
||||
|
||||
var err error
|
||||
params.Config, err = db.UnmarshalStruct[schema.UDPService](req.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().CreateUdpService(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.CreateServiceResponse{
|
||||
Service: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *UDPServiceOps) Update(
|
||||
ctx context.Context,
|
||||
req *mantraev1.UpdateServiceRequest,
|
||||
) (*mantraev1.UpdateServiceResponse, error) {
|
||||
params := db.UpdateUdpServiceParams{
|
||||
ID: req.Id,
|
||||
Name: req.Name,
|
||||
Enabled: req.Enabled,
|
||||
}
|
||||
|
||||
var err error
|
||||
params.Config, err = db.UnmarshalStruct[schema.UDPService](req.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().UpdateUdpService(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.UpdateServiceResponse{
|
||||
Service: result.ToProto(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *UDPServiceOps) Delete(
|
||||
ctx context.Context,
|
||||
req *mantraev1.DeleteServiceRequest,
|
||||
) (*mantraev1.DeleteServiceResponse, error) {
|
||||
if err := s.app.Conn.GetQuery().DeleteUdpService(ctx, req.Id); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mantraev1.DeleteServiceResponse{}, nil
|
||||
}
|
||||
|
||||
func (s *UDPServiceOps) List(
|
||||
ctx context.Context,
|
||||
req *mantraev1.ListServicesRequest,
|
||||
) (*mantraev1.ListServicesResponse, error) {
|
||||
result, err := s.app.Conn.GetQuery().
|
||||
ListUdpServices(ctx, db.ListUdpServicesParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
Limit: req.Limit,
|
||||
Offset: req.Offset,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
totalCount, err := s.app.Conn.GetQuery().CountUdpServices(ctx, db.CountUdpServicesParams{
|
||||
ProfileID: req.ProfileId,
|
||||
AgentID: req.AgentId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
services := make([]*mantraev1.Service, 0, len(result))
|
||||
for _, s := range result {
|
||||
services = append(services, s.ToProto())
|
||||
}
|
||||
return &mantraev1.ListServicesResponse{
|
||||
Services: services,
|
||||
TotalCount: totalCount,
|
||||
}, nil
|
||||
}
|
||||
@@ -27,7 +27,6 @@ func (s *SettingService) GetSetting(
|
||||
if !ok {
|
||||
return nil, connect.NewError(connect.CodeInternal, errors.New("setting not found"))
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.GetSettingResponse{Value: value}), nil
|
||||
}
|
||||
|
||||
|
||||
@@ -7,12 +7,10 @@ import (
|
||||
"time"
|
||||
|
||||
"connectrpc.com/connect"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/mizuchilabs/mantrae/internal/api/middlewares"
|
||||
"github.com/mizuchilabs/mantrae/internal/config"
|
||||
"github.com/mizuchilabs/mantrae/internal/convert"
|
||||
"github.com/mizuchilabs/mantrae/internal/mail"
|
||||
"github.com/mizuchilabs/mantrae/internal/settings"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
@@ -47,8 +45,8 @@ func (s *UserService) LoginUser(
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
if err = bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(req.Msg.Password)); err != nil {
|
||||
return nil, connect.NewError(connect.CodeUnauthenticated, err)
|
||||
if ok := util.VerifyPassword(req.Msg.Password, user.Password); !ok {
|
||||
return nil, connect.NewError(connect.CodeUnauthenticated, errors.New("invalid password"))
|
||||
}
|
||||
|
||||
expirationTime := time.Now().Add(24 * time.Hour)
|
||||
@@ -70,7 +68,7 @@ func (s *UserService) LoginUser(
|
||||
Secure: req.Header().Get("X-Forwarded-Proto") == "https",
|
||||
SameSite: http.SameSiteLaxMode,
|
||||
}
|
||||
res := connect.NewResponse(&mantraev1.LoginUserResponse{User: convert.UserToProto(&user)})
|
||||
res := connect.NewResponse(&mantraev1.LoginUserResponse{User: user.ToProto()})
|
||||
res.Header().Set("Set-Cookie", cookie.String())
|
||||
return res, nil
|
||||
}
|
||||
@@ -151,7 +149,7 @@ func (s *UserService) VerifyOTP(
|
||||
Secure: req.Header().Get("X-Forwarded-Proto") == "https",
|
||||
SameSite: http.SameSiteLaxMode,
|
||||
}
|
||||
res := connect.NewResponse(&mantraev1.VerifyOTPResponse{User: convert.UserToProto(&user)})
|
||||
res := connect.NewResponse(&mantraev1.VerifyOTPResponse{User: user.ToProto()})
|
||||
res.Header().Set("Set-Cookie", cookie.String())
|
||||
return res, nil
|
||||
}
|
||||
@@ -226,7 +224,7 @@ func (s *UserService) GetUser(
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.GetUserResponse{
|
||||
User: convert.UserToProto(&user),
|
||||
User: user.ToProto(),
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -234,30 +232,24 @@ func (s *UserService) CreateUser(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.CreateUserRequest],
|
||||
) (*connect.Response[mantraev1.CreateUserResponse], error) {
|
||||
id, err := uuid.NewV7()
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
params := db.CreateUserParams{
|
||||
ID: uuid.NewString(),
|
||||
Username: req.Msg.Username,
|
||||
Email: req.Msg.Email,
|
||||
}
|
||||
|
||||
params := db.CreateUserParams{
|
||||
ID: id.String(),
|
||||
Username: req.Msg.Username,
|
||||
}
|
||||
if req.Msg.Email != "" {
|
||||
params.Email = &req.Msg.Email
|
||||
}
|
||||
hash, err := util.HashPassword(req.Msg.Password)
|
||||
var err error
|
||||
params.Password, err = util.HashPassword(req.Msg.Password)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
params.Password = hash
|
||||
|
||||
result, err := s.app.Conn.GetQuery().CreateUser(ctx, params)
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
return connect.NewResponse(&mantraev1.CreateUserResponse{
|
||||
User: convert.UserToProto(&result),
|
||||
User: result.ToProto(),
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -268,9 +260,7 @@ func (s *UserService) UpdateUser(
|
||||
params := db.UpdateUserParams{
|
||||
ID: req.Msg.Id,
|
||||
Username: req.Msg.Username,
|
||||
}
|
||||
if req.Msg.Email != "" {
|
||||
params.Email = &req.Msg.Email
|
||||
Email: req.Msg.Email,
|
||||
}
|
||||
user, err := s.app.Conn.GetQuery().UpdateUser(ctx, params)
|
||||
if err != nil {
|
||||
@@ -293,7 +283,7 @@ func (s *UserService) UpdateUser(
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.UpdateUserResponse{
|
||||
User: convert.UserToProto(&user),
|
||||
User: user.ToProto(),
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -311,16 +301,9 @@ func (s *UserService) ListUsers(
|
||||
ctx context.Context,
|
||||
req *connect.Request[mantraev1.ListUsersRequest],
|
||||
) (*connect.Response[mantraev1.ListUsersResponse], error) {
|
||||
var params db.ListUsersParams
|
||||
if req.Msg.Limit == nil {
|
||||
params.Limit = 100
|
||||
} else {
|
||||
params.Limit = *req.Msg.Limit
|
||||
}
|
||||
if req.Msg.Offset == nil {
|
||||
params.Offset = 0
|
||||
} else {
|
||||
params.Offset = *req.Msg.Offset
|
||||
params := db.ListUsersParams{
|
||||
Limit: req.Msg.Limit,
|
||||
Offset: req.Msg.Offset,
|
||||
}
|
||||
|
||||
result, err := s.app.Conn.GetQuery().ListUsers(ctx, params)
|
||||
@@ -332,8 +315,12 @@ func (s *UserService) ListUsers(
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
users := make([]*mantraev1.User, 0, len(result))
|
||||
for _, u := range result {
|
||||
users = append(users, u.ToProto())
|
||||
}
|
||||
return connect.NewResponse(&mantraev1.ListUsersResponse{
|
||||
Users: convert.UsersToProto(result),
|
||||
Users: users,
|
||||
TotalCount: totalCount,
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -36,7 +36,6 @@ func (s *UtilService) GetPublicIP(
|
||||
if err != nil {
|
||||
return nil, connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
return connect.NewResponse(&mantraev1.GetPublicIPResponse{
|
||||
Ipv4: ips.IPv4,
|
||||
Ipv6: ips.IPv6,
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
// Package config provides functions for parsing command-line f and
|
||||
// setting up the application's default settings.
|
||||
//go:build !dev
|
||||
// +build !dev
|
||||
|
||||
// Package config various app setup and configuration functions.
|
||||
package config
|
||||
|
||||
import (
|
||||
@@ -7,7 +9,6 @@ import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/mizuchilabs/mantrae/internal/store"
|
||||
"github.com/mizuchilabs/mantrae/pkg/build"
|
||||
)
|
||||
|
||||
@@ -22,8 +23,6 @@ func ParseFlags() {
|
||||
f := &Flags{}
|
||||
flag.BoolVar(&f.Version, "version", false, "Print version and exit")
|
||||
flag.BoolVar(&f.Update, "update", false, "Update the application")
|
||||
// flag.BoolVar(&f.Squash, "squash", false, "Squash the database (only for dev)")
|
||||
// flag.BoolVar(&f.Zod, "zod", false, "Generate zod schemas (only for dev)")
|
||||
|
||||
flag.Parse()
|
||||
flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError)
|
||||
@@ -33,14 +32,5 @@ func ParseFlags() {
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
if f.Squash {
|
||||
store.Squash()
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if f.Zod {
|
||||
StructToZodSchema()
|
||||
os.Exit(1)
|
||||
}
|
||||
build.Update(f.Update)
|
||||
}
|
||||
|
||||
47
internal/config/flags_dev.go
Normal file
47
internal/config/flags_dev.go
Normal file
@@ -0,0 +1,47 @@
|
||||
//go:build dev
|
||||
// +build dev
|
||||
|
||||
package config
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/mizuchilabs/mantrae/internal/store"
|
||||
"github.com/mizuchilabs/mantrae/pkg/build"
|
||||
)
|
||||
|
||||
type Flags struct {
|
||||
Version bool
|
||||
Update bool
|
||||
Squash bool
|
||||
Zod bool
|
||||
}
|
||||
|
||||
func ParseFlags() {
|
||||
f := &Flags{}
|
||||
flag.BoolVar(&f.Version, "version", false, "Print version and exit")
|
||||
flag.BoolVar(&f.Update, "update", false, "Update the application")
|
||||
flag.BoolVar(&f.Squash, "squash", false, "Squash the database (only for dev)")
|
||||
flag.BoolVar(&f.Zod, "zod", false, "Generate zod schemas (only for dev)")
|
||||
|
||||
flag.Parse()
|
||||
flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError)
|
||||
|
||||
if f.Version {
|
||||
fmt.Println(build.Version)
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
if f.Squash {
|
||||
store.Squash()
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if f.Zod {
|
||||
StructToZodSchema()
|
||||
os.Exit(1)
|
||||
}
|
||||
build.Update(f.Update)
|
||||
}
|
||||
@@ -11,7 +11,6 @@ import (
|
||||
"github.com/caarlos0/env/v11"
|
||||
"github.com/google/uuid"
|
||||
"github.com/mizuchilabs/mantrae/internal/backup"
|
||||
"github.com/mizuchilabs/mantrae/internal/events"
|
||||
"github.com/mizuchilabs/mantrae/internal/settings"
|
||||
"github.com/mizuchilabs/mantrae/internal/store"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
@@ -22,7 +21,6 @@ import (
|
||||
type App struct {
|
||||
Secret string `env:"SECRET"`
|
||||
Conn *store.Connection
|
||||
Event *events.EventBroadcaster
|
||||
BM *backup.BackupManager
|
||||
SM *settings.SettingsManager
|
||||
}
|
||||
@@ -61,7 +59,7 @@ func (a *App) setupDefaultData(ctx context.Context) error {
|
||||
q := a.Conn.GetQuery()
|
||||
|
||||
// Ensure at least one user exists
|
||||
users, err := q.ListUsers(ctx, db.ListUsersParams{Limit: 1, Offset: 0})
|
||||
users, err := q.ListUsers(ctx, db.ListUsersParams{})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to list admin users: %w", err)
|
||||
}
|
||||
@@ -100,7 +98,7 @@ func (a *App) setupDefaultData(ctx context.Context) error {
|
||||
}
|
||||
|
||||
// Ensure default profile exists
|
||||
profiles, err := q.ListProfiles(ctx, db.ListProfilesParams{Limit: 1, Offset: 0})
|
||||
profiles, err := q.ListProfiles(ctx, db.ListProfilesParams{})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to list profiles: %w", err)
|
||||
}
|
||||
|
||||
@@ -75,10 +75,7 @@ func (a *App) cleanupAgents(ctx context.Context) {
|
||||
}
|
||||
|
||||
// List profiles
|
||||
profiles, err := a.Conn.GetQuery().ListProfiles(ctx, db.ListProfilesParams{
|
||||
Limit: -1,
|
||||
Offset: 0,
|
||||
})
|
||||
profiles, err := a.Conn.GetQuery().ListProfiles(ctx, db.ListProfilesParams{})
|
||||
if err != nil {
|
||||
slog.Error("failed to list profiles", "error", err)
|
||||
continue
|
||||
@@ -86,11 +83,8 @@ func (a *App) cleanupAgents(ctx context.Context) {
|
||||
|
||||
var agents []db.Agent
|
||||
for _, profile := range profiles {
|
||||
a, err := a.Conn.GetQuery().ListAgents(ctx, db.ListAgentsParams{
|
||||
ProfileID: profile.ID,
|
||||
Limit: -1,
|
||||
Offset: 0,
|
||||
})
|
||||
a, err := a.Conn.GetQuery().
|
||||
ListAgents(ctx, db.ListAgentsParams{ProfileID: profile.ID})
|
||||
if err != nil {
|
||||
slog.Error("failed to list agents", "error", err)
|
||||
continue
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
//go:build dev
|
||||
// +build dev
|
||||
|
||||
package config
|
||||
|
||||
import (
|
||||
@@ -1,44 +0,0 @@
|
||||
package convert
|
||||
|
||||
import (
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
|
||||
func AgentToProto(a *db.Agent) *mantraev1.Agent {
|
||||
var containers []*mantraev1.Container
|
||||
if a.Containers != nil {
|
||||
for _, c := range *a.Containers {
|
||||
containers = append(containers, &mantraev1.Container{
|
||||
Id: c.ID,
|
||||
Name: c.Name,
|
||||
Labels: c.Labels,
|
||||
Image: c.Image,
|
||||
Portmap: c.Portmap,
|
||||
Status: c.Status,
|
||||
Created: SafeTimestamp(c.Created),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return &mantraev1.Agent{
|
||||
Id: a.ID,
|
||||
ProfileId: a.ProfileID,
|
||||
Hostname: SafeString(a.Hostname),
|
||||
PublicIp: SafeString(a.PublicIp),
|
||||
PrivateIp: SafeString(a.PrivateIp),
|
||||
ActiveIp: SafeString(a.ActiveIp),
|
||||
Token: a.Token,
|
||||
Containers: containers,
|
||||
CreatedAt: SafeTimestamp(a.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(a.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func AgentsToProto(agents []db.Agent) []*mantraev1.Agent {
|
||||
var agentsProto []*mantraev1.Agent
|
||||
for _, a := range agents {
|
||||
agentsProto = append(agentsProto, AgentToProto(&a))
|
||||
}
|
||||
return agentsProto
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
package convert
|
||||
|
||||
import (
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
|
||||
func AuditLogsToProto(logs []db.ListAuditLogsRow) []*mantraev1.AuditLog {
|
||||
var auditLogs []*mantraev1.AuditLog
|
||||
for _, l := range logs {
|
||||
auditLogs = append(auditLogs, &mantraev1.AuditLog{
|
||||
Id: l.ID,
|
||||
ProfileId: SafeInt64(l.ProfileID),
|
||||
ProfileName: SafeString(l.ProfileName),
|
||||
UserId: SafeString(l.UserID),
|
||||
UserName: SafeString(l.UserName),
|
||||
AgentId: SafeString(l.AgentID),
|
||||
AgentName: SafeString(l.AgentName),
|
||||
Event: l.Event,
|
||||
Details: SafeString(l.Details),
|
||||
CreatedAt: SafeTimestamp(l.CreatedAt),
|
||||
})
|
||||
}
|
||||
return auditLogs
|
||||
}
|
||||
@@ -1,75 +0,0 @@
|
||||
// Convert package contains functions to convert between db and proto types
|
||||
package convert
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"time"
|
||||
|
||||
"google.golang.org/protobuf/types/known/structpb"
|
||||
"google.golang.org/protobuf/types/known/timestamppb"
|
||||
)
|
||||
|
||||
func SafeString(s *string) string {
|
||||
if s == nil {
|
||||
return ""
|
||||
}
|
||||
return *s
|
||||
}
|
||||
|
||||
func SafeInt32(i *int32) int32 {
|
||||
if i == nil {
|
||||
return 0
|
||||
}
|
||||
return *i
|
||||
}
|
||||
|
||||
func SafeInt64(i *int64) int64 {
|
||||
if i == nil {
|
||||
return 0
|
||||
}
|
||||
return *i
|
||||
}
|
||||
|
||||
func SafeFloat(f *float64) float64 {
|
||||
if f == nil {
|
||||
return 0.0
|
||||
}
|
||||
return *f
|
||||
}
|
||||
|
||||
func SafeTimestamp(t *time.Time) *timestamppb.Timestamp {
|
||||
if t == nil {
|
||||
return nil
|
||||
}
|
||||
return timestamppb.New(*t)
|
||||
}
|
||||
|
||||
func UnmarshalStruct[T any](s *structpb.Struct) (*T, error) {
|
||||
// Marshal the proto Struct to JSON bytes
|
||||
data, err := s.MarshalJSON()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Unmarshal into your target struct
|
||||
var out T
|
||||
if err := json.Unmarshal(data, &out); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &out, nil
|
||||
}
|
||||
|
||||
func MarshalStruct[T any](s *T) (*structpb.Struct, error) {
|
||||
// Marshal the target struct to JSON bytes
|
||||
data, err := json.Marshal(s)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Unmarshal into your proto Struct
|
||||
var out structpb.Struct
|
||||
if err := out.UnmarshalJSON(data); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &out, nil
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
package convert
|
||||
|
||||
import (
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
|
||||
func DNSProviderToProto(p *db.DnsProvider) *mantraev1.DnsProvider {
|
||||
var dnsType mantraev1.DnsProviderType
|
||||
switch p.Type {
|
||||
case "cloudflare":
|
||||
dnsType = mantraev1.DnsProviderType_DNS_PROVIDER_TYPE_CLOUDFLARE
|
||||
case "powerdns":
|
||||
dnsType = mantraev1.DnsProviderType_DNS_PROVIDER_TYPE_POWERDNS
|
||||
case "technitium":
|
||||
dnsType = mantraev1.DnsProviderType_DNS_PROVIDER_TYPE_TECHNITIUM
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
|
||||
return &mantraev1.DnsProvider{
|
||||
Id: p.ID,
|
||||
Name: p.Name,
|
||||
Type: dnsType,
|
||||
Config: &mantraev1.DnsProviderConfig{
|
||||
ApiKey: p.Config.APIKey,
|
||||
ApiUrl: p.Config.APIUrl,
|
||||
Ip: p.Config.IP,
|
||||
Proxied: p.Config.Proxied,
|
||||
AutoUpdate: p.Config.AutoUpdate,
|
||||
ZoneType: p.Config.ZoneType,
|
||||
},
|
||||
IsDefault: p.IsDefault,
|
||||
CreatedAt: SafeTimestamp(p.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(p.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func DNSProvidersToProto(providers []db.DnsProvider) []*mantraev1.DnsProvider {
|
||||
var dnsProviders []*mantraev1.DnsProvider
|
||||
for _, p := range providers {
|
||||
dnsProviders = append(dnsProviders, DNSProviderToProto(&p))
|
||||
}
|
||||
return dnsProviders
|
||||
}
|
||||
@@ -1,104 +0,0 @@
|
||||
package convert
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log/slog"
|
||||
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/schema"
|
||||
"github.com/traefik/traefik/v3/pkg/config/dynamic"
|
||||
)
|
||||
|
||||
// DynamicToDB saves a Traefik dynamic configuration to the database
|
||||
func DynamicToDB(
|
||||
ctx context.Context,
|
||||
q db.Queries,
|
||||
profileID int64,
|
||||
dynamic *dynamic.Configuration,
|
||||
) error {
|
||||
for k, v := range dynamic.HTTP.Routers {
|
||||
if _, err := q.CreateHttpRouter(ctx, db.CreateHttpRouterParams{
|
||||
ProfileID: profileID,
|
||||
Name: k,
|
||||
Config: schema.WrapRouter(v),
|
||||
}); err != nil {
|
||||
slog.Error("failed to create http router", "err", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
for k, v := range dynamic.TCP.Routers {
|
||||
if _, err := q.CreateTcpRouter(ctx, db.CreateTcpRouterParams{
|
||||
ProfileID: profileID,
|
||||
Name: k,
|
||||
Config: schema.WrapTCPRouter(v),
|
||||
}); err != nil {
|
||||
slog.Error("failed to create tcp router", "err", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
for k, v := range dynamic.UDP.Routers {
|
||||
if _, err := q.CreateUdpRouter(ctx, db.CreateUdpRouterParams{
|
||||
ProfileID: profileID,
|
||||
Name: k,
|
||||
Config: schema.WrapUDPRouter(v),
|
||||
}); err != nil {
|
||||
slog.Error("failed to create udp router", "err", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
// Services
|
||||
for k, v := range dynamic.HTTP.Services {
|
||||
if _, err := q.CreateHttpService(ctx, db.CreateHttpServiceParams{
|
||||
ProfileID: profileID,
|
||||
Name: k,
|
||||
Config: schema.WrapService(v),
|
||||
}); err != nil {
|
||||
slog.Error("failed to create http service", "err", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
for k, v := range dynamic.TCP.Services {
|
||||
if _, err := q.CreateTcpService(ctx, db.CreateTcpServiceParams{
|
||||
ProfileID: profileID,
|
||||
Name: k,
|
||||
Config: schema.WrapTCPService(v),
|
||||
}); err != nil {
|
||||
slog.Error("failed to create tcp service", "err", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
for k, v := range dynamic.UDP.Services {
|
||||
if _, err := q.CreateUdpService(ctx, db.CreateUdpServiceParams{
|
||||
ProfileID: profileID,
|
||||
Name: k,
|
||||
Config: schema.WrapUDPService(v),
|
||||
}); err != nil {
|
||||
slog.Error("failed to create udp service", "err", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
// Middlewares
|
||||
for k, v := range dynamic.HTTP.Middlewares {
|
||||
if _, err := q.CreateHttpMiddleware(ctx, db.CreateHttpMiddlewareParams{
|
||||
ProfileID: profileID,
|
||||
Name: k,
|
||||
Config: schema.WrapMiddleware(v),
|
||||
}); err != nil {
|
||||
slog.Error("failed to create http middleware", "err", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
for k, v := range dynamic.TCP.Middlewares {
|
||||
if _, err := q.CreateTcpMiddleware(ctx, db.CreateTcpMiddlewareParams{
|
||||
ProfileID: profileID,
|
||||
Name: k,
|
||||
Config: schema.WrapTCPMiddleware(v),
|
||||
}); err != nil {
|
||||
slog.Error("failed to create tcp middleware", "err", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
package convert
|
||||
|
||||
import (
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
|
||||
func EntryPointToProto(e *db.EntryPoint) *mantraev1.EntryPoint {
|
||||
return &mantraev1.EntryPoint{
|
||||
Id: e.ID,
|
||||
ProfileId: e.ProfileID,
|
||||
Name: e.Name,
|
||||
Address: e.Address,
|
||||
IsDefault: e.IsDefault,
|
||||
CreatedAt: SafeTimestamp(e.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(e.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func EntryPointsToProto(entryPoints []db.EntryPoint) []*mantraev1.EntryPoint {
|
||||
var entryPointsProto []*mantraev1.EntryPoint
|
||||
for _, e := range entryPoints {
|
||||
entryPointsProto = append(entryPointsProto, EntryPointToProto(&e))
|
||||
}
|
||||
return entryPointsProto
|
||||
}
|
||||
@@ -1,156 +0,0 @@
|
||||
package convert
|
||||
|
||||
import (
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
|
||||
func HTTPMiddlewareToProto(m *db.HttpMiddleware) *mantraev1.Middleware {
|
||||
config, err := MarshalStruct(m.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &mantraev1.Middleware{
|
||||
Id: m.ID,
|
||||
ProfileId: m.ProfileID,
|
||||
AgentId: SafeString(m.AgentID),
|
||||
Name: m.Name,
|
||||
Config: config,
|
||||
Type: mantraev1.MiddlewareType_MIDDLEWARE_TYPE_HTTP,
|
||||
Enabled: m.Enabled,
|
||||
IsDefault: m.IsDefault,
|
||||
CreatedAt: SafeTimestamp(m.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(m.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func TCPMiddlewareToProto(m *db.TcpMiddleware) *mantraev1.Middleware {
|
||||
config, err := MarshalStruct(m.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &mantraev1.Middleware{
|
||||
Id: m.ID,
|
||||
ProfileId: m.ProfileID,
|
||||
AgentId: SafeString(m.AgentID),
|
||||
Name: m.Name,
|
||||
Config: config,
|
||||
Type: mantraev1.MiddlewareType_MIDDLEWARE_TYPE_TCP,
|
||||
Enabled: m.Enabled,
|
||||
IsDefault: m.IsDefault,
|
||||
CreatedAt: SafeTimestamp(m.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(m.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func HTTPMiddlewaresToProto(middlewares []db.HttpMiddleware) []*mantraev1.Middleware {
|
||||
var middlewaresProto []*mantraev1.Middleware
|
||||
for _, m := range middlewares {
|
||||
middlewaresProto = append(middlewaresProto, HTTPMiddlewareToProto(&m))
|
||||
}
|
||||
return middlewaresProto
|
||||
}
|
||||
|
||||
func TCPMiddlewaresToProto(middlewares []db.TcpMiddleware) []*mantraev1.Middleware {
|
||||
var middlewaresProto []*mantraev1.Middleware
|
||||
for _, m := range middlewares {
|
||||
middlewaresProto = append(middlewaresProto, TCPMiddlewareToProto(&m))
|
||||
}
|
||||
return middlewaresProto
|
||||
}
|
||||
|
||||
// Specialized batch conversion functions
|
||||
|
||||
func MiddlewaresByProfileToProto(
|
||||
middlewares []db.ListMiddlewaresByProfileRow,
|
||||
) []*mantraev1.Middleware {
|
||||
var middlewaresProto []*mantraev1.Middleware
|
||||
for _, m := range middlewares {
|
||||
switch m.Type {
|
||||
case "http":
|
||||
config, err := MarshalStruct(m.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
middlewaresProto = append(middlewaresProto, &mantraev1.Middleware{
|
||||
Id: m.ID,
|
||||
ProfileId: m.ProfileID,
|
||||
AgentId: SafeString(m.AgentID),
|
||||
Name: m.Name,
|
||||
Config: config,
|
||||
Type: mantraev1.MiddlewareType_MIDDLEWARE_TYPE_HTTP,
|
||||
Enabled: m.Enabled,
|
||||
IsDefault: m.IsDefault,
|
||||
CreatedAt: SafeTimestamp(m.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(m.UpdatedAt),
|
||||
})
|
||||
case "tcp":
|
||||
config, err := MarshalStruct(m.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
middlewaresProto = append(middlewaresProto, &mantraev1.Middleware{
|
||||
Id: m.ID,
|
||||
ProfileId: m.ProfileID,
|
||||
AgentId: SafeString(m.AgentID),
|
||||
Name: m.Name,
|
||||
Config: config,
|
||||
Type: mantraev1.MiddlewareType_MIDDLEWARE_TYPE_TCP,
|
||||
Enabled: m.Enabled,
|
||||
IsDefault: m.IsDefault,
|
||||
CreatedAt: SafeTimestamp(m.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(m.UpdatedAt),
|
||||
})
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return middlewaresProto
|
||||
}
|
||||
|
||||
func MiddlewaresByAgentToProto(middlewares []db.ListMiddlewaresByAgentRow) []*mantraev1.Middleware {
|
||||
var middlewaresProto []*mantraev1.Middleware
|
||||
for _, m := range middlewares {
|
||||
switch m.Type {
|
||||
case "http":
|
||||
config, err := MarshalStruct(m.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
middlewaresProto = append(middlewaresProto, &mantraev1.Middleware{
|
||||
Id: m.ID,
|
||||
ProfileId: m.ProfileID,
|
||||
AgentId: SafeString(m.AgentID),
|
||||
Name: m.Name,
|
||||
Config: config,
|
||||
Type: mantraev1.MiddlewareType_MIDDLEWARE_TYPE_HTTP,
|
||||
Enabled: m.Enabled,
|
||||
IsDefault: m.IsDefault,
|
||||
CreatedAt: SafeTimestamp(m.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(m.UpdatedAt),
|
||||
})
|
||||
case "tcp":
|
||||
config, err := MarshalStruct(m.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
middlewaresProto = append(middlewaresProto, &mantraev1.Middleware{
|
||||
Id: m.ID,
|
||||
ProfileId: m.ProfileID,
|
||||
AgentId: SafeString(m.AgentID),
|
||||
Name: m.Name,
|
||||
Config: config,
|
||||
Type: mantraev1.MiddlewareType_MIDDLEWARE_TYPE_TCP,
|
||||
Enabled: m.Enabled,
|
||||
IsDefault: m.IsDefault,
|
||||
CreatedAt: SafeTimestamp(m.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(m.UpdatedAt),
|
||||
})
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return middlewaresProto
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
package convert
|
||||
|
||||
import (
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
|
||||
func ProfileToProto(p *db.Profile) *mantraev1.Profile {
|
||||
return &mantraev1.Profile{
|
||||
Id: p.ID,
|
||||
Name: p.Name,
|
||||
Description: SafeString(p.Description),
|
||||
Token: p.Token,
|
||||
CreatedAt: SafeTimestamp(p.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(p.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func ProfilesToProto(profiles []db.Profile) []*mantraev1.Profile {
|
||||
var profilesProto []*mantraev1.Profile
|
||||
for _, p := range profiles {
|
||||
profilesProto = append(profilesProto, ProfileToProto(&p))
|
||||
}
|
||||
return profilesProto
|
||||
}
|
||||
@@ -1,227 +0,0 @@
|
||||
package convert
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
|
||||
func HTTPRouterToProto(r *db.HttpRouter, d []*mantraev1.DnsProvider) *mantraev1.Router {
|
||||
config, err := MarshalStruct(r.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &mantraev1.Router{
|
||||
Id: r.ID,
|
||||
ProfileId: r.ProfileID,
|
||||
AgentId: SafeString(r.AgentID),
|
||||
Name: r.Name,
|
||||
Config: config,
|
||||
Enabled: r.Enabled,
|
||||
Type: mantraev1.RouterType_ROUTER_TYPE_HTTP,
|
||||
DnsProviders: d,
|
||||
CreatedAt: SafeTimestamp(r.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(r.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func TCPRouterToProto(r *db.TcpRouter, d []*mantraev1.DnsProvider) *mantraev1.Router {
|
||||
config, err := MarshalStruct(r.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &mantraev1.Router{
|
||||
Id: r.ID,
|
||||
ProfileId: r.ProfileID,
|
||||
AgentId: SafeString(r.AgentID),
|
||||
Name: r.Name,
|
||||
Config: config,
|
||||
Enabled: r.Enabled,
|
||||
Type: mantraev1.RouterType_ROUTER_TYPE_TCP,
|
||||
DnsProviders: d,
|
||||
CreatedAt: SafeTimestamp(r.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(r.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func UDPRouterToProto(r *db.UdpRouter) *mantraev1.Router {
|
||||
config, err := MarshalStruct(r.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &mantraev1.Router{
|
||||
Id: r.ID,
|
||||
ProfileId: r.ProfileID,
|
||||
AgentId: SafeString(r.AgentID),
|
||||
Name: r.Name,
|
||||
Config: config,
|
||||
Enabled: r.Enabled,
|
||||
Type: mantraev1.RouterType_ROUTER_TYPE_UDP,
|
||||
CreatedAt: SafeTimestamp(r.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(r.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func HTTPRoutersToProto(routers []db.HttpRouter, q *db.Queries) []*mantraev1.Router {
|
||||
var routersProto []*mantraev1.Router
|
||||
for _, r := range routers {
|
||||
result, _ := q.GetDnsProvidersByHttpRouter(context.Background(), r.ID)
|
||||
routersProto = append(routersProto, HTTPRouterToProto(&r, DNSProvidersToProto(result)))
|
||||
}
|
||||
return routersProto
|
||||
}
|
||||
|
||||
func TCPRoutersToProto(routers []db.TcpRouter, q *db.Queries) []*mantraev1.Router {
|
||||
var routersProto []*mantraev1.Router
|
||||
for _, r := range routers {
|
||||
result, _ := q.GetDnsProvidersByTcpRouter(context.Background(), r.ID)
|
||||
routersProto = append(routersProto, TCPRouterToProto(&r, DNSProvidersToProto(result)))
|
||||
}
|
||||
return routersProto
|
||||
}
|
||||
|
||||
func UDPRoutersToProto(routers []db.UdpRouter) []*mantraev1.Router {
|
||||
var routersProto []*mantraev1.Router
|
||||
for _, r := range routers {
|
||||
routersProto = append(routersProto, UDPRouterToProto(&r))
|
||||
}
|
||||
return routersProto
|
||||
}
|
||||
|
||||
// Specialized batch conversion functions
|
||||
func RoutersByProfileToProto(
|
||||
routers []db.ListRoutersByProfileRow,
|
||||
q *db.Queries,
|
||||
) []*mantraev1.Router {
|
||||
var routersProto []*mantraev1.Router
|
||||
for _, r := range routers {
|
||||
switch r.Type {
|
||||
case "http":
|
||||
config, err := MarshalStruct(r.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
result, _ := q.GetDnsProvidersByHttpRouter(context.Background(), r.ID)
|
||||
routersProto = append(routersProto, &mantraev1.Router{
|
||||
Id: r.ID,
|
||||
ProfileId: r.ProfileID,
|
||||
AgentId: SafeString(r.AgentID),
|
||||
Name: r.Name,
|
||||
Config: config,
|
||||
Enabled: r.Enabled,
|
||||
Type: mantraev1.RouterType_ROUTER_TYPE_HTTP,
|
||||
DnsProviders: DNSProvidersToProto(result),
|
||||
CreatedAt: SafeTimestamp(r.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(r.UpdatedAt),
|
||||
})
|
||||
case "tcp":
|
||||
config, err := MarshalStruct(r.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
result, _ := q.GetDnsProvidersByTcpRouter(context.Background(), r.ID)
|
||||
routersProto = append(routersProto, &mantraev1.Router{
|
||||
Id: r.ID,
|
||||
ProfileId: r.ProfileID,
|
||||
AgentId: SafeString(r.AgentID),
|
||||
Name: r.Name,
|
||||
Config: config,
|
||||
Enabled: r.Enabled,
|
||||
Type: mantraev1.RouterType_ROUTER_TYPE_TCP,
|
||||
DnsProviders: DNSProvidersToProto(result),
|
||||
CreatedAt: SafeTimestamp(r.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(r.UpdatedAt),
|
||||
})
|
||||
case "udp":
|
||||
config, err := MarshalStruct(r.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
routersProto = append(routersProto, &mantraev1.Router{
|
||||
Id: r.ID,
|
||||
ProfileId: r.ProfileID,
|
||||
AgentId: SafeString(r.AgentID),
|
||||
Name: r.Name,
|
||||
Config: config,
|
||||
Enabled: r.Enabled,
|
||||
Type: mantraev1.RouterType_ROUTER_TYPE_UDP,
|
||||
CreatedAt: SafeTimestamp(r.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(r.UpdatedAt),
|
||||
})
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return routersProto
|
||||
}
|
||||
|
||||
func RoutersByAgentToProto(routers []db.ListRoutersByAgentRow, q *db.Queries) []*mantraev1.Router {
|
||||
var routersProto []*mantraev1.Router
|
||||
for _, r := range routers {
|
||||
switch r.Type {
|
||||
case "http":
|
||||
config, err := MarshalStruct(r.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
result, _ := q.GetDnsProvidersByHttpRouter(context.Background(), r.ID)
|
||||
routersProto = append(routersProto, &mantraev1.Router{
|
||||
Id: r.ID,
|
||||
ProfileId: r.ProfileID,
|
||||
AgentId: SafeString(r.AgentID),
|
||||
Name: r.Name,
|
||||
Config: config,
|
||||
Enabled: r.Enabled,
|
||||
Type: mantraev1.RouterType_ROUTER_TYPE_HTTP,
|
||||
DnsProviders: DNSProvidersToProto(result),
|
||||
CreatedAt: SafeTimestamp(r.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(r.UpdatedAt),
|
||||
})
|
||||
case "tcp":
|
||||
config, err := MarshalStruct(r.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
result, _ := q.GetDnsProvidersByTcpRouter(context.Background(), r.ID)
|
||||
routersProto = append(routersProto, &mantraev1.Router{
|
||||
Id: r.ID,
|
||||
ProfileId: r.ProfileID,
|
||||
AgentId: SafeString(r.AgentID),
|
||||
Name: r.Name,
|
||||
Config: config,
|
||||
Enabled: r.Enabled,
|
||||
Type: mantraev1.RouterType_ROUTER_TYPE_TCP,
|
||||
DnsProviders: DNSProvidersToProto(result),
|
||||
CreatedAt: SafeTimestamp(r.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(r.UpdatedAt),
|
||||
})
|
||||
case "udp":
|
||||
config, err := MarshalStruct(r.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
routersProto = append(routersProto, &mantraev1.Router{
|
||||
Id: r.ID,
|
||||
ProfileId: r.ProfileID,
|
||||
AgentId: SafeString(r.AgentID),
|
||||
Name: r.Name,
|
||||
Config: config,
|
||||
Enabled: r.Enabled,
|
||||
Type: mantraev1.RouterType_ROUTER_TYPE_UDP,
|
||||
CreatedAt: SafeTimestamp(r.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(r.UpdatedAt),
|
||||
})
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return routersProto
|
||||
}
|
||||
@@ -1,156 +0,0 @@
|
||||
package convert
|
||||
|
||||
import (
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
|
||||
func HTTPServersTransportToProto(in *db.HttpServersTransport) *mantraev1.ServersTransport {
|
||||
config, err := MarshalStruct(in.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &mantraev1.ServersTransport{
|
||||
Id: in.ID,
|
||||
ProfileId: in.ProfileID,
|
||||
AgentId: SafeString(in.AgentID),
|
||||
Name: in.Name,
|
||||
Config: config,
|
||||
Enabled: in.Enabled,
|
||||
Type: mantraev1.ServersTransportType_SERVERS_TRANSPORT_TYPE_HTTP,
|
||||
CreatedAt: SafeTimestamp(in.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(in.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func TCPServersTransportToProto(in *db.TcpServersTransport) *mantraev1.ServersTransport {
|
||||
config, err := MarshalStruct(in.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &mantraev1.ServersTransport{
|
||||
Id: in.ID,
|
||||
ProfileId: in.ProfileID,
|
||||
AgentId: SafeString(in.AgentID),
|
||||
Name: in.Name,
|
||||
Config: config,
|
||||
Enabled: in.Enabled,
|
||||
Type: mantraev1.ServersTransportType_SERVERS_TRANSPORT_TYPE_TCP,
|
||||
CreatedAt: SafeTimestamp(in.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(in.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func HTTPServersTransportsToProto(in []db.HttpServersTransport) []*mantraev1.ServersTransport {
|
||||
var out []*mantraev1.ServersTransport
|
||||
for _, s := range in {
|
||||
out = append(out, HTTPServersTransportToProto(&s))
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
func TCPServersTransportsToProto(in []db.TcpServersTransport) []*mantraev1.ServersTransport {
|
||||
var out []*mantraev1.ServersTransport
|
||||
for _, s := range in {
|
||||
out = append(out, TCPServersTransportToProto(&s))
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
func ServersTransportsByProfileToProto(
|
||||
in []db.ListServersTransportsByProfileRow,
|
||||
q *db.Queries,
|
||||
) []*mantraev1.ServersTransport {
|
||||
var out []*mantraev1.ServersTransport
|
||||
for _, s := range in {
|
||||
switch s.Type {
|
||||
case "http":
|
||||
config, err := MarshalStruct(s.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
out = append(out, &mantraev1.ServersTransport{
|
||||
Id: s.ID,
|
||||
ProfileId: s.ProfileID,
|
||||
AgentId: SafeString(s.AgentID),
|
||||
Name: s.Name,
|
||||
Config: config,
|
||||
Enabled: s.Enabled,
|
||||
Type: mantraev1.ServersTransportType_SERVERS_TRANSPORT_TYPE_HTTP,
|
||||
CreatedAt: SafeTimestamp(s.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(s.UpdatedAt),
|
||||
})
|
||||
case "tcp":
|
||||
config, err := MarshalStruct(s.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
out = append(out, &mantraev1.ServersTransport{
|
||||
Id: s.ID,
|
||||
ProfileId: s.ProfileID,
|
||||
AgentId: SafeString(s.AgentID),
|
||||
Name: s.Name,
|
||||
Config: config,
|
||||
Enabled: s.Enabled,
|
||||
Type: mantraev1.ServersTransportType_SERVERS_TRANSPORT_TYPE_TCP,
|
||||
CreatedAt: SafeTimestamp(s.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(s.UpdatedAt),
|
||||
})
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
func ServersTransportsByAgentToProto(
|
||||
in []db.ListServersTransportsByAgentRow,
|
||||
q *db.Queries,
|
||||
) []*mantraev1.ServersTransport {
|
||||
var out []*mantraev1.ServersTransport
|
||||
for _, s := range in {
|
||||
switch s.Type {
|
||||
case "http":
|
||||
config, err := MarshalStruct(s.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
out = append(out, &mantraev1.ServersTransport{
|
||||
Id: s.ID,
|
||||
ProfileId: s.ProfileID,
|
||||
AgentId: SafeString(s.AgentID),
|
||||
Name: s.Name,
|
||||
Config: config,
|
||||
Enabled: s.Enabled,
|
||||
Type: mantraev1.ServersTransportType_SERVERS_TRANSPORT_TYPE_HTTP,
|
||||
CreatedAt: SafeTimestamp(s.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(s.UpdatedAt),
|
||||
})
|
||||
case "tcp":
|
||||
config, err := MarshalStruct(s.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
out = append(out, &mantraev1.ServersTransport{
|
||||
Id: s.ID,
|
||||
ProfileId: s.ProfileID,
|
||||
AgentId: SafeString(s.AgentID),
|
||||
Name: s.Name,
|
||||
Config: config,
|
||||
Enabled: s.Enabled,
|
||||
Type: mantraev1.ServersTransportType_SERVERS_TRANSPORT_TYPE_TCP,
|
||||
CreatedAt: SafeTimestamp(s.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(s.UpdatedAt),
|
||||
})
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
||||
@@ -1,206 +0,0 @@
|
||||
package convert
|
||||
|
||||
import (
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
|
||||
func HTTPServiceToProto(s *db.HttpService) *mantraev1.Service {
|
||||
config, err := MarshalStruct(s.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &mantraev1.Service{
|
||||
Id: s.ID,
|
||||
ProfileId: s.ProfileID,
|
||||
AgentId: SafeString(s.AgentID),
|
||||
Name: s.Name,
|
||||
Config: config,
|
||||
Enabled: s.Enabled,
|
||||
Type: mantraev1.ServiceType_SERVICE_TYPE_HTTP,
|
||||
CreatedAt: SafeTimestamp(s.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(s.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func TCPServiceToProto(s *db.TcpService) *mantraev1.Service {
|
||||
config, err := MarshalStruct(s.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &mantraev1.Service{
|
||||
Id: s.ID,
|
||||
ProfileId: s.ProfileID,
|
||||
AgentId: SafeString(s.AgentID),
|
||||
Name: s.Name,
|
||||
Config: config,
|
||||
Enabled: s.Enabled,
|
||||
Type: mantraev1.ServiceType_SERVICE_TYPE_TCP,
|
||||
CreatedAt: SafeTimestamp(s.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(s.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func UDPServiceToProto(s *db.UdpService) *mantraev1.Service {
|
||||
config, err := MarshalStruct(s.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &mantraev1.Service{
|
||||
Id: s.ID,
|
||||
ProfileId: s.ProfileID,
|
||||
AgentId: SafeString(s.AgentID),
|
||||
Name: s.Name,
|
||||
Config: config,
|
||||
Enabled: s.Enabled,
|
||||
Type: mantraev1.ServiceType_SERVICE_TYPE_UDP,
|
||||
CreatedAt: SafeTimestamp(s.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(s.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func HTTPServicesToProto(services []db.HttpService) []*mantraev1.Service {
|
||||
var servicesProto []*mantraev1.Service
|
||||
for _, s := range services {
|
||||
servicesProto = append(servicesProto, HTTPServiceToProto(&s))
|
||||
}
|
||||
return servicesProto
|
||||
}
|
||||
|
||||
func TCPServicesToProto(services []db.TcpService) []*mantraev1.Service {
|
||||
var servicesProto []*mantraev1.Service
|
||||
for _, s := range services {
|
||||
servicesProto = append(servicesProto, TCPServiceToProto(&s))
|
||||
}
|
||||
return servicesProto
|
||||
}
|
||||
|
||||
func UDPServicesToProto(services []db.UdpService) []*mantraev1.Service {
|
||||
var servicesProto []*mantraev1.Service
|
||||
for _, s := range services {
|
||||
servicesProto = append(servicesProto, UDPServiceToProto(&s))
|
||||
}
|
||||
return servicesProto
|
||||
}
|
||||
|
||||
// Specialized batch conversion functions
|
||||
func ServicesByProfileToProto(services []db.ListServicesByProfileRow) []*mantraev1.Service {
|
||||
var servicesProto []*mantraev1.Service
|
||||
for _, s := range services {
|
||||
switch s.Type {
|
||||
case "http":
|
||||
config, err := MarshalStruct(s.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
servicesProto = append(servicesProto, &mantraev1.Service{
|
||||
Id: s.ID,
|
||||
ProfileId: s.ProfileID,
|
||||
AgentId: SafeString(s.AgentID),
|
||||
Name: s.Name,
|
||||
Config: config,
|
||||
Enabled: s.Enabled,
|
||||
Type: mantraev1.ServiceType_SERVICE_TYPE_HTTP,
|
||||
CreatedAt: SafeTimestamp(s.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(s.UpdatedAt),
|
||||
})
|
||||
case "tcp":
|
||||
config, err := MarshalStruct(s.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
servicesProto = append(servicesProto, &mantraev1.Service{
|
||||
Id: s.ID,
|
||||
ProfileId: s.ProfileID,
|
||||
AgentId: SafeString(s.AgentID),
|
||||
Name: s.Name,
|
||||
Config: config,
|
||||
Enabled: s.Enabled,
|
||||
Type: mantraev1.ServiceType_SERVICE_TYPE_TCP,
|
||||
CreatedAt: SafeTimestamp(s.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(s.UpdatedAt),
|
||||
})
|
||||
case "udp":
|
||||
config, err := MarshalStruct(s.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
servicesProto = append(servicesProto, &mantraev1.Service{
|
||||
Id: s.ID,
|
||||
ProfileId: s.ProfileID,
|
||||
AgentId: SafeString(s.AgentID),
|
||||
Name: s.Name,
|
||||
Config: config,
|
||||
Enabled: s.Enabled,
|
||||
Type: mantraev1.ServiceType_SERVICE_TYPE_UDP,
|
||||
CreatedAt: SafeTimestamp(s.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(s.UpdatedAt),
|
||||
})
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return servicesProto
|
||||
}
|
||||
|
||||
func ServicesByAgentToProto(services []db.ListServicesByAgentRow) []*mantraev1.Service {
|
||||
var servicesProto []*mantraev1.Service
|
||||
for _, s := range services {
|
||||
switch s.Type {
|
||||
case "http":
|
||||
config, err := MarshalStruct(s.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
servicesProto = append(servicesProto, &mantraev1.Service{
|
||||
Id: s.ID,
|
||||
ProfileId: s.ProfileID,
|
||||
AgentId: SafeString(s.AgentID),
|
||||
Name: s.Name,
|
||||
Config: config,
|
||||
Enabled: s.Enabled,
|
||||
Type: mantraev1.ServiceType_SERVICE_TYPE_HTTP,
|
||||
CreatedAt: SafeTimestamp(s.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(s.UpdatedAt),
|
||||
})
|
||||
case "tcp":
|
||||
config, err := MarshalStruct(s.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
servicesProto = append(servicesProto, &mantraev1.Service{
|
||||
Id: s.ID,
|
||||
ProfileId: s.ProfileID,
|
||||
AgentId: SafeString(s.AgentID),
|
||||
Name: s.Name,
|
||||
Config: config,
|
||||
Enabled: s.Enabled,
|
||||
Type: mantraev1.ServiceType_SERVICE_TYPE_TCP,
|
||||
CreatedAt: SafeTimestamp(s.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(s.UpdatedAt),
|
||||
})
|
||||
case "udp":
|
||||
config, err := MarshalStruct(s.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
servicesProto = append(servicesProto, &mantraev1.Service{
|
||||
Id: s.ID,
|
||||
ProfileId: s.ProfileID,
|
||||
AgentId: SafeString(s.AgentID),
|
||||
Name: s.Name,
|
||||
Config: config,
|
||||
Enabled: s.Enabled,
|
||||
Type: mantraev1.ServiceType_SERVICE_TYPE_UDP,
|
||||
CreatedAt: SafeTimestamp(s.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(s.UpdatedAt),
|
||||
})
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return servicesProto
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
package convert
|
||||
|
||||
import (
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
|
||||
func UserToProtoUnsafe(u *db.User) *mantraev1.User {
|
||||
return &mantraev1.User{
|
||||
Id: u.ID,
|
||||
Username: u.Username,
|
||||
Password: u.Password,
|
||||
Email: SafeString(u.Email),
|
||||
Otp: SafeString(u.Otp),
|
||||
OtpExpiry: SafeTimestamp(u.OtpExpiry),
|
||||
LastLogin: SafeTimestamp(u.LastLogin),
|
||||
CreatedAt: SafeTimestamp(u.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(u.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func UsersToProtoUnsafe(users []db.User) []*mantraev1.User {
|
||||
var usersProto []*mantraev1.User
|
||||
for _, u := range users {
|
||||
usersProto = append(usersProto, UserToProtoUnsafe(&u))
|
||||
}
|
||||
return usersProto
|
||||
}
|
||||
|
||||
// Safe version omits password and otp fields
|
||||
func UserToProto(u *db.User) *mantraev1.User {
|
||||
return &mantraev1.User{
|
||||
Id: u.ID,
|
||||
Username: u.Username,
|
||||
Email: SafeString(u.Email),
|
||||
LastLogin: SafeTimestamp(u.LastLogin),
|
||||
CreatedAt: SafeTimestamp(u.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(u.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func UsersToProto(users []db.User) []*mantraev1.User {
|
||||
var usersProto []*mantraev1.User
|
||||
for _, u := range users {
|
||||
usersProto = append(usersProto, UserToProto(&u))
|
||||
}
|
||||
return usersProto
|
||||
}
|
||||
@@ -1,135 +0,0 @@
|
||||
// Package events provides a centralized event broadcasting system.
|
||||
package events
|
||||
|
||||
import (
|
||||
"slices"
|
||||
"sync"
|
||||
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
)
|
||||
|
||||
type EventBroadcaster struct {
|
||||
mu sync.RWMutex
|
||||
profileClients map[int64]map[chan *mantraev1.ProfileEvent]*EventFilter
|
||||
globalClients map[chan *mantraev1.GlobalEvent]*GlobalEventFilter
|
||||
}
|
||||
|
||||
type EventFilter struct {
|
||||
ProfileID int64
|
||||
ResourceTypes []mantraev1.ResourceType
|
||||
}
|
||||
|
||||
type GlobalEventFilter struct {
|
||||
ResourceTypes []mantraev1.ResourceType
|
||||
}
|
||||
|
||||
func NewEventBroadcaster() *EventBroadcaster {
|
||||
return &EventBroadcaster{
|
||||
profileClients: make(map[int64]map[chan *mantraev1.ProfileEvent]*EventFilter),
|
||||
globalClients: make(map[chan *mantraev1.GlobalEvent]*GlobalEventFilter),
|
||||
}
|
||||
}
|
||||
|
||||
func (b *EventBroadcaster) RegisterProfileClient(
|
||||
filter *EventFilter,
|
||||
ch chan *mantraev1.ProfileEvent,
|
||||
) {
|
||||
b.mu.Lock()
|
||||
defer b.mu.Unlock()
|
||||
|
||||
if b.profileClients[filter.ProfileID] == nil {
|
||||
b.profileClients[filter.ProfileID] = make(map[chan *mantraev1.ProfileEvent]*EventFilter)
|
||||
}
|
||||
b.profileClients[filter.ProfileID][ch] = filter
|
||||
}
|
||||
|
||||
func (b *EventBroadcaster) UnregisterProfileClient(ch chan *mantraev1.ProfileEvent) {
|
||||
b.mu.Lock()
|
||||
defer b.mu.Unlock()
|
||||
|
||||
for profileID, clients := range b.profileClients {
|
||||
if _, exists := clients[ch]; exists {
|
||||
delete(clients, ch)
|
||||
if len(clients) == 0 {
|
||||
delete(b.profileClients, profileID)
|
||||
}
|
||||
close(ch)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (b *EventBroadcaster) RegisterGlobalClient(
|
||||
filter *GlobalEventFilter,
|
||||
ch chan *mantraev1.GlobalEvent,
|
||||
) {
|
||||
b.mu.Lock()
|
||||
defer b.mu.Unlock()
|
||||
|
||||
if b.globalClients[ch] == nil {
|
||||
b.globalClients[ch] = filter
|
||||
}
|
||||
}
|
||||
|
||||
func (b *EventBroadcaster) UnregisterGlobalClient(ch chan *mantraev1.GlobalEvent) {
|
||||
b.mu.Lock()
|
||||
defer b.mu.Unlock()
|
||||
|
||||
if _, exists := b.globalClients[ch]; exists {
|
||||
delete(b.globalClients, ch)
|
||||
close(ch)
|
||||
}
|
||||
}
|
||||
|
||||
func (b *EventBroadcaster) BroadcastProfileEvent(event *mantraev1.ProfileEvent) {
|
||||
b.mu.RLock()
|
||||
defer b.mu.RUnlock()
|
||||
|
||||
if clients, exists := b.profileClients[event.ProfileId]; exists {
|
||||
for ch, filter := range clients {
|
||||
// Apply filtering
|
||||
if b.matchesFilter(event, filter) {
|
||||
select {
|
||||
case ch <- event:
|
||||
default:
|
||||
// Channel is full, skip
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (b *EventBroadcaster) BroadcastGlobalEvent(event *mantraev1.GlobalEvent) {
|
||||
b.mu.RLock()
|
||||
defer b.mu.RUnlock()
|
||||
|
||||
for ch, filter := range b.globalClients {
|
||||
// Apply filtering for global events
|
||||
if b.matchesGlobalFilter(event, filter) {
|
||||
select {
|
||||
case ch <- event:
|
||||
default:
|
||||
// Channel is full, skip
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (b *EventBroadcaster) matchesFilter(event *mantraev1.ProfileEvent, filter *EventFilter) bool {
|
||||
// Filter by resource types if specified
|
||||
if len(filter.ResourceTypes) > 0 {
|
||||
return slices.Contains(filter.ResourceTypes, event.ResourceType)
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func (b *EventBroadcaster) matchesGlobalFilter(
|
||||
event *mantraev1.GlobalEvent,
|
||||
filter *GlobalEventFilter,
|
||||
) bool {
|
||||
if len(filter.ResourceTypes) > 0 {
|
||||
return slices.Contains(filter.ResourceTypes, event.ResourceType)
|
||||
}
|
||||
return true
|
||||
}
|
||||
@@ -16,10 +16,12 @@ SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
agents
|
||||
WHERE
|
||||
profile_id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) CountAgents(ctx context.Context) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countAgentsStmt, countAgents)
|
||||
func (q *Queries) CountAgents(ctx context.Context, profileID int64) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countAgentsStmt, countAgents, profileID)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
@@ -100,23 +102,23 @@ SELECT
|
||||
FROM
|
||||
agents
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = ?1
|
||||
ORDER BY
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(?3 AS INTEGER), -1)
|
||||
OFFSET
|
||||
?
|
||||
COALESCE(CAST(?2 AS INTEGER), 0)
|
||||
`
|
||||
|
||||
type ListAgentsParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Offset *int64 `json:"offset"`
|
||||
Limit *int64 `json:"limit"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListAgents(ctx context.Context, arg ListAgentsParams) ([]Agent, error) {
|
||||
rows, err := q.query(ctx, q.listAgentsStmt, listAgents, arg.ProfileID, arg.Limit, arg.Offset)
|
||||
rows, err := q.query(ctx, q.listAgentsStmt, listAgents, arg.ProfileID, arg.Offset, arg.Limit)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -88,14 +88,14 @@ FROM
|
||||
ORDER BY
|
||||
a.created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(?2 AS INTEGER), -1)
|
||||
OFFSET
|
||||
?
|
||||
COALESCE(CAST(?1 AS INTEGER), 0)
|
||||
`
|
||||
|
||||
type ListAuditLogsParams struct {
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
Offset *int64 `json:"offset"`
|
||||
Limit *int64 `json:"limit"`
|
||||
}
|
||||
|
||||
type ListAuditLogsRow struct {
|
||||
@@ -112,7 +112,7 @@ type ListAuditLogsRow struct {
|
||||
}
|
||||
|
||||
func (q *Queries) ListAuditLogs(ctx context.Context, arg ListAuditLogsParams) ([]ListAuditLogsRow, error) {
|
||||
rows, err := q.query(ctx, q.listAuditLogsStmt, listAuditLogs, arg.Limit, arg.Offset)
|
||||
rows, err := q.query(ctx, q.listAuditLogsStmt, listAuditLogs, arg.Offset, arg.Limit)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
423
internal/store/db/conversion.go
Normal file
423
internal/store/db/conversion.go
Normal file
@@ -0,0 +1,423 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/mizuchilabs/mantrae/internal/store/schema"
|
||||
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
"google.golang.org/protobuf/types/known/structpb"
|
||||
"google.golang.org/protobuf/types/known/timestamppb"
|
||||
)
|
||||
|
||||
// SQL to Proto ---------------------------------------------------------------
|
||||
|
||||
func (p *Profile) ToProto() *mantraev1.Profile {
|
||||
return &mantraev1.Profile{
|
||||
Id: p.ID,
|
||||
Name: p.Name,
|
||||
Description: SafeString(p.Description),
|
||||
Token: p.Token,
|
||||
CreatedAt: SafeTimestamp(p.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(p.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func (e *EntryPoint) ToProto() *mantraev1.EntryPoint {
|
||||
return &mantraev1.EntryPoint{
|
||||
Id: e.ID,
|
||||
ProfileId: e.ProfileID,
|
||||
Name: e.Name,
|
||||
Address: e.Address,
|
||||
IsDefault: e.IsDefault,
|
||||
CreatedAt: SafeTimestamp(e.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(e.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func (r *HttpRouter) ToProto() *mantraev1.Router {
|
||||
config, err := MarshalStruct(r.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &mantraev1.Router{
|
||||
Id: r.ID,
|
||||
ProfileId: r.ProfileID,
|
||||
AgentId: SafeString(r.AgentID),
|
||||
Name: r.Name,
|
||||
Config: config,
|
||||
Enabled: r.Enabled,
|
||||
Type: mantraev1.RouterType_ROUTER_TYPE_HTTP,
|
||||
CreatedAt: SafeTimestamp(r.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(r.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func (r *TcpRouter) ToProto() *mantraev1.Router {
|
||||
config, err := MarshalStruct(r.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return &mantraev1.Router{
|
||||
Id: r.ID,
|
||||
ProfileId: r.ProfileID,
|
||||
AgentId: SafeString(r.AgentID),
|
||||
Name: r.Name,
|
||||
Config: config,
|
||||
Enabled: r.Enabled,
|
||||
Type: mantraev1.RouterType_ROUTER_TYPE_TCP,
|
||||
CreatedAt: SafeTimestamp(r.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(r.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func (r *UdpRouter) ToProto() *mantraev1.Router {
|
||||
config, err := MarshalStruct(r.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return &mantraev1.Router{
|
||||
Id: r.ID,
|
||||
ProfileId: r.ProfileID,
|
||||
AgentId: SafeString(r.AgentID),
|
||||
Name: r.Name,
|
||||
Config: config,
|
||||
Enabled: r.Enabled,
|
||||
Type: mantraev1.RouterType_ROUTER_TYPE_UDP,
|
||||
CreatedAt: SafeTimestamp(r.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(r.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func (s *HttpService) ToProto() *mantraev1.Service {
|
||||
config, err := MarshalStruct(s.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return &mantraev1.Service{
|
||||
Id: s.ID,
|
||||
ProfileId: s.ProfileID,
|
||||
AgentId: SafeString(s.AgentID),
|
||||
Name: s.Name,
|
||||
Config: config,
|
||||
Enabled: s.Enabled,
|
||||
Type: mantraev1.ServiceType_SERVICE_TYPE_HTTP,
|
||||
CreatedAt: SafeTimestamp(s.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(s.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func (s *TcpService) ToProto() *mantraev1.Service {
|
||||
config, err := MarshalStruct(s.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return &mantraev1.Service{
|
||||
Id: s.ID,
|
||||
ProfileId: s.ProfileID,
|
||||
AgentId: SafeString(s.AgentID),
|
||||
Name: s.Name,
|
||||
Config: config,
|
||||
Enabled: s.Enabled,
|
||||
Type: mantraev1.ServiceType_SERVICE_TYPE_TCP,
|
||||
CreatedAt: SafeTimestamp(s.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(s.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func (s *UdpService) ToProto() *mantraev1.Service {
|
||||
config, err := MarshalStruct(s.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return &mantraev1.Service{
|
||||
Id: s.ID,
|
||||
ProfileId: s.ProfileID,
|
||||
AgentId: SafeString(s.AgentID),
|
||||
Name: s.Name,
|
||||
Config: config,
|
||||
Enabled: s.Enabled,
|
||||
Type: mantraev1.ServiceType_SERVICE_TYPE_UDP,
|
||||
CreatedAt: SafeTimestamp(s.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(s.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func (m *HttpMiddleware) ToProto() *mantraev1.Middleware {
|
||||
config, err := MarshalStruct(m.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return &mantraev1.Middleware{
|
||||
Id: m.ID,
|
||||
ProfileId: m.ProfileID,
|
||||
AgentId: SafeString(m.AgentID),
|
||||
Name: m.Name,
|
||||
Config: config,
|
||||
Enabled: m.Enabled,
|
||||
IsDefault: m.IsDefault,
|
||||
Type: mantraev1.MiddlewareType_MIDDLEWARE_TYPE_HTTP,
|
||||
CreatedAt: SafeTimestamp(m.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(m.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func (m *TcpMiddleware) ToProto() *mantraev1.Middleware {
|
||||
config, err := MarshalStruct(m.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return &mantraev1.Middleware{
|
||||
Id: m.ID,
|
||||
ProfileId: m.ProfileID,
|
||||
AgentId: SafeString(m.AgentID),
|
||||
Name: m.Name,
|
||||
Config: config,
|
||||
Enabled: m.Enabled,
|
||||
IsDefault: m.IsDefault,
|
||||
Type: mantraev1.MiddlewareType_MIDDLEWARE_TYPE_TCP,
|
||||
CreatedAt: SafeTimestamp(m.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(m.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func (m *HttpServersTransport) ToProto() *mantraev1.ServersTransport {
|
||||
config, err := MarshalStruct(m.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return &mantraev1.ServersTransport{
|
||||
Id: m.ID,
|
||||
ProfileId: m.ProfileID,
|
||||
AgentId: SafeString(m.AgentID),
|
||||
Name: m.Name,
|
||||
Config: config,
|
||||
Enabled: m.Enabled,
|
||||
Type: mantraev1.ServersTransportType_SERVERS_TRANSPORT_TYPE_HTTP,
|
||||
CreatedAt: SafeTimestamp(m.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(m.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func (m *TcpServersTransport) ToProto() *mantraev1.ServersTransport {
|
||||
config, err := MarshalStruct(m.Config)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return &mantraev1.ServersTransport{
|
||||
Id: m.ID,
|
||||
ProfileId: m.ProfileID,
|
||||
AgentId: SafeString(m.AgentID),
|
||||
Name: m.Name,
|
||||
Config: config,
|
||||
Enabled: m.Enabled,
|
||||
Type: mantraev1.ServersTransportType_SERVERS_TRANSPORT_TYPE_TCP,
|
||||
CreatedAt: SafeTimestamp(m.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(m.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func (u *User) ToProto() *mantraev1.User {
|
||||
return &mantraev1.User{
|
||||
Id: u.ID,
|
||||
Username: u.Username,
|
||||
Password: u.Password,
|
||||
Email: SafeString(u.Email),
|
||||
Otp: SafeString(u.Otp),
|
||||
OtpExpiry: SafeTimestamp(u.OtpExpiry),
|
||||
LastLogin: SafeTimestamp(u.LastLogin),
|
||||
CreatedAt: SafeTimestamp(u.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(u.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func (a *Agent) ToProto() *mantraev1.Agent {
|
||||
var containers []*mantraev1.Container
|
||||
if a.Containers != nil {
|
||||
for _, c := range *a.Containers {
|
||||
containers = append(containers, &mantraev1.Container{
|
||||
Id: c.ID,
|
||||
Name: c.Name,
|
||||
Labels: c.Labels,
|
||||
Image: c.Image,
|
||||
Portmap: c.Portmap,
|
||||
Status: c.Status,
|
||||
Created: SafeTimestamp(c.Created),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return &mantraev1.Agent{
|
||||
Id: a.ID,
|
||||
ProfileId: a.ProfileID,
|
||||
Hostname: SafeString(a.Hostname),
|
||||
PublicIp: SafeString(a.PublicIp),
|
||||
PrivateIp: SafeString(a.PrivateIp),
|
||||
Containers: containers,
|
||||
ActiveIp: SafeString(a.ActiveIp),
|
||||
Token: a.Token,
|
||||
CreatedAt: SafeTimestamp(a.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(a.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func (d *DnsProvider) ToProto() *mantraev1.DnsProvider {
|
||||
var dnsType mantraev1.DnsProviderType
|
||||
switch d.Type {
|
||||
case "cloudflare":
|
||||
dnsType = mantraev1.DnsProviderType_DNS_PROVIDER_TYPE_CLOUDFLARE
|
||||
case "powerdns":
|
||||
dnsType = mantraev1.DnsProviderType_DNS_PROVIDER_TYPE_POWERDNS
|
||||
case "technitium":
|
||||
dnsType = mantraev1.DnsProviderType_DNS_PROVIDER_TYPE_TECHNITIUM
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
|
||||
return &mantraev1.DnsProvider{
|
||||
Id: d.ID,
|
||||
Name: d.Name,
|
||||
Type: dnsType,
|
||||
Config: &mantraev1.DnsProviderConfig{
|
||||
ApiKey: d.Config.APIKey,
|
||||
ApiUrl: d.Config.APIUrl,
|
||||
Ip: d.Config.IP,
|
||||
Proxied: d.Config.Proxied,
|
||||
AutoUpdate: d.Config.AutoUpdate,
|
||||
ZoneType: d.Config.ZoneType,
|
||||
},
|
||||
IsDefault: d.IsDefault,
|
||||
CreatedAt: SafeTimestamp(d.CreatedAt),
|
||||
UpdatedAt: SafeTimestamp(d.UpdatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
func (a *ListAuditLogsRow) ToProto() *mantraev1.AuditLog {
|
||||
return &mantraev1.AuditLog{
|
||||
Id: a.ID,
|
||||
Event: a.Event,
|
||||
Details: SafeString(a.Details),
|
||||
ProfileId: SafeInt64(a.ProfileID),
|
||||
ProfileName: SafeString(a.ProfileName),
|
||||
UserId: SafeString(a.UserID),
|
||||
UserName: SafeString(a.UserName),
|
||||
AgentId: SafeString(a.AgentID),
|
||||
AgentName: SafeString(a.AgentName),
|
||||
CreatedAt: SafeTimestamp(a.CreatedAt),
|
||||
}
|
||||
}
|
||||
|
||||
// Proto to SQL ---------------------------------------------------------------
|
||||
|
||||
func (r *HttpRouter) FromProto(proto *mantraev1.Router) error {
|
||||
if proto.Type != mantraev1.RouterType_ROUTER_TYPE_HTTP {
|
||||
return errors.New("invalid router type for HTTP router")
|
||||
}
|
||||
|
||||
config, err := UnmarshalStruct[schema.HTTPRouter](proto.Config)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to unmarshal config: %w", err)
|
||||
}
|
||||
|
||||
r.ID = proto.Id
|
||||
r.ProfileID = proto.ProfileId
|
||||
r.AgentID = StringPtr(proto.AgentId)
|
||||
r.Name = proto.Name
|
||||
r.Config = config
|
||||
r.Enabled = proto.Enabled
|
||||
r.CreatedAt = TimePtr(proto.CreatedAt.AsTime())
|
||||
r.UpdatedAt = TimePtr(proto.UpdatedAt.AsTime())
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Common helper --------------------------------------------------------------
|
||||
|
||||
func SafeString(s *string) string {
|
||||
if s == nil {
|
||||
return ""
|
||||
}
|
||||
return *s
|
||||
}
|
||||
|
||||
func SafeInt32(i *int32) int32 {
|
||||
if i == nil {
|
||||
return 0
|
||||
}
|
||||
return *i
|
||||
}
|
||||
|
||||
func SafeInt64(i *int64) int64 {
|
||||
if i == nil {
|
||||
return 0
|
||||
}
|
||||
return *i
|
||||
}
|
||||
|
||||
func SafeFloat32(f *float32) float32 {
|
||||
if f == nil {
|
||||
return 0.0
|
||||
}
|
||||
return *f
|
||||
}
|
||||
|
||||
func SafeFloat64(f *float64) float64 {
|
||||
if f == nil {
|
||||
return 0.0
|
||||
}
|
||||
return *f
|
||||
}
|
||||
|
||||
func SafeTimestamp(t *time.Time) *timestamppb.Timestamp {
|
||||
if t == nil {
|
||||
return nil
|
||||
}
|
||||
return timestamppb.New(*t)
|
||||
}
|
||||
|
||||
func StringPtr(s string) *string {
|
||||
if s == "" {
|
||||
return nil
|
||||
}
|
||||
return &s
|
||||
}
|
||||
|
||||
func TimePtr(t time.Time) *time.Time {
|
||||
if t.IsZero() {
|
||||
return nil
|
||||
}
|
||||
return &t
|
||||
}
|
||||
|
||||
func UnmarshalStruct[T any](s *structpb.Struct) (*T, error) {
|
||||
// Marshal the proto Struct to JSON bytes
|
||||
data, err := s.MarshalJSON()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Unmarshal into your target struct
|
||||
var out T
|
||||
if err := json.Unmarshal(data, &out); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &out, nil
|
||||
}
|
||||
|
||||
func MarshalStruct[T any](s *T) (*structpb.Struct, error) {
|
||||
// Marshal the target struct to JSON bytes
|
||||
data, err := json.Marshal(s)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Unmarshal into your proto Struct
|
||||
var out structpb.Struct
|
||||
if err := out.UnmarshalJSON(data); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &out, nil
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -157,20 +157,20 @@ SELECT
|
||||
FROM
|
||||
dns_providers
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(?2 AS INTEGER), -1)
|
||||
OFFSET
|
||||
?
|
||||
COALESCE(CAST(?1 AS INTEGER), 0)
|
||||
`
|
||||
|
||||
type ListDnsProvidersParams struct {
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
Offset *int64 `json:"offset"`
|
||||
Limit *int64 `json:"limit"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListDnsProviders(ctx context.Context, arg ListDnsProvidersParams) ([]DnsProvider, error) {
|
||||
rows, err := q.query(ctx, q.listDnsProvidersStmt, listDnsProviders, arg.Limit, arg.Offset)
|
||||
rows, err := q.query(ctx, q.listDnsProvidersStmt, listDnsProviders, arg.Offset, arg.Limit)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -14,10 +14,12 @@ SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
entry_points
|
||||
WHERE
|
||||
profile_id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) CountEntryPoints(ctx context.Context) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countEntryPointsStmt, countEntryPoints)
|
||||
func (q *Queries) CountEntryPoints(ctx context.Context, profileID int64) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countEntryPointsStmt, countEntryPoints, profileID)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
@@ -131,23 +133,23 @@ SELECT
|
||||
FROM
|
||||
entry_points
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = ?1
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(?3 AS INTEGER), -1)
|
||||
OFFSET
|
||||
?
|
||||
COALESCE(CAST(?2 AS INTEGER), 0)
|
||||
`
|
||||
|
||||
type ListEntryPointsParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Offset *int64 `json:"offset"`
|
||||
Limit *int64 `json:"limit"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListEntryPoints(ctx context.Context, arg ListEntryPointsParams) ([]EntryPoint, error) {
|
||||
rows, err := q.query(ctx, q.listEntryPointsStmt, listEntryPoints, arg.ProfileID, arg.Limit, arg.Offset)
|
||||
rows, err := q.query(ctx, q.listEntryPointsStmt, listEntryPoints, arg.ProfileID, arg.Offset, arg.Limit)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -16,42 +16,21 @@ SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_middlewares
|
||||
WHERE
|
||||
profile_id = ?1
|
||||
AND (
|
||||
CAST(?2 AS TEXT) IS NULL
|
||||
OR agent_id = CAST(?2 AS TEXT)
|
||||
)
|
||||
`
|
||||
|
||||
func (q *Queries) CountHttpMiddlewares(ctx context.Context) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countHttpMiddlewaresStmt, countHttpMiddlewares)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
type CountHttpMiddlewaresParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
AgentID *string `json:"agentId"`
|
||||
}
|
||||
|
||||
const countHttpMiddlewaresByAgent = `-- name: CountHttpMiddlewaresByAgent :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_middlewares
|
||||
WHERE
|
||||
agent_id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) CountHttpMiddlewaresByAgent(ctx context.Context, agentID *string) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countHttpMiddlewaresByAgentStmt, countHttpMiddlewaresByAgent, agentID)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
}
|
||||
|
||||
const countHttpMiddlewaresByProfile = `-- name: CountHttpMiddlewaresByProfile :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_middlewares
|
||||
WHERE
|
||||
profile_id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) CountHttpMiddlewaresByProfile(ctx context.Context, profileID int64) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countHttpMiddlewaresByProfileStmt, countHttpMiddlewaresByProfile, profileID)
|
||||
func (q *Queries) CountHttpMiddlewares(ctx context.Context, arg CountHttpMiddlewaresParams) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countHttpMiddlewaresStmt, countHttpMiddlewares, arg.ProfileID, arg.AgentID)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
@@ -154,77 +133,33 @@ SELECT
|
||||
FROM
|
||||
http_middlewares
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = ?1
|
||||
AND (
|
||||
CAST(?2 AS TEXT) IS NULL
|
||||
OR agent_id = CAST(?2 AS TEXT)
|
||||
)
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(?4 AS INTEGER), -1)
|
||||
OFFSET
|
||||
?
|
||||
COALESCE(CAST(?3 AS INTEGER), 0)
|
||||
`
|
||||
|
||||
type ListHttpMiddlewaresParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
ProfileID int64 `json:"profileId"`
|
||||
AgentID *string `json:"agentId"`
|
||||
Offset *int64 `json:"offset"`
|
||||
Limit *int64 `json:"limit"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListHttpMiddlewares(ctx context.Context, arg ListHttpMiddlewaresParams) ([]HttpMiddleware, error) {
|
||||
rows, err := q.query(ctx, q.listHttpMiddlewaresStmt, listHttpMiddlewares, arg.ProfileID, arg.Limit, arg.Offset)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []HttpMiddleware
|
||||
for rows.Next() {
|
||||
var i HttpMiddleware
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.ProfileID,
|
||||
&i.AgentID,
|
||||
&i.Name,
|
||||
&i.Config,
|
||||
&i.Enabled,
|
||||
&i.IsDefault,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const listHttpMiddlewaresByAgent = `-- name: ListHttpMiddlewaresByAgent :many
|
||||
SELECT
|
||||
id, profile_id, agent_id, name, config, enabled, is_default, created_at, updated_at
|
||||
FROM
|
||||
http_middlewares
|
||||
WHERE
|
||||
agent_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?
|
||||
`
|
||||
|
||||
type ListHttpMiddlewaresByAgentParams struct {
|
||||
AgentID *string `json:"agentId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListHttpMiddlewaresByAgent(ctx context.Context, arg ListHttpMiddlewaresByAgentParams) ([]HttpMiddleware, error) {
|
||||
rows, err := q.query(ctx, q.listHttpMiddlewaresByAgentStmt, listHttpMiddlewaresByAgent, arg.AgentID, arg.Limit, arg.Offset)
|
||||
rows, err := q.query(ctx, q.listHttpMiddlewaresStmt, listHttpMiddlewares,
|
||||
arg.ProfileID,
|
||||
arg.AgentID,
|
||||
arg.Offset,
|
||||
arg.Limit,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -264,22 +199,10 @@ FROM
|
||||
WHERE
|
||||
profile_id = ?
|
||||
AND enabled = TRUE
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?
|
||||
`
|
||||
|
||||
type ListHttpMiddlewaresEnabledParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListHttpMiddlewaresEnabled(ctx context.Context, arg ListHttpMiddlewaresEnabledParams) ([]HttpMiddleware, error) {
|
||||
rows, err := q.query(ctx, q.listHttpMiddlewaresEnabledStmt, listHttpMiddlewaresEnabled, arg.ProfileID, arg.Limit, arg.Offset)
|
||||
func (q *Queries) ListHttpMiddlewaresEnabled(ctx context.Context, profileID int64) ([]HttpMiddleware, error) {
|
||||
rows, err := q.query(ctx, q.listHttpMiddlewaresEnabledStmt, listHttpMiddlewaresEnabled, profileID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -16,42 +16,21 @@ SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_routers
|
||||
WHERE
|
||||
profile_id = ?1
|
||||
AND (
|
||||
CAST(?2 AS TEXT) IS NULL
|
||||
OR agent_id = CAST(?2 AS TEXT)
|
||||
)
|
||||
`
|
||||
|
||||
func (q *Queries) CountHttpRouters(ctx context.Context) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countHttpRoutersStmt, countHttpRouters)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
type CountHttpRoutersParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
AgentID *string `json:"agentId"`
|
||||
}
|
||||
|
||||
const countHttpRoutersByAgent = `-- name: CountHttpRoutersByAgent :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_routers
|
||||
WHERE
|
||||
agent_id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) CountHttpRoutersByAgent(ctx context.Context, agentID *string) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countHttpRoutersByAgentStmt, countHttpRoutersByAgent, agentID)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
}
|
||||
|
||||
const countHttpRoutersByProfile = `-- name: CountHttpRoutersByProfile :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_routers
|
||||
WHERE
|
||||
profile_id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) CountHttpRoutersByProfile(ctx context.Context, profileID int64) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countHttpRoutersByProfileStmt, countHttpRoutersByProfile, profileID)
|
||||
func (q *Queries) CountHttpRouters(ctx context.Context, arg CountHttpRoutersParams) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countHttpRoutersStmt, countHttpRouters, arg.ProfileID, arg.AgentID)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
@@ -265,76 +244,33 @@ SELECT
|
||||
FROM
|
||||
http_routers
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = ?1
|
||||
AND (
|
||||
CAST(?2 AS TEXT) IS NULL
|
||||
OR agent_id = CAST(?2 AS TEXT)
|
||||
)
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(?4 AS INTEGER), -1)
|
||||
OFFSET
|
||||
?
|
||||
COALESCE(CAST(?3 AS INTEGER), 0)
|
||||
`
|
||||
|
||||
type ListHttpRoutersParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
ProfileID int64 `json:"profileId"`
|
||||
AgentID *string `json:"agentId"`
|
||||
Offset *int64 `json:"offset"`
|
||||
Limit *int64 `json:"limit"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListHttpRouters(ctx context.Context, arg ListHttpRoutersParams) ([]HttpRouter, error) {
|
||||
rows, err := q.query(ctx, q.listHttpRoutersStmt, listHttpRouters, arg.ProfileID, arg.Limit, arg.Offset)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []HttpRouter
|
||||
for rows.Next() {
|
||||
var i HttpRouter
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.ProfileID,
|
||||
&i.AgentID,
|
||||
&i.Name,
|
||||
&i.Config,
|
||||
&i.Enabled,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const listHttpRoutersByAgent = `-- name: ListHttpRoutersByAgent :many
|
||||
SELECT
|
||||
id, profile_id, agent_id, name, config, enabled, created_at, updated_at
|
||||
FROM
|
||||
http_routers
|
||||
WHERE
|
||||
agent_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?
|
||||
`
|
||||
|
||||
type ListHttpRoutersByAgentParams struct {
|
||||
AgentID *string `json:"agentId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListHttpRoutersByAgent(ctx context.Context, arg ListHttpRoutersByAgentParams) ([]HttpRouter, error) {
|
||||
rows, err := q.query(ctx, q.listHttpRoutersByAgentStmt, listHttpRoutersByAgent, arg.AgentID, arg.Limit, arg.Offset)
|
||||
rows, err := q.query(ctx, q.listHttpRoutersStmt, listHttpRouters,
|
||||
arg.ProfileID,
|
||||
arg.AgentID,
|
||||
arg.Offset,
|
||||
arg.Limit,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -373,22 +309,10 @@ FROM
|
||||
WHERE
|
||||
profile_id = ?
|
||||
AND enabled = TRUE
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?
|
||||
`
|
||||
|
||||
type ListHttpRoutersEnabledParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListHttpRoutersEnabled(ctx context.Context, arg ListHttpRoutersEnabledParams) ([]HttpRouter, error) {
|
||||
rows, err := q.query(ctx, q.listHttpRoutersEnabledStmt, listHttpRoutersEnabled, arg.ProfileID, arg.Limit, arg.Offset)
|
||||
func (q *Queries) ListHttpRoutersEnabled(ctx context.Context, profileID int64) ([]HttpRouter, error) {
|
||||
rows, err := q.query(ctx, q.listHttpRoutersEnabledStmt, listHttpRoutersEnabled, profileID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -16,42 +16,21 @@ SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_servers_transports
|
||||
WHERE
|
||||
profile_id = ?1
|
||||
AND (
|
||||
CAST(?2 AS TEXT) IS NULL
|
||||
OR agent_id = CAST(?2 AS TEXT)
|
||||
)
|
||||
`
|
||||
|
||||
func (q *Queries) CountHttpServersTransports(ctx context.Context) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countHttpServersTransportsStmt, countHttpServersTransports)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
type CountHttpServersTransportsParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
AgentID *string `json:"agentId"`
|
||||
}
|
||||
|
||||
const countHttpServersTransportsByAgent = `-- name: CountHttpServersTransportsByAgent :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_servers_transports
|
||||
WHERE
|
||||
agent_id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) CountHttpServersTransportsByAgent(ctx context.Context, agentID *string) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countHttpServersTransportsByAgentStmt, countHttpServersTransportsByAgent, agentID)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
}
|
||||
|
||||
const countHttpServersTransportsByProfile = `-- name: CountHttpServersTransportsByProfile :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_servers_transports
|
||||
WHERE
|
||||
profile_id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) CountHttpServersTransportsByProfile(ctx context.Context, profileID int64) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countHttpServersTransportsByProfileStmt, countHttpServersTransportsByProfile, profileID)
|
||||
func (q *Queries) CountHttpServersTransports(ctx context.Context, arg CountHttpServersTransportsParams) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countHttpServersTransportsStmt, countHttpServersTransports, arg.ProfileID, arg.AgentID)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
@@ -141,76 +120,33 @@ SELECT
|
||||
FROM
|
||||
http_servers_transports
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = ?1
|
||||
AND (
|
||||
CAST(?2 AS TEXT) IS NULL
|
||||
OR agent_id = CAST(?2 AS TEXT)
|
||||
)
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(?4 AS INTEGER), -1)
|
||||
OFFSET
|
||||
?
|
||||
COALESCE(CAST(?3 AS INTEGER), 0)
|
||||
`
|
||||
|
||||
type ListHttpServersTransportsParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
ProfileID int64 `json:"profileId"`
|
||||
AgentID *string `json:"agentId"`
|
||||
Offset *int64 `json:"offset"`
|
||||
Limit *int64 `json:"limit"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListHttpServersTransports(ctx context.Context, arg ListHttpServersTransportsParams) ([]HttpServersTransport, error) {
|
||||
rows, err := q.query(ctx, q.listHttpServersTransportsStmt, listHttpServersTransports, arg.ProfileID, arg.Limit, arg.Offset)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []HttpServersTransport
|
||||
for rows.Next() {
|
||||
var i HttpServersTransport
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.ProfileID,
|
||||
&i.AgentID,
|
||||
&i.Name,
|
||||
&i.Config,
|
||||
&i.Enabled,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const listHttpServersTransportsByAgent = `-- name: ListHttpServersTransportsByAgent :many
|
||||
SELECT
|
||||
id, profile_id, agent_id, name, config, enabled, created_at, updated_at
|
||||
FROM
|
||||
http_servers_transports
|
||||
WHERE
|
||||
agent_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?
|
||||
`
|
||||
|
||||
type ListHttpServersTransportsByAgentParams struct {
|
||||
AgentID *string `json:"agentId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListHttpServersTransportsByAgent(ctx context.Context, arg ListHttpServersTransportsByAgentParams) ([]HttpServersTransport, error) {
|
||||
rows, err := q.query(ctx, q.listHttpServersTransportsByAgentStmt, listHttpServersTransportsByAgent, arg.AgentID, arg.Limit, arg.Offset)
|
||||
rows, err := q.query(ctx, q.listHttpServersTransportsStmt, listHttpServersTransports,
|
||||
arg.ProfileID,
|
||||
arg.AgentID,
|
||||
arg.Offset,
|
||||
arg.Limit,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -249,22 +185,10 @@ FROM
|
||||
WHERE
|
||||
profile_id = ?
|
||||
AND enabled = TRUE
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?
|
||||
`
|
||||
|
||||
type ListHttpServersTransportsEnabledParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListHttpServersTransportsEnabled(ctx context.Context, arg ListHttpServersTransportsEnabledParams) ([]HttpServersTransport, error) {
|
||||
rows, err := q.query(ctx, q.listHttpServersTransportsEnabledStmt, listHttpServersTransportsEnabled, arg.ProfileID, arg.Limit, arg.Offset)
|
||||
func (q *Queries) ListHttpServersTransportsEnabled(ctx context.Context, profileID int64) ([]HttpServersTransport, error) {
|
||||
rows, err := q.query(ctx, q.listHttpServersTransportsEnabledStmt, listHttpServersTransportsEnabled, profileID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -16,42 +16,21 @@ SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_services
|
||||
WHERE
|
||||
profile_id = ?1
|
||||
AND (
|
||||
CAST(?2 AS TEXT) IS NULL
|
||||
OR agent_id = CAST(?2 AS TEXT)
|
||||
)
|
||||
`
|
||||
|
||||
func (q *Queries) CountHttpServices(ctx context.Context) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countHttpServicesStmt, countHttpServices)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
type CountHttpServicesParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
AgentID *string `json:"agentId"`
|
||||
}
|
||||
|
||||
const countHttpServicesByAgent = `-- name: CountHttpServicesByAgent :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_services
|
||||
WHERE
|
||||
agent_id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) CountHttpServicesByAgent(ctx context.Context, agentID *string) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countHttpServicesByAgentStmt, countHttpServicesByAgent, agentID)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
}
|
||||
|
||||
const countHttpServicesByProfile = `-- name: CountHttpServicesByProfile :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_services
|
||||
WHERE
|
||||
profile_id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) CountHttpServicesByProfile(ctx context.Context, profileID int64) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countHttpServicesByProfileStmt, countHttpServicesByProfile, profileID)
|
||||
func (q *Queries) CountHttpServices(ctx context.Context, arg CountHttpServicesParams) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countHttpServicesStmt, countHttpServices, arg.ProfileID, arg.AgentID)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
@@ -166,76 +145,33 @@ SELECT
|
||||
FROM
|
||||
http_services
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = ?1
|
||||
AND (
|
||||
CAST(?2 AS TEXT) IS NULL
|
||||
OR agent_id = CAST(?2 AS TEXT)
|
||||
)
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(?4 AS INTEGER), -1)
|
||||
OFFSET
|
||||
?
|
||||
COALESCE(CAST(?3 AS INTEGER), 0)
|
||||
`
|
||||
|
||||
type ListHttpServicesParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
ProfileID int64 `json:"profileId"`
|
||||
AgentID *string `json:"agentId"`
|
||||
Offset *int64 `json:"offset"`
|
||||
Limit *int64 `json:"limit"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListHttpServices(ctx context.Context, arg ListHttpServicesParams) ([]HttpService, error) {
|
||||
rows, err := q.query(ctx, q.listHttpServicesStmt, listHttpServices, arg.ProfileID, arg.Limit, arg.Offset)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []HttpService
|
||||
for rows.Next() {
|
||||
var i HttpService
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.ProfileID,
|
||||
&i.AgentID,
|
||||
&i.Name,
|
||||
&i.Config,
|
||||
&i.Enabled,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const listHttpServicesByAgent = `-- name: ListHttpServicesByAgent :many
|
||||
SELECT
|
||||
id, profile_id, agent_id, name, config, enabled, created_at, updated_at
|
||||
FROM
|
||||
http_services
|
||||
WHERE
|
||||
agent_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?
|
||||
`
|
||||
|
||||
type ListHttpServicesByAgentParams struct {
|
||||
AgentID *string `json:"agentId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListHttpServicesByAgent(ctx context.Context, arg ListHttpServicesByAgentParams) ([]HttpService, error) {
|
||||
rows, err := q.query(ctx, q.listHttpServicesByAgentStmt, listHttpServicesByAgent, arg.AgentID, arg.Limit, arg.Offset)
|
||||
rows, err := q.query(ctx, q.listHttpServicesStmt, listHttpServices,
|
||||
arg.ProfileID,
|
||||
arg.AgentID,
|
||||
arg.Offset,
|
||||
arg.Limit,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -274,22 +210,10 @@ FROM
|
||||
WHERE
|
||||
profile_id = ?
|
||||
AND enabled = TRUE
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?
|
||||
`
|
||||
|
||||
type ListHttpServicesEnabledParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListHttpServicesEnabled(ctx context.Context, arg ListHttpServicesEnabledParams) ([]HttpService, error) {
|
||||
rows, err := q.query(ctx, q.listHttpServicesEnabledStmt, listHttpServicesEnabled, arg.ProfileID, arg.Limit, arg.Offset)
|
||||
func (q *Queries) ListHttpServicesEnabled(ctx context.Context, profileID int64) ([]HttpService, error) {
|
||||
rows, err := q.query(ctx, q.listHttpServicesEnabledStmt, listHttpServicesEnabled, profileID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -1,235 +0,0 @@
|
||||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// source: middlewares.sql
|
||||
|
||||
package db
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/mizuchilabs/mantrae/internal/store/schema"
|
||||
)
|
||||
|
||||
const countMiddlewaresByAgent = `-- name: CountMiddlewaresByAgent :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_middlewares
|
||||
WHERE
|
||||
http_middlewares.agent_id = ?
|
||||
UNION ALL
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_middlewares
|
||||
WHERE
|
||||
tcp_middlewares.agent_id = ?
|
||||
`
|
||||
|
||||
type CountMiddlewaresByAgentParams struct {
|
||||
AgentID *string `json:"agentId"`
|
||||
AgentID_2 *string `json:"agentId2"`
|
||||
}
|
||||
|
||||
func (q *Queries) CountMiddlewaresByAgent(ctx context.Context, arg CountMiddlewaresByAgentParams) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countMiddlewaresByAgentStmt, countMiddlewaresByAgent, arg.AgentID, arg.AgentID_2)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
}
|
||||
|
||||
const countMiddlewaresByProfile = `-- name: CountMiddlewaresByProfile :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_middlewares
|
||||
WHERE
|
||||
http_middlewares.profile_id = ?
|
||||
UNION ALL
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_middlewares
|
||||
WHERE
|
||||
tcp_middlewares.profile_id = ?
|
||||
`
|
||||
|
||||
type CountMiddlewaresByProfileParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
ProfileID_2 int64 `json:"profileId2"`
|
||||
}
|
||||
|
||||
func (q *Queries) CountMiddlewaresByProfile(ctx context.Context, arg CountMiddlewaresByProfileParams) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countMiddlewaresByProfileStmt, countMiddlewaresByProfile, arg.ProfileID, arg.ProfileID_2)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
}
|
||||
|
||||
const listMiddlewaresByAgent = `-- name: ListMiddlewaresByAgent :many
|
||||
SELECT
|
||||
id, profile_id, agent_id, name, config, enabled, is_default, created_at, updated_at,
|
||||
'http' AS type
|
||||
FROM
|
||||
http_middlewares
|
||||
WHERE
|
||||
http_middlewares.agent_id = ?
|
||||
UNION ALL
|
||||
SELECT
|
||||
id, profile_id, agent_id, name, config, enabled, is_default, created_at, updated_at,
|
||||
'tcp' AS type
|
||||
FROM
|
||||
tcp_middlewares
|
||||
WHERE
|
||||
tcp_middlewares.agent_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?
|
||||
`
|
||||
|
||||
type ListMiddlewaresByAgentParams struct {
|
||||
AgentID *string `json:"agentId"`
|
||||
AgentID_2 *string `json:"agentId2"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
type ListMiddlewaresByAgentRow struct {
|
||||
ID int64 `json:"id"`
|
||||
ProfileID int64 `json:"profileId"`
|
||||
AgentID *string `json:"agentId"`
|
||||
Name string `json:"name"`
|
||||
Config *schema.HTTPMiddleware `json:"config"`
|
||||
Enabled bool `json:"enabled"`
|
||||
IsDefault bool `json:"isDefault"`
|
||||
CreatedAt *time.Time `json:"createdAt"`
|
||||
UpdatedAt *time.Time `json:"updatedAt"`
|
||||
Type string `json:"type"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListMiddlewaresByAgent(ctx context.Context, arg ListMiddlewaresByAgentParams) ([]ListMiddlewaresByAgentRow, error) {
|
||||
rows, err := q.query(ctx, q.listMiddlewaresByAgentStmt, listMiddlewaresByAgent,
|
||||
arg.AgentID,
|
||||
arg.AgentID_2,
|
||||
arg.Limit,
|
||||
arg.Offset,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []ListMiddlewaresByAgentRow
|
||||
for rows.Next() {
|
||||
var i ListMiddlewaresByAgentRow
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.ProfileID,
|
||||
&i.AgentID,
|
||||
&i.Name,
|
||||
&i.Config,
|
||||
&i.Enabled,
|
||||
&i.IsDefault,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
&i.Type,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const listMiddlewaresByProfile = `-- name: ListMiddlewaresByProfile :many
|
||||
SELECT
|
||||
id, profile_id, agent_id, name, config, enabled, is_default, created_at, updated_at,
|
||||
'http' AS type
|
||||
FROM
|
||||
http_middlewares
|
||||
WHERE
|
||||
http_middlewares.profile_id = ?
|
||||
UNION ALL
|
||||
SELECT
|
||||
id, profile_id, agent_id, name, config, enabled, is_default, created_at, updated_at,
|
||||
'tcp' AS type
|
||||
FROM
|
||||
tcp_middlewares
|
||||
WHERE
|
||||
tcp_middlewares.profile_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?
|
||||
`
|
||||
|
||||
type ListMiddlewaresByProfileParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
ProfileID_2 int64 `json:"profileId2"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
type ListMiddlewaresByProfileRow struct {
|
||||
ID int64 `json:"id"`
|
||||
ProfileID int64 `json:"profileId"`
|
||||
AgentID *string `json:"agentId"`
|
||||
Name string `json:"name"`
|
||||
Config *schema.HTTPMiddleware `json:"config"`
|
||||
Enabled bool `json:"enabled"`
|
||||
IsDefault bool `json:"isDefault"`
|
||||
CreatedAt *time.Time `json:"createdAt"`
|
||||
UpdatedAt *time.Time `json:"updatedAt"`
|
||||
Type string `json:"type"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListMiddlewaresByProfile(ctx context.Context, arg ListMiddlewaresByProfileParams) ([]ListMiddlewaresByProfileRow, error) {
|
||||
rows, err := q.query(ctx, q.listMiddlewaresByProfileStmt, listMiddlewaresByProfile,
|
||||
arg.ProfileID,
|
||||
arg.ProfileID_2,
|
||||
arg.Limit,
|
||||
arg.Offset,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []ListMiddlewaresByProfileRow
|
||||
for rows.Next() {
|
||||
var i ListMiddlewaresByProfileRow
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.ProfileID,
|
||||
&i.AgentID,
|
||||
&i.Name,
|
||||
&i.Config,
|
||||
&i.Enabled,
|
||||
&i.IsDefault,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
&i.Type,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
@@ -115,10 +115,10 @@ type HttpService struct {
|
||||
type Profile struct {
|
||||
ID int64 `json:"id"`
|
||||
Name string `json:"name"`
|
||||
CreatedAt *time.Time `json:"createdAt"`
|
||||
UpdatedAt *time.Time `json:"updatedAt"`
|
||||
Description *string `json:"description"`
|
||||
Token string `json:"token"`
|
||||
CreatedAt *time.Time `json:"createdAt"`
|
||||
UpdatedAt *time.Time `json:"updatedAt"`
|
||||
}
|
||||
|
||||
type Setting struct {
|
||||
|
||||
@@ -27,7 +27,7 @@ const createProfile = `-- name: CreateProfile :one
|
||||
INSERT INTO
|
||||
profiles (name, description, token, created_at, updated_at)
|
||||
VALUES
|
||||
(?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) RETURNING id, name, created_at, updated_at, description, token
|
||||
(?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) RETURNING id, name, description, token, created_at, updated_at
|
||||
`
|
||||
|
||||
type CreateProfileParams struct {
|
||||
@@ -42,10 +42,10 @@ func (q *Queries) CreateProfile(ctx context.Context, arg CreateProfileParams) (P
|
||||
err := row.Scan(
|
||||
&i.ID,
|
||||
&i.Name,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
&i.Description,
|
||||
&i.Token,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
)
|
||||
return i, err
|
||||
}
|
||||
@@ -63,7 +63,7 @@ func (q *Queries) DeleteProfile(ctx context.Context, id int64) error {
|
||||
|
||||
const getProfile = `-- name: GetProfile :one
|
||||
SELECT
|
||||
id, name, created_at, updated_at, description, token
|
||||
id, name, description, token, created_at, updated_at
|
||||
FROM
|
||||
profiles
|
||||
WHERE
|
||||
@@ -76,17 +76,17 @@ func (q *Queries) GetProfile(ctx context.Context, id int64) (Profile, error) {
|
||||
err := row.Scan(
|
||||
&i.ID,
|
||||
&i.Name,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
&i.Description,
|
||||
&i.Token,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
)
|
||||
return i, err
|
||||
}
|
||||
|
||||
const getProfileByName = `-- name: GetProfileByName :one
|
||||
SELECT
|
||||
id, name, created_at, updated_at, description, token
|
||||
id, name, description, token, created_at, updated_at
|
||||
FROM
|
||||
profiles
|
||||
WHERE
|
||||
@@ -99,34 +99,34 @@ func (q *Queries) GetProfileByName(ctx context.Context, name string) (Profile, e
|
||||
err := row.Scan(
|
||||
&i.ID,
|
||||
&i.Name,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
&i.Description,
|
||||
&i.Token,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
)
|
||||
return i, err
|
||||
}
|
||||
|
||||
const listProfiles = `-- name: ListProfiles :many
|
||||
SELECT
|
||||
id, name, created_at, updated_at, description, token
|
||||
id, name, description, token, created_at, updated_at
|
||||
FROM
|
||||
profiles
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(?2 AS INTEGER), -1)
|
||||
OFFSET
|
||||
?
|
||||
COALESCE(CAST(?1 AS INTEGER), 0)
|
||||
`
|
||||
|
||||
type ListProfilesParams struct {
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
Offset *int64 `json:"offset"`
|
||||
Limit *int64 `json:"limit"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListProfiles(ctx context.Context, arg ListProfilesParams) ([]Profile, error) {
|
||||
rows, err := q.query(ctx, q.listProfilesStmt, listProfiles, arg.Limit, arg.Offset)
|
||||
rows, err := q.query(ctx, q.listProfilesStmt, listProfiles, arg.Offset, arg.Limit)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -137,10 +137,10 @@ func (q *Queries) ListProfiles(ctx context.Context, arg ListProfilesParams) ([]P
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.Name,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
&i.Description,
|
||||
&i.Token,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -163,7 +163,7 @@ SET
|
||||
token = ?,
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
WHERE
|
||||
id = ? RETURNING id, name, created_at, updated_at, description, token
|
||||
id = ? RETURNING id, name, description, token, created_at, updated_at
|
||||
`
|
||||
|
||||
type UpdateProfileParams struct {
|
||||
@@ -184,10 +184,10 @@ func (q *Queries) UpdateProfile(ctx context.Context, arg UpdateProfileParams) (P
|
||||
err := row.Scan(
|
||||
&i.ID,
|
||||
&i.Name,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
&i.Description,
|
||||
&i.Token,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
)
|
||||
return i, err
|
||||
}
|
||||
|
||||
@@ -9,24 +9,14 @@ import (
|
||||
)
|
||||
|
||||
type Querier interface {
|
||||
CountAgents(ctx context.Context) (int64, error)
|
||||
CountAgents(ctx context.Context, profileID int64) (int64, error)
|
||||
CountAuditLogs(ctx context.Context) (int64, error)
|
||||
CountDnsProviders(ctx context.Context) (int64, error)
|
||||
CountEntryPoints(ctx context.Context) (int64, error)
|
||||
CountHttpMiddlewares(ctx context.Context) (int64, error)
|
||||
CountHttpMiddlewaresByAgent(ctx context.Context, agentID *string) (int64, error)
|
||||
CountHttpMiddlewaresByProfile(ctx context.Context, profileID int64) (int64, error)
|
||||
CountHttpRouters(ctx context.Context) (int64, error)
|
||||
CountHttpRoutersByAgent(ctx context.Context, agentID *string) (int64, error)
|
||||
CountHttpRoutersByProfile(ctx context.Context, profileID int64) (int64, error)
|
||||
CountHttpServersTransports(ctx context.Context) (int64, error)
|
||||
CountHttpServersTransportsByAgent(ctx context.Context, agentID *string) (int64, error)
|
||||
CountHttpServersTransportsByProfile(ctx context.Context, profileID int64) (int64, error)
|
||||
CountHttpServices(ctx context.Context) (int64, error)
|
||||
CountHttpServicesByAgent(ctx context.Context, agentID *string) (int64, error)
|
||||
CountHttpServicesByProfile(ctx context.Context, profileID int64) (int64, error)
|
||||
CountMiddlewaresByAgent(ctx context.Context, arg CountMiddlewaresByAgentParams) (int64, error)
|
||||
CountMiddlewaresByProfile(ctx context.Context, arg CountMiddlewaresByProfileParams) (int64, error)
|
||||
CountEntryPoints(ctx context.Context, profileID int64) (int64, error)
|
||||
CountHttpMiddlewares(ctx context.Context, arg CountHttpMiddlewaresParams) (int64, error)
|
||||
CountHttpRouters(ctx context.Context, arg CountHttpRoutersParams) (int64, error)
|
||||
CountHttpServersTransports(ctx context.Context, arg CountHttpServersTransportsParams) (int64, error)
|
||||
CountHttpServices(ctx context.Context, arg CountHttpServicesParams) (int64, error)
|
||||
CountProfiles(ctx context.Context) (int64, error)
|
||||
CountRoutersByAgent(ctx context.Context, arg CountRoutersByAgentParams) (int64, error)
|
||||
CountRoutersByProfile(ctx context.Context, arg CountRoutersByProfileParams) (int64, error)
|
||||
@@ -34,25 +24,13 @@ type Querier interface {
|
||||
CountServersTransportsByProfile(ctx context.Context, arg CountServersTransportsByProfileParams) (int64, error)
|
||||
CountServicesByAgent(ctx context.Context, arg CountServicesByAgentParams) (int64, error)
|
||||
CountServicesByProfile(ctx context.Context, arg CountServicesByProfileParams) (int64, error)
|
||||
CountTcpMiddlewares(ctx context.Context) (int64, error)
|
||||
CountTcpMiddlewaresByAgent(ctx context.Context, agentID *string) (int64, error)
|
||||
CountTcpMiddlewaresByProfile(ctx context.Context, profileID int64) (int64, error)
|
||||
CountTcpRouters(ctx context.Context) (int64, error)
|
||||
CountTcpRoutersByAgent(ctx context.Context, agentID *string) (int64, error)
|
||||
CountTcpRoutersByProfile(ctx context.Context, profileID int64) (int64, error)
|
||||
CountTcpServersTransports(ctx context.Context) (int64, error)
|
||||
CountTcpServersTransportsByAgent(ctx context.Context, agentID *string) (int64, error)
|
||||
CountTcpServersTransportsByProfile(ctx context.Context, profileID int64) (int64, error)
|
||||
CountTcpServices(ctx context.Context) (int64, error)
|
||||
CountTcpServicesByAgent(ctx context.Context, agentID *string) (int64, error)
|
||||
CountTcpServicesByProfile(ctx context.Context, profileID int64) (int64, error)
|
||||
CountTcpMiddlewares(ctx context.Context, arg CountTcpMiddlewaresParams) (int64, error)
|
||||
CountTcpRouters(ctx context.Context, arg CountTcpRoutersParams) (int64, error)
|
||||
CountTcpServersTransports(ctx context.Context, arg CountTcpServersTransportsParams) (int64, error)
|
||||
CountTcpServices(ctx context.Context, arg CountTcpServicesParams) (int64, error)
|
||||
CountTraefikInstances(ctx context.Context) (int64, error)
|
||||
CountUdpRouters(ctx context.Context) (int64, error)
|
||||
CountUdpRoutersByAgent(ctx context.Context, agentID *string) (int64, error)
|
||||
CountUdpRoutersByProfile(ctx context.Context, profileID int64) (int64, error)
|
||||
CountUdpServices(ctx context.Context) (int64, error)
|
||||
CountUdpServicesByAgent(ctx context.Context, agentID *string) (int64, error)
|
||||
CountUdpServicesByProfile(ctx context.Context, profileID int64) (int64, error)
|
||||
CountUdpRouters(ctx context.Context, arg CountUdpRoutersParams) (int64, error)
|
||||
CountUdpServices(ctx context.Context, arg CountUdpServicesParams) (int64, error)
|
||||
CountUsers(ctx context.Context) (int64, error)
|
||||
CreateAgent(ctx context.Context, arg CreateAgentParams) (Agent, error)
|
||||
CreateAuditLog(ctx context.Context, arg CreateAuditLogParams) error
|
||||
@@ -138,19 +116,13 @@ type Querier interface {
|
||||
ListEntryPoints(ctx context.Context, arg ListEntryPointsParams) ([]EntryPoint, error)
|
||||
ListErrors(ctx context.Context) ([]Error, error)
|
||||
ListHttpMiddlewares(ctx context.Context, arg ListHttpMiddlewaresParams) ([]HttpMiddleware, error)
|
||||
ListHttpMiddlewaresByAgent(ctx context.Context, arg ListHttpMiddlewaresByAgentParams) ([]HttpMiddleware, error)
|
||||
ListHttpMiddlewaresEnabled(ctx context.Context, arg ListHttpMiddlewaresEnabledParams) ([]HttpMiddleware, error)
|
||||
ListHttpMiddlewaresEnabled(ctx context.Context, profileID int64) ([]HttpMiddleware, error)
|
||||
ListHttpRouters(ctx context.Context, arg ListHttpRoutersParams) ([]HttpRouter, error)
|
||||
ListHttpRoutersByAgent(ctx context.Context, arg ListHttpRoutersByAgentParams) ([]HttpRouter, error)
|
||||
ListHttpRoutersEnabled(ctx context.Context, arg ListHttpRoutersEnabledParams) ([]HttpRouter, error)
|
||||
ListHttpRoutersEnabled(ctx context.Context, profileID int64) ([]HttpRouter, error)
|
||||
ListHttpServersTransports(ctx context.Context, arg ListHttpServersTransportsParams) ([]HttpServersTransport, error)
|
||||
ListHttpServersTransportsByAgent(ctx context.Context, arg ListHttpServersTransportsByAgentParams) ([]HttpServersTransport, error)
|
||||
ListHttpServersTransportsEnabled(ctx context.Context, arg ListHttpServersTransportsEnabledParams) ([]HttpServersTransport, error)
|
||||
ListHttpServersTransportsEnabled(ctx context.Context, profileID int64) ([]HttpServersTransport, error)
|
||||
ListHttpServices(ctx context.Context, arg ListHttpServicesParams) ([]HttpService, error)
|
||||
ListHttpServicesByAgent(ctx context.Context, arg ListHttpServicesByAgentParams) ([]HttpService, error)
|
||||
ListHttpServicesEnabled(ctx context.Context, arg ListHttpServicesEnabledParams) ([]HttpService, error)
|
||||
ListMiddlewaresByAgent(ctx context.Context, arg ListMiddlewaresByAgentParams) ([]ListMiddlewaresByAgentRow, error)
|
||||
ListMiddlewaresByProfile(ctx context.Context, arg ListMiddlewaresByProfileParams) ([]ListMiddlewaresByProfileRow, error)
|
||||
ListHttpServicesEnabled(ctx context.Context, profileID int64) ([]HttpService, error)
|
||||
ListProfiles(ctx context.Context, arg ListProfilesParams) ([]Profile, error)
|
||||
ListRoutersByAgent(ctx context.Context, arg ListRoutersByAgentParams) ([]ListRoutersByAgentRow, error)
|
||||
ListRoutersByProfile(ctx context.Context, arg ListRoutersByProfileParams) ([]ListRoutersByProfileRow, error)
|
||||
@@ -160,24 +132,18 @@ type Querier interface {
|
||||
ListServicesByProfile(ctx context.Context, arg ListServicesByProfileParams) ([]ListServicesByProfileRow, error)
|
||||
ListSettings(ctx context.Context) ([]Setting, error)
|
||||
ListTcpMiddlewares(ctx context.Context, arg ListTcpMiddlewaresParams) ([]TcpMiddleware, error)
|
||||
ListTcpMiddlewaresByAgent(ctx context.Context, arg ListTcpMiddlewaresByAgentParams) ([]TcpMiddleware, error)
|
||||
ListTcpMiddlewaresEnabled(ctx context.Context, arg ListTcpMiddlewaresEnabledParams) ([]TcpMiddleware, error)
|
||||
ListTcpMiddlewaresEnabled(ctx context.Context, profileID int64) ([]TcpMiddleware, error)
|
||||
ListTcpRouters(ctx context.Context, arg ListTcpRoutersParams) ([]TcpRouter, error)
|
||||
ListTcpRoutersByAgent(ctx context.Context, arg ListTcpRoutersByAgentParams) ([]TcpRouter, error)
|
||||
ListTcpRoutersEnabled(ctx context.Context, arg ListTcpRoutersEnabledParams) ([]TcpRouter, error)
|
||||
ListTcpRoutersEnabled(ctx context.Context, profileID int64) ([]TcpRouter, error)
|
||||
ListTcpServersTransports(ctx context.Context, arg ListTcpServersTransportsParams) ([]TcpServersTransport, error)
|
||||
ListTcpServersTransportsByAgent(ctx context.Context, arg ListTcpServersTransportsByAgentParams) ([]TcpServersTransport, error)
|
||||
ListTcpServersTransportsEnabled(ctx context.Context, arg ListTcpServersTransportsEnabledParams) ([]TcpServersTransport, error)
|
||||
ListTcpServersTransportsEnabled(ctx context.Context, profileID int64) ([]TcpServersTransport, error)
|
||||
ListTcpServices(ctx context.Context, arg ListTcpServicesParams) ([]TcpService, error)
|
||||
ListTcpServicesByAgent(ctx context.Context, arg ListTcpServicesByAgentParams) ([]TcpService, error)
|
||||
ListTcpServicesEnabled(ctx context.Context, arg ListTcpServicesEnabledParams) ([]TcpService, error)
|
||||
ListTcpServicesEnabled(ctx context.Context, profileID int64) ([]TcpService, error)
|
||||
ListTraefikInstances(ctx context.Context, arg ListTraefikInstancesParams) ([]TraefikInstance, error)
|
||||
ListUdpRouters(ctx context.Context, arg ListUdpRoutersParams) ([]UdpRouter, error)
|
||||
ListUdpRoutersByAgent(ctx context.Context, arg ListUdpRoutersByAgentParams) ([]UdpRouter, error)
|
||||
ListUdpRoutersEnabled(ctx context.Context, arg ListUdpRoutersEnabledParams) ([]UdpRouter, error)
|
||||
ListUdpRoutersEnabled(ctx context.Context, profileID int64) ([]UdpRouter, error)
|
||||
ListUdpServices(ctx context.Context, arg ListUdpServicesParams) ([]UdpService, error)
|
||||
ListUdpServicesByAgent(ctx context.Context, arg ListUdpServicesByAgentParams) ([]UdpService, error)
|
||||
ListUdpServicesEnabled(ctx context.Context, arg ListUdpServicesEnabledParams) ([]UdpService, error)
|
||||
ListUdpServicesEnabled(ctx context.Context, profileID int64) ([]UdpService, error)
|
||||
ListUsers(ctx context.Context, arg ListUsersParams) ([]User, error)
|
||||
LogError(ctx context.Context, arg LogErrorParams) error
|
||||
PurgeTraefikInstances(ctx context.Context) error
|
||||
|
||||
@@ -16,42 +16,21 @@ SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_middlewares
|
||||
WHERE
|
||||
profile_id = ?1
|
||||
AND (
|
||||
CAST(?2 AS TEXT) IS NULL
|
||||
OR agent_id = CAST(?2 AS TEXT)
|
||||
)
|
||||
`
|
||||
|
||||
func (q *Queries) CountTcpMiddlewares(ctx context.Context) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countTcpMiddlewaresStmt, countTcpMiddlewares)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
type CountTcpMiddlewaresParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
AgentID *string `json:"agentId"`
|
||||
}
|
||||
|
||||
const countTcpMiddlewaresByAgent = `-- name: CountTcpMiddlewaresByAgent :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_middlewares
|
||||
WHERE
|
||||
agent_id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) CountTcpMiddlewaresByAgent(ctx context.Context, agentID *string) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countTcpMiddlewaresByAgentStmt, countTcpMiddlewaresByAgent, agentID)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
}
|
||||
|
||||
const countTcpMiddlewaresByProfile = `-- name: CountTcpMiddlewaresByProfile :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_middlewares
|
||||
WHERE
|
||||
profile_id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) CountTcpMiddlewaresByProfile(ctx context.Context, profileID int64) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countTcpMiddlewaresByProfileStmt, countTcpMiddlewaresByProfile, profileID)
|
||||
func (q *Queries) CountTcpMiddlewares(ctx context.Context, arg CountTcpMiddlewaresParams) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countTcpMiddlewaresStmt, countTcpMiddlewares, arg.ProfileID, arg.AgentID)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
@@ -154,77 +133,33 @@ SELECT
|
||||
FROM
|
||||
tcp_middlewares
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = ?1
|
||||
AND (
|
||||
CAST(?2 AS TEXT) IS NULL
|
||||
OR agent_id = CAST(?2 AS TEXT)
|
||||
)
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(?4 AS INTEGER), -1)
|
||||
OFFSET
|
||||
?
|
||||
COALESCE(CAST(?3 AS INTEGER), 0)
|
||||
`
|
||||
|
||||
type ListTcpMiddlewaresParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
ProfileID int64 `json:"profileId"`
|
||||
AgentID *string `json:"agentId"`
|
||||
Offset *int64 `json:"offset"`
|
||||
Limit *int64 `json:"limit"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListTcpMiddlewares(ctx context.Context, arg ListTcpMiddlewaresParams) ([]TcpMiddleware, error) {
|
||||
rows, err := q.query(ctx, q.listTcpMiddlewaresStmt, listTcpMiddlewares, arg.ProfileID, arg.Limit, arg.Offset)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []TcpMiddleware
|
||||
for rows.Next() {
|
||||
var i TcpMiddleware
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.ProfileID,
|
||||
&i.AgentID,
|
||||
&i.Name,
|
||||
&i.Config,
|
||||
&i.Enabled,
|
||||
&i.IsDefault,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const listTcpMiddlewaresByAgent = `-- name: ListTcpMiddlewaresByAgent :many
|
||||
SELECT
|
||||
id, profile_id, agent_id, name, config, enabled, is_default, created_at, updated_at
|
||||
FROM
|
||||
tcp_middlewares
|
||||
WHERE
|
||||
agent_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?
|
||||
`
|
||||
|
||||
type ListTcpMiddlewaresByAgentParams struct {
|
||||
AgentID *string `json:"agentId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListTcpMiddlewaresByAgent(ctx context.Context, arg ListTcpMiddlewaresByAgentParams) ([]TcpMiddleware, error) {
|
||||
rows, err := q.query(ctx, q.listTcpMiddlewaresByAgentStmt, listTcpMiddlewaresByAgent, arg.AgentID, arg.Limit, arg.Offset)
|
||||
rows, err := q.query(ctx, q.listTcpMiddlewaresStmt, listTcpMiddlewares,
|
||||
arg.ProfileID,
|
||||
arg.AgentID,
|
||||
arg.Offset,
|
||||
arg.Limit,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -264,22 +199,10 @@ FROM
|
||||
WHERE
|
||||
profile_id = ?
|
||||
AND enabled = TRUE
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?
|
||||
`
|
||||
|
||||
type ListTcpMiddlewaresEnabledParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListTcpMiddlewaresEnabled(ctx context.Context, arg ListTcpMiddlewaresEnabledParams) ([]TcpMiddleware, error) {
|
||||
rows, err := q.query(ctx, q.listTcpMiddlewaresEnabledStmt, listTcpMiddlewaresEnabled, arg.ProfileID, arg.Limit, arg.Offset)
|
||||
func (q *Queries) ListTcpMiddlewaresEnabled(ctx context.Context, profileID int64) ([]TcpMiddleware, error) {
|
||||
rows, err := q.query(ctx, q.listTcpMiddlewaresEnabledStmt, listTcpMiddlewaresEnabled, profileID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -16,42 +16,21 @@ SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_routers
|
||||
WHERE
|
||||
profile_id = ?1
|
||||
AND (
|
||||
CAST(?2 AS TEXT) IS NULL
|
||||
OR agent_id = CAST(?2 AS TEXT)
|
||||
)
|
||||
`
|
||||
|
||||
func (q *Queries) CountTcpRouters(ctx context.Context) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countTcpRoutersStmt, countTcpRouters)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
type CountTcpRoutersParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
AgentID *string `json:"agentId"`
|
||||
}
|
||||
|
||||
const countTcpRoutersByAgent = `-- name: CountTcpRoutersByAgent :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_routers
|
||||
WHERE
|
||||
agent_id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) CountTcpRoutersByAgent(ctx context.Context, agentID *string) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countTcpRoutersByAgentStmt, countTcpRoutersByAgent, agentID)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
}
|
||||
|
||||
const countTcpRoutersByProfile = `-- name: CountTcpRoutersByProfile :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_routers
|
||||
WHERE
|
||||
profile_id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) CountTcpRoutersByProfile(ctx context.Context, profileID int64) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countTcpRoutersByProfileStmt, countTcpRoutersByProfile, profileID)
|
||||
func (q *Queries) CountTcpRouters(ctx context.Context, arg CountTcpRoutersParams) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countTcpRoutersStmt, countTcpRouters, arg.ProfileID, arg.AgentID)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
@@ -265,76 +244,33 @@ SELECT
|
||||
FROM
|
||||
tcp_routers
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = ?1
|
||||
AND (
|
||||
CAST(?2 AS TEXT) IS NULL
|
||||
OR agent_id = CAST(?2 AS TEXT)
|
||||
)
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(?4 AS INTEGER), -1)
|
||||
OFFSET
|
||||
?
|
||||
COALESCE(CAST(?3 AS INTEGER), 0)
|
||||
`
|
||||
|
||||
type ListTcpRoutersParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
ProfileID int64 `json:"profileId"`
|
||||
AgentID *string `json:"agentId"`
|
||||
Offset *int64 `json:"offset"`
|
||||
Limit *int64 `json:"limit"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListTcpRouters(ctx context.Context, arg ListTcpRoutersParams) ([]TcpRouter, error) {
|
||||
rows, err := q.query(ctx, q.listTcpRoutersStmt, listTcpRouters, arg.ProfileID, arg.Limit, arg.Offset)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []TcpRouter
|
||||
for rows.Next() {
|
||||
var i TcpRouter
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.ProfileID,
|
||||
&i.AgentID,
|
||||
&i.Name,
|
||||
&i.Config,
|
||||
&i.Enabled,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const listTcpRoutersByAgent = `-- name: ListTcpRoutersByAgent :many
|
||||
SELECT
|
||||
id, profile_id, agent_id, name, config, enabled, created_at, updated_at
|
||||
FROM
|
||||
tcp_routers
|
||||
WHERE
|
||||
agent_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?
|
||||
`
|
||||
|
||||
type ListTcpRoutersByAgentParams struct {
|
||||
AgentID *string `json:"agentId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListTcpRoutersByAgent(ctx context.Context, arg ListTcpRoutersByAgentParams) ([]TcpRouter, error) {
|
||||
rows, err := q.query(ctx, q.listTcpRoutersByAgentStmt, listTcpRoutersByAgent, arg.AgentID, arg.Limit, arg.Offset)
|
||||
rows, err := q.query(ctx, q.listTcpRoutersStmt, listTcpRouters,
|
||||
arg.ProfileID,
|
||||
arg.AgentID,
|
||||
arg.Offset,
|
||||
arg.Limit,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -373,22 +309,10 @@ FROM
|
||||
WHERE
|
||||
profile_id = ?
|
||||
AND enabled = TRUE
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?
|
||||
`
|
||||
|
||||
type ListTcpRoutersEnabledParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListTcpRoutersEnabled(ctx context.Context, arg ListTcpRoutersEnabledParams) ([]TcpRouter, error) {
|
||||
rows, err := q.query(ctx, q.listTcpRoutersEnabledStmt, listTcpRoutersEnabled, arg.ProfileID, arg.Limit, arg.Offset)
|
||||
func (q *Queries) ListTcpRoutersEnabled(ctx context.Context, profileID int64) ([]TcpRouter, error) {
|
||||
rows, err := q.query(ctx, q.listTcpRoutersEnabledStmt, listTcpRoutersEnabled, profileID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -16,42 +16,21 @@ SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_servers_transports
|
||||
WHERE
|
||||
profile_id = ?1
|
||||
AND (
|
||||
CAST(?2 AS TEXT) IS NULL
|
||||
OR agent_id = CAST(?2 AS TEXT)
|
||||
)
|
||||
`
|
||||
|
||||
func (q *Queries) CountTcpServersTransports(ctx context.Context) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countTcpServersTransportsStmt, countTcpServersTransports)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
type CountTcpServersTransportsParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
AgentID *string `json:"agentId"`
|
||||
}
|
||||
|
||||
const countTcpServersTransportsByAgent = `-- name: CountTcpServersTransportsByAgent :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_servers_transports
|
||||
WHERE
|
||||
agent_id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) CountTcpServersTransportsByAgent(ctx context.Context, agentID *string) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countTcpServersTransportsByAgentStmt, countTcpServersTransportsByAgent, agentID)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
}
|
||||
|
||||
const countTcpServersTransportsByProfile = `-- name: CountTcpServersTransportsByProfile :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_servers_transports
|
||||
WHERE
|
||||
profile_id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) CountTcpServersTransportsByProfile(ctx context.Context, profileID int64) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countTcpServersTransportsByProfileStmt, countTcpServersTransportsByProfile, profileID)
|
||||
func (q *Queries) CountTcpServersTransports(ctx context.Context, arg CountTcpServersTransportsParams) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countTcpServersTransportsStmt, countTcpServersTransports, arg.ProfileID, arg.AgentID)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
@@ -141,76 +120,33 @@ SELECT
|
||||
FROM
|
||||
tcp_servers_transports
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = ?1
|
||||
AND (
|
||||
CAST(?2 AS TEXT) IS NULL
|
||||
OR agent_id = CAST(?2 AS TEXT)
|
||||
)
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(?4 AS INTEGER), -1)
|
||||
OFFSET
|
||||
?
|
||||
COALESCE(CAST(?3 AS INTEGER), 0)
|
||||
`
|
||||
|
||||
type ListTcpServersTransportsParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
ProfileID int64 `json:"profileId"`
|
||||
AgentID *string `json:"agentId"`
|
||||
Offset *int64 `json:"offset"`
|
||||
Limit *int64 `json:"limit"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListTcpServersTransports(ctx context.Context, arg ListTcpServersTransportsParams) ([]TcpServersTransport, error) {
|
||||
rows, err := q.query(ctx, q.listTcpServersTransportsStmt, listTcpServersTransports, arg.ProfileID, arg.Limit, arg.Offset)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []TcpServersTransport
|
||||
for rows.Next() {
|
||||
var i TcpServersTransport
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.ProfileID,
|
||||
&i.AgentID,
|
||||
&i.Name,
|
||||
&i.Config,
|
||||
&i.Enabled,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const listTcpServersTransportsByAgent = `-- name: ListTcpServersTransportsByAgent :many
|
||||
SELECT
|
||||
id, profile_id, agent_id, name, config, enabled, created_at, updated_at
|
||||
FROM
|
||||
tcp_servers_transports
|
||||
WHERE
|
||||
agent_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?
|
||||
`
|
||||
|
||||
type ListTcpServersTransportsByAgentParams struct {
|
||||
AgentID *string `json:"agentId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListTcpServersTransportsByAgent(ctx context.Context, arg ListTcpServersTransportsByAgentParams) ([]TcpServersTransport, error) {
|
||||
rows, err := q.query(ctx, q.listTcpServersTransportsByAgentStmt, listTcpServersTransportsByAgent, arg.AgentID, arg.Limit, arg.Offset)
|
||||
rows, err := q.query(ctx, q.listTcpServersTransportsStmt, listTcpServersTransports,
|
||||
arg.ProfileID,
|
||||
arg.AgentID,
|
||||
arg.Offset,
|
||||
arg.Limit,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -249,22 +185,10 @@ FROM
|
||||
WHERE
|
||||
profile_id = ?
|
||||
AND enabled = TRUE
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?
|
||||
`
|
||||
|
||||
type ListTcpServersTransportsEnabledParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListTcpServersTransportsEnabled(ctx context.Context, arg ListTcpServersTransportsEnabledParams) ([]TcpServersTransport, error) {
|
||||
rows, err := q.query(ctx, q.listTcpServersTransportsEnabledStmt, listTcpServersTransportsEnabled, arg.ProfileID, arg.Limit, arg.Offset)
|
||||
func (q *Queries) ListTcpServersTransportsEnabled(ctx context.Context, profileID int64) ([]TcpServersTransport, error) {
|
||||
rows, err := q.query(ctx, q.listTcpServersTransportsEnabledStmt, listTcpServersTransportsEnabled, profileID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -16,42 +16,21 @@ SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_services
|
||||
WHERE
|
||||
profile_id = ?1
|
||||
AND (
|
||||
CAST(?2 AS TEXT) IS NULL
|
||||
OR agent_id = CAST(?2 AS TEXT)
|
||||
)
|
||||
`
|
||||
|
||||
func (q *Queries) CountTcpServices(ctx context.Context) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countTcpServicesStmt, countTcpServices)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
type CountTcpServicesParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
AgentID *string `json:"agentId"`
|
||||
}
|
||||
|
||||
const countTcpServicesByAgent = `-- name: CountTcpServicesByAgent :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_services
|
||||
WHERE
|
||||
agent_id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) CountTcpServicesByAgent(ctx context.Context, agentID *string) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countTcpServicesByAgentStmt, countTcpServicesByAgent, agentID)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
}
|
||||
|
||||
const countTcpServicesByProfile = `-- name: CountTcpServicesByProfile :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_services
|
||||
WHERE
|
||||
profile_id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) CountTcpServicesByProfile(ctx context.Context, profileID int64) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countTcpServicesByProfileStmt, countTcpServicesByProfile, profileID)
|
||||
func (q *Queries) CountTcpServices(ctx context.Context, arg CountTcpServicesParams) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countTcpServicesStmt, countTcpServices, arg.ProfileID, arg.AgentID)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
@@ -166,76 +145,33 @@ SELECT
|
||||
FROM
|
||||
tcp_services
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = ?1
|
||||
AND (
|
||||
CAST(?2 AS TEXT) IS NULL
|
||||
OR agent_id = CAST(?2 AS TEXT)
|
||||
)
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(?4 AS INTEGER), -1)
|
||||
OFFSET
|
||||
?
|
||||
COALESCE(CAST(?3 AS INTEGER), 0)
|
||||
`
|
||||
|
||||
type ListTcpServicesParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
ProfileID int64 `json:"profileId"`
|
||||
AgentID *string `json:"agentId"`
|
||||
Offset *int64 `json:"offset"`
|
||||
Limit *int64 `json:"limit"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListTcpServices(ctx context.Context, arg ListTcpServicesParams) ([]TcpService, error) {
|
||||
rows, err := q.query(ctx, q.listTcpServicesStmt, listTcpServices, arg.ProfileID, arg.Limit, arg.Offset)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []TcpService
|
||||
for rows.Next() {
|
||||
var i TcpService
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.ProfileID,
|
||||
&i.AgentID,
|
||||
&i.Name,
|
||||
&i.Config,
|
||||
&i.Enabled,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const listTcpServicesByAgent = `-- name: ListTcpServicesByAgent :many
|
||||
SELECT
|
||||
id, profile_id, agent_id, name, config, enabled, created_at, updated_at
|
||||
FROM
|
||||
tcp_services
|
||||
WHERE
|
||||
agent_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?
|
||||
`
|
||||
|
||||
type ListTcpServicesByAgentParams struct {
|
||||
AgentID *string `json:"agentId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListTcpServicesByAgent(ctx context.Context, arg ListTcpServicesByAgentParams) ([]TcpService, error) {
|
||||
rows, err := q.query(ctx, q.listTcpServicesByAgentStmt, listTcpServicesByAgent, arg.AgentID, arg.Limit, arg.Offset)
|
||||
rows, err := q.query(ctx, q.listTcpServicesStmt, listTcpServices,
|
||||
arg.ProfileID,
|
||||
arg.AgentID,
|
||||
arg.Offset,
|
||||
arg.Limit,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -274,22 +210,10 @@ FROM
|
||||
WHERE
|
||||
profile_id = ?
|
||||
AND enabled = TRUE
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?
|
||||
`
|
||||
|
||||
type ListTcpServicesEnabledParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListTcpServicesEnabled(ctx context.Context, arg ListTcpServicesEnabledParams) ([]TcpService, error) {
|
||||
rows, err := q.query(ctx, q.listTcpServicesEnabledStmt, listTcpServicesEnabled, arg.ProfileID, arg.Limit, arg.Offset)
|
||||
func (q *Queries) ListTcpServicesEnabled(ctx context.Context, profileID int64) ([]TcpService, error) {
|
||||
rows, err := q.query(ctx, q.listTcpServicesEnabledStmt, listTcpServicesEnabled, profileID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -16,42 +16,21 @@ SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
udp_routers
|
||||
WHERE
|
||||
profile_id = ?1
|
||||
AND (
|
||||
CAST(?2 AS TEXT) IS NULL
|
||||
OR agent_id = CAST(?2 AS TEXT)
|
||||
)
|
||||
`
|
||||
|
||||
func (q *Queries) CountUdpRouters(ctx context.Context) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countUdpRoutersStmt, countUdpRouters)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
type CountUdpRoutersParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
AgentID *string `json:"agentId"`
|
||||
}
|
||||
|
||||
const countUdpRoutersByAgent = `-- name: CountUdpRoutersByAgent :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
udp_routers
|
||||
WHERE
|
||||
agent_id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) CountUdpRoutersByAgent(ctx context.Context, agentID *string) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countUdpRoutersByAgentStmt, countUdpRoutersByAgent, agentID)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
}
|
||||
|
||||
const countUdpRoutersByProfile = `-- name: CountUdpRoutersByProfile :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
udp_routers
|
||||
WHERE
|
||||
profile_id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) CountUdpRoutersByProfile(ctx context.Context, profileID int64) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countUdpRoutersByProfileStmt, countUdpRoutersByProfile, profileID)
|
||||
func (q *Queries) CountUdpRouters(ctx context.Context, arg CountUdpRoutersParams) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countUdpRoutersStmt, countUdpRouters, arg.ProfileID, arg.AgentID)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
@@ -203,76 +182,33 @@ SELECT
|
||||
FROM
|
||||
udp_routers
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = ?1
|
||||
AND (
|
||||
CAST(?2 AS TEXT) IS NULL
|
||||
OR agent_id = CAST(?2 AS TEXT)
|
||||
)
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(?4 AS INTEGER), -1)
|
||||
OFFSET
|
||||
?
|
||||
COALESCE(CAST(?3 AS INTEGER), 0)
|
||||
`
|
||||
|
||||
type ListUdpRoutersParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
ProfileID int64 `json:"profileId"`
|
||||
AgentID *string `json:"agentId"`
|
||||
Offset *int64 `json:"offset"`
|
||||
Limit *int64 `json:"limit"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListUdpRouters(ctx context.Context, arg ListUdpRoutersParams) ([]UdpRouter, error) {
|
||||
rows, err := q.query(ctx, q.listUdpRoutersStmt, listUdpRouters, arg.ProfileID, arg.Limit, arg.Offset)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []UdpRouter
|
||||
for rows.Next() {
|
||||
var i UdpRouter
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.ProfileID,
|
||||
&i.AgentID,
|
||||
&i.Name,
|
||||
&i.Config,
|
||||
&i.Enabled,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const listUdpRoutersByAgent = `-- name: ListUdpRoutersByAgent :many
|
||||
SELECT
|
||||
id, profile_id, agent_id, name, config, enabled, created_at, updated_at
|
||||
FROM
|
||||
udp_routers
|
||||
WHERE
|
||||
agent_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?
|
||||
`
|
||||
|
||||
type ListUdpRoutersByAgentParams struct {
|
||||
AgentID *string `json:"agentId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListUdpRoutersByAgent(ctx context.Context, arg ListUdpRoutersByAgentParams) ([]UdpRouter, error) {
|
||||
rows, err := q.query(ctx, q.listUdpRoutersByAgentStmt, listUdpRoutersByAgent, arg.AgentID, arg.Limit, arg.Offset)
|
||||
rows, err := q.query(ctx, q.listUdpRoutersStmt, listUdpRouters,
|
||||
arg.ProfileID,
|
||||
arg.AgentID,
|
||||
arg.Offset,
|
||||
arg.Limit,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -311,22 +247,10 @@ FROM
|
||||
WHERE
|
||||
profile_id = ?
|
||||
AND enabled = TRUE
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?
|
||||
`
|
||||
|
||||
type ListUdpRoutersEnabledParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListUdpRoutersEnabled(ctx context.Context, arg ListUdpRoutersEnabledParams) ([]UdpRouter, error) {
|
||||
rows, err := q.query(ctx, q.listUdpRoutersEnabledStmt, listUdpRoutersEnabled, arg.ProfileID, arg.Limit, arg.Offset)
|
||||
func (q *Queries) ListUdpRoutersEnabled(ctx context.Context, profileID int64) ([]UdpRouter, error) {
|
||||
rows, err := q.query(ctx, q.listUdpRoutersEnabledStmt, listUdpRoutersEnabled, profileID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -16,42 +16,21 @@ SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
udp_services
|
||||
WHERE
|
||||
profile_id = ?1
|
||||
AND (
|
||||
CAST(?2 AS TEXT) IS NULL
|
||||
OR agent_id = CAST(?2 AS TEXT)
|
||||
)
|
||||
`
|
||||
|
||||
func (q *Queries) CountUdpServices(ctx context.Context) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countUdpServicesStmt, countUdpServices)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
type CountUdpServicesParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
AgentID *string `json:"agentId"`
|
||||
}
|
||||
|
||||
const countUdpServicesByAgent = `-- name: CountUdpServicesByAgent :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
udp_services
|
||||
WHERE
|
||||
agent_id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) CountUdpServicesByAgent(ctx context.Context, agentID *string) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countUdpServicesByAgentStmt, countUdpServicesByAgent, agentID)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
}
|
||||
|
||||
const countUdpServicesByProfile = `-- name: CountUdpServicesByProfile :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
udp_services
|
||||
WHERE
|
||||
profile_id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) CountUdpServicesByProfile(ctx context.Context, profileID int64) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countUdpServicesByProfileStmt, countUdpServicesByProfile, profileID)
|
||||
func (q *Queries) CountUdpServices(ctx context.Context, arg CountUdpServicesParams) (int64, error) {
|
||||
row := q.queryRow(ctx, q.countUdpServicesStmt, countUdpServices, arg.ProfileID, arg.AgentID)
|
||||
var count int64
|
||||
err := row.Scan(&count)
|
||||
return count, err
|
||||
@@ -166,76 +145,33 @@ SELECT
|
||||
FROM
|
||||
udp_services
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = ?1
|
||||
AND (
|
||||
CAST(?2 AS TEXT) IS NULL
|
||||
OR agent_id = CAST(?2 AS TEXT)
|
||||
)
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(?4 AS INTEGER), -1)
|
||||
OFFSET
|
||||
?
|
||||
COALESCE(CAST(?3 AS INTEGER), 0)
|
||||
`
|
||||
|
||||
type ListUdpServicesParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
ProfileID int64 `json:"profileId"`
|
||||
AgentID *string `json:"agentId"`
|
||||
Offset *int64 `json:"offset"`
|
||||
Limit *int64 `json:"limit"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListUdpServices(ctx context.Context, arg ListUdpServicesParams) ([]UdpService, error) {
|
||||
rows, err := q.query(ctx, q.listUdpServicesStmt, listUdpServices, arg.ProfileID, arg.Limit, arg.Offset)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []UdpService
|
||||
for rows.Next() {
|
||||
var i UdpService
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.ProfileID,
|
||||
&i.AgentID,
|
||||
&i.Name,
|
||||
&i.Config,
|
||||
&i.Enabled,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const listUdpServicesByAgent = `-- name: ListUdpServicesByAgent :many
|
||||
SELECT
|
||||
id, profile_id, agent_id, name, config, enabled, created_at, updated_at
|
||||
FROM
|
||||
udp_services
|
||||
WHERE
|
||||
agent_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?
|
||||
`
|
||||
|
||||
type ListUdpServicesByAgentParams struct {
|
||||
AgentID *string `json:"agentId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListUdpServicesByAgent(ctx context.Context, arg ListUdpServicesByAgentParams) ([]UdpService, error) {
|
||||
rows, err := q.query(ctx, q.listUdpServicesByAgentStmt, listUdpServicesByAgent, arg.AgentID, arg.Limit, arg.Offset)
|
||||
rows, err := q.query(ctx, q.listUdpServicesStmt, listUdpServices,
|
||||
arg.ProfileID,
|
||||
arg.AgentID,
|
||||
arg.Offset,
|
||||
arg.Limit,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -274,22 +210,10 @@ FROM
|
||||
WHERE
|
||||
profile_id = ?
|
||||
AND enabled = TRUE
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?
|
||||
`
|
||||
|
||||
type ListUdpServicesEnabledParams struct {
|
||||
ProfileID int64 `json:"profileId"`
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListUdpServicesEnabled(ctx context.Context, arg ListUdpServicesEnabledParams) ([]UdpService, error) {
|
||||
rows, err := q.query(ctx, q.listUdpServicesEnabledStmt, listUdpServicesEnabled, arg.ProfileID, arg.Limit, arg.Offset)
|
||||
func (q *Queries) ListUdpServicesEnabled(ctx context.Context, profileID int64) ([]UdpService, error) {
|
||||
rows, err := q.query(ctx, q.listUdpServicesEnabledStmt, listUdpServicesEnabled, profileID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -162,20 +162,20 @@ SELECT
|
||||
FROM
|
||||
users
|
||||
ORDER BY
|
||||
username
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(?2 AS INTEGER), -1)
|
||||
OFFSET
|
||||
?
|
||||
COALESCE(CAST(?1 AS INTEGER), 0)
|
||||
`
|
||||
|
||||
type ListUsersParams struct {
|
||||
Limit int64 `json:"limit"`
|
||||
Offset int64 `json:"offset"`
|
||||
Offset *int64 `json:"offset"`
|
||||
Limit *int64 `json:"limit"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListUsers(ctx context.Context, arg ListUsersParams) ([]User, error) {
|
||||
rows, err := q.query(ctx, q.listUsersStmt, listUsers, arg.Limit, arg.Offset)
|
||||
rows, err := q.query(ctx, q.listUsersStmt, listUsers, arg.Offset, arg.Limit)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -183,25 +183,29 @@ CREATE TABLE audit_logs (
|
||||
);
|
||||
|
||||
-- Update profiles table structure
|
||||
-- Remove columns that are now in traefik_instances
|
||||
ALTER TABLE profiles
|
||||
DROP COLUMN url;
|
||||
CREATE TABLE new_profiles (
|
||||
id INTEGER PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
description TEXT,
|
||||
token TEXT NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (id) REFERENCES profiles (id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
ALTER TABLE profiles
|
||||
DROP COLUMN username;
|
||||
INSERT INTO
|
||||
new_profiles (id, name, token)
|
||||
SELECT
|
||||
id,
|
||||
name,
|
||||
''
|
||||
FROM
|
||||
profiles;
|
||||
|
||||
ALTER TABLE profiles
|
||||
DROP COLUMN password;
|
||||
DROP TABLE profiles;
|
||||
|
||||
ALTER TABLE profiles
|
||||
DROP COLUMN tls;
|
||||
|
||||
-- Add description column to profiles
|
||||
ALTER TABLE profiles
|
||||
ADD COLUMN description TEXT;
|
||||
|
||||
ALTER TABLE profiles
|
||||
ADD COLUMN token TEXT NOT NULL;
|
||||
ALTER TABLE new_profiles
|
||||
RENAME TO profiles;
|
||||
|
||||
-- Update agents table - change JSON columns to TEXT
|
||||
UPDATE agents
|
||||
|
||||
@@ -18,19 +18,21 @@ SELECT
|
||||
FROM
|
||||
agents
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = sqlc.arg ('profile_id')
|
||||
ORDER BY
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(sqlc.narg ('limit') AS INTEGER), -1)
|
||||
OFFSET
|
||||
?;
|
||||
COALESCE(CAST(sqlc.narg ('offset') AS INTEGER), 0);
|
||||
|
||||
-- name: CountAgents :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
agents;
|
||||
agents
|
||||
WHERE
|
||||
profile_id = ?;
|
||||
|
||||
-- name: UpdateAgent :one
|
||||
UPDATE agents
|
||||
|
||||
@@ -18,9 +18,9 @@ FROM
|
||||
ORDER BY
|
||||
a.created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(sqlc.narg ('limit') AS INTEGER), -1)
|
||||
OFFSET
|
||||
?;
|
||||
COALESCE(CAST(sqlc.narg ('offset') AS INTEGER), 0);
|
||||
|
||||
-- name: CountAuditLogs :one
|
||||
SELECT
|
||||
|
||||
@@ -50,11 +50,11 @@ SELECT
|
||||
FROM
|
||||
dns_providers
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(sqlc.narg ('limit') AS INTEGER), -1)
|
||||
OFFSET
|
||||
?;
|
||||
COALESCE(CAST(sqlc.narg ('offset') AS INTEGER), 0);
|
||||
|
||||
-- name: CountDnsProviders :one
|
||||
SELECT
|
||||
|
||||
@@ -42,19 +42,21 @@ SELECT
|
||||
FROM
|
||||
entry_points
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = sqlc.arg ('profile_id')
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(sqlc.narg ('limit') AS INTEGER), -1)
|
||||
OFFSET
|
||||
?;
|
||||
COALESCE(CAST(sqlc.narg ('offset') AS INTEGER), 0);
|
||||
|
||||
-- name: CountEntryPoints :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
entry_points;
|
||||
entry_points
|
||||
WHERE
|
||||
profile_id = ?;
|
||||
|
||||
-- name: UpdateEntryPoint :one
|
||||
UPDATE entry_points
|
||||
|
||||
@@ -41,27 +41,17 @@ SELECT
|
||||
FROM
|
||||
http_middlewares
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = sqlc.arg ('profile_id')
|
||||
AND (
|
||||
CAST(sqlc.narg ('agent_id') AS TEXT) IS NULL
|
||||
OR agent_id = CAST(sqlc.narg ('agent_id') AS TEXT)
|
||||
)
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(sqlc.narg ('limit') AS INTEGER), -1)
|
||||
OFFSET
|
||||
?;
|
||||
|
||||
-- name: ListHttpMiddlewaresByAgent :many
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
http_middlewares
|
||||
WHERE
|
||||
agent_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?;
|
||||
COALESCE(CAST(sqlc.narg ('offset') AS INTEGER), 0);
|
||||
|
||||
-- name: ListHttpMiddlewaresEnabled :many
|
||||
SELECT
|
||||
@@ -70,35 +60,19 @@ FROM
|
||||
http_middlewares
|
||||
WHERE
|
||||
profile_id = ?
|
||||
AND enabled = TRUE
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?;
|
||||
AND enabled = TRUE;
|
||||
|
||||
-- name: CountHttpMiddlewares :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_middlewares;
|
||||
|
||||
-- name: CountHttpMiddlewaresByProfile :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_middlewares
|
||||
WHERE
|
||||
profile_id = ?;
|
||||
|
||||
-- name: CountHttpMiddlewaresByAgent :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_middlewares
|
||||
WHERE
|
||||
agent_id = ?;
|
||||
profile_id = sqlc.arg ('profile_id')
|
||||
AND (
|
||||
CAST(sqlc.narg ('agent_id') AS TEXT) IS NULL
|
||||
OR agent_id = CAST(sqlc.narg ('agent_id') AS TEXT)
|
||||
);
|
||||
|
||||
-- name: UpdateHttpMiddleware :one
|
||||
UPDATE http_middlewares
|
||||
|
||||
@@ -67,27 +67,17 @@ SELECT
|
||||
FROM
|
||||
http_routers
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = sqlc.arg ('profile_id')
|
||||
AND (
|
||||
CAST(sqlc.narg ('agent_id') AS TEXT) IS NULL
|
||||
OR agent_id = CAST(sqlc.narg ('agent_id') AS TEXT)
|
||||
)
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(sqlc.narg ('limit') AS INTEGER), -1)
|
||||
OFFSET
|
||||
?;
|
||||
|
||||
-- name: ListHttpRoutersByAgent :many
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
http_routers
|
||||
WHERE
|
||||
agent_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?;
|
||||
COALESCE(CAST(sqlc.narg ('offset') AS INTEGER), 0);
|
||||
|
||||
-- name: ListHttpRoutersEnabled :many
|
||||
SELECT
|
||||
@@ -96,35 +86,19 @@ FROM
|
||||
http_routers
|
||||
WHERE
|
||||
profile_id = ?
|
||||
AND enabled = TRUE
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?;
|
||||
AND enabled = TRUE;
|
||||
|
||||
-- name: CountHttpRouters :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_routers;
|
||||
|
||||
-- name: CountHttpRoutersByProfile :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_routers
|
||||
WHERE
|
||||
profile_id = ?;
|
||||
|
||||
-- name: CountHttpRoutersByAgent :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_routers
|
||||
WHERE
|
||||
agent_id = ?;
|
||||
profile_id = sqlc.arg ('profile_id')
|
||||
AND (
|
||||
CAST(sqlc.narg ('agent_id') AS TEXT) IS NULL
|
||||
OR agent_id = CAST(sqlc.narg ('agent_id') AS TEXT)
|
||||
);
|
||||
|
||||
-- name: UpdateHttpRouter :one
|
||||
UPDATE http_routers
|
||||
|
||||
@@ -25,27 +25,17 @@ SELECT
|
||||
FROM
|
||||
http_servers_transports
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = sqlc.arg ('profile_id')
|
||||
AND (
|
||||
CAST(sqlc.narg ('agent_id') AS TEXT) IS NULL
|
||||
OR agent_id = CAST(sqlc.narg ('agent_id') AS TEXT)
|
||||
)
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(sqlc.narg ('limit') AS INTEGER), -1)
|
||||
OFFSET
|
||||
?;
|
||||
|
||||
-- name: ListHttpServersTransportsByAgent :many
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
http_servers_transports
|
||||
WHERE
|
||||
agent_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?;
|
||||
COALESCE(CAST(sqlc.narg ('offset') AS INTEGER), 0);
|
||||
|
||||
-- name: ListHttpServersTransportsEnabled :many
|
||||
SELECT
|
||||
@@ -54,35 +44,19 @@ FROM
|
||||
http_servers_transports
|
||||
WHERE
|
||||
profile_id = ?
|
||||
AND enabled = TRUE
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?;
|
||||
AND enabled = TRUE;
|
||||
|
||||
-- name: CountHttpServersTransports :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_servers_transports;
|
||||
|
||||
-- name: CountHttpServersTransportsByProfile :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_servers_transports
|
||||
WHERE
|
||||
profile_id = ?;
|
||||
|
||||
-- name: CountHttpServersTransportsByAgent :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_servers_transports
|
||||
WHERE
|
||||
agent_id = ?;
|
||||
profile_id = sqlc.arg ('profile_id')
|
||||
AND (
|
||||
CAST(sqlc.narg ('agent_id') AS TEXT) IS NULL
|
||||
OR agent_id = CAST(sqlc.narg ('agent_id') AS TEXT)
|
||||
);
|
||||
|
||||
-- name: UpdateHttpServersTransport :one
|
||||
UPDATE http_servers_transports
|
||||
|
||||
@@ -33,13 +33,17 @@ SELECT
|
||||
FROM
|
||||
http_services
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = sqlc.arg ('profile_id')
|
||||
AND (
|
||||
CAST(sqlc.narg ('agent_id') AS TEXT) IS NULL
|
||||
OR agent_id = CAST(sqlc.narg ('agent_id') AS TEXT)
|
||||
)
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(sqlc.narg ('limit') AS INTEGER), -1)
|
||||
OFFSET
|
||||
?;
|
||||
COALESCE(CAST(sqlc.narg ('offset') AS INTEGER), 0);
|
||||
|
||||
-- name: ListHttpServicesEnabled :many
|
||||
SELECT
|
||||
@@ -48,49 +52,19 @@ FROM
|
||||
http_services
|
||||
WHERE
|
||||
profile_id = ?
|
||||
AND enabled = TRUE
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?;
|
||||
|
||||
-- name: ListHttpServicesByAgent :many
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
http_services
|
||||
WHERE
|
||||
agent_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?;
|
||||
AND enabled = TRUE;
|
||||
|
||||
-- name: CountHttpServices :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_services;
|
||||
|
||||
-- name: CountHttpServicesByProfile :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_services
|
||||
WHERE
|
||||
profile_id = ?;
|
||||
|
||||
-- name: CountHttpServicesByAgent :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_services
|
||||
WHERE
|
||||
agent_id = ?;
|
||||
profile_id = sqlc.arg ('profile_id')
|
||||
AND (
|
||||
CAST(sqlc.narg ('agent_id') AS TEXT) IS NULL
|
||||
OR agent_id = CAST(sqlc.narg ('agent_id') AS TEXT)
|
||||
);
|
||||
|
||||
-- name: UpdateHttpService :one
|
||||
UPDATE http_services
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
-- name: ListMiddlewaresByProfile :many
|
||||
SELECT
|
||||
*,
|
||||
'http' AS type
|
||||
FROM
|
||||
http_middlewares
|
||||
WHERE
|
||||
http_middlewares.profile_id = ?
|
||||
UNION ALL
|
||||
SELECT
|
||||
*,
|
||||
'tcp' AS type
|
||||
FROM
|
||||
tcp_middlewares
|
||||
WHERE
|
||||
tcp_middlewares.profile_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?;
|
||||
|
||||
-- name: ListMiddlewaresByAgent :many
|
||||
SELECT
|
||||
*,
|
||||
'http' AS type
|
||||
FROM
|
||||
http_middlewares
|
||||
WHERE
|
||||
http_middlewares.agent_id = ?
|
||||
UNION ALL
|
||||
SELECT
|
||||
*,
|
||||
'tcp' AS type
|
||||
FROM
|
||||
tcp_middlewares
|
||||
WHERE
|
||||
tcp_middlewares.agent_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?;
|
||||
|
||||
-- name: CountMiddlewaresByProfile :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_middlewares
|
||||
WHERE
|
||||
http_middlewares.profile_id = ?
|
||||
UNION ALL
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_middlewares
|
||||
WHERE
|
||||
tcp_middlewares.profile_id = ?;
|
||||
|
||||
-- name: CountMiddlewaresByAgent :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
http_middlewares
|
||||
WHERE
|
||||
http_middlewares.agent_id = ?
|
||||
UNION ALL
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_middlewares
|
||||
WHERE
|
||||
tcp_middlewares.agent_id = ?;
|
||||
@@ -26,11 +26,11 @@ SELECT
|
||||
FROM
|
||||
profiles
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(sqlc.narg ('limit') AS INTEGER), -1)
|
||||
OFFSET
|
||||
?;
|
||||
COALESCE(CAST(sqlc.narg ('offset') AS INTEGER), 0);
|
||||
|
||||
-- name: CountProfiles :one
|
||||
SELECT
|
||||
|
||||
@@ -41,27 +41,17 @@ SELECT
|
||||
FROM
|
||||
tcp_middlewares
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = sqlc.arg ('profile_id')
|
||||
AND (
|
||||
CAST(sqlc.narg ('agent_id') AS TEXT) IS NULL
|
||||
OR agent_id = CAST(sqlc.narg ('agent_id') AS TEXT)
|
||||
)
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(sqlc.narg ('limit') AS INTEGER), -1)
|
||||
OFFSET
|
||||
?;
|
||||
|
||||
-- name: ListTcpMiddlewaresByAgent :many
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
tcp_middlewares
|
||||
WHERE
|
||||
agent_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?;
|
||||
COALESCE(CAST(sqlc.narg ('offset') AS INTEGER), 0);
|
||||
|
||||
-- name: ListTcpMiddlewaresEnabled :many
|
||||
SELECT
|
||||
@@ -70,35 +60,19 @@ FROM
|
||||
tcp_middlewares
|
||||
WHERE
|
||||
profile_id = ?
|
||||
AND enabled = TRUE
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?;
|
||||
AND enabled = TRUE;
|
||||
|
||||
-- name: CountTcpMiddlewares :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_middlewares;
|
||||
|
||||
-- name: CountTcpMiddlewaresByProfile :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_middlewares
|
||||
WHERE
|
||||
profile_id = ?;
|
||||
|
||||
-- name: CountTcpMiddlewaresByAgent :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_middlewares
|
||||
WHERE
|
||||
agent_id = ?;
|
||||
profile_id = sqlc.arg ('profile_id')
|
||||
AND (
|
||||
CAST(sqlc.narg ('agent_id') AS TEXT) IS NULL
|
||||
OR agent_id = CAST(sqlc.narg ('agent_id') AS TEXT)
|
||||
);
|
||||
|
||||
-- name: UpdateTcpMiddleware :one
|
||||
UPDATE tcp_middlewares
|
||||
|
||||
@@ -67,27 +67,17 @@ SELECT
|
||||
FROM
|
||||
tcp_routers
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = sqlc.arg ('profile_id')
|
||||
AND (
|
||||
CAST(sqlc.narg ('agent_id') AS TEXT) IS NULL
|
||||
OR agent_id = CAST(sqlc.narg ('agent_id') AS TEXT)
|
||||
)
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(sqlc.narg ('limit') AS INTEGER), -1)
|
||||
OFFSET
|
||||
?;
|
||||
|
||||
-- name: ListTcpRoutersByAgent :many
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
tcp_routers
|
||||
WHERE
|
||||
agent_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?;
|
||||
COALESCE(CAST(sqlc.narg ('offset') AS INTEGER), 0);
|
||||
|
||||
-- name: ListTcpRoutersEnabled :many
|
||||
SELECT
|
||||
@@ -96,35 +86,19 @@ FROM
|
||||
tcp_routers
|
||||
WHERE
|
||||
profile_id = ?
|
||||
AND enabled = TRUE
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?;
|
||||
AND enabled = TRUE;
|
||||
|
||||
-- name: CountTcpRouters :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_routers;
|
||||
|
||||
-- name: CountTcpRoutersByProfile :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_routers
|
||||
WHERE
|
||||
profile_id = ?;
|
||||
|
||||
-- name: CountTcpRoutersByAgent :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_routers
|
||||
WHERE
|
||||
agent_id = ?;
|
||||
profile_id = sqlc.arg ('profile_id')
|
||||
AND (
|
||||
CAST(sqlc.narg ('agent_id') AS TEXT) IS NULL
|
||||
OR agent_id = CAST(sqlc.narg ('agent_id') AS TEXT)
|
||||
);
|
||||
|
||||
-- name: UpdateTcpRouter :one
|
||||
UPDATE tcp_routers
|
||||
|
||||
@@ -25,27 +25,17 @@ SELECT
|
||||
FROM
|
||||
tcp_servers_transports
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = sqlc.arg ('profile_id')
|
||||
AND (
|
||||
CAST(sqlc.narg ('agent_id') AS TEXT) IS NULL
|
||||
OR agent_id = CAST(sqlc.narg ('agent_id') AS TEXT)
|
||||
)
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(sqlc.narg ('limit') AS INTEGER), -1)
|
||||
OFFSET
|
||||
?;
|
||||
|
||||
-- name: ListTcpServersTransportsByAgent :many
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
tcp_servers_transports
|
||||
WHERE
|
||||
agent_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?;
|
||||
COALESCE(CAST(sqlc.narg ('offset') AS INTEGER), 0);
|
||||
|
||||
-- name: ListTcpServersTransportsEnabled :many
|
||||
SELECT
|
||||
@@ -54,35 +44,19 @@ FROM
|
||||
tcp_servers_transports
|
||||
WHERE
|
||||
profile_id = ?
|
||||
AND enabled = TRUE
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?;
|
||||
AND enabled = TRUE;
|
||||
|
||||
-- name: CountTcpServersTransports :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_servers_transports;
|
||||
|
||||
-- name: CountTcpServersTransportsByProfile :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_servers_transports
|
||||
WHERE
|
||||
profile_id = ?;
|
||||
|
||||
-- name: CountTcpServersTransportsByAgent :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_servers_transports
|
||||
WHERE
|
||||
agent_id = ?;
|
||||
profile_id = sqlc.arg ('profile_id')
|
||||
AND (
|
||||
CAST(sqlc.narg ('agent_id') AS TEXT) IS NULL
|
||||
OR agent_id = CAST(sqlc.narg ('agent_id') AS TEXT)
|
||||
);
|
||||
|
||||
-- name: UpdateTcpServersTransport :one
|
||||
UPDATE tcp_servers_transports
|
||||
|
||||
@@ -33,27 +33,17 @@ SELECT
|
||||
FROM
|
||||
tcp_services
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = sqlc.arg ('profile_id')
|
||||
AND (
|
||||
CAST(sqlc.narg ('agent_id') AS TEXT) IS NULL
|
||||
OR agent_id = CAST(sqlc.narg ('agent_id') AS TEXT)
|
||||
)
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(sqlc.narg ('limit') AS INTEGER), -1)
|
||||
OFFSET
|
||||
?;
|
||||
|
||||
-- name: ListTcpServicesByAgent :many
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
tcp_services
|
||||
WHERE
|
||||
agent_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?;
|
||||
COALESCE(CAST(sqlc.narg ('offset') AS INTEGER), 0);
|
||||
|
||||
-- name: ListTcpServicesEnabled :many
|
||||
SELECT
|
||||
@@ -62,35 +52,19 @@ FROM
|
||||
tcp_services
|
||||
WHERE
|
||||
profile_id = ?
|
||||
AND enabled = TRUE
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?;
|
||||
AND enabled = TRUE;
|
||||
|
||||
-- name: CountTcpServices :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_services;
|
||||
|
||||
-- name: CountTcpServicesByProfile :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_services
|
||||
WHERE
|
||||
profile_id = ?;
|
||||
|
||||
-- name: CountTcpServicesByAgent :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
tcp_services
|
||||
WHERE
|
||||
agent_id = ?;
|
||||
profile_id = sqlc.arg ('profile_id')
|
||||
AND (
|
||||
CAST(sqlc.narg ('agent_id') AS TEXT) IS NULL
|
||||
OR agent_id = CAST(sqlc.narg ('agent_id') AS TEXT)
|
||||
);
|
||||
|
||||
-- name: UpdateTcpService :one
|
||||
UPDATE tcp_services
|
||||
|
||||
@@ -46,27 +46,17 @@ SELECT
|
||||
FROM
|
||||
udp_routers
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = sqlc.arg ('profile_id')
|
||||
AND (
|
||||
CAST(sqlc.narg ('agent_id') AS TEXT) IS NULL
|
||||
OR agent_id = CAST(sqlc.narg ('agent_id') AS TEXT)
|
||||
)
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(sqlc.narg ('limit') AS INTEGER), -1)
|
||||
OFFSET
|
||||
?;
|
||||
|
||||
-- name: ListUdpRoutersByAgent :many
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
udp_routers
|
||||
WHERE
|
||||
agent_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?;
|
||||
COALESCE(CAST(sqlc.narg ('offset') AS INTEGER), 0);
|
||||
|
||||
-- name: ListUdpRoutersEnabled :many
|
||||
SELECT
|
||||
@@ -75,35 +65,19 @@ FROM
|
||||
udp_routers
|
||||
WHERE
|
||||
profile_id = ?
|
||||
AND enabled = TRUE
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?;
|
||||
AND enabled = TRUE;
|
||||
|
||||
-- name: CountUdpRouters :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
udp_routers;
|
||||
|
||||
-- name: CountUdpRoutersByProfile :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
udp_routers
|
||||
WHERE
|
||||
profile_id = ?;
|
||||
|
||||
-- name: CountUdpRoutersByAgent :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
udp_routers
|
||||
WHERE
|
||||
agent_id = ?;
|
||||
profile_id = sqlc.arg ('profile_id')
|
||||
AND (
|
||||
CAST(sqlc.narg ('agent_id') AS TEXT) IS NULL
|
||||
OR agent_id = CAST(sqlc.narg ('agent_id') AS TEXT)
|
||||
);
|
||||
|
||||
-- name: UpdateUdpRouter :one
|
||||
UPDATE udp_routers
|
||||
|
||||
@@ -33,27 +33,17 @@ SELECT
|
||||
FROM
|
||||
udp_services
|
||||
WHERE
|
||||
profile_id = ?
|
||||
profile_id = sqlc.arg ('profile_id')
|
||||
AND (
|
||||
CAST(sqlc.narg ('agent_id') AS TEXT) IS NULL
|
||||
OR agent_id = CAST(sqlc.narg ('agent_id') AS TEXT)
|
||||
)
|
||||
ORDER BY
|
||||
name
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(sqlc.narg ('limit') AS INTEGER), -1)
|
||||
OFFSET
|
||||
?;
|
||||
|
||||
-- name: ListUdpServicesByAgent :many
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
udp_services
|
||||
WHERE
|
||||
agent_id = ?
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?;
|
||||
COALESCE(CAST(sqlc.narg ('offset') AS INTEGER), 0);
|
||||
|
||||
-- name: ListUdpServicesEnabled :many
|
||||
SELECT
|
||||
@@ -62,35 +52,19 @@ FROM
|
||||
udp_services
|
||||
WHERE
|
||||
profile_id = ?
|
||||
AND enabled = TRUE
|
||||
ORDER BY
|
||||
name
|
||||
LIMIT
|
||||
?
|
||||
OFFSET
|
||||
?;
|
||||
AND enabled = TRUE;
|
||||
|
||||
-- name: CountUdpServices :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
udp_services;
|
||||
|
||||
-- name: CountUdpServicesByProfile :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
udp_services
|
||||
WHERE
|
||||
profile_id = ?;
|
||||
|
||||
-- name: CountUdpServicesByAgent :one
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
udp_services
|
||||
WHERE
|
||||
agent_id = ?;
|
||||
profile_id = sqlc.arg ('profile_id')
|
||||
AND (
|
||||
CAST(sqlc.narg ('agent_id') AS TEXT) IS NULL
|
||||
OR agent_id = CAST(sqlc.narg ('agent_id') AS TEXT)
|
||||
);
|
||||
|
||||
-- name: UpdateUdpService :one
|
||||
UPDATE udp_services
|
||||
|
||||
@@ -41,11 +41,11 @@ SELECT
|
||||
FROM
|
||||
users
|
||||
ORDER BY
|
||||
username
|
||||
created_at DESC
|
||||
LIMIT
|
||||
?
|
||||
COALESCE(CAST(sqlc.narg ('limit') AS INTEGER), -1)
|
||||
OFFSET
|
||||
?;
|
||||
COALESCE(CAST(sqlc.narg ('offset') AS INTEGER), 0);
|
||||
|
||||
-- name: CountUsers :one
|
||||
SELECT
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
//go:build dev
|
||||
// +build dev
|
||||
|
||||
package store
|
||||
|
||||
import (
|
||||
@@ -9,6 +9,7 @@ import (
|
||||
|
||||
"github.com/mizuchilabs/mantrae/internal/storage"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/db"
|
||||
"github.com/mizuchilabs/mantrae/internal/store/schema"
|
||||
"github.com/traefik/traefik/v3/pkg/config/dynamic"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
@@ -39,79 +40,49 @@ func BuildDynamicConfig(
|
||||
}
|
||||
|
||||
// Routers
|
||||
httpRouters, err := q.ListHttpRoutersEnabled(
|
||||
ctx,
|
||||
db.ListHttpRoutersEnabledParams{ProfileID: profile.ID, Limit: -1, Offset: 0},
|
||||
)
|
||||
httpRouters, err := q.ListHttpRoutersEnabled(ctx, profile.ID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
tcpRouters, err := q.ListTcpRoutersEnabled(
|
||||
ctx,
|
||||
db.ListTcpRoutersEnabledParams{ProfileID: profile.ID, Limit: -1, Offset: 0},
|
||||
)
|
||||
tcpRouters, err := q.ListTcpRoutersEnabled(ctx, profile.ID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
udpRouters, err := q.ListUdpRoutersEnabled(
|
||||
ctx,
|
||||
db.ListUdpRoutersEnabledParams{ProfileID: profile.ID, Limit: -1, Offset: 0},
|
||||
)
|
||||
udpRouters, err := q.ListUdpRoutersEnabled(ctx, profile.ID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Services
|
||||
httpServices, err := q.ListHttpServicesEnabled(
|
||||
ctx,
|
||||
db.ListHttpServicesEnabledParams{ProfileID: profile.ID, Limit: -1, Offset: 0},
|
||||
)
|
||||
httpServices, err := q.ListHttpServicesEnabled(ctx, profile.ID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
tcpServices, err := q.ListTcpServicesEnabled(
|
||||
ctx,
|
||||
db.ListTcpServicesEnabledParams{ProfileID: profile.ID, Limit: -1, Offset: 0},
|
||||
)
|
||||
tcpServices, err := q.ListTcpServicesEnabled(ctx, profile.ID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
udpServices, err := q.ListUdpServicesEnabled(
|
||||
ctx,
|
||||
db.ListUdpServicesEnabledParams{ProfileID: profile.ID, Limit: -1, Offset: 0},
|
||||
)
|
||||
udpServices, err := q.ListUdpServicesEnabled(ctx, profile.ID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Middlewares
|
||||
httpMiddlewares, err := q.ListHttpMiddlewaresEnabled(
|
||||
ctx,
|
||||
db.ListHttpMiddlewaresEnabledParams{ProfileID: profile.ID, Limit: -1, Offset: 0},
|
||||
)
|
||||
httpMiddlewares, err := q.ListHttpMiddlewaresEnabled(ctx, profile.ID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
tcpMiddlewares, err := q.ListTcpMiddlewaresEnabled(
|
||||
ctx,
|
||||
db.ListTcpMiddlewaresEnabledParams{ProfileID: profile.ID, Limit: -1, Offset: 0},
|
||||
)
|
||||
tcpMiddlewares, err := q.ListTcpMiddlewaresEnabled(ctx, profile.ID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Servers Transports
|
||||
httpServersTransports, err := q.ListHttpServersTransportsEnabled(
|
||||
ctx,
|
||||
db.ListHttpServersTransportsEnabledParams{ProfileID: profile.ID, Limit: -1, Offset: 0},
|
||||
)
|
||||
httpServersTransports, err := q.ListHttpServersTransportsEnabled(ctx, profile.ID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
tcpServersTransports, err := q.ListTcpServersTransportsEnabled(
|
||||
ctx,
|
||||
db.ListTcpServersTransportsEnabledParams{ProfileID: profile.ID, Limit: -1, Offset: 0},
|
||||
)
|
||||
tcpServersTransports, err := q.ListTcpServersTransportsEnabled(ctx, profile.ID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -167,7 +138,7 @@ func BuildDynamicConfig(
|
||||
}
|
||||
|
||||
func BackupDynamicConfigs(ctx context.Context, q *db.Queries, store storage.Backend) error {
|
||||
profiles, err := q.ListProfiles(ctx, db.ListProfilesParams{Limit: -1, Offset: 0})
|
||||
profiles, err := q.ListProfiles(ctx, db.ListProfilesParams{})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -211,3 +182,97 @@ func BackupDynamicConfigs(ctx context.Context, q *db.Queries, store storage.Back
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// DynamicToDB saves a Traefik dynamic configuration to the database
|
||||
func DynamicToDB(
|
||||
ctx context.Context,
|
||||
q db.Queries,
|
||||
profileID int64,
|
||||
dynamic *dynamic.Configuration,
|
||||
) error {
|
||||
for k, v := range dynamic.HTTP.Routers {
|
||||
if _, err := q.CreateHttpRouter(ctx, db.CreateHttpRouterParams{
|
||||
ProfileID: profileID,
|
||||
Name: k,
|
||||
Config: schema.WrapRouter(v),
|
||||
}); err != nil {
|
||||
slog.Error("failed to create http router", "err", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
for k, v := range dynamic.TCP.Routers {
|
||||
if _, err := q.CreateTcpRouter(ctx, db.CreateTcpRouterParams{
|
||||
ProfileID: profileID,
|
||||
Name: k,
|
||||
Config: schema.WrapTCPRouter(v),
|
||||
}); err != nil {
|
||||
slog.Error("failed to create tcp router", "err", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
for k, v := range dynamic.UDP.Routers {
|
||||
if _, err := q.CreateUdpRouter(ctx, db.CreateUdpRouterParams{
|
||||
ProfileID: profileID,
|
||||
Name: k,
|
||||
Config: schema.WrapUDPRouter(v),
|
||||
}); err != nil {
|
||||
slog.Error("failed to create udp router", "err", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
// Services
|
||||
for k, v := range dynamic.HTTP.Services {
|
||||
if _, err := q.CreateHttpService(ctx, db.CreateHttpServiceParams{
|
||||
ProfileID: profileID,
|
||||
Name: k,
|
||||
Config: schema.WrapService(v),
|
||||
}); err != nil {
|
||||
slog.Error("failed to create http service", "err", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
for k, v := range dynamic.TCP.Services {
|
||||
if _, err := q.CreateTcpService(ctx, db.CreateTcpServiceParams{
|
||||
ProfileID: profileID,
|
||||
Name: k,
|
||||
Config: schema.WrapTCPService(v),
|
||||
}); err != nil {
|
||||
slog.Error("failed to create tcp service", "err", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
for k, v := range dynamic.UDP.Services {
|
||||
if _, err := q.CreateUdpService(ctx, db.CreateUdpServiceParams{
|
||||
ProfileID: profileID,
|
||||
Name: k,
|
||||
Config: schema.WrapUDPService(v),
|
||||
}); err != nil {
|
||||
slog.Error("failed to create udp service", "err", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
// Middlewares
|
||||
for k, v := range dynamic.HTTP.Middlewares {
|
||||
if _, err := q.CreateHttpMiddleware(ctx, db.CreateHttpMiddlewareParams{
|
||||
ProfileID: profileID,
|
||||
Name: k,
|
||||
Config: schema.WrapMiddleware(v),
|
||||
}); err != nil {
|
||||
slog.Error("failed to create http middleware", "err", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
for k, v := range dynamic.TCP.Middlewares {
|
||||
if _, err := q.CreateTcpMiddleware(ctx, db.CreateTcpMiddlewareParams{
|
||||
ProfileID: profileID,
|
||||
Name: k,
|
||||
Config: schema.WrapTCPMiddleware(v),
|
||||
}); err != nil {
|
||||
slog.Error("failed to create tcp middleware", "err", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -36,6 +36,11 @@ func HashPassword(password string) (string, error) {
|
||||
return string(hash), nil
|
||||
}
|
||||
|
||||
func VerifyPassword(password, hash string) bool {
|
||||
err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
|
||||
return err == nil
|
||||
}
|
||||
|
||||
// IsHtpasswdFormat checks if a string is already in htpasswd format
|
||||
func IsHtpasswdFormat(s string) bool {
|
||||
// HTPasswd formats we support:
|
||||
|
||||
@@ -661,10 +661,9 @@ const file_mantrae_v1_entry_point_proto_rawDesc = "" +
|
||||
"is_default\x18\x04 \x01(\bR\tisDefault\"S\n" +
|
||||
"\x18UpdateEntryPointResponse\x127\n" +
|
||||
"\ventry_point\x18\x01 \x01(\v2\x16.mantrae.v1.EntryPointR\n" +
|
||||
"entryPoint\"5\n" +
|
||||
"\x17DeleteEntryPointRequest\x12\x1a\n" +
|
||||
"\x02id\x18\x01 \x01(\x03B\n" +
|
||||
"\xbaH\a\xc8\x01\x01\"\x02 \x00R\x02id\"\x1a\n" +
|
||||
"entryPoint\"2\n" +
|
||||
"\x17DeleteEntryPointRequest\x12\x17\n" +
|
||||
"\x02id\x18\x01 \x01(\x03B\a\xbaH\x04\"\x02 \x00R\x02id\"\x1a\n" +
|
||||
"\x18DeleteEntryPointResponse\"\xee\x01\n" +
|
||||
"\x16ListEntryPointsRequest\x12&\n" +
|
||||
"\n" +
|
||||
|
||||
@@ -1,787 +0,0 @@
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// versions:
|
||||
// protoc-gen-go v1.36.6
|
||||
// protoc (unknown)
|
||||
// source: mantrae/v1/event.proto
|
||||
|
||||
package mantraev1
|
||||
|
||||
import (
|
||||
_ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate"
|
||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
|
||||
reflect "reflect"
|
||||
sync "sync"
|
||||
unsafe "unsafe"
|
||||
)
|
||||
|
||||
const (
|
||||
// Verify that this generated code is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
||||
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
||||
)
|
||||
|
||||
type EventType int32
|
||||
|
||||
const (
|
||||
EventType_EVENT_TYPE_UNSPECIFIED EventType = 0
|
||||
EventType_EVENT_TYPE_CREATED EventType = 1
|
||||
EventType_EVENT_TYPE_UPDATED EventType = 2
|
||||
EventType_EVENT_TYPE_DELETED EventType = 3
|
||||
)
|
||||
|
||||
// Enum value maps for EventType.
|
||||
var (
|
||||
EventType_name = map[int32]string{
|
||||
0: "EVENT_TYPE_UNSPECIFIED",
|
||||
1: "EVENT_TYPE_CREATED",
|
||||
2: "EVENT_TYPE_UPDATED",
|
||||
3: "EVENT_TYPE_DELETED",
|
||||
}
|
||||
EventType_value = map[string]int32{
|
||||
"EVENT_TYPE_UNSPECIFIED": 0,
|
||||
"EVENT_TYPE_CREATED": 1,
|
||||
"EVENT_TYPE_UPDATED": 2,
|
||||
"EVENT_TYPE_DELETED": 3,
|
||||
}
|
||||
)
|
||||
|
||||
func (x EventType) Enum() *EventType {
|
||||
p := new(EventType)
|
||||
*p = x
|
||||
return p
|
||||
}
|
||||
|
||||
func (x EventType) String() string {
|
||||
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
|
||||
}
|
||||
|
||||
func (EventType) Descriptor() protoreflect.EnumDescriptor {
|
||||
return file_mantrae_v1_event_proto_enumTypes[0].Descriptor()
|
||||
}
|
||||
|
||||
func (EventType) Type() protoreflect.EnumType {
|
||||
return &file_mantrae_v1_event_proto_enumTypes[0]
|
||||
}
|
||||
|
||||
func (x EventType) Number() protoreflect.EnumNumber {
|
||||
return protoreflect.EnumNumber(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use EventType.Descriptor instead.
|
||||
func (EventType) EnumDescriptor() ([]byte, []int) {
|
||||
return file_mantrae_v1_event_proto_rawDescGZIP(), []int{0}
|
||||
}
|
||||
|
||||
type ResourceType int32
|
||||
|
||||
const (
|
||||
ResourceType_RESOURCE_TYPE_UNSPECIFIED ResourceType = 0
|
||||
ResourceType_RESOURCE_TYPE_ROUTER ResourceType = 1
|
||||
ResourceType_RESOURCE_TYPE_SERVICE ResourceType = 2
|
||||
ResourceType_RESOURCE_TYPE_MIDDLEWARE ResourceType = 3
|
||||
ResourceType_RESOURCE_TYPE_ENTRY_POINT ResourceType = 4
|
||||
ResourceType_RESOURCE_TYPE_AUDIT_LOG ResourceType = 5
|
||||
ResourceType_RESOURCE_TYPE_AGENT ResourceType = 6
|
||||
ResourceType_RESOURCE_TYPE_USER ResourceType = 7
|
||||
ResourceType_RESOURCE_TYPE_DNS_PROVIDER ResourceType = 8
|
||||
)
|
||||
|
||||
// Enum value maps for ResourceType.
|
||||
var (
|
||||
ResourceType_name = map[int32]string{
|
||||
0: "RESOURCE_TYPE_UNSPECIFIED",
|
||||
1: "RESOURCE_TYPE_ROUTER",
|
||||
2: "RESOURCE_TYPE_SERVICE",
|
||||
3: "RESOURCE_TYPE_MIDDLEWARE",
|
||||
4: "RESOURCE_TYPE_ENTRY_POINT",
|
||||
5: "RESOURCE_TYPE_AUDIT_LOG",
|
||||
6: "RESOURCE_TYPE_AGENT",
|
||||
7: "RESOURCE_TYPE_USER",
|
||||
8: "RESOURCE_TYPE_DNS_PROVIDER",
|
||||
}
|
||||
ResourceType_value = map[string]int32{
|
||||
"RESOURCE_TYPE_UNSPECIFIED": 0,
|
||||
"RESOURCE_TYPE_ROUTER": 1,
|
||||
"RESOURCE_TYPE_SERVICE": 2,
|
||||
"RESOURCE_TYPE_MIDDLEWARE": 3,
|
||||
"RESOURCE_TYPE_ENTRY_POINT": 4,
|
||||
"RESOURCE_TYPE_AUDIT_LOG": 5,
|
||||
"RESOURCE_TYPE_AGENT": 6,
|
||||
"RESOURCE_TYPE_USER": 7,
|
||||
"RESOURCE_TYPE_DNS_PROVIDER": 8,
|
||||
}
|
||||
)
|
||||
|
||||
func (x ResourceType) Enum() *ResourceType {
|
||||
p := new(ResourceType)
|
||||
*p = x
|
||||
return p
|
||||
}
|
||||
|
||||
func (x ResourceType) String() string {
|
||||
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
|
||||
}
|
||||
|
||||
func (ResourceType) Descriptor() protoreflect.EnumDescriptor {
|
||||
return file_mantrae_v1_event_proto_enumTypes[1].Descriptor()
|
||||
}
|
||||
|
||||
func (ResourceType) Type() protoreflect.EnumType {
|
||||
return &file_mantrae_v1_event_proto_enumTypes[1]
|
||||
}
|
||||
|
||||
func (x ResourceType) Number() protoreflect.EnumNumber {
|
||||
return protoreflect.EnumNumber(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use ResourceType.Descriptor instead.
|
||||
func (ResourceType) EnumDescriptor() ([]byte, []int) {
|
||||
return file_mantrae_v1_event_proto_rawDescGZIP(), []int{1}
|
||||
}
|
||||
|
||||
type ProfileEvent struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
EventType EventType `protobuf:"varint,1,opt,name=event_type,json=eventType,proto3,enum=mantrae.v1.EventType" json:"event_type,omitempty"`
|
||||
ResourceType ResourceType `protobuf:"varint,2,opt,name=resource_type,json=resourceType,proto3,enum=mantrae.v1.ResourceType" json:"resource_type,omitempty"`
|
||||
ProfileId int64 `protobuf:"varint,3,opt,name=profile_id,json=profileId,proto3" json:"profile_id,omitempty"`
|
||||
Timestamp *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
|
||||
// Types that are valid to be assigned to Resource:
|
||||
//
|
||||
// *ProfileEvent_Router
|
||||
// *ProfileEvent_Service
|
||||
// *ProfileEvent_Middleware
|
||||
// *ProfileEvent_EntryPoint
|
||||
// *ProfileEvent_Agent
|
||||
// *ProfileEvent_AuditLog
|
||||
Resource isProfileEvent_Resource `protobuf_oneof:"resource"`
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
}
|
||||
|
||||
func (x *ProfileEvent) Reset() {
|
||||
*x = ProfileEvent{}
|
||||
mi := &file_mantrae_v1_event_proto_msgTypes[0]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
|
||||
func (x *ProfileEvent) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*ProfileEvent) ProtoMessage() {}
|
||||
|
||||
func (x *ProfileEvent) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_mantrae_v1_event_proto_msgTypes[0]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use ProfileEvent.ProtoReflect.Descriptor instead.
|
||||
func (*ProfileEvent) Descriptor() ([]byte, []int) {
|
||||
return file_mantrae_v1_event_proto_rawDescGZIP(), []int{0}
|
||||
}
|
||||
|
||||
func (x *ProfileEvent) GetEventType() EventType {
|
||||
if x != nil {
|
||||
return x.EventType
|
||||
}
|
||||
return EventType_EVENT_TYPE_UNSPECIFIED
|
||||
}
|
||||
|
||||
func (x *ProfileEvent) GetResourceType() ResourceType {
|
||||
if x != nil {
|
||||
return x.ResourceType
|
||||
}
|
||||
return ResourceType_RESOURCE_TYPE_UNSPECIFIED
|
||||
}
|
||||
|
||||
func (x *ProfileEvent) GetProfileId() int64 {
|
||||
if x != nil {
|
||||
return x.ProfileId
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *ProfileEvent) GetTimestamp() *timestamppb.Timestamp {
|
||||
if x != nil {
|
||||
return x.Timestamp
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *ProfileEvent) GetResource() isProfileEvent_Resource {
|
||||
if x != nil {
|
||||
return x.Resource
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *ProfileEvent) GetRouter() *Router {
|
||||
if x != nil {
|
||||
if x, ok := x.Resource.(*ProfileEvent_Router); ok {
|
||||
return x.Router
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *ProfileEvent) GetService() *Service {
|
||||
if x != nil {
|
||||
if x, ok := x.Resource.(*ProfileEvent_Service); ok {
|
||||
return x.Service
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *ProfileEvent) GetMiddleware() *Middleware {
|
||||
if x != nil {
|
||||
if x, ok := x.Resource.(*ProfileEvent_Middleware); ok {
|
||||
return x.Middleware
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *ProfileEvent) GetEntryPoint() *EntryPoint {
|
||||
if x != nil {
|
||||
if x, ok := x.Resource.(*ProfileEvent_EntryPoint); ok {
|
||||
return x.EntryPoint
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *ProfileEvent) GetAgent() *Agent {
|
||||
if x != nil {
|
||||
if x, ok := x.Resource.(*ProfileEvent_Agent); ok {
|
||||
return x.Agent
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *ProfileEvent) GetAuditLog() *AuditLog {
|
||||
if x != nil {
|
||||
if x, ok := x.Resource.(*ProfileEvent_AuditLog); ok {
|
||||
return x.AuditLog
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type isProfileEvent_Resource interface {
|
||||
isProfileEvent_Resource()
|
||||
}
|
||||
|
||||
type ProfileEvent_Router struct {
|
||||
Router *Router `protobuf:"bytes,10,opt,name=router,proto3,oneof"`
|
||||
}
|
||||
|
||||
type ProfileEvent_Service struct {
|
||||
Service *Service `protobuf:"bytes,11,opt,name=service,proto3,oneof"`
|
||||
}
|
||||
|
||||
type ProfileEvent_Middleware struct {
|
||||
Middleware *Middleware `protobuf:"bytes,12,opt,name=middleware,proto3,oneof"`
|
||||
}
|
||||
|
||||
type ProfileEvent_EntryPoint struct {
|
||||
EntryPoint *EntryPoint `protobuf:"bytes,13,opt,name=entry_point,json=entryPoint,proto3,oneof"`
|
||||
}
|
||||
|
||||
type ProfileEvent_Agent struct {
|
||||
Agent *Agent `protobuf:"bytes,14,opt,name=agent,proto3,oneof"`
|
||||
}
|
||||
|
||||
type ProfileEvent_AuditLog struct {
|
||||
AuditLog *AuditLog `protobuf:"bytes,15,opt,name=audit_log,json=auditLog,proto3,oneof"`
|
||||
}
|
||||
|
||||
func (*ProfileEvent_Router) isProfileEvent_Resource() {}
|
||||
|
||||
func (*ProfileEvent_Service) isProfileEvent_Resource() {}
|
||||
|
||||
func (*ProfileEvent_Middleware) isProfileEvent_Resource() {}
|
||||
|
||||
func (*ProfileEvent_EntryPoint) isProfileEvent_Resource() {}
|
||||
|
||||
func (*ProfileEvent_Agent) isProfileEvent_Resource() {}
|
||||
|
||||
func (*ProfileEvent_AuditLog) isProfileEvent_Resource() {}
|
||||
|
||||
type GlobalEvent struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
EventType EventType `protobuf:"varint,1,opt,name=event_type,json=eventType,proto3,enum=mantrae.v1.EventType" json:"event_type,omitempty"`
|
||||
ResourceType ResourceType `protobuf:"varint,2,opt,name=resource_type,json=resourceType,proto3,enum=mantrae.v1.ResourceType" json:"resource_type,omitempty"`
|
||||
Timestamp *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
|
||||
// Types that are valid to be assigned to Resource:
|
||||
//
|
||||
// *GlobalEvent_User
|
||||
// *GlobalEvent_DnsProvider
|
||||
Resource isGlobalEvent_Resource `protobuf_oneof:"resource"`
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
}
|
||||
|
||||
func (x *GlobalEvent) Reset() {
|
||||
*x = GlobalEvent{}
|
||||
mi := &file_mantrae_v1_event_proto_msgTypes[1]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
|
||||
func (x *GlobalEvent) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*GlobalEvent) ProtoMessage() {}
|
||||
|
||||
func (x *GlobalEvent) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_mantrae_v1_event_proto_msgTypes[1]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use GlobalEvent.ProtoReflect.Descriptor instead.
|
||||
func (*GlobalEvent) Descriptor() ([]byte, []int) {
|
||||
return file_mantrae_v1_event_proto_rawDescGZIP(), []int{1}
|
||||
}
|
||||
|
||||
func (x *GlobalEvent) GetEventType() EventType {
|
||||
if x != nil {
|
||||
return x.EventType
|
||||
}
|
||||
return EventType_EVENT_TYPE_UNSPECIFIED
|
||||
}
|
||||
|
||||
func (x *GlobalEvent) GetResourceType() ResourceType {
|
||||
if x != nil {
|
||||
return x.ResourceType
|
||||
}
|
||||
return ResourceType_RESOURCE_TYPE_UNSPECIFIED
|
||||
}
|
||||
|
||||
func (x *GlobalEvent) GetTimestamp() *timestamppb.Timestamp {
|
||||
if x != nil {
|
||||
return x.Timestamp
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *GlobalEvent) GetResource() isGlobalEvent_Resource {
|
||||
if x != nil {
|
||||
return x.Resource
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *GlobalEvent) GetUser() *User {
|
||||
if x != nil {
|
||||
if x, ok := x.Resource.(*GlobalEvent_User); ok {
|
||||
return x.User
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *GlobalEvent) GetDnsProvider() *DnsProvider {
|
||||
if x != nil {
|
||||
if x, ok := x.Resource.(*GlobalEvent_DnsProvider); ok {
|
||||
return x.DnsProvider
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type isGlobalEvent_Resource interface {
|
||||
isGlobalEvent_Resource()
|
||||
}
|
||||
|
||||
type GlobalEvent_User struct {
|
||||
User *User `protobuf:"bytes,10,opt,name=user,proto3,oneof"`
|
||||
}
|
||||
|
||||
type GlobalEvent_DnsProvider struct {
|
||||
DnsProvider *DnsProvider `protobuf:"bytes,11,opt,name=dns_provider,json=dnsProvider,proto3,oneof"`
|
||||
}
|
||||
|
||||
func (*GlobalEvent_User) isGlobalEvent_Resource() {}
|
||||
|
||||
func (*GlobalEvent_DnsProvider) isGlobalEvent_Resource() {}
|
||||
|
||||
type ProfileEventsRequest struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
ProfileId int64 `protobuf:"varint,1,opt,name=profile_id,json=profileId,proto3" json:"profile_id,omitempty"`
|
||||
ResourceTypes []ResourceType `protobuf:"varint,2,rep,packed,name=resource_types,json=resourceTypes,proto3,enum=mantrae.v1.ResourceType" json:"resource_types,omitempty"` // Filter by specific resource types
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
}
|
||||
|
||||
func (x *ProfileEventsRequest) Reset() {
|
||||
*x = ProfileEventsRequest{}
|
||||
mi := &file_mantrae_v1_event_proto_msgTypes[2]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
|
||||
func (x *ProfileEventsRequest) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*ProfileEventsRequest) ProtoMessage() {}
|
||||
|
||||
func (x *ProfileEventsRequest) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_mantrae_v1_event_proto_msgTypes[2]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use ProfileEventsRequest.ProtoReflect.Descriptor instead.
|
||||
func (*ProfileEventsRequest) Descriptor() ([]byte, []int) {
|
||||
return file_mantrae_v1_event_proto_rawDescGZIP(), []int{2}
|
||||
}
|
||||
|
||||
func (x *ProfileEventsRequest) GetProfileId() int64 {
|
||||
if x != nil {
|
||||
return x.ProfileId
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *ProfileEventsRequest) GetResourceTypes() []ResourceType {
|
||||
if x != nil {
|
||||
return x.ResourceTypes
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type ProfileEventsResponse struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
Event *ProfileEvent `protobuf:"bytes,1,opt,name=event,proto3" json:"event,omitempty"`
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
}
|
||||
|
||||
func (x *ProfileEventsResponse) Reset() {
|
||||
*x = ProfileEventsResponse{}
|
||||
mi := &file_mantrae_v1_event_proto_msgTypes[3]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
|
||||
func (x *ProfileEventsResponse) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*ProfileEventsResponse) ProtoMessage() {}
|
||||
|
||||
func (x *ProfileEventsResponse) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_mantrae_v1_event_proto_msgTypes[3]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use ProfileEventsResponse.ProtoReflect.Descriptor instead.
|
||||
func (*ProfileEventsResponse) Descriptor() ([]byte, []int) {
|
||||
return file_mantrae_v1_event_proto_rawDescGZIP(), []int{3}
|
||||
}
|
||||
|
||||
func (x *ProfileEventsResponse) GetEvent() *ProfileEvent {
|
||||
if x != nil {
|
||||
return x.Event
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type GlobalEventsRequest struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
ResourceTypes []ResourceType `protobuf:"varint,1,rep,packed,name=resource_types,json=resourceTypes,proto3,enum=mantrae.v1.ResourceType" json:"resource_types,omitempty"` // Filter by specific resource types
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
}
|
||||
|
||||
func (x *GlobalEventsRequest) Reset() {
|
||||
*x = GlobalEventsRequest{}
|
||||
mi := &file_mantrae_v1_event_proto_msgTypes[4]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
|
||||
func (x *GlobalEventsRequest) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*GlobalEventsRequest) ProtoMessage() {}
|
||||
|
||||
func (x *GlobalEventsRequest) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_mantrae_v1_event_proto_msgTypes[4]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use GlobalEventsRequest.ProtoReflect.Descriptor instead.
|
||||
func (*GlobalEventsRequest) Descriptor() ([]byte, []int) {
|
||||
return file_mantrae_v1_event_proto_rawDescGZIP(), []int{4}
|
||||
}
|
||||
|
||||
func (x *GlobalEventsRequest) GetResourceTypes() []ResourceType {
|
||||
if x != nil {
|
||||
return x.ResourceTypes
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type GlobalEventsResponse struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
Event *GlobalEvent `protobuf:"bytes,1,opt,name=event,proto3" json:"event,omitempty"`
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
}
|
||||
|
||||
func (x *GlobalEventsResponse) Reset() {
|
||||
*x = GlobalEventsResponse{}
|
||||
mi := &file_mantrae_v1_event_proto_msgTypes[5]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
|
||||
func (x *GlobalEventsResponse) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*GlobalEventsResponse) ProtoMessage() {}
|
||||
|
||||
func (x *GlobalEventsResponse) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_mantrae_v1_event_proto_msgTypes[5]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use GlobalEventsResponse.ProtoReflect.Descriptor instead.
|
||||
func (*GlobalEventsResponse) Descriptor() ([]byte, []int) {
|
||||
return file_mantrae_v1_event_proto_rawDescGZIP(), []int{5}
|
||||
}
|
||||
|
||||
func (x *GlobalEventsResponse) GetEvent() *GlobalEvent {
|
||||
if x != nil {
|
||||
return x.Event
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
var File_mantrae_v1_event_proto protoreflect.FileDescriptor
|
||||
|
||||
const file_mantrae_v1_event_proto_rawDesc = "" +
|
||||
"\n" +
|
||||
"\x16mantrae/v1/event.proto\x12\n" +
|
||||
"mantrae.v1\x1a\x1bbuf/validate/validate.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x16mantrae/v1/agent.proto\x1a\x19mantrae/v1/auditlog.proto\x1a\x1dmantrae/v1/dns_provider.proto\x1a\x1cmantrae/v1/entry_point.proto\x1a\x1bmantrae/v1/middleware.proto\x1a\x17mantrae/v1/router.proto\x1a\x18mantrae/v1/service.proto\x1a\x15mantrae/v1/user.proto\"\x9c\x04\n" +
|
||||
"\fProfileEvent\x124\n" +
|
||||
"\n" +
|
||||
"event_type\x18\x01 \x01(\x0e2\x15.mantrae.v1.EventTypeR\teventType\x12=\n" +
|
||||
"\rresource_type\x18\x02 \x01(\x0e2\x18.mantrae.v1.ResourceTypeR\fresourceType\x12\x1d\n" +
|
||||
"\n" +
|
||||
"profile_id\x18\x03 \x01(\x03R\tprofileId\x128\n" +
|
||||
"\ttimestamp\x18\x04 \x01(\v2\x1a.google.protobuf.TimestampR\ttimestamp\x12,\n" +
|
||||
"\x06router\x18\n" +
|
||||
" \x01(\v2\x12.mantrae.v1.RouterH\x00R\x06router\x12/\n" +
|
||||
"\aservice\x18\v \x01(\v2\x13.mantrae.v1.ServiceH\x00R\aservice\x128\n" +
|
||||
"\n" +
|
||||
"middleware\x18\f \x01(\v2\x16.mantrae.v1.MiddlewareH\x00R\n" +
|
||||
"middleware\x129\n" +
|
||||
"\ventry_point\x18\r \x01(\v2\x16.mantrae.v1.EntryPointH\x00R\n" +
|
||||
"entryPoint\x12)\n" +
|
||||
"\x05agent\x18\x0e \x01(\v2\x11.mantrae.v1.AgentH\x00R\x05agent\x123\n" +
|
||||
"\taudit_log\x18\x0f \x01(\v2\x14.mantrae.v1.AuditLogH\x00R\bauditLogB\n" +
|
||||
"\n" +
|
||||
"\bresource\"\xae\x02\n" +
|
||||
"\vGlobalEvent\x124\n" +
|
||||
"\n" +
|
||||
"event_type\x18\x01 \x01(\x0e2\x15.mantrae.v1.EventTypeR\teventType\x12=\n" +
|
||||
"\rresource_type\x18\x02 \x01(\x0e2\x18.mantrae.v1.ResourceTypeR\fresourceType\x128\n" +
|
||||
"\ttimestamp\x18\x03 \x01(\v2\x1a.google.protobuf.TimestampR\ttimestamp\x12&\n" +
|
||||
"\x04user\x18\n" +
|
||||
" \x01(\v2\x10.mantrae.v1.UserH\x00R\x04user\x12<\n" +
|
||||
"\fdns_provider\x18\v \x01(\v2\x17.mantrae.v1.DnsProviderH\x00R\vdnsProviderB\n" +
|
||||
"\n" +
|
||||
"\bresource\"\x7f\n" +
|
||||
"\x14ProfileEventsRequest\x12&\n" +
|
||||
"\n" +
|
||||
"profile_id\x18\x01 \x01(\x03B\a\xbaH\x04\"\x02 \x00R\tprofileId\x12?\n" +
|
||||
"\x0eresource_types\x18\x02 \x03(\x0e2\x18.mantrae.v1.ResourceTypeR\rresourceTypes\"G\n" +
|
||||
"\x15ProfileEventsResponse\x12.\n" +
|
||||
"\x05event\x18\x01 \x01(\v2\x18.mantrae.v1.ProfileEventR\x05event\"V\n" +
|
||||
"\x13GlobalEventsRequest\x12?\n" +
|
||||
"\x0eresource_types\x18\x01 \x03(\x0e2\x18.mantrae.v1.ResourceTypeR\rresourceTypes\"E\n" +
|
||||
"\x14GlobalEventsResponse\x12-\n" +
|
||||
"\x05event\x18\x01 \x01(\v2\x17.mantrae.v1.GlobalEventR\x05event*o\n" +
|
||||
"\tEventType\x12\x1a\n" +
|
||||
"\x16EVENT_TYPE_UNSPECIFIED\x10\x00\x12\x16\n" +
|
||||
"\x12EVENT_TYPE_CREATED\x10\x01\x12\x16\n" +
|
||||
"\x12EVENT_TYPE_UPDATED\x10\x02\x12\x16\n" +
|
||||
"\x12EVENT_TYPE_DELETED\x10\x03*\x8d\x02\n" +
|
||||
"\fResourceType\x12\x1d\n" +
|
||||
"\x19RESOURCE_TYPE_UNSPECIFIED\x10\x00\x12\x18\n" +
|
||||
"\x14RESOURCE_TYPE_ROUTER\x10\x01\x12\x19\n" +
|
||||
"\x15RESOURCE_TYPE_SERVICE\x10\x02\x12\x1c\n" +
|
||||
"\x18RESOURCE_TYPE_MIDDLEWARE\x10\x03\x12\x1d\n" +
|
||||
"\x19RESOURCE_TYPE_ENTRY_POINT\x10\x04\x12\x1b\n" +
|
||||
"\x17RESOURCE_TYPE_AUDIT_LOG\x10\x05\x12\x17\n" +
|
||||
"\x13RESOURCE_TYPE_AGENT\x10\x06\x12\x16\n" +
|
||||
"\x12RESOURCE_TYPE_USER\x10\a\x12\x1e\n" +
|
||||
"\x1aRESOURCE_TYPE_DNS_PROVIDER\x10\b2\xbb\x01\n" +
|
||||
"\fEventService\x12V\n" +
|
||||
"\rProfileEvents\x12 .mantrae.v1.ProfileEventsRequest\x1a!.mantrae.v1.ProfileEventsResponse0\x01\x12S\n" +
|
||||
"\fGlobalEvents\x12\x1f.mantrae.v1.GlobalEventsRequest\x1a .mantrae.v1.GlobalEventsResponse0\x01B\xa4\x01\n" +
|
||||
"\x0ecom.mantrae.v1B\n" +
|
||||
"EventProtoP\x01Z=github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1;mantraev1\xa2\x02\x03MXX\xaa\x02\n" +
|
||||
"Mantrae.V1\xca\x02\n" +
|
||||
"Mantrae\\V1\xe2\x02\x16Mantrae\\V1\\GPBMetadata\xea\x02\vMantrae::V1b\x06proto3"
|
||||
|
||||
var (
|
||||
file_mantrae_v1_event_proto_rawDescOnce sync.Once
|
||||
file_mantrae_v1_event_proto_rawDescData []byte
|
||||
)
|
||||
|
||||
func file_mantrae_v1_event_proto_rawDescGZIP() []byte {
|
||||
file_mantrae_v1_event_proto_rawDescOnce.Do(func() {
|
||||
file_mantrae_v1_event_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_mantrae_v1_event_proto_rawDesc), len(file_mantrae_v1_event_proto_rawDesc)))
|
||||
})
|
||||
return file_mantrae_v1_event_proto_rawDescData
|
||||
}
|
||||
|
||||
var file_mantrae_v1_event_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
|
||||
var file_mantrae_v1_event_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
|
||||
var file_mantrae_v1_event_proto_goTypes = []any{
|
||||
(EventType)(0), // 0: mantrae.v1.EventType
|
||||
(ResourceType)(0), // 1: mantrae.v1.ResourceType
|
||||
(*ProfileEvent)(nil), // 2: mantrae.v1.ProfileEvent
|
||||
(*GlobalEvent)(nil), // 3: mantrae.v1.GlobalEvent
|
||||
(*ProfileEventsRequest)(nil), // 4: mantrae.v1.ProfileEventsRequest
|
||||
(*ProfileEventsResponse)(nil), // 5: mantrae.v1.ProfileEventsResponse
|
||||
(*GlobalEventsRequest)(nil), // 6: mantrae.v1.GlobalEventsRequest
|
||||
(*GlobalEventsResponse)(nil), // 7: mantrae.v1.GlobalEventsResponse
|
||||
(*timestamppb.Timestamp)(nil), // 8: google.protobuf.Timestamp
|
||||
(*Router)(nil), // 9: mantrae.v1.Router
|
||||
(*Service)(nil), // 10: mantrae.v1.Service
|
||||
(*Middleware)(nil), // 11: mantrae.v1.Middleware
|
||||
(*EntryPoint)(nil), // 12: mantrae.v1.EntryPoint
|
||||
(*Agent)(nil), // 13: mantrae.v1.Agent
|
||||
(*AuditLog)(nil), // 14: mantrae.v1.AuditLog
|
||||
(*User)(nil), // 15: mantrae.v1.User
|
||||
(*DnsProvider)(nil), // 16: mantrae.v1.DnsProvider
|
||||
}
|
||||
var file_mantrae_v1_event_proto_depIdxs = []int32{
|
||||
0, // 0: mantrae.v1.ProfileEvent.event_type:type_name -> mantrae.v1.EventType
|
||||
1, // 1: mantrae.v1.ProfileEvent.resource_type:type_name -> mantrae.v1.ResourceType
|
||||
8, // 2: mantrae.v1.ProfileEvent.timestamp:type_name -> google.protobuf.Timestamp
|
||||
9, // 3: mantrae.v1.ProfileEvent.router:type_name -> mantrae.v1.Router
|
||||
10, // 4: mantrae.v1.ProfileEvent.service:type_name -> mantrae.v1.Service
|
||||
11, // 5: mantrae.v1.ProfileEvent.middleware:type_name -> mantrae.v1.Middleware
|
||||
12, // 6: mantrae.v1.ProfileEvent.entry_point:type_name -> mantrae.v1.EntryPoint
|
||||
13, // 7: mantrae.v1.ProfileEvent.agent:type_name -> mantrae.v1.Agent
|
||||
14, // 8: mantrae.v1.ProfileEvent.audit_log:type_name -> mantrae.v1.AuditLog
|
||||
0, // 9: mantrae.v1.GlobalEvent.event_type:type_name -> mantrae.v1.EventType
|
||||
1, // 10: mantrae.v1.GlobalEvent.resource_type:type_name -> mantrae.v1.ResourceType
|
||||
8, // 11: mantrae.v1.GlobalEvent.timestamp:type_name -> google.protobuf.Timestamp
|
||||
15, // 12: mantrae.v1.GlobalEvent.user:type_name -> mantrae.v1.User
|
||||
16, // 13: mantrae.v1.GlobalEvent.dns_provider:type_name -> mantrae.v1.DnsProvider
|
||||
1, // 14: mantrae.v1.ProfileEventsRequest.resource_types:type_name -> mantrae.v1.ResourceType
|
||||
2, // 15: mantrae.v1.ProfileEventsResponse.event:type_name -> mantrae.v1.ProfileEvent
|
||||
1, // 16: mantrae.v1.GlobalEventsRequest.resource_types:type_name -> mantrae.v1.ResourceType
|
||||
3, // 17: mantrae.v1.GlobalEventsResponse.event:type_name -> mantrae.v1.GlobalEvent
|
||||
4, // 18: mantrae.v1.EventService.ProfileEvents:input_type -> mantrae.v1.ProfileEventsRequest
|
||||
6, // 19: mantrae.v1.EventService.GlobalEvents:input_type -> mantrae.v1.GlobalEventsRequest
|
||||
5, // 20: mantrae.v1.EventService.ProfileEvents:output_type -> mantrae.v1.ProfileEventsResponse
|
||||
7, // 21: mantrae.v1.EventService.GlobalEvents:output_type -> mantrae.v1.GlobalEventsResponse
|
||||
20, // [20:22] is the sub-list for method output_type
|
||||
18, // [18:20] is the sub-list for method input_type
|
||||
18, // [18:18] is the sub-list for extension type_name
|
||||
18, // [18:18] is the sub-list for extension extendee
|
||||
0, // [0:18] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_mantrae_v1_event_proto_init() }
|
||||
func file_mantrae_v1_event_proto_init() {
|
||||
if File_mantrae_v1_event_proto != nil {
|
||||
return
|
||||
}
|
||||
file_mantrae_v1_agent_proto_init()
|
||||
file_mantrae_v1_auditlog_proto_init()
|
||||
file_mantrae_v1_dns_provider_proto_init()
|
||||
file_mantrae_v1_entry_point_proto_init()
|
||||
file_mantrae_v1_middleware_proto_init()
|
||||
file_mantrae_v1_router_proto_init()
|
||||
file_mantrae_v1_service_proto_init()
|
||||
file_mantrae_v1_user_proto_init()
|
||||
file_mantrae_v1_event_proto_msgTypes[0].OneofWrappers = []any{
|
||||
(*ProfileEvent_Router)(nil),
|
||||
(*ProfileEvent_Service)(nil),
|
||||
(*ProfileEvent_Middleware)(nil),
|
||||
(*ProfileEvent_EntryPoint)(nil),
|
||||
(*ProfileEvent_Agent)(nil),
|
||||
(*ProfileEvent_AuditLog)(nil),
|
||||
}
|
||||
file_mantrae_v1_event_proto_msgTypes[1].OneofWrappers = []any{
|
||||
(*GlobalEvent_User)(nil),
|
||||
(*GlobalEvent_DnsProvider)(nil),
|
||||
}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
File: protoimpl.DescBuilder{
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: unsafe.Slice(unsafe.StringData(file_mantrae_v1_event_proto_rawDesc), len(file_mantrae_v1_event_proto_rawDesc)),
|
||||
NumEnums: 2,
|
||||
NumMessages: 6,
|
||||
NumExtensions: 0,
|
||||
NumServices: 1,
|
||||
},
|
||||
GoTypes: file_mantrae_v1_event_proto_goTypes,
|
||||
DependencyIndexes: file_mantrae_v1_event_proto_depIdxs,
|
||||
EnumInfos: file_mantrae_v1_event_proto_enumTypes,
|
||||
MessageInfos: file_mantrae_v1_event_proto_msgTypes,
|
||||
}.Build()
|
||||
File_mantrae_v1_event_proto = out.File
|
||||
file_mantrae_v1_event_proto_goTypes = nil
|
||||
file_mantrae_v1_event_proto_depIdxs = nil
|
||||
}
|
||||
@@ -1,142 +0,0 @@
|
||||
// Code generated by protoc-gen-connect-go. DO NOT EDIT.
|
||||
//
|
||||
// Source: mantrae/v1/event.proto
|
||||
|
||||
package mantraev1connect
|
||||
|
||||
import (
|
||||
connect "connectrpc.com/connect"
|
||||
context "context"
|
||||
errors "errors"
|
||||
v1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
|
||||
http "net/http"
|
||||
strings "strings"
|
||||
)
|
||||
|
||||
// This is a compile-time assertion to ensure that this generated file and the connect package are
|
||||
// compatible. If you get a compiler error that this constant is not defined, this code was
|
||||
// generated with a version of connect newer than the one compiled into your binary. You can fix the
|
||||
// problem by either regenerating this code with an older version of connect or updating the connect
|
||||
// version compiled into your binary.
|
||||
const _ = connect.IsAtLeastVersion1_13_0
|
||||
|
||||
const (
|
||||
// EventServiceName is the fully-qualified name of the EventService service.
|
||||
EventServiceName = "mantrae.v1.EventService"
|
||||
)
|
||||
|
||||
// These constants are the fully-qualified names of the RPCs defined in this package. They're
|
||||
// exposed at runtime as Spec.Procedure and as the final two segments of the HTTP route.
|
||||
//
|
||||
// Note that these are different from the fully-qualified method names used by
|
||||
// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to
|
||||
// reflection-formatted method names, remove the leading slash and convert the remaining slash to a
|
||||
// period.
|
||||
const (
|
||||
// EventServiceProfileEventsProcedure is the fully-qualified name of the EventService's
|
||||
// ProfileEvents RPC.
|
||||
EventServiceProfileEventsProcedure = "/mantrae.v1.EventService/ProfileEvents"
|
||||
// EventServiceGlobalEventsProcedure is the fully-qualified name of the EventService's GlobalEvents
|
||||
// RPC.
|
||||
EventServiceGlobalEventsProcedure = "/mantrae.v1.EventService/GlobalEvents"
|
||||
)
|
||||
|
||||
// EventServiceClient is a client for the mantrae.v1.EventService service.
|
||||
type EventServiceClient interface {
|
||||
// Profile-scoped events (routers, services, middlewares, entrypoints)
|
||||
ProfileEvents(context.Context, *connect.Request[v1.ProfileEventsRequest]) (*connect.ServerStreamForClient[v1.ProfileEventsResponse], error)
|
||||
// Global events (users, dns)
|
||||
GlobalEvents(context.Context, *connect.Request[v1.GlobalEventsRequest]) (*connect.ServerStreamForClient[v1.GlobalEventsResponse], error)
|
||||
}
|
||||
|
||||
// NewEventServiceClient constructs a client for the mantrae.v1.EventService service. By default, it
|
||||
// uses the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, and sends
|
||||
// uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() or
|
||||
// connect.WithGRPCWeb() options.
|
||||
//
|
||||
// The URL supplied here should be the base URL for the Connect or gRPC server (for example,
|
||||
// http://api.acme.com or https://acme.com/grpc).
|
||||
func NewEventServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) EventServiceClient {
|
||||
baseURL = strings.TrimRight(baseURL, "/")
|
||||
eventServiceMethods := v1.File_mantrae_v1_event_proto.Services().ByName("EventService").Methods()
|
||||
return &eventServiceClient{
|
||||
profileEvents: connect.NewClient[v1.ProfileEventsRequest, v1.ProfileEventsResponse](
|
||||
httpClient,
|
||||
baseURL+EventServiceProfileEventsProcedure,
|
||||
connect.WithSchema(eventServiceMethods.ByName("ProfileEvents")),
|
||||
connect.WithClientOptions(opts...),
|
||||
),
|
||||
globalEvents: connect.NewClient[v1.GlobalEventsRequest, v1.GlobalEventsResponse](
|
||||
httpClient,
|
||||
baseURL+EventServiceGlobalEventsProcedure,
|
||||
connect.WithSchema(eventServiceMethods.ByName("GlobalEvents")),
|
||||
connect.WithClientOptions(opts...),
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
// eventServiceClient implements EventServiceClient.
|
||||
type eventServiceClient struct {
|
||||
profileEvents *connect.Client[v1.ProfileEventsRequest, v1.ProfileEventsResponse]
|
||||
globalEvents *connect.Client[v1.GlobalEventsRequest, v1.GlobalEventsResponse]
|
||||
}
|
||||
|
||||
// ProfileEvents calls mantrae.v1.EventService.ProfileEvents.
|
||||
func (c *eventServiceClient) ProfileEvents(ctx context.Context, req *connect.Request[v1.ProfileEventsRequest]) (*connect.ServerStreamForClient[v1.ProfileEventsResponse], error) {
|
||||
return c.profileEvents.CallServerStream(ctx, req)
|
||||
}
|
||||
|
||||
// GlobalEvents calls mantrae.v1.EventService.GlobalEvents.
|
||||
func (c *eventServiceClient) GlobalEvents(ctx context.Context, req *connect.Request[v1.GlobalEventsRequest]) (*connect.ServerStreamForClient[v1.GlobalEventsResponse], error) {
|
||||
return c.globalEvents.CallServerStream(ctx, req)
|
||||
}
|
||||
|
||||
// EventServiceHandler is an implementation of the mantrae.v1.EventService service.
|
||||
type EventServiceHandler interface {
|
||||
// Profile-scoped events (routers, services, middlewares, entrypoints)
|
||||
ProfileEvents(context.Context, *connect.Request[v1.ProfileEventsRequest], *connect.ServerStream[v1.ProfileEventsResponse]) error
|
||||
// Global events (users, dns)
|
||||
GlobalEvents(context.Context, *connect.Request[v1.GlobalEventsRequest], *connect.ServerStream[v1.GlobalEventsResponse]) error
|
||||
}
|
||||
|
||||
// NewEventServiceHandler builds an HTTP handler from the service implementation. It returns the
|
||||
// path on which to mount the handler and the handler itself.
|
||||
//
|
||||
// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf
|
||||
// and JSON codecs. They also support gzip compression.
|
||||
func NewEventServiceHandler(svc EventServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) {
|
||||
eventServiceMethods := v1.File_mantrae_v1_event_proto.Services().ByName("EventService").Methods()
|
||||
eventServiceProfileEventsHandler := connect.NewServerStreamHandler(
|
||||
EventServiceProfileEventsProcedure,
|
||||
svc.ProfileEvents,
|
||||
connect.WithSchema(eventServiceMethods.ByName("ProfileEvents")),
|
||||
connect.WithHandlerOptions(opts...),
|
||||
)
|
||||
eventServiceGlobalEventsHandler := connect.NewServerStreamHandler(
|
||||
EventServiceGlobalEventsProcedure,
|
||||
svc.GlobalEvents,
|
||||
connect.WithSchema(eventServiceMethods.ByName("GlobalEvents")),
|
||||
connect.WithHandlerOptions(opts...),
|
||||
)
|
||||
return "/mantrae.v1.EventService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
switch r.URL.Path {
|
||||
case EventServiceProfileEventsProcedure:
|
||||
eventServiceProfileEventsHandler.ServeHTTP(w, r)
|
||||
case EventServiceGlobalEventsProcedure:
|
||||
eventServiceGlobalEventsHandler.ServeHTTP(w, r)
|
||||
default:
|
||||
http.NotFound(w, r)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// UnimplementedEventServiceHandler returns CodeUnimplemented from all methods.
|
||||
type UnimplementedEventServiceHandler struct{}
|
||||
|
||||
func (UnimplementedEventServiceHandler) ProfileEvents(context.Context, *connect.Request[v1.ProfileEventsRequest], *connect.ServerStream[v1.ProfileEventsResponse]) error {
|
||||
return connect.NewError(connect.CodeUnimplemented, errors.New("mantrae.v1.EventService.ProfileEvents is not implemented"))
|
||||
}
|
||||
|
||||
func (UnimplementedEventServiceHandler) GlobalEvents(context.Context, *connect.Request[v1.GlobalEventsRequest], *connect.ServerStream[v1.GlobalEventsResponse]) error {
|
||||
return connect.NewError(connect.CodeUnimplemented, errors.New("mantrae.v1.EventService.GlobalEvents is not implemented"))
|
||||
}
|
||||
@@ -504,7 +504,7 @@ func (x *GetMiddlewareResponse) GetMiddleware() *Middleware {
|
||||
type CreateMiddlewareRequest struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
ProfileId int64 `protobuf:"varint,1,opt,name=profile_id,json=profileId,proto3" json:"profile_id,omitempty"`
|
||||
AgentId string `protobuf:"bytes,2,opt,name=agent_id,json=agentId,proto3" json:"agent_id,omitempty"`
|
||||
AgentId *string `protobuf:"bytes,2,opt,name=agent_id,json=agentId,proto3,oneof" json:"agent_id,omitempty"`
|
||||
Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
|
||||
Type MiddlewareType `protobuf:"varint,4,opt,name=type,proto3,enum=mantrae.v1.MiddlewareType" json:"type,omitempty"`
|
||||
IsDefault bool `protobuf:"varint,5,opt,name=is_default,json=isDefault,proto3" json:"is_default,omitempty"`
|
||||
@@ -551,8 +551,8 @@ func (x *CreateMiddlewareRequest) GetProfileId() int64 {
|
||||
}
|
||||
|
||||
func (x *CreateMiddlewareRequest) GetAgentId() string {
|
||||
if x != nil {
|
||||
return x.AgentId
|
||||
if x != nil && x.AgentId != nil {
|
||||
return *x.AgentId
|
||||
}
|
||||
return ""
|
||||
}
|
||||
@@ -1105,16 +1105,17 @@ const file_mantrae_v1_middleware_proto_rawDesc = "" +
|
||||
"\x15GetMiddlewareResponse\x126\n" +
|
||||
"\n" +
|
||||
"middleware\x18\x01 \x01(\v2\x16.mantrae.v1.MiddlewareR\n" +
|
||||
"middleware\"\x83\x02\n" +
|
||||
"middleware\"\x95\x02\n" +
|
||||
"\x17CreateMiddlewareRequest\x12&\n" +
|
||||
"\n" +
|
||||
"profile_id\x18\x01 \x01(\x03B\a\xbaH\x04\"\x02 \x00R\tprofileId\x12\x19\n" +
|
||||
"\bagent_id\x18\x02 \x01(\tR\aagentId\x12\x1b\n" +
|
||||
"profile_id\x18\x01 \x01(\x03B\a\xbaH\x04\"\x02 \x00R\tprofileId\x12\x1e\n" +
|
||||
"\bagent_id\x18\x02 \x01(\tH\x00R\aagentId\x88\x01\x01\x12\x1b\n" +
|
||||
"\x04name\x18\x03 \x01(\tB\a\xbaH\x04r\x02\x10\x01R\x04name\x128\n" +
|
||||
"\x04type\x18\x04 \x01(\x0e2\x1a.mantrae.v1.MiddlewareTypeB\b\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12\x1d\n" +
|
||||
"\n" +
|
||||
"is_default\x18\x05 \x01(\bR\tisDefault\x12/\n" +
|
||||
"\x06config\x18\x06 \x01(\v2\x17.google.protobuf.StructR\x06config\"R\n" +
|
||||
"\x06config\x18\x06 \x01(\v2\x17.google.protobuf.StructR\x06configB\v\n" +
|
||||
"\t_agent_id\"R\n" +
|
||||
"\x18CreateMiddlewareResponse\x126\n" +
|
||||
"\n" +
|
||||
"middleware\x18\x01 \x01(\v2\x16.mantrae.v1.MiddlewareR\n" +
|
||||
@@ -1134,12 +1135,12 @@ const file_mantrae_v1_middleware_proto_rawDesc = "" +
|
||||
"\x17DeleteMiddlewareRequest\x12\x17\n" +
|
||||
"\x02id\x18\x01 \x01(\x03B\a\xbaH\x04\"\x02 \x00R\x02id\x128\n" +
|
||||
"\x04type\x18\x02 \x01(\x0e2\x1a.mantrae.v1.MiddlewareTypeB\b\xbaH\x05\x82\x01\x02\x10\x01R\x04type\"\x1a\n" +
|
||||
"\x18DeleteMiddlewareResponse\"\xec\x02\n" +
|
||||
"\x18DeleteMiddlewareResponse\"\xe2\x02\n" +
|
||||
"\x16ListMiddlewaresRequest\x12&\n" +
|
||||
"\n" +
|
||||
"profile_id\x18\x01 \x01(\x03B\a\xbaH\x04\"\x02 \x00R\tprofileId\x12'\n" +
|
||||
"\bagent_id\x18\x02 \x01(\tB\a\xbaH\x04r\x02\x10\x01H\x00R\aagentId\x88\x01\x01\x12=\n" +
|
||||
"\x04type\x18\x03 \x01(\x0e2\x1a.mantrae.v1.MiddlewareTypeB\b\xbaH\x05\x82\x01\x02\x10\x01H\x01R\x04type\x88\x01\x01\x12q\n" +
|
||||
"\bagent_id\x18\x02 \x01(\tB\a\xbaH\x04r\x02\x10\x01H\x00R\aagentId\x88\x01\x01\x123\n" +
|
||||
"\x04type\x18\x03 \x01(\x0e2\x1a.mantrae.v1.MiddlewareTypeH\x01R\x04type\x88\x01\x01\x12q\n" +
|
||||
"\x05limit\x18\x04 \x01(\x03BV\xbaHS\xba\x01P\n" +
|
||||
"\vlimit.valid\x12)limit must be either -1 or greater than 0\x1a\x16this == -1 || this > 0H\x02R\x05limit\x88\x01\x01\x12$\n" +
|
||||
"\x06offset\x18\x05 \x01(\x03B\a\xbaH\x04\"\x02(\x00H\x03R\x06offset\x88\x01\x01B\v\n" +
|
||||
@@ -1245,6 +1246,7 @@ func file_mantrae_v1_middleware_proto_init() {
|
||||
if File_mantrae_v1_middleware_proto != nil {
|
||||
return
|
||||
}
|
||||
file_mantrae_v1_middleware_proto_msgTypes[5].OneofWrappers = []any{}
|
||||
file_mantrae_v1_middleware_proto_msgTypes[11].OneofWrappers = []any{}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
|
||||
@@ -291,7 +291,7 @@ func (x *GetRouterResponse) GetRouter() *Router {
|
||||
type CreateRouterRequest struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
ProfileId int64 `protobuf:"varint,1,opt,name=profile_id,json=profileId,proto3" json:"profile_id,omitempty"`
|
||||
AgentId string `protobuf:"bytes,2,opt,name=agent_id,json=agentId,proto3" json:"agent_id,omitempty"`
|
||||
AgentId *string `protobuf:"bytes,2,opt,name=agent_id,json=agentId,proto3,oneof" json:"agent_id,omitempty"`
|
||||
Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
|
||||
Config *structpb.Struct `protobuf:"bytes,4,opt,name=config,proto3" json:"config,omitempty"`
|
||||
Enabled bool `protobuf:"varint,5,opt,name=enabled,proto3" json:"enabled,omitempty"`
|
||||
@@ -338,8 +338,8 @@ func (x *CreateRouterRequest) GetProfileId() int64 {
|
||||
}
|
||||
|
||||
func (x *CreateRouterRequest) GetAgentId() string {
|
||||
if x != nil {
|
||||
return x.AgentId
|
||||
if x != nil && x.AgentId != nil {
|
||||
return *x.AgentId
|
||||
}
|
||||
return ""
|
||||
}
|
||||
@@ -785,15 +785,16 @@ const file_mantrae_v1_router_proto_rawDesc = "" +
|
||||
"\x02id\x18\x01 \x01(\x03B\a\xbaH\x04\"\x02 \x00R\x02id\x124\n" +
|
||||
"\x04type\x18\x02 \x01(\x0e2\x16.mantrae.v1.RouterTypeB\b\xbaH\x05\x82\x01\x02\x10\x01R\x04type\"?\n" +
|
||||
"\x11GetRouterResponse\x12*\n" +
|
||||
"\x06router\x18\x01 \x01(\v2\x12.mantrae.v1.RouterR\x06router\"\xf6\x01\n" +
|
||||
"\x06router\x18\x01 \x01(\v2\x12.mantrae.v1.RouterR\x06router\"\x88\x02\n" +
|
||||
"\x13CreateRouterRequest\x12&\n" +
|
||||
"\n" +
|
||||
"profile_id\x18\x01 \x01(\x03B\a\xbaH\x04\"\x02 \x00R\tprofileId\x12\x19\n" +
|
||||
"\bagent_id\x18\x02 \x01(\tR\aagentId\x12\x1b\n" +
|
||||
"profile_id\x18\x01 \x01(\x03B\a\xbaH\x04\"\x02 \x00R\tprofileId\x12\x1e\n" +
|
||||
"\bagent_id\x18\x02 \x01(\tH\x00R\aagentId\x88\x01\x01\x12\x1b\n" +
|
||||
"\x04name\x18\x03 \x01(\tB\a\xbaH\x04r\x02\x10\x01R\x04name\x12/\n" +
|
||||
"\x06config\x18\x04 \x01(\v2\x17.google.protobuf.StructR\x06config\x12\x18\n" +
|
||||
"\aenabled\x18\x05 \x01(\bR\aenabled\x124\n" +
|
||||
"\x04type\x18\x06 \x01(\x0e2\x16.mantrae.v1.RouterTypeB\b\xbaH\x05\x82\x01\x02\x10\x01R\x04type\"B\n" +
|
||||
"\x04type\x18\x06 \x01(\x0e2\x16.mantrae.v1.RouterTypeB\b\xbaH\x05\x82\x01\x02\x10\x01R\x04typeB\v\n" +
|
||||
"\t_agent_id\"B\n" +
|
||||
"\x14CreateRouterResponse\x12*\n" +
|
||||
"\x06router\x18\x01 \x01(\v2\x12.mantrae.v1.RouterR\x06router\"\x8a\x02\n" +
|
||||
"\x13UpdateRouterRequest\x12\x17\n" +
|
||||
@@ -808,12 +809,12 @@ const file_mantrae_v1_router_proto_rawDesc = "" +
|
||||
"\x13DeleteRouterRequest\x12\x17\n" +
|
||||
"\x02id\x18\x01 \x01(\x03B\a\xbaH\x04\"\x02 \x00R\x02id\x124\n" +
|
||||
"\x04type\x18\x02 \x01(\x0e2\x16.mantrae.v1.RouterTypeB\b\xbaH\x05\x82\x01\x02\x10\x01R\x04type\"\x16\n" +
|
||||
"\x14DeleteRouterResponse\"\xe4\x02\n" +
|
||||
"\x14DeleteRouterResponse\"\xda\x02\n" +
|
||||
"\x12ListRoutersRequest\x12&\n" +
|
||||
"\n" +
|
||||
"profile_id\x18\x01 \x01(\x03B\a\xbaH\x04\"\x02 \x00R\tprofileId\x12'\n" +
|
||||
"\bagent_id\x18\x02 \x01(\tB\a\xbaH\x04r\x02\x10\x01H\x00R\aagentId\x88\x01\x01\x129\n" +
|
||||
"\x04type\x18\x03 \x01(\x0e2\x16.mantrae.v1.RouterTypeB\b\xbaH\x05\x82\x01\x02\x10\x01H\x01R\x04type\x88\x01\x01\x12q\n" +
|
||||
"\bagent_id\x18\x02 \x01(\tB\a\xbaH\x04r\x02\x10\x01H\x00R\aagentId\x88\x01\x01\x12/\n" +
|
||||
"\x04type\x18\x03 \x01(\x0e2\x16.mantrae.v1.RouterTypeH\x01R\x04type\x88\x01\x01\x12q\n" +
|
||||
"\x05limit\x18\x04 \x01(\x03BV\xbaHS\xba\x01P\n" +
|
||||
"\vlimit.valid\x12)limit must be either -1 or greater than 0\x1a\x16this == -1 || this > 0H\x02R\x05limit\x88\x01\x01\x12$\n" +
|
||||
"\x06offset\x18\x05 \x01(\x03B\a\xbaH\x04\"\x02(\x00H\x03R\x06offset\x88\x01\x01B\v\n" +
|
||||
@@ -913,6 +914,7 @@ func file_mantrae_v1_router_proto_init() {
|
||||
return
|
||||
}
|
||||
file_mantrae_v1_dns_provider_proto_init()
|
||||
file_mantrae_v1_router_proto_msgTypes[3].OneofWrappers = []any{}
|
||||
file_mantrae_v1_router_proto_msgTypes[9].OneofWrappers = []any{}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
|
||||
@@ -280,7 +280,7 @@ func (x *GetServersTransportResponse) GetServersTransport() *ServersTransport {
|
||||
type CreateServersTransportRequest struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
ProfileId int64 `protobuf:"varint,1,opt,name=profile_id,json=profileId,proto3" json:"profile_id,omitempty"`
|
||||
AgentId string `protobuf:"bytes,2,opt,name=agent_id,json=agentId,proto3" json:"agent_id,omitempty"`
|
||||
AgentId *string `protobuf:"bytes,2,opt,name=agent_id,json=agentId,proto3,oneof" json:"agent_id,omitempty"`
|
||||
Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
|
||||
Config *structpb.Struct `protobuf:"bytes,4,opt,name=config,proto3" json:"config,omitempty"`
|
||||
Enabled bool `protobuf:"varint,5,opt,name=enabled,proto3" json:"enabled,omitempty"`
|
||||
@@ -327,8 +327,8 @@ func (x *CreateServersTransportRequest) GetProfileId() int64 {
|
||||
}
|
||||
|
||||
func (x *CreateServersTransportRequest) GetAgentId() string {
|
||||
if x != nil {
|
||||
return x.AgentId
|
||||
if x != nil && x.AgentId != nil {
|
||||
return *x.AgentId
|
||||
}
|
||||
return ""
|
||||
}
|
||||
@@ -764,15 +764,16 @@ const file_mantrae_v1_servers_transport_proto_rawDesc = "" +
|
||||
"\x02id\x18\x01 \x01(\x03B\a\xbaH\x04\"\x02 \x00R\x02id\x12>\n" +
|
||||
"\x04type\x18\x02 \x01(\x0e2 .mantrae.v1.ServersTransportTypeB\b\xbaH\x05\x82\x01\x02\x10\x01R\x04type\"h\n" +
|
||||
"\x1bGetServersTransportResponse\x12I\n" +
|
||||
"\x11servers_transport\x18\x01 \x01(\v2\x1c.mantrae.v1.ServersTransportR\x10serversTransport\"\x8a\x02\n" +
|
||||
"\x11servers_transport\x18\x01 \x01(\v2\x1c.mantrae.v1.ServersTransportR\x10serversTransport\"\x9c\x02\n" +
|
||||
"\x1dCreateServersTransportRequest\x12&\n" +
|
||||
"\n" +
|
||||
"profile_id\x18\x01 \x01(\x03B\a\xbaH\x04\"\x02 \x00R\tprofileId\x12\x19\n" +
|
||||
"\bagent_id\x18\x02 \x01(\tR\aagentId\x12\x1b\n" +
|
||||
"profile_id\x18\x01 \x01(\x03B\a\xbaH\x04\"\x02 \x00R\tprofileId\x12\x1e\n" +
|
||||
"\bagent_id\x18\x02 \x01(\tH\x00R\aagentId\x88\x01\x01\x12\x1b\n" +
|
||||
"\x04name\x18\x03 \x01(\tB\a\xbaH\x04r\x02\x10\x01R\x04name\x12/\n" +
|
||||
"\x06config\x18\x04 \x01(\v2\x17.google.protobuf.StructR\x06config\x12\x18\n" +
|
||||
"\aenabled\x18\x05 \x01(\bR\aenabled\x12>\n" +
|
||||
"\x04type\x18\x06 \x01(\x0e2 .mantrae.v1.ServersTransportTypeB\b\xbaH\x05\x82\x01\x02\x10\x01R\x04type\"k\n" +
|
||||
"\x04type\x18\x06 \x01(\x0e2 .mantrae.v1.ServersTransportTypeB\b\xbaH\x05\x82\x01\x02\x10\x01R\x04typeB\v\n" +
|
||||
"\t_agent_id\"k\n" +
|
||||
"\x1eCreateServersTransportResponse\x12I\n" +
|
||||
"\x11servers_transport\x18\x01 \x01(\v2\x1c.mantrae.v1.ServersTransportR\x10serversTransport\"\xe0\x01\n" +
|
||||
"\x1dUpdateServersTransportRequest\x12\x17\n" +
|
||||
@@ -786,12 +787,12 @@ const file_mantrae_v1_servers_transport_proto_rawDesc = "" +
|
||||
"\x1dDeleteServersTransportRequest\x12\x17\n" +
|
||||
"\x02id\x18\x01 \x01(\x03B\a\xbaH\x04\"\x02 \x00R\x02id\x12>\n" +
|
||||
"\x04type\x18\x02 \x01(\x0e2 .mantrae.v1.ServersTransportTypeB\b\xbaH\x05\x82\x01\x02\x10\x01R\x04type\" \n" +
|
||||
"\x1eDeleteServersTransportResponse\"\xf8\x02\n" +
|
||||
"\x1eDeleteServersTransportResponse\"\xee\x02\n" +
|
||||
"\x1cListServersTransportsRequest\x12&\n" +
|
||||
"\n" +
|
||||
"profile_id\x18\x01 \x01(\x03B\a\xbaH\x04\"\x02 \x00R\tprofileId\x12'\n" +
|
||||
"\bagent_id\x18\x02 \x01(\tB\a\xbaH\x04r\x02\x10\x01H\x00R\aagentId\x88\x01\x01\x12C\n" +
|
||||
"\x04type\x18\x03 \x01(\x0e2 .mantrae.v1.ServersTransportTypeB\b\xbaH\x05\x82\x01\x02\x10\x01H\x01R\x04type\x88\x01\x01\x12q\n" +
|
||||
"\bagent_id\x18\x02 \x01(\tB\a\xbaH\x04r\x02\x10\x01H\x00R\aagentId\x88\x01\x01\x129\n" +
|
||||
"\x04type\x18\x03 \x01(\x0e2 .mantrae.v1.ServersTransportTypeH\x01R\x04type\x88\x01\x01\x12q\n" +
|
||||
"\x05limit\x18\x04 \x01(\x03BV\xbaHS\xba\x01P\n" +
|
||||
"\vlimit.valid\x12)limit must be either -1 or greater than 0\x1a\x16this == -1 || this > 0H\x02R\x05limit\x88\x01\x01\x12$\n" +
|
||||
"\x06offset\x18\x05 \x01(\x03B\a\xbaH\x04\"\x02(\x00H\x03R\x06offset\x88\x01\x01B\v\n" +
|
||||
@@ -885,6 +886,7 @@ func file_mantrae_v1_servers_transport_proto_init() {
|
||||
if File_mantrae_v1_servers_transport_proto != nil {
|
||||
return
|
||||
}
|
||||
file_mantrae_v1_servers_transport_proto_msgTypes[3].OneofWrappers = []any{}
|
||||
file_mantrae_v1_servers_transport_proto_msgTypes[9].OneofWrappers = []any{}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
|
||||
@@ -283,7 +283,7 @@ func (x *GetServiceResponse) GetService() *Service {
|
||||
type CreateServiceRequest struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
ProfileId int64 `protobuf:"varint,1,opt,name=profile_id,json=profileId,proto3" json:"profile_id,omitempty"`
|
||||
AgentId string `protobuf:"bytes,2,opt,name=agent_id,json=agentId,proto3" json:"agent_id,omitempty"`
|
||||
AgentId *string `protobuf:"bytes,2,opt,name=agent_id,json=agentId,proto3,oneof" json:"agent_id,omitempty"`
|
||||
Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
|
||||
Config *structpb.Struct `protobuf:"bytes,4,opt,name=config,proto3" json:"config,omitempty"`
|
||||
Enabled bool `protobuf:"varint,5,opt,name=enabled,proto3" json:"enabled,omitempty"`
|
||||
@@ -330,8 +330,8 @@ func (x *CreateServiceRequest) GetProfileId() int64 {
|
||||
}
|
||||
|
||||
func (x *CreateServiceRequest) GetAgentId() string {
|
||||
if x != nil {
|
||||
return x.AgentId
|
||||
if x != nil && x.AgentId != nil {
|
||||
return *x.AgentId
|
||||
}
|
||||
return ""
|
||||
}
|
||||
@@ -747,7 +747,7 @@ func (x *ListServicesResponse) GetTotalCount() int64 {
|
||||
type GetServiceByRouterRequest struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
|
||||
Type RouterType `protobuf:"varint,2,opt,name=type,proto3,enum=mantrae.v1.RouterType" json:"type,omitempty"`
|
||||
Type ServiceType `protobuf:"varint,2,opt,name=type,proto3,enum=mantrae.v1.ServiceType" json:"type,omitempty"`
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
}
|
||||
@@ -789,11 +789,11 @@ func (x *GetServiceByRouterRequest) GetName() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *GetServiceByRouterRequest) GetType() RouterType {
|
||||
func (x *GetServiceByRouterRequest) GetType() ServiceType {
|
||||
if x != nil {
|
||||
return x.Type
|
||||
}
|
||||
return RouterType_ROUTER_TYPE_UNSPECIFIED
|
||||
return ServiceType_SERVICE_TYPE_UNSPECIFIED
|
||||
}
|
||||
|
||||
type GetServiceByRouterResponse struct {
|
||||
@@ -845,7 +845,7 @@ var File_mantrae_v1_service_proto protoreflect.FileDescriptor
|
||||
const file_mantrae_v1_service_proto_rawDesc = "" +
|
||||
"\n" +
|
||||
"\x18mantrae/v1/service.proto\x12\n" +
|
||||
"mantrae.v1\x1a\x1bbuf/validate/validate.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x17mantrae/v1/router.proto\"\xd5\x02\n" +
|
||||
"mantrae.v1\x1a\x1bbuf/validate/validate.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xd5\x02\n" +
|
||||
"\aService\x12\x0e\n" +
|
||||
"\x02id\x18\x01 \x01(\x03R\x02id\x12\x1d\n" +
|
||||
"\n" +
|
||||
@@ -863,15 +863,16 @@ const file_mantrae_v1_service_proto_rawDesc = "" +
|
||||
"\x02id\x18\x01 \x01(\x03B\a\xbaH\x04\"\x02 \x00R\x02id\x125\n" +
|
||||
"\x04type\x18\x02 \x01(\x0e2\x17.mantrae.v1.ServiceTypeB\b\xbaH\x05\x82\x01\x02\x10\x01R\x04type\"C\n" +
|
||||
"\x12GetServiceResponse\x12-\n" +
|
||||
"\aservice\x18\x01 \x01(\v2\x13.mantrae.v1.ServiceR\aservice\"\xf8\x01\n" +
|
||||
"\aservice\x18\x01 \x01(\v2\x13.mantrae.v1.ServiceR\aservice\"\x8a\x02\n" +
|
||||
"\x14CreateServiceRequest\x12&\n" +
|
||||
"\n" +
|
||||
"profile_id\x18\x01 \x01(\x03B\a\xbaH\x04\"\x02 \x00R\tprofileId\x12\x19\n" +
|
||||
"\bagent_id\x18\x02 \x01(\tR\aagentId\x12\x1b\n" +
|
||||
"profile_id\x18\x01 \x01(\x03B\a\xbaH\x04\"\x02 \x00R\tprofileId\x12\x1e\n" +
|
||||
"\bagent_id\x18\x02 \x01(\tH\x00R\aagentId\x88\x01\x01\x12\x1b\n" +
|
||||
"\x04name\x18\x03 \x01(\tB\a\xbaH\x04r\x02\x10\x01R\x04name\x12/\n" +
|
||||
"\x06config\x18\x04 \x01(\v2\x17.google.protobuf.StructR\x06config\x12\x18\n" +
|
||||
"\aenabled\x18\x05 \x01(\bR\aenabled\x125\n" +
|
||||
"\x04type\x18\x06 \x01(\x0e2\x17.mantrae.v1.ServiceTypeB\b\xbaH\x05\x82\x01\x02\x10\x01R\x04type\"F\n" +
|
||||
"\x04type\x18\x06 \x01(\x0e2\x17.mantrae.v1.ServiceTypeB\b\xbaH\x05\x82\x01\x02\x10\x01R\x04typeB\v\n" +
|
||||
"\t_agent_id\"F\n" +
|
||||
"\x15CreateServiceResponse\x12-\n" +
|
||||
"\aservice\x18\x01 \x01(\v2\x13.mantrae.v1.ServiceR\aservice\"\xce\x01\n" +
|
||||
"\x14UpdateServiceRequest\x12\x17\n" +
|
||||
@@ -885,12 +886,12 @@ const file_mantrae_v1_service_proto_rawDesc = "" +
|
||||
"\x14DeleteServiceRequest\x12\x17\n" +
|
||||
"\x02id\x18\x01 \x01(\x03B\a\xbaH\x04\"\x02 \x00R\x02id\x125\n" +
|
||||
"\x04type\x18\x02 \x01(\x0e2\x17.mantrae.v1.ServiceTypeB\b\xbaH\x05\x82\x01\x02\x10\x01R\x04type\"\x17\n" +
|
||||
"\x15DeleteServiceResponse\"\xe6\x02\n" +
|
||||
"\x15DeleteServiceResponse\"\xdc\x02\n" +
|
||||
"\x13ListServicesRequest\x12&\n" +
|
||||
"\n" +
|
||||
"profile_id\x18\x01 \x01(\x03B\a\xbaH\x04\"\x02 \x00R\tprofileId\x12'\n" +
|
||||
"\bagent_id\x18\x02 \x01(\tB\a\xbaH\x04r\x02\x10\x01H\x00R\aagentId\x88\x01\x01\x12:\n" +
|
||||
"\x04type\x18\x03 \x01(\x0e2\x17.mantrae.v1.ServiceTypeB\b\xbaH\x05\x82\x01\x02\x10\x01H\x01R\x04type\x88\x01\x01\x12q\n" +
|
||||
"\bagent_id\x18\x02 \x01(\tB\a\xbaH\x04r\x02\x10\x01H\x00R\aagentId\x88\x01\x01\x120\n" +
|
||||
"\x04type\x18\x03 \x01(\x0e2\x17.mantrae.v1.ServiceTypeH\x01R\x04type\x88\x01\x01\x12q\n" +
|
||||
"\x05limit\x18\x04 \x01(\x03BV\xbaHS\xba\x01P\n" +
|
||||
"\vlimit.valid\x12)limit must be either -1 or greater than 0\x1a\x16this == -1 || this > 0H\x02R\x05limit\x88\x01\x01\x12$\n" +
|
||||
"\x06offset\x18\x05 \x01(\x03B\a\xbaH\x04\"\x02(\x00H\x03R\x06offset\x88\x01\x01B\v\n" +
|
||||
@@ -901,11 +902,10 @@ const file_mantrae_v1_service_proto_rawDesc = "" +
|
||||
"\x14ListServicesResponse\x12/\n" +
|
||||
"\bservices\x18\x01 \x03(\v2\x13.mantrae.v1.ServiceR\bservices\x12\x1f\n" +
|
||||
"\vtotal_count\x18\x02 \x01(\x03R\n" +
|
||||
"totalCount\"t\n" +
|
||||
"\x19GetServiceByRouterRequest\x12\x1e\n" +
|
||||
"\x04name\x18\x01 \x01(\tB\n" +
|
||||
"\xbaH\a\xc8\x01\x01r\x02\x10\x01R\x04name\x127\n" +
|
||||
"\x04type\x18\x02 \x01(\x0e2\x16.mantrae.v1.RouterTypeB\v\xbaH\b\xc8\x01\x01\x82\x01\x02\x10\x01R\x04type\"K\n" +
|
||||
"totalCount\"o\n" +
|
||||
"\x19GetServiceByRouterRequest\x12\x1b\n" +
|
||||
"\x04name\x18\x01 \x01(\tB\a\xbaH\x04r\x02\x10\x01R\x04name\x125\n" +
|
||||
"\x04type\x18\x02 \x01(\x0e2\x17.mantrae.v1.ServiceTypeB\b\xbaH\x05\x82\x01\x02\x10\x01R\x04type\"K\n" +
|
||||
"\x1aGetServiceByRouterResponse\x12-\n" +
|
||||
"\aservice\x18\x01 \x01(\v2\x13.mantrae.v1.ServiceR\aservice*n\n" +
|
||||
"\vServiceType\x12\x1c\n" +
|
||||
@@ -956,7 +956,6 @@ var file_mantrae_v1_service_proto_goTypes = []any{
|
||||
(*GetServiceByRouterResponse)(nil), // 13: mantrae.v1.GetServiceByRouterResponse
|
||||
(*structpb.Struct)(nil), // 14: google.protobuf.Struct
|
||||
(*timestamppb.Timestamp)(nil), // 15: google.protobuf.Timestamp
|
||||
(RouterType)(0), // 16: mantrae.v1.RouterType
|
||||
}
|
||||
var file_mantrae_v1_service_proto_depIdxs = []int32{
|
||||
14, // 0: mantrae.v1.Service.config:type_name -> google.protobuf.Struct
|
||||
@@ -974,7 +973,7 @@ var file_mantrae_v1_service_proto_depIdxs = []int32{
|
||||
0, // 12: mantrae.v1.DeleteServiceRequest.type:type_name -> mantrae.v1.ServiceType
|
||||
0, // 13: mantrae.v1.ListServicesRequest.type:type_name -> mantrae.v1.ServiceType
|
||||
1, // 14: mantrae.v1.ListServicesResponse.services:type_name -> mantrae.v1.Service
|
||||
16, // 15: mantrae.v1.GetServiceByRouterRequest.type:type_name -> mantrae.v1.RouterType
|
||||
0, // 15: mantrae.v1.GetServiceByRouterRequest.type:type_name -> mantrae.v1.ServiceType
|
||||
1, // 16: mantrae.v1.GetServiceByRouterResponse.service:type_name -> mantrae.v1.Service
|
||||
2, // 17: mantrae.v1.ServiceService.GetService:input_type -> mantrae.v1.GetServiceRequest
|
||||
4, // 18: mantrae.v1.ServiceService.CreateService:input_type -> mantrae.v1.CreateServiceRequest
|
||||
@@ -1000,7 +999,7 @@ func file_mantrae_v1_service_proto_init() {
|
||||
if File_mantrae_v1_service_proto != nil {
|
||||
return
|
||||
}
|
||||
file_mantrae_v1_router_proto_init()
|
||||
file_mantrae_v1_service_proto_msgTypes[3].OneofWrappers = []any{}
|
||||
file_mantrae_v1_service_proto_msgTypes[9].OneofWrappers = []any{}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
|
||||
@@ -735,7 +735,7 @@ type CreateUserRequest struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
|
||||
Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"`
|
||||
Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"`
|
||||
Email *string `protobuf:"bytes,3,opt,name=email,proto3,oneof" json:"email,omitempty"`
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
}
|
||||
@@ -785,8 +785,8 @@ func (x *CreateUserRequest) GetPassword() string {
|
||||
}
|
||||
|
||||
func (x *CreateUserRequest) GetEmail() string {
|
||||
if x != nil {
|
||||
return x.Email
|
||||
if x != nil && x.Email != nil {
|
||||
return *x.Email
|
||||
}
|
||||
return ""
|
||||
}
|
||||
@@ -839,8 +839,8 @@ type UpdateUserRequest struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
|
||||
Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"`
|
||||
Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"`
|
||||
Password *string `protobuf:"bytes,5,opt,name=password,proto3,oneof" json:"password,omitempty"`
|
||||
Email *string `protobuf:"bytes,3,opt,name=email,proto3,oneof" json:"email,omitempty"`
|
||||
Password *string `protobuf:"bytes,4,opt,name=password,proto3,oneof" json:"password,omitempty"`
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
}
|
||||
@@ -890,8 +890,8 @@ func (x *UpdateUserRequest) GetUsername() string {
|
||||
}
|
||||
|
||||
func (x *UpdateUserRequest) GetEmail() string {
|
||||
if x != nil {
|
||||
return x.Email
|
||||
if x != nil && x.Email != nil {
|
||||
return *x.Email
|
||||
}
|
||||
return ""
|
||||
}
|
||||
@@ -1280,19 +1280,23 @@ const file_mantrae_v1_user_proto_rawDesc = "" +
|
||||
"\n" +
|
||||
"identifier\"7\n" +
|
||||
"\x0fGetUserResponse\x12$\n" +
|
||||
"\x04user\x18\x01 \x01(\v2\x10.mantrae.v1.UserR\x04user\"|\n" +
|
||||
"\x04user\x18\x01 \x01(\v2\x10.mantrae.v1.UserR\x04user\"\x8e\x01\n" +
|
||||
"\x11CreateUserRequest\x12#\n" +
|
||||
"\busername\x18\x01 \x01(\tB\a\xbaH\x04r\x02\x10\x03R\busername\x12#\n" +
|
||||
"\bpassword\x18\x02 \x01(\tB\a\xbaH\x04r\x02\x10\bR\bpassword\x12\x1d\n" +
|
||||
"\x05email\x18\x03 \x01(\tB\a\xbaH\x04r\x02`\x01R\x05email\":\n" +
|
||||
"\bpassword\x18\x02 \x01(\tB\a\xbaH\x04r\x02\x10\bR\bpassword\x12%\n" +
|
||||
"\x05email\x18\x03 \x01(\tB\n" +
|
||||
"\xbaH\a\xd8\x01\x00r\x02`\x01H\x00R\x05email\x88\x01\x01B\b\n" +
|
||||
"\x06_email\":\n" +
|
||||
"\x12CreateUserResponse\x12$\n" +
|
||||
"\x04user\x18\x01 \x01(\v2\x10.mantrae.v1.UserR\x04user\"\xaa\x01\n" +
|
||||
"\x04user\x18\x01 \x01(\v2\x10.mantrae.v1.UserR\x04user\"\xbc\x01\n" +
|
||||
"\x11UpdateUserRequest\x12\x17\n" +
|
||||
"\x02id\x18\x01 \x01(\tB\a\xbaH\x04r\x02\x10\x01R\x02id\x12#\n" +
|
||||
"\busername\x18\x02 \x01(\tB\a\xbaH\x04r\x02\x10\x03R\busername\x12\x1d\n" +
|
||||
"\x05email\x18\x03 \x01(\tB\a\xbaH\x04r\x02`\x01R\x05email\x12+\n" +
|
||||
"\bpassword\x18\x05 \x01(\tB\n" +
|
||||
"\xbaH\a\xd8\x01\x01r\x02\x10\bH\x00R\bpassword\x88\x01\x01B\v\n" +
|
||||
"\busername\x18\x02 \x01(\tB\a\xbaH\x04r\x02\x10\x03R\busername\x12%\n" +
|
||||
"\x05email\x18\x03 \x01(\tB\n" +
|
||||
"\xbaH\a\xd8\x01\x00r\x02`\x01H\x00R\x05email\x88\x01\x01\x12+\n" +
|
||||
"\bpassword\x18\x04 \x01(\tB\n" +
|
||||
"\xbaH\a\xd8\x01\x00r\x02\x10\bH\x01R\bpassword\x88\x01\x01B\b\n" +
|
||||
"\x06_emailB\v\n" +
|
||||
"\t_password\":\n" +
|
||||
"\x12UpdateUserResponse\x12$\n" +
|
||||
"\x04user\x18\x01 \x01(\v2\x10.mantrae.v1.UserR\x04user\",\n" +
|
||||
@@ -1430,6 +1434,7 @@ func file_mantrae_v1_user_proto_init() {
|
||||
(*GetUserRequest_Username)(nil),
|
||||
(*GetUserRequest_Email)(nil),
|
||||
}
|
||||
file_mantrae_v1_user_proto_msgTypes[11].OneofWrappers = []any{}
|
||||
file_mantrae_v1_user_proto_msgTypes[13].OneofWrappers = []any{}
|
||||
file_mantrae_v1_user_proto_msgTypes[17].OneofWrappers = []any{}
|
||||
type x struct{}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -55,10 +55,7 @@ message UpdateEntryPointResponse {
|
||||
}
|
||||
|
||||
message DeleteEntryPointRequest {
|
||||
int64 id = 1 [
|
||||
(buf.validate.field).required = true,
|
||||
(buf.validate.field).int64.gt = 0
|
||||
];
|
||||
int64 id = 1 [(buf.validate.field).int64.gt = 0];
|
||||
}
|
||||
message DeleteEntryPointResponse {}
|
||||
|
||||
|
||||
@@ -1,83 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package mantrae.v1;
|
||||
|
||||
import "buf/validate/validate.proto";
|
||||
import "google/protobuf/timestamp.proto";
|
||||
import "mantrae/v1/agent.proto";
|
||||
import "mantrae/v1/auditlog.proto";
|
||||
import "mantrae/v1/dns_provider.proto";
|
||||
import "mantrae/v1/entry_point.proto";
|
||||
import "mantrae/v1/middleware.proto";
|
||||
import "mantrae/v1/router.proto";
|
||||
import "mantrae/v1/service.proto";
|
||||
import "mantrae/v1/user.proto";
|
||||
|
||||
service EventService {
|
||||
// Profile-scoped events (routers, services, middlewares, entrypoints)
|
||||
rpc ProfileEvents(ProfileEventsRequest) returns (stream ProfileEventsResponse);
|
||||
|
||||
// Global events (users, dns)
|
||||
rpc GlobalEvents(GlobalEventsRequest) returns (stream GlobalEventsResponse);
|
||||
}
|
||||
|
||||
enum EventType {
|
||||
EVENT_TYPE_UNSPECIFIED = 0;
|
||||
EVENT_TYPE_CREATED = 1;
|
||||
EVENT_TYPE_UPDATED = 2;
|
||||
EVENT_TYPE_DELETED = 3;
|
||||
}
|
||||
|
||||
enum ResourceType {
|
||||
RESOURCE_TYPE_UNSPECIFIED = 0;
|
||||
RESOURCE_TYPE_ROUTER = 1;
|
||||
RESOURCE_TYPE_SERVICE = 2;
|
||||
RESOURCE_TYPE_MIDDLEWARE = 3;
|
||||
RESOURCE_TYPE_ENTRY_POINT = 4;
|
||||
RESOURCE_TYPE_AUDIT_LOG = 5;
|
||||
RESOURCE_TYPE_AGENT = 6;
|
||||
RESOURCE_TYPE_USER = 7;
|
||||
RESOURCE_TYPE_DNS_PROVIDER = 8;
|
||||
}
|
||||
|
||||
message ProfileEvent {
|
||||
EventType event_type = 1;
|
||||
ResourceType resource_type = 2;
|
||||
int64 profile_id = 3;
|
||||
google.protobuf.Timestamp timestamp = 4;
|
||||
|
||||
oneof resource {
|
||||
Router router = 10;
|
||||
Service service = 11;
|
||||
Middleware middleware = 12;
|
||||
EntryPoint entry_point = 13;
|
||||
Agent agent = 14;
|
||||
AuditLog audit_log = 15;
|
||||
}
|
||||
}
|
||||
|
||||
message GlobalEvent {
|
||||
EventType event_type = 1;
|
||||
ResourceType resource_type = 2;
|
||||
google.protobuf.Timestamp timestamp = 3;
|
||||
|
||||
oneof resource {
|
||||
User user = 10;
|
||||
DnsProvider dns_provider = 11;
|
||||
}
|
||||
}
|
||||
|
||||
message ProfileEventsRequest {
|
||||
int64 profile_id = 1 [(buf.validate.field).int64.gt = 0];
|
||||
repeated ResourceType resource_types = 2; // Filter by specific resource types
|
||||
}
|
||||
message ProfileEventsResponse {
|
||||
ProfileEvent event = 1;
|
||||
}
|
||||
|
||||
message GlobalEventsRequest {
|
||||
repeated ResourceType resource_types = 1; // Filter by specific resource types
|
||||
}
|
||||
message GlobalEventsResponse {
|
||||
GlobalEvent event = 1;
|
||||
}
|
||||
@@ -74,7 +74,7 @@ message GetMiddlewareResponse {
|
||||
|
||||
message CreateMiddlewareRequest {
|
||||
int64 profile_id = 1 [(buf.validate.field).int64.gt = 0];
|
||||
string agent_id = 2;
|
||||
optional string agent_id = 2;
|
||||
string name = 3 [(buf.validate.field).string.min_len = 1];
|
||||
MiddlewareType type = 4 [(buf.validate.field).enum.defined_only = true];
|
||||
bool is_default = 5;
|
||||
@@ -105,7 +105,7 @@ message DeleteMiddlewareResponse {}
|
||||
message ListMiddlewaresRequest {
|
||||
int64 profile_id = 1 [(buf.validate.field).int64.gt = 0];
|
||||
optional string agent_id = 2 [(buf.validate.field).string.min_len = 1];
|
||||
optional MiddlewareType type = 3 [(buf.validate.field).enum.defined_only = true];
|
||||
optional MiddlewareType type = 3;
|
||||
optional int64 limit = 4 [(buf.validate.field).cel = {
|
||||
id: "limit.valid"
|
||||
message: "limit must be either -1 or greater than 0"
|
||||
|
||||
@@ -49,7 +49,7 @@ message GetRouterResponse {
|
||||
|
||||
message CreateRouterRequest {
|
||||
int64 profile_id = 1 [(buf.validate.field).int64.gt = 0];
|
||||
string agent_id = 2;
|
||||
optional string agent_id = 2;
|
||||
string name = 3 [(buf.validate.field).string.min_len = 1];
|
||||
google.protobuf.Struct config = 4;
|
||||
bool enabled = 5;
|
||||
@@ -80,7 +80,7 @@ message DeleteRouterResponse {}
|
||||
message ListRoutersRequest {
|
||||
int64 profile_id = 1 [(buf.validate.field).int64.gt = 0];
|
||||
optional string agent_id = 2 [(buf.validate.field).string.min_len = 1];
|
||||
optional RouterType type = 3 [(buf.validate.field).enum.defined_only = true];
|
||||
optional RouterType type = 3;
|
||||
optional int64 limit = 4 [(buf.validate.field).cel = {
|
||||
id: "limit.valid"
|
||||
message: "limit must be either -1 or greater than 0"
|
||||
|
||||
@@ -46,7 +46,7 @@ message GetServersTransportResponse {
|
||||
|
||||
message CreateServersTransportRequest {
|
||||
int64 profile_id = 1 [(buf.validate.field).int64.gt = 0];
|
||||
string agent_id = 2;
|
||||
optional string agent_id = 2;
|
||||
string name = 3 [(buf.validate.field).string.min_len = 1];
|
||||
google.protobuf.Struct config = 4;
|
||||
bool enabled = 5;
|
||||
@@ -76,7 +76,7 @@ message DeleteServersTransportResponse {}
|
||||
message ListServersTransportsRequest {
|
||||
int64 profile_id = 1 [(buf.validate.field).int64.gt = 0];
|
||||
optional string agent_id = 2 [(buf.validate.field).string.min_len = 1];
|
||||
optional ServersTransportType type = 3 [(buf.validate.field).enum.defined_only = true];
|
||||
optional ServersTransportType type = 3;
|
||||
optional int64 limit = 4 [(buf.validate.field).cel = {
|
||||
id: "limit.valid"
|
||||
message: "limit must be either -1 or greater than 0"
|
||||
|
||||
@@ -5,7 +5,6 @@ package mantrae.v1;
|
||||
import "buf/validate/validate.proto";
|
||||
import "google/protobuf/struct.proto";
|
||||
import "google/protobuf/timestamp.proto";
|
||||
import "mantrae/v1/router.proto";
|
||||
|
||||
service ServiceService {
|
||||
rpc GetService(GetServiceRequest) returns (GetServiceResponse) {
|
||||
@@ -51,7 +50,7 @@ message GetServiceResponse {
|
||||
|
||||
message CreateServiceRequest {
|
||||
int64 profile_id = 1 [(buf.validate.field).int64.gt = 0];
|
||||
string agent_id = 2;
|
||||
optional string agent_id = 2;
|
||||
string name = 3 [(buf.validate.field).string.min_len = 1];
|
||||
google.protobuf.Struct config = 4;
|
||||
bool enabled = 5;
|
||||
@@ -81,7 +80,7 @@ message DeleteServiceResponse {}
|
||||
message ListServicesRequest {
|
||||
int64 profile_id = 1 [(buf.validate.field).int64.gt = 0];
|
||||
optional string agent_id = 2 [(buf.validate.field).string.min_len = 1];
|
||||
optional ServiceType type = 3 [(buf.validate.field).enum.defined_only = true];
|
||||
optional ServiceType type = 3;
|
||||
optional int64 limit = 4 [(buf.validate.field).cel = {
|
||||
id: "limit.valid"
|
||||
message: "limit must be either -1 or greater than 0"
|
||||
@@ -95,14 +94,8 @@ message ListServicesResponse {
|
||||
}
|
||||
|
||||
message GetServiceByRouterRequest {
|
||||
string name = 1 [
|
||||
(buf.validate.field).required = true,
|
||||
(buf.validate.field).string.min_len = 1
|
||||
];
|
||||
RouterType type = 2 [
|
||||
(buf.validate.field).required = true,
|
||||
(buf.validate.field).enum.defined_only = true
|
||||
];
|
||||
string name = 1 [(buf.validate.field).string.min_len = 1];
|
||||
ServiceType type = 2 [(buf.validate.field).enum.defined_only = true];
|
||||
}
|
||||
message GetServiceByRouterResponse {
|
||||
Service service = 1;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user