From d63859c28f737c991c0b39a34b8ef3278bb37d41 Mon Sep 17 00:00:00 2001 From: Kyle Isom Date: Tue, 17 Mar 2026 02:57:06 -0700 Subject: [PATCH] Add cmd, proto, and generated gRPC code Fix .gitignore pattern that was excluding mc-proxy subdirectories. Co-Authored-By: Claude Opus 4.6 (1M context) --- .gitignore | 2 +- cmd/mc-proxy/main.go | 19 + cmd/mc-proxy/root.go | 17 + cmd/mc-proxy/server.go | 89 +++ gen/mc-proxy/v1/admin.pb.go | 1006 ++++++++++++++++++++++++++++++ gen/mc-proxy/v1/admin_grpc.pb.go | 355 +++++++++++ proto/mc-proxy/v1/admin.proto | 101 +++ 7 files changed, 1588 insertions(+), 1 deletion(-) create mode 100644 cmd/mc-proxy/main.go create mode 100644 cmd/mc-proxy/root.go create mode 100644 cmd/mc-proxy/server.go create mode 100644 gen/mc-proxy/v1/admin.pb.go create mode 100644 gen/mc-proxy/v1/admin_grpc.pb.go create mode 100644 proto/mc-proxy/v1/admin.proto diff --git a/.gitignore b/.gitignore index 75c8bea..2acc708 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ # Binary -mc-proxy +/mc-proxy # Runtime data srv/ diff --git a/cmd/mc-proxy/main.go b/cmd/mc-proxy/main.go new file mode 100644 index 0000000..c5c5597 --- /dev/null +++ b/cmd/mc-proxy/main.go @@ -0,0 +1,19 @@ +package main + +import ( + "fmt" + "os" +) + +var version = "dev" + +func main() { + if err := run(); err != nil { + fmt.Fprintf(os.Stderr, "mc-proxy: %v\n", err) + os.Exit(1) + } +} + +func run() error { + return rootCmd().Execute() +} diff --git a/cmd/mc-proxy/root.go b/cmd/mc-proxy/root.go new file mode 100644 index 0000000..649174e --- /dev/null +++ b/cmd/mc-proxy/root.go @@ -0,0 +1,17 @@ +package main + +import ( + "github.com/spf13/cobra" +) + +func rootCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "mc-proxy", + Short: "TLS proxy and router for Metacircular Dynamics services", + Version: version, + } + + cmd.AddCommand(serverCmd()) + + return cmd +} diff --git a/cmd/mc-proxy/server.go b/cmd/mc-proxy/server.go new file mode 100644 index 0000000..015bb39 --- /dev/null +++ b/cmd/mc-proxy/server.go @@ -0,0 +1,89 @@ +package main + +import ( + "context" + "log/slog" + "os" + "os/signal" + "syscall" + + "github.com/spf13/cobra" + + "git.wntrmute.dev/kyle/mc-proxy/internal/config" + "git.wntrmute.dev/kyle/mc-proxy/internal/grpcserver" + "git.wntrmute.dev/kyle/mc-proxy/internal/server" +) + +func serverCmd() *cobra.Command { + var configPath string + + cmd := &cobra.Command{ + Use: "server", + Short: "Start the proxy server", + RunE: func(cmd *cobra.Command, args []string) error { + cfg, err := config.Load(configPath) + if err != nil { + return err + } + + logger := slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{ + Level: parseLogLevel(cfg.Log.Level), + })) + + srv, err := server.New(cfg, logger, version) + if err != nil { + return err + } + + ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) + defer cancel() + + // Start gRPC admin API if configured. + if cfg.GRPC.Addr != "" { + grpcSrv, ln, err := grpcserver.New(cfg.GRPC, srv, logger) + if err != nil { + return err + } + logger.Info("gRPC admin API listening", "addr", ln.Addr()) + go func() { + if err := grpcSrv.Serve(ln); err != nil { + logger.Error("gRPC server error", "error", err) + } + }() + defer grpcSrv.GracefulStop() + } + + // SIGHUP reloads the GeoIP database. + sighup := make(chan os.Signal, 1) + signal.Notify(sighup, syscall.SIGHUP) + go func() { + for range sighup { + logger.Info("received SIGHUP, reloading GeoIP database") + if err := srv.ReloadGeoIP(); err != nil { + logger.Error("failed to reload GeoIP database", "error", err) + } + } + }() + + logger.Info("mc-proxy starting", "version", version) + return srv.Run(ctx) + }, + } + + cmd.Flags().StringVarP(&configPath, "config", "c", "mc-proxy.toml", "path to configuration file") + + return cmd +} + +func parseLogLevel(s string) slog.Level { + switch s { + case "debug": + return slog.LevelDebug + case "warn": + return slog.LevelWarn + case "error": + return slog.LevelError + default: + return slog.LevelInfo + } +} diff --git a/gen/mc-proxy/v1/admin.pb.go b/gen/mc-proxy/v1/admin.pb.go new file mode 100644 index 0000000..1d21a98 --- /dev/null +++ b/gen/mc-proxy/v1/admin.pb.go @@ -0,0 +1,1006 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc v6.33.4 +// source: proto/mc-proxy/v1/admin.proto + +package mcproxyv1 + +import ( + 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 FirewallRuleType int32 + +const ( + FirewallRuleType_FIREWALL_RULE_TYPE_UNSPECIFIED FirewallRuleType = 0 + FirewallRuleType_FIREWALL_RULE_TYPE_IP FirewallRuleType = 1 + FirewallRuleType_FIREWALL_RULE_TYPE_CIDR FirewallRuleType = 2 + FirewallRuleType_FIREWALL_RULE_TYPE_COUNTRY FirewallRuleType = 3 +) + +// Enum value maps for FirewallRuleType. +var ( + FirewallRuleType_name = map[int32]string{ + 0: "FIREWALL_RULE_TYPE_UNSPECIFIED", + 1: "FIREWALL_RULE_TYPE_IP", + 2: "FIREWALL_RULE_TYPE_CIDR", + 3: "FIREWALL_RULE_TYPE_COUNTRY", + } + FirewallRuleType_value = map[string]int32{ + "FIREWALL_RULE_TYPE_UNSPECIFIED": 0, + "FIREWALL_RULE_TYPE_IP": 1, + "FIREWALL_RULE_TYPE_CIDR": 2, + "FIREWALL_RULE_TYPE_COUNTRY": 3, + } +) + +func (x FirewallRuleType) Enum() *FirewallRuleType { + p := new(FirewallRuleType) + *p = x + return p +} + +func (x FirewallRuleType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FirewallRuleType) Descriptor() protoreflect.EnumDescriptor { + return file_proto_mc_proxy_v1_admin_proto_enumTypes[0].Descriptor() +} + +func (FirewallRuleType) Type() protoreflect.EnumType { + return &file_proto_mc_proxy_v1_admin_proto_enumTypes[0] +} + +func (x FirewallRuleType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use FirewallRuleType.Descriptor instead. +func (FirewallRuleType) EnumDescriptor() ([]byte, []int) { + return file_proto_mc_proxy_v1_admin_proto_rawDescGZIP(), []int{0} +} + +type Route struct { + state protoimpl.MessageState `protogen:"open.v1"` + Hostname string `protobuf:"bytes,1,opt,name=hostname,proto3" json:"hostname,omitempty"` + Backend string `protobuf:"bytes,2,opt,name=backend,proto3" json:"backend,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Route) Reset() { + *x = Route{} + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Route) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Route) ProtoMessage() {} + +func (x *Route) ProtoReflect() protoreflect.Message { + mi := &file_proto_mc_proxy_v1_admin_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 Route.ProtoReflect.Descriptor instead. +func (*Route) Descriptor() ([]byte, []int) { + return file_proto_mc_proxy_v1_admin_proto_rawDescGZIP(), []int{0} +} + +func (x *Route) GetHostname() string { + if x != nil { + return x.Hostname + } + return "" +} + +func (x *Route) GetBackend() string { + if x != nil { + return x.Backend + } + return "" +} + +type ListRoutesRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + ListenerAddr string `protobuf:"bytes,1,opt,name=listener_addr,json=listenerAddr,proto3" json:"listener_addr,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListRoutesRequest) Reset() { + *x = ListRoutesRequest{} + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListRoutesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListRoutesRequest) ProtoMessage() {} + +func (x *ListRoutesRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_mc_proxy_v1_admin_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 ListRoutesRequest.ProtoReflect.Descriptor instead. +func (*ListRoutesRequest) Descriptor() ([]byte, []int) { + return file_proto_mc_proxy_v1_admin_proto_rawDescGZIP(), []int{1} +} + +func (x *ListRoutesRequest) GetListenerAddr() string { + if x != nil { + return x.ListenerAddr + } + return "" +} + +type ListRoutesResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ListenerAddr string `protobuf:"bytes,1,opt,name=listener_addr,json=listenerAddr,proto3" json:"listener_addr,omitempty"` + Routes []*Route `protobuf:"bytes,2,rep,name=routes,proto3" json:"routes,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListRoutesResponse) Reset() { + *x = ListRoutesResponse{} + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListRoutesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListRoutesResponse) ProtoMessage() {} + +func (x *ListRoutesResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_mc_proxy_v1_admin_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 ListRoutesResponse.ProtoReflect.Descriptor instead. +func (*ListRoutesResponse) Descriptor() ([]byte, []int) { + return file_proto_mc_proxy_v1_admin_proto_rawDescGZIP(), []int{2} +} + +func (x *ListRoutesResponse) GetListenerAddr() string { + if x != nil { + return x.ListenerAddr + } + return "" +} + +func (x *ListRoutesResponse) GetRoutes() []*Route { + if x != nil { + return x.Routes + } + return nil +} + +type AddRouteRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + ListenerAddr string `protobuf:"bytes,1,opt,name=listener_addr,json=listenerAddr,proto3" json:"listener_addr,omitempty"` + Route *Route `protobuf:"bytes,2,opt,name=route,proto3" json:"route,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AddRouteRequest) Reset() { + *x = AddRouteRequest{} + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AddRouteRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddRouteRequest) ProtoMessage() {} + +func (x *AddRouteRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_mc_proxy_v1_admin_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 AddRouteRequest.ProtoReflect.Descriptor instead. +func (*AddRouteRequest) Descriptor() ([]byte, []int) { + return file_proto_mc_proxy_v1_admin_proto_rawDescGZIP(), []int{3} +} + +func (x *AddRouteRequest) GetListenerAddr() string { + if x != nil { + return x.ListenerAddr + } + return "" +} + +func (x *AddRouteRequest) GetRoute() *Route { + if x != nil { + return x.Route + } + return nil +} + +type AddRouteResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AddRouteResponse) Reset() { + *x = AddRouteResponse{} + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AddRouteResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddRouteResponse) ProtoMessage() {} + +func (x *AddRouteResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_mc_proxy_v1_admin_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 AddRouteResponse.ProtoReflect.Descriptor instead. +func (*AddRouteResponse) Descriptor() ([]byte, []int) { + return file_proto_mc_proxy_v1_admin_proto_rawDescGZIP(), []int{4} +} + +type RemoveRouteRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + ListenerAddr string `protobuf:"bytes,1,opt,name=listener_addr,json=listenerAddr,proto3" json:"listener_addr,omitempty"` + Hostname string `protobuf:"bytes,2,opt,name=hostname,proto3" json:"hostname,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RemoveRouteRequest) Reset() { + *x = RemoveRouteRequest{} + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RemoveRouteRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RemoveRouteRequest) ProtoMessage() {} + +func (x *RemoveRouteRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_mc_proxy_v1_admin_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 RemoveRouteRequest.ProtoReflect.Descriptor instead. +func (*RemoveRouteRequest) Descriptor() ([]byte, []int) { + return file_proto_mc_proxy_v1_admin_proto_rawDescGZIP(), []int{5} +} + +func (x *RemoveRouteRequest) GetListenerAddr() string { + if x != nil { + return x.ListenerAddr + } + return "" +} + +func (x *RemoveRouteRequest) GetHostname() string { + if x != nil { + return x.Hostname + } + return "" +} + +type RemoveRouteResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RemoveRouteResponse) Reset() { + *x = RemoveRouteResponse{} + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RemoveRouteResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RemoveRouteResponse) ProtoMessage() {} + +func (x *RemoveRouteResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[6] + 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 RemoveRouteResponse.ProtoReflect.Descriptor instead. +func (*RemoveRouteResponse) Descriptor() ([]byte, []int) { + return file_proto_mc_proxy_v1_admin_proto_rawDescGZIP(), []int{6} +} + +type FirewallRule struct { + state protoimpl.MessageState `protogen:"open.v1"` + Type FirewallRuleType `protobuf:"varint,1,opt,name=type,proto3,enum=mc_proxy.v1.FirewallRuleType" json:"type,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *FirewallRule) Reset() { + *x = FirewallRule{} + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FirewallRule) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FirewallRule) ProtoMessage() {} + +func (x *FirewallRule) ProtoReflect() protoreflect.Message { + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[7] + 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 FirewallRule.ProtoReflect.Descriptor instead. +func (*FirewallRule) Descriptor() ([]byte, []int) { + return file_proto_mc_proxy_v1_admin_proto_rawDescGZIP(), []int{7} +} + +func (x *FirewallRule) GetType() FirewallRuleType { + if x != nil { + return x.Type + } + return FirewallRuleType_FIREWALL_RULE_TYPE_UNSPECIFIED +} + +func (x *FirewallRule) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +type GetFirewallRulesRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetFirewallRulesRequest) Reset() { + *x = GetFirewallRulesRequest{} + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetFirewallRulesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetFirewallRulesRequest) ProtoMessage() {} + +func (x *GetFirewallRulesRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[8] + 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 GetFirewallRulesRequest.ProtoReflect.Descriptor instead. +func (*GetFirewallRulesRequest) Descriptor() ([]byte, []int) { + return file_proto_mc_proxy_v1_admin_proto_rawDescGZIP(), []int{8} +} + +type GetFirewallRulesResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Rules []*FirewallRule `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetFirewallRulesResponse) Reset() { + *x = GetFirewallRulesResponse{} + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetFirewallRulesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetFirewallRulesResponse) ProtoMessage() {} + +func (x *GetFirewallRulesResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[9] + 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 GetFirewallRulesResponse.ProtoReflect.Descriptor instead. +func (*GetFirewallRulesResponse) Descriptor() ([]byte, []int) { + return file_proto_mc_proxy_v1_admin_proto_rawDescGZIP(), []int{9} +} + +func (x *GetFirewallRulesResponse) GetRules() []*FirewallRule { + if x != nil { + return x.Rules + } + return nil +} + +type AddFirewallRuleRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Rule *FirewallRule `protobuf:"bytes,1,opt,name=rule,proto3" json:"rule,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AddFirewallRuleRequest) Reset() { + *x = AddFirewallRuleRequest{} + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AddFirewallRuleRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddFirewallRuleRequest) ProtoMessage() {} + +func (x *AddFirewallRuleRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[10] + 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 AddFirewallRuleRequest.ProtoReflect.Descriptor instead. +func (*AddFirewallRuleRequest) Descriptor() ([]byte, []int) { + return file_proto_mc_proxy_v1_admin_proto_rawDescGZIP(), []int{10} +} + +func (x *AddFirewallRuleRequest) GetRule() *FirewallRule { + if x != nil { + return x.Rule + } + return nil +} + +type AddFirewallRuleResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AddFirewallRuleResponse) Reset() { + *x = AddFirewallRuleResponse{} + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AddFirewallRuleResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddFirewallRuleResponse) ProtoMessage() {} + +func (x *AddFirewallRuleResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[11] + 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 AddFirewallRuleResponse.ProtoReflect.Descriptor instead. +func (*AddFirewallRuleResponse) Descriptor() ([]byte, []int) { + return file_proto_mc_proxy_v1_admin_proto_rawDescGZIP(), []int{11} +} + +type RemoveFirewallRuleRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Rule *FirewallRule `protobuf:"bytes,1,opt,name=rule,proto3" json:"rule,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RemoveFirewallRuleRequest) Reset() { + *x = RemoveFirewallRuleRequest{} + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RemoveFirewallRuleRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RemoveFirewallRuleRequest) ProtoMessage() {} + +func (x *RemoveFirewallRuleRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[12] + 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 RemoveFirewallRuleRequest.ProtoReflect.Descriptor instead. +func (*RemoveFirewallRuleRequest) Descriptor() ([]byte, []int) { + return file_proto_mc_proxy_v1_admin_proto_rawDescGZIP(), []int{12} +} + +func (x *RemoveFirewallRuleRequest) GetRule() *FirewallRule { + if x != nil { + return x.Rule + } + return nil +} + +type RemoveFirewallRuleResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RemoveFirewallRuleResponse) Reset() { + *x = RemoveFirewallRuleResponse{} + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RemoveFirewallRuleResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RemoveFirewallRuleResponse) ProtoMessage() {} + +func (x *RemoveFirewallRuleResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[13] + 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 RemoveFirewallRuleResponse.ProtoReflect.Descriptor instead. +func (*RemoveFirewallRuleResponse) Descriptor() ([]byte, []int) { + return file_proto_mc_proxy_v1_admin_proto_rawDescGZIP(), []int{13} +} + +type ListenerStatus struct { + state protoimpl.MessageState `protogen:"open.v1"` + Addr string `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"` + RouteCount int32 `protobuf:"varint,2,opt,name=route_count,json=routeCount,proto3" json:"route_count,omitempty"` + ActiveConnections int64 `protobuf:"varint,3,opt,name=active_connections,json=activeConnections,proto3" json:"active_connections,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListenerStatus) Reset() { + *x = ListenerStatus{} + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListenerStatus) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListenerStatus) ProtoMessage() {} + +func (x *ListenerStatus) ProtoReflect() protoreflect.Message { + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[14] + 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 ListenerStatus.ProtoReflect.Descriptor instead. +func (*ListenerStatus) Descriptor() ([]byte, []int) { + return file_proto_mc_proxy_v1_admin_proto_rawDescGZIP(), []int{14} +} + +func (x *ListenerStatus) GetAddr() string { + if x != nil { + return x.Addr + } + return "" +} + +func (x *ListenerStatus) GetRouteCount() int32 { + if x != nil { + return x.RouteCount + } + return 0 +} + +func (x *ListenerStatus) GetActiveConnections() int64 { + if x != nil { + return x.ActiveConnections + } + return 0 +} + +type GetStatusRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetStatusRequest) Reset() { + *x = GetStatusRequest{} + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetStatusRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetStatusRequest) ProtoMessage() {} + +func (x *GetStatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[15] + 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 GetStatusRequest.ProtoReflect.Descriptor instead. +func (*GetStatusRequest) Descriptor() ([]byte, []int) { + return file_proto_mc_proxy_v1_admin_proto_rawDescGZIP(), []int{15} +} + +type GetStatusResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` + StartedAt *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=started_at,json=startedAt,proto3" json:"started_at,omitempty"` + Listeners []*ListenerStatus `protobuf:"bytes,3,rep,name=listeners,proto3" json:"listeners,omitempty"` + TotalConnections int64 `protobuf:"varint,4,opt,name=total_connections,json=totalConnections,proto3" json:"total_connections,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetStatusResponse) Reset() { + *x = GetStatusResponse{} + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetStatusResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetStatusResponse) ProtoMessage() {} + +func (x *GetStatusResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_mc_proxy_v1_admin_proto_msgTypes[16] + 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 GetStatusResponse.ProtoReflect.Descriptor instead. +func (*GetStatusResponse) Descriptor() ([]byte, []int) { + return file_proto_mc_proxy_v1_admin_proto_rawDescGZIP(), []int{16} +} + +func (x *GetStatusResponse) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *GetStatusResponse) GetStartedAt() *timestamppb.Timestamp { + if x != nil { + return x.StartedAt + } + return nil +} + +func (x *GetStatusResponse) GetListeners() []*ListenerStatus { + if x != nil { + return x.Listeners + } + return nil +} + +func (x *GetStatusResponse) GetTotalConnections() int64 { + if x != nil { + return x.TotalConnections + } + return 0 +} + +var File_proto_mc_proxy_v1_admin_proto protoreflect.FileDescriptor + +const file_proto_mc_proxy_v1_admin_proto_rawDesc = "" + + "\n" + + "\x1dproto/mc-proxy/v1/admin.proto\x12\vmc_proxy.v1\x1a\x1fgoogle/protobuf/timestamp.proto\"=\n" + + "\x05Route\x12\x1a\n" + + "\bhostname\x18\x01 \x01(\tR\bhostname\x12\x18\n" + + "\abackend\x18\x02 \x01(\tR\abackend\"8\n" + + "\x11ListRoutesRequest\x12#\n" + + "\rlistener_addr\x18\x01 \x01(\tR\flistenerAddr\"e\n" + + "\x12ListRoutesResponse\x12#\n" + + "\rlistener_addr\x18\x01 \x01(\tR\flistenerAddr\x12*\n" + + "\x06routes\x18\x02 \x03(\v2\x12.mc_proxy.v1.RouteR\x06routes\"`\n" + + "\x0fAddRouteRequest\x12#\n" + + "\rlistener_addr\x18\x01 \x01(\tR\flistenerAddr\x12(\n" + + "\x05route\x18\x02 \x01(\v2\x12.mc_proxy.v1.RouteR\x05route\"\x12\n" + + "\x10AddRouteResponse\"U\n" + + "\x12RemoveRouteRequest\x12#\n" + + "\rlistener_addr\x18\x01 \x01(\tR\flistenerAddr\x12\x1a\n" + + "\bhostname\x18\x02 \x01(\tR\bhostname\"\x15\n" + + "\x13RemoveRouteResponse\"W\n" + + "\fFirewallRule\x121\n" + + "\x04type\x18\x01 \x01(\x0e2\x1d.mc_proxy.v1.FirewallRuleTypeR\x04type\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value\"\x19\n" + + "\x17GetFirewallRulesRequest\"K\n" + + "\x18GetFirewallRulesResponse\x12/\n" + + "\x05rules\x18\x01 \x03(\v2\x19.mc_proxy.v1.FirewallRuleR\x05rules\"G\n" + + "\x16AddFirewallRuleRequest\x12-\n" + + "\x04rule\x18\x01 \x01(\v2\x19.mc_proxy.v1.FirewallRuleR\x04rule\"\x19\n" + + "\x17AddFirewallRuleResponse\"J\n" + + "\x19RemoveFirewallRuleRequest\x12-\n" + + "\x04rule\x18\x01 \x01(\v2\x19.mc_proxy.v1.FirewallRuleR\x04rule\"\x1c\n" + + "\x1aRemoveFirewallRuleResponse\"t\n" + + "\x0eListenerStatus\x12\x12\n" + + "\x04addr\x18\x01 \x01(\tR\x04addr\x12\x1f\n" + + "\vroute_count\x18\x02 \x01(\x05R\n" + + "routeCount\x12-\n" + + "\x12active_connections\x18\x03 \x01(\x03R\x11activeConnections\"\x12\n" + + "\x10GetStatusRequest\"\xd0\x01\n" + + "\x11GetStatusResponse\x12\x18\n" + + "\aversion\x18\x01 \x01(\tR\aversion\x129\n" + + "\n" + + "started_at\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\tstartedAt\x129\n" + + "\tlisteners\x18\x03 \x03(\v2\x1b.mc_proxy.v1.ListenerStatusR\tlisteners\x12+\n" + + "\x11total_connections\x18\x04 \x01(\x03R\x10totalConnections*\x8e\x01\n" + + "\x10FirewallRuleType\x12\"\n" + + "\x1eFIREWALL_RULE_TYPE_UNSPECIFIED\x10\x00\x12\x19\n" + + "\x15FIREWALL_RULE_TYPE_IP\x10\x01\x12\x1b\n" + + "\x17FIREWALL_RULE_TYPE_CIDR\x10\x02\x12\x1e\n" + + "\x1aFIREWALL_RULE_TYPE_COUNTRY\x10\x032\xe8\x04\n" + + "\n" + + "ProxyAdmin\x12M\n" + + "\n" + + "ListRoutes\x12\x1e.mc_proxy.v1.ListRoutesRequest\x1a\x1f.mc_proxy.v1.ListRoutesResponse\x12G\n" + + "\bAddRoute\x12\x1c.mc_proxy.v1.AddRouteRequest\x1a\x1d.mc_proxy.v1.AddRouteResponse\x12P\n" + + "\vRemoveRoute\x12\x1f.mc_proxy.v1.RemoveRouteRequest\x1a .mc_proxy.v1.RemoveRouteResponse\x12_\n" + + "\x10GetFirewallRules\x12$.mc_proxy.v1.GetFirewallRulesRequest\x1a%.mc_proxy.v1.GetFirewallRulesResponse\x12\\\n" + + "\x0fAddFirewallRule\x12#.mc_proxy.v1.AddFirewallRuleRequest\x1a$.mc_proxy.v1.AddFirewallRuleResponse\x12e\n" + + "\x12RemoveFirewallRule\x12&.mc_proxy.v1.RemoveFirewallRuleRequest\x1a'.mc_proxy.v1.RemoveFirewallRuleResponse\x12J\n" + + "\tGetStatus\x12\x1d.mc_proxy.v1.GetStatusRequest\x1a\x1e.mc_proxy.v1.GetStatusResponseB:Z8git.wntrmute.dev/kyle/mc-proxy/gen/mc-proxy/v1;mcproxyv1b\x06proto3" + +var ( + file_proto_mc_proxy_v1_admin_proto_rawDescOnce sync.Once + file_proto_mc_proxy_v1_admin_proto_rawDescData []byte +) + +func file_proto_mc_proxy_v1_admin_proto_rawDescGZIP() []byte { + file_proto_mc_proxy_v1_admin_proto_rawDescOnce.Do(func() { + file_proto_mc_proxy_v1_admin_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_proto_mc_proxy_v1_admin_proto_rawDesc), len(file_proto_mc_proxy_v1_admin_proto_rawDesc))) + }) + return file_proto_mc_proxy_v1_admin_proto_rawDescData +} + +var file_proto_mc_proxy_v1_admin_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_proto_mc_proxy_v1_admin_proto_msgTypes = make([]protoimpl.MessageInfo, 17) +var file_proto_mc_proxy_v1_admin_proto_goTypes = []any{ + (FirewallRuleType)(0), // 0: mc_proxy.v1.FirewallRuleType + (*Route)(nil), // 1: mc_proxy.v1.Route + (*ListRoutesRequest)(nil), // 2: mc_proxy.v1.ListRoutesRequest + (*ListRoutesResponse)(nil), // 3: mc_proxy.v1.ListRoutesResponse + (*AddRouteRequest)(nil), // 4: mc_proxy.v1.AddRouteRequest + (*AddRouteResponse)(nil), // 5: mc_proxy.v1.AddRouteResponse + (*RemoveRouteRequest)(nil), // 6: mc_proxy.v1.RemoveRouteRequest + (*RemoveRouteResponse)(nil), // 7: mc_proxy.v1.RemoveRouteResponse + (*FirewallRule)(nil), // 8: mc_proxy.v1.FirewallRule + (*GetFirewallRulesRequest)(nil), // 9: mc_proxy.v1.GetFirewallRulesRequest + (*GetFirewallRulesResponse)(nil), // 10: mc_proxy.v1.GetFirewallRulesResponse + (*AddFirewallRuleRequest)(nil), // 11: mc_proxy.v1.AddFirewallRuleRequest + (*AddFirewallRuleResponse)(nil), // 12: mc_proxy.v1.AddFirewallRuleResponse + (*RemoveFirewallRuleRequest)(nil), // 13: mc_proxy.v1.RemoveFirewallRuleRequest + (*RemoveFirewallRuleResponse)(nil), // 14: mc_proxy.v1.RemoveFirewallRuleResponse + (*ListenerStatus)(nil), // 15: mc_proxy.v1.ListenerStatus + (*GetStatusRequest)(nil), // 16: mc_proxy.v1.GetStatusRequest + (*GetStatusResponse)(nil), // 17: mc_proxy.v1.GetStatusResponse + (*timestamppb.Timestamp)(nil), // 18: google.protobuf.Timestamp +} +var file_proto_mc_proxy_v1_admin_proto_depIdxs = []int32{ + 1, // 0: mc_proxy.v1.ListRoutesResponse.routes:type_name -> mc_proxy.v1.Route + 1, // 1: mc_proxy.v1.AddRouteRequest.route:type_name -> mc_proxy.v1.Route + 0, // 2: mc_proxy.v1.FirewallRule.type:type_name -> mc_proxy.v1.FirewallRuleType + 8, // 3: mc_proxy.v1.GetFirewallRulesResponse.rules:type_name -> mc_proxy.v1.FirewallRule + 8, // 4: mc_proxy.v1.AddFirewallRuleRequest.rule:type_name -> mc_proxy.v1.FirewallRule + 8, // 5: mc_proxy.v1.RemoveFirewallRuleRequest.rule:type_name -> mc_proxy.v1.FirewallRule + 18, // 6: mc_proxy.v1.GetStatusResponse.started_at:type_name -> google.protobuf.Timestamp + 15, // 7: mc_proxy.v1.GetStatusResponse.listeners:type_name -> mc_proxy.v1.ListenerStatus + 2, // 8: mc_proxy.v1.ProxyAdmin.ListRoutes:input_type -> mc_proxy.v1.ListRoutesRequest + 4, // 9: mc_proxy.v1.ProxyAdmin.AddRoute:input_type -> mc_proxy.v1.AddRouteRequest + 6, // 10: mc_proxy.v1.ProxyAdmin.RemoveRoute:input_type -> mc_proxy.v1.RemoveRouteRequest + 9, // 11: mc_proxy.v1.ProxyAdmin.GetFirewallRules:input_type -> mc_proxy.v1.GetFirewallRulesRequest + 11, // 12: mc_proxy.v1.ProxyAdmin.AddFirewallRule:input_type -> mc_proxy.v1.AddFirewallRuleRequest + 13, // 13: mc_proxy.v1.ProxyAdmin.RemoveFirewallRule:input_type -> mc_proxy.v1.RemoveFirewallRuleRequest + 16, // 14: mc_proxy.v1.ProxyAdmin.GetStatus:input_type -> mc_proxy.v1.GetStatusRequest + 3, // 15: mc_proxy.v1.ProxyAdmin.ListRoutes:output_type -> mc_proxy.v1.ListRoutesResponse + 5, // 16: mc_proxy.v1.ProxyAdmin.AddRoute:output_type -> mc_proxy.v1.AddRouteResponse + 7, // 17: mc_proxy.v1.ProxyAdmin.RemoveRoute:output_type -> mc_proxy.v1.RemoveRouteResponse + 10, // 18: mc_proxy.v1.ProxyAdmin.GetFirewallRules:output_type -> mc_proxy.v1.GetFirewallRulesResponse + 12, // 19: mc_proxy.v1.ProxyAdmin.AddFirewallRule:output_type -> mc_proxy.v1.AddFirewallRuleResponse + 14, // 20: mc_proxy.v1.ProxyAdmin.RemoveFirewallRule:output_type -> mc_proxy.v1.RemoveFirewallRuleResponse + 17, // 21: mc_proxy.v1.ProxyAdmin.GetStatus:output_type -> mc_proxy.v1.GetStatusResponse + 15, // [15:22] is the sub-list for method output_type + 8, // [8:15] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name +} + +func init() { file_proto_mc_proxy_v1_admin_proto_init() } +func file_proto_mc_proxy_v1_admin_proto_init() { + if File_proto_mc_proxy_v1_admin_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_mc_proxy_v1_admin_proto_rawDesc), len(file_proto_mc_proxy_v1_admin_proto_rawDesc)), + NumEnums: 1, + NumMessages: 17, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_proto_mc_proxy_v1_admin_proto_goTypes, + DependencyIndexes: file_proto_mc_proxy_v1_admin_proto_depIdxs, + EnumInfos: file_proto_mc_proxy_v1_admin_proto_enumTypes, + MessageInfos: file_proto_mc_proxy_v1_admin_proto_msgTypes, + }.Build() + File_proto_mc_proxy_v1_admin_proto = out.File + file_proto_mc_proxy_v1_admin_proto_goTypes = nil + file_proto_mc_proxy_v1_admin_proto_depIdxs = nil +} diff --git a/gen/mc-proxy/v1/admin_grpc.pb.go b/gen/mc-proxy/v1/admin_grpc.pb.go new file mode 100644 index 0000000..0f80d57 --- /dev/null +++ b/gen/mc-proxy/v1/admin_grpc.pb.go @@ -0,0 +1,355 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.6.1 +// - protoc v6.33.4 +// source: proto/mc-proxy/v1/admin.proto + +package mcproxyv1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + ProxyAdmin_ListRoutes_FullMethodName = "/mc_proxy.v1.ProxyAdmin/ListRoutes" + ProxyAdmin_AddRoute_FullMethodName = "/mc_proxy.v1.ProxyAdmin/AddRoute" + ProxyAdmin_RemoveRoute_FullMethodName = "/mc_proxy.v1.ProxyAdmin/RemoveRoute" + ProxyAdmin_GetFirewallRules_FullMethodName = "/mc_proxy.v1.ProxyAdmin/GetFirewallRules" + ProxyAdmin_AddFirewallRule_FullMethodName = "/mc_proxy.v1.ProxyAdmin/AddFirewallRule" + ProxyAdmin_RemoveFirewallRule_FullMethodName = "/mc_proxy.v1.ProxyAdmin/RemoveFirewallRule" + ProxyAdmin_GetStatus_FullMethodName = "/mc_proxy.v1.ProxyAdmin/GetStatus" +) + +// ProxyAdminClient is the client API for ProxyAdmin service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type ProxyAdminClient interface { + // Routes + ListRoutes(ctx context.Context, in *ListRoutesRequest, opts ...grpc.CallOption) (*ListRoutesResponse, error) + AddRoute(ctx context.Context, in *AddRouteRequest, opts ...grpc.CallOption) (*AddRouteResponse, error) + RemoveRoute(ctx context.Context, in *RemoveRouteRequest, opts ...grpc.CallOption) (*RemoveRouteResponse, error) + // Firewall + GetFirewallRules(ctx context.Context, in *GetFirewallRulesRequest, opts ...grpc.CallOption) (*GetFirewallRulesResponse, error) + AddFirewallRule(ctx context.Context, in *AddFirewallRuleRequest, opts ...grpc.CallOption) (*AddFirewallRuleResponse, error) + RemoveFirewallRule(ctx context.Context, in *RemoveFirewallRuleRequest, opts ...grpc.CallOption) (*RemoveFirewallRuleResponse, error) + // Status + GetStatus(ctx context.Context, in *GetStatusRequest, opts ...grpc.CallOption) (*GetStatusResponse, error) +} + +type proxyAdminClient struct { + cc grpc.ClientConnInterface +} + +func NewProxyAdminClient(cc grpc.ClientConnInterface) ProxyAdminClient { + return &proxyAdminClient{cc} +} + +func (c *proxyAdminClient) ListRoutes(ctx context.Context, in *ListRoutesRequest, opts ...grpc.CallOption) (*ListRoutesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListRoutesResponse) + err := c.cc.Invoke(ctx, ProxyAdmin_ListRoutes_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *proxyAdminClient) AddRoute(ctx context.Context, in *AddRouteRequest, opts ...grpc.CallOption) (*AddRouteResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(AddRouteResponse) + err := c.cc.Invoke(ctx, ProxyAdmin_AddRoute_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *proxyAdminClient) RemoveRoute(ctx context.Context, in *RemoveRouteRequest, opts ...grpc.CallOption) (*RemoveRouteResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RemoveRouteResponse) + err := c.cc.Invoke(ctx, ProxyAdmin_RemoveRoute_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *proxyAdminClient) GetFirewallRules(ctx context.Context, in *GetFirewallRulesRequest, opts ...grpc.CallOption) (*GetFirewallRulesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetFirewallRulesResponse) + err := c.cc.Invoke(ctx, ProxyAdmin_GetFirewallRules_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *proxyAdminClient) AddFirewallRule(ctx context.Context, in *AddFirewallRuleRequest, opts ...grpc.CallOption) (*AddFirewallRuleResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(AddFirewallRuleResponse) + err := c.cc.Invoke(ctx, ProxyAdmin_AddFirewallRule_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *proxyAdminClient) RemoveFirewallRule(ctx context.Context, in *RemoveFirewallRuleRequest, opts ...grpc.CallOption) (*RemoveFirewallRuleResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RemoveFirewallRuleResponse) + err := c.cc.Invoke(ctx, ProxyAdmin_RemoveFirewallRule_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *proxyAdminClient) GetStatus(ctx context.Context, in *GetStatusRequest, opts ...grpc.CallOption) (*GetStatusResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetStatusResponse) + err := c.cc.Invoke(ctx, ProxyAdmin_GetStatus_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// ProxyAdminServer is the server API for ProxyAdmin service. +// All implementations must embed UnimplementedProxyAdminServer +// for forward compatibility. +type ProxyAdminServer interface { + // Routes + ListRoutes(context.Context, *ListRoutesRequest) (*ListRoutesResponse, error) + AddRoute(context.Context, *AddRouteRequest) (*AddRouteResponse, error) + RemoveRoute(context.Context, *RemoveRouteRequest) (*RemoveRouteResponse, error) + // Firewall + GetFirewallRules(context.Context, *GetFirewallRulesRequest) (*GetFirewallRulesResponse, error) + AddFirewallRule(context.Context, *AddFirewallRuleRequest) (*AddFirewallRuleResponse, error) + RemoveFirewallRule(context.Context, *RemoveFirewallRuleRequest) (*RemoveFirewallRuleResponse, error) + // Status + GetStatus(context.Context, *GetStatusRequest) (*GetStatusResponse, error) + mustEmbedUnimplementedProxyAdminServer() +} + +// UnimplementedProxyAdminServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedProxyAdminServer struct{} + +func (UnimplementedProxyAdminServer) ListRoutes(context.Context, *ListRoutesRequest) (*ListRoutesResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ListRoutes not implemented") +} +func (UnimplementedProxyAdminServer) AddRoute(context.Context, *AddRouteRequest) (*AddRouteResponse, error) { + return nil, status.Error(codes.Unimplemented, "method AddRoute not implemented") +} +func (UnimplementedProxyAdminServer) RemoveRoute(context.Context, *RemoveRouteRequest) (*RemoveRouteResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RemoveRoute not implemented") +} +func (UnimplementedProxyAdminServer) GetFirewallRules(context.Context, *GetFirewallRulesRequest) (*GetFirewallRulesResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GetFirewallRules not implemented") +} +func (UnimplementedProxyAdminServer) AddFirewallRule(context.Context, *AddFirewallRuleRequest) (*AddFirewallRuleResponse, error) { + return nil, status.Error(codes.Unimplemented, "method AddFirewallRule not implemented") +} +func (UnimplementedProxyAdminServer) RemoveFirewallRule(context.Context, *RemoveFirewallRuleRequest) (*RemoveFirewallRuleResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RemoveFirewallRule not implemented") +} +func (UnimplementedProxyAdminServer) GetStatus(context.Context, *GetStatusRequest) (*GetStatusResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GetStatus not implemented") +} +func (UnimplementedProxyAdminServer) mustEmbedUnimplementedProxyAdminServer() {} +func (UnimplementedProxyAdminServer) testEmbeddedByValue() {} + +// UnsafeProxyAdminServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to ProxyAdminServer will +// result in compilation errors. +type UnsafeProxyAdminServer interface { + mustEmbedUnimplementedProxyAdminServer() +} + +func RegisterProxyAdminServer(s grpc.ServiceRegistrar, srv ProxyAdminServer) { + // If the following call panics, it indicates UnimplementedProxyAdminServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&ProxyAdmin_ServiceDesc, srv) +} + +func _ProxyAdmin_ListRoutes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListRoutesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProxyAdminServer).ListRoutes(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ProxyAdmin_ListRoutes_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProxyAdminServer).ListRoutes(ctx, req.(*ListRoutesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ProxyAdmin_AddRoute_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AddRouteRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProxyAdminServer).AddRoute(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ProxyAdmin_AddRoute_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProxyAdminServer).AddRoute(ctx, req.(*AddRouteRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ProxyAdmin_RemoveRoute_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RemoveRouteRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProxyAdminServer).RemoveRoute(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ProxyAdmin_RemoveRoute_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProxyAdminServer).RemoveRoute(ctx, req.(*RemoveRouteRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ProxyAdmin_GetFirewallRules_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetFirewallRulesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProxyAdminServer).GetFirewallRules(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ProxyAdmin_GetFirewallRules_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProxyAdminServer).GetFirewallRules(ctx, req.(*GetFirewallRulesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ProxyAdmin_AddFirewallRule_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AddFirewallRuleRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProxyAdminServer).AddFirewallRule(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ProxyAdmin_AddFirewallRule_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProxyAdminServer).AddFirewallRule(ctx, req.(*AddFirewallRuleRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ProxyAdmin_RemoveFirewallRule_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RemoveFirewallRuleRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProxyAdminServer).RemoveFirewallRule(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ProxyAdmin_RemoveFirewallRule_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProxyAdminServer).RemoveFirewallRule(ctx, req.(*RemoveFirewallRuleRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ProxyAdmin_GetStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetStatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProxyAdminServer).GetStatus(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ProxyAdmin_GetStatus_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProxyAdminServer).GetStatus(ctx, req.(*GetStatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// ProxyAdmin_ServiceDesc is the grpc.ServiceDesc for ProxyAdmin service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var ProxyAdmin_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "mc_proxy.v1.ProxyAdmin", + HandlerType: (*ProxyAdminServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListRoutes", + Handler: _ProxyAdmin_ListRoutes_Handler, + }, + { + MethodName: "AddRoute", + Handler: _ProxyAdmin_AddRoute_Handler, + }, + { + MethodName: "RemoveRoute", + Handler: _ProxyAdmin_RemoveRoute_Handler, + }, + { + MethodName: "GetFirewallRules", + Handler: _ProxyAdmin_GetFirewallRules_Handler, + }, + { + MethodName: "AddFirewallRule", + Handler: _ProxyAdmin_AddFirewallRule_Handler, + }, + { + MethodName: "RemoveFirewallRule", + Handler: _ProxyAdmin_RemoveFirewallRule_Handler, + }, + { + MethodName: "GetStatus", + Handler: _ProxyAdmin_GetStatus_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "proto/mc-proxy/v1/admin.proto", +} diff --git a/proto/mc-proxy/v1/admin.proto b/proto/mc-proxy/v1/admin.proto new file mode 100644 index 0000000..89009e3 --- /dev/null +++ b/proto/mc-proxy/v1/admin.proto @@ -0,0 +1,101 @@ +syntax = "proto3"; + +package mc_proxy.v1; + +option go_package = "git.wntrmute.dev/kyle/mc-proxy/gen/mc-proxy/v1;mcproxyv1"; + +import "google/protobuf/timestamp.proto"; + +service ProxyAdmin { + // Routes + rpc ListRoutes(ListRoutesRequest) returns (ListRoutesResponse); + rpc AddRoute(AddRouteRequest) returns (AddRouteResponse); + rpc RemoveRoute(RemoveRouteRequest) returns (RemoveRouteResponse); + + // Firewall + rpc GetFirewallRules(GetFirewallRulesRequest) returns (GetFirewallRulesResponse); + rpc AddFirewallRule(AddFirewallRuleRequest) returns (AddFirewallRuleResponse); + rpc RemoveFirewallRule(RemoveFirewallRuleRequest) returns (RemoveFirewallRuleResponse); + + // Status + rpc GetStatus(GetStatusRequest) returns (GetStatusResponse); +} + +// Routes + +message Route { + string hostname = 1; + string backend = 2; +} + +message ListRoutesRequest { + string listener_addr = 1; +} + +message ListRoutesResponse { + string listener_addr = 1; + repeated Route routes = 2; +} + +message AddRouteRequest { + string listener_addr = 1; + Route route = 2; +} + +message AddRouteResponse {} + +message RemoveRouteRequest { + string listener_addr = 1; + string hostname = 2; +} + +message RemoveRouteResponse {} + +// Firewall + +enum FirewallRuleType { + FIREWALL_RULE_TYPE_UNSPECIFIED = 0; + FIREWALL_RULE_TYPE_IP = 1; + FIREWALL_RULE_TYPE_CIDR = 2; + FIREWALL_RULE_TYPE_COUNTRY = 3; +} + +message FirewallRule { + FirewallRuleType type = 1; + string value = 2; +} + +message GetFirewallRulesRequest {} + +message GetFirewallRulesResponse { + repeated FirewallRule rules = 1; +} + +message AddFirewallRuleRequest { + FirewallRule rule = 1; +} + +message AddFirewallRuleResponse {} + +message RemoveFirewallRuleRequest { + FirewallRule rule = 1; +} + +message RemoveFirewallRuleResponse {} + +// Status + +message ListenerStatus { + string addr = 1; + int32 route_count = 2; + int64 active_connections = 3; +} + +message GetStatusRequest {} + +message GetStatusResponse { + string version = 1; + google.protobuf.Timestamp started_at = 2; + repeated ListenerStatus listeners = 3; + int64 total_connections = 4; +}