diff --git a/.editorconfig b/.editorconfig index 698c63d..ad442a8 100644 --- a/.editorconfig +++ b/.editorconfig @@ -4,7 +4,8 @@ root = true end_of_line = lf insert_final_newline = true charset = utf-8 +indent_size = 2 +indent_style = space [*.proto] -indent_style = space -indent_size = 4 +indent_size = 2 diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..d674fc4 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,12 @@ +image: + name: docker.io/bufbuild/buf:latest + entrypoint: [""] + +stages: + - test + +lint: + stage: test + script: + - buf ls-files + - buf lint diff --git a/buf.yaml b/buf.yaml new file mode 100644 index 0000000..1a3861e --- /dev/null +++ b/buf.yaml @@ -0,0 +1,20 @@ +# Below is not the lint and breaking configuration we recommend! +# This just just what googleapis passes. +# For lint, we recommend having the single value "DEFAULT" in "use" +# with no values in "except". +# For breaking, we recommend having the single value "FILE" in use. +# See https://docs.buf.build/lint-usage +# See https://docs.buf.build/breaking-usage +version: v1beta1 +build: + roots: + - proto +lint: + use: + - DEFAULT + except: + - PACKAGE_DIRECTORY_MATCH + allow_comment_ignores: true +breaking: + use: + - FILE diff --git a/proto/audit/details/dns_details.proto b/proto/audit/details/dns_details.proto deleted file mode 100644 index f820840..0000000 --- a/proto/audit/details/dns_details.proto +++ /dev/null @@ -1,43 +0,0 @@ -syntax = "proto3"; - -option go_package = "gitlab.com/inetmock/inetmock/pkg/audit/details"; -option java_multiple_files = true; -option java_package = "com.github.baez90.inetmock.audit.details"; -option java_outer_classname = "HandlerEventProto"; -option csharp_namespace = "INetMock.Client.Audit.Details"; - -package inetmock.audit.details; - -enum DNSOpCode { - Query = 0; - Status = 2; - Notify = 4; - Update = 5; -} - -enum ResourceRecordType { - UnknownRR = 0; - A = 1; - NS = 2; - CNAME = 5; - SOA = 6; - PTR = 12; - HINFO = 13; - MINFO = 14; - MX = 15; - TXT = 16; - RP = 17; - AAAA = 28; - SRV = 33; - NAPTR = 35; -} - -message DNSQuestionEntity { - ResourceRecordType type = 1; - string name = 2; -} - -message DNSDetailsEntity { - DNSOpCode opcode = 1; - repeated DNSQuestionEntity questions = 2; -} diff --git a/proto/audit/details/http_details.proto b/proto/audit/details/http_details.proto deleted file mode 100644 index e5e5d7a..0000000 --- a/proto/audit/details/http_details.proto +++ /dev/null @@ -1,33 +0,0 @@ -syntax = "proto3"; - -option go_package = "gitlab.com/inetmock/inetmock/pkg/audit/details"; -option java_multiple_files = true; -option java_package = "com.github.baez90.inetmock.audit.details"; -option java_outer_classname = "HandlerEventProto"; -option csharp_namespace = "INetMock.Client.Audit.Details"; - -package inetmock.audit.details; - -enum HTTPMethod { - GET = 0; - HEAD = 1; - POST = 2; - PUT = 3; - DELETE = 4; - CONNECT = 5; - OPTIONS = 6; - TRACE = 7; - PATCH = 8; -} - -message HTTPHeaderValue { - repeated string values = 1; -} - -message HTTPDetailsEntity { - HTTPMethod method = 1; - string host = 2; - string uri = 3; - string proto = 4; - map headers = 5; -} diff --git a/proto/audit/event_entity.proto b/proto/audit/event_entity.proto deleted file mode 100644 index 3b213ee..0000000 --- a/proto/audit/event_entity.proto +++ /dev/null @@ -1,52 +0,0 @@ -syntax = "proto3"; - -option go_package = "gitlab.com/inetmock/inetmock/pkg/audit"; -option java_multiple_files = true; -option java_package = "com.github.baez90.inetmock.audit"; -option java_outer_classname = "HandlerEventProto"; -option csharp_namespace = "INetMock.Client.Audit"; - -package inetmock.audit; - -import "google/protobuf/any.proto"; -import "google/protobuf/timestamp.proto"; - -enum TransportProtocol { - UNKNOWN_TRANSPORT = 0; - TCP = 1; - UDP = 2; -} - -enum AppProtocol { - UNKNOWN_APPLICATION = 0; - DNS = 1; - HTTP = 2; - HTTP_PROXY = 3; -} - -enum TLSVersion { - SSLv30 = 0; - TLS10 = 1; - TLS11 = 2; - TLS12 = 3; - TLS13 = 4; -} - -message TLSDetailsEntity { - TLSVersion version = 1; - string cipherSuite = 2; - string serverName = 3; -} - -message EventEntity { - int64 id = 1; - google.protobuf.Timestamp timestamp = 2; - TransportProtocol transport = 3; - AppProtocol application = 4; - bytes sourceIP = 5; - bytes destinationIP = 6; - uint32 sourcePort = 7; - uint32 destinationPort = 8; - TLSDetailsEntity tls = 9; - google.protobuf.Any protocolDetails = 10; -} diff --git a/proto/audit/v1/dns_details.proto b/proto/audit/v1/dns_details.proto new file mode 100644 index 0000000..974e530 --- /dev/null +++ b/proto/audit/v1/dns_details.proto @@ -0,0 +1,44 @@ +syntax = "proto3"; + +package inetmock.audit.v1; + +option csharp_namespace = "INetMock.Client.Audit"; +option go_package = "gitlab.com/inetmock/inetmock/pkg/audit"; +option java_multiple_files = true; +option java_outer_classname = "HandlerEventProto"; +option java_package = "com.github.baez90.inetmock.audit"; + +enum DNSOpCode { + //buf:lint:ignore ENUM_ZERO_VALUE_SUFFIX + DNS_OP_CODE_QUERY = 0; + DNS_OP_CODE_STATUS = 2; + DNS_OP_CODE_NOTIFY = 4; + DNS_OP_CODE_UPDATE = 5; +} + +enum ResourceRecordType { + RESOURCE_RECORD_TYPE_UNSPECIFIED = 0; + RESOURCE_RECORD_TYPE_A = 1; + RESOURCE_RECORD_TYPE_NS = 2; + RESOURCE_RECORD_TYPE_CNAME = 5; + RESOURCE_RECORD_TYPE_SOA = 6; + RESOURCE_RECORD_TYPE_PTR = 12; + RESOURCE_RECORD_TYPE_HINFO = 13; + RESOURCE_RECORD_TYPE_MINFO = 14; + RESOURCE_RECORD_TYPE_MX = 15; + RESOURCE_RECORD_TYPE_TXT = 16; + RESOURCE_RECORD_TYPE_RP = 17; + RESOURCE_RECORD_TYPE_AAAA = 28; + RESOURCE_RECORD_TYPE_SRV = 33; + RESOURCE_RECORD_TYPE_NAPTR = 35; +} + +message DNSQuestionEntity { + ResourceRecordType type = 1; + string name = 2; +} + +message DNSDetailsEntity { + DNSOpCode opcode = 1; + repeated DNSQuestionEntity questions = 2; +} diff --git a/proto/audit/v1/event_entity.proto b/proto/audit/v1/event_entity.proto new file mode 100644 index 0000000..3b1047a --- /dev/null +++ b/proto/audit/v1/event_entity.proto @@ -0,0 +1,52 @@ +syntax = "proto3"; + +package inetmock.audit.v1; + +option csharp_namespace = "INetMock.Client.Audit"; +option go_package = "gitlab.com/inetmock/inetmock/pkg/audit"; +option java_multiple_files = true; +option java_outer_classname = "HandlerEventProto"; +option java_package = "com.github.baez90.inetmock.audit"; + +import "google/protobuf/any.proto"; +import "google/protobuf/timestamp.proto"; + +enum TransportProtocol { + TRANSPORT_PROTOCOL_UNSPECIFIED = 0; + TRANSPORT_PROTOCOL_TCP = 1; + TRANSPORT_PROTOCOL_UDP = 2; +} + +enum AppProtocol { + APP_PROTOCOL_UNSPECIFIED = 0; + APP_PROTOCOL_DNS = 1; + APP_PROTOCOL_HTTP = 2; + APP_PROTOCOL_HTTP_PROXY = 3; +} + +enum TLSVersion { + TLS_VERSION_UNSPECIFIED = 0; + TLS_VERSION_TLS10 = 1; + TLS_VERSION_TLS11 = 2; + TLS_VERSION_TLS12 = 3; + TLS_VERSION_TLS13 = 4; +} + +message TLSDetailsEntity { + TLSVersion version = 1; + string cipher_suite = 2; + string server_name = 3; +} + +message EventEntity { + int64 id = 1; + google.protobuf.Timestamp timestamp = 2; + TransportProtocol transport = 3; + AppProtocol application = 4; + bytes source_ip = 5; + bytes destination_ip = 6; + uint32 source_port = 7; + uint32 destination_port = 8; + TLSDetailsEntity tls = 9; + google.protobuf.Any protocol_details = 10; +} diff --git a/proto/audit/v1/http_details.proto b/proto/audit/v1/http_details.proto new file mode 100644 index 0000000..9db4396 --- /dev/null +++ b/proto/audit/v1/http_details.proto @@ -0,0 +1,34 @@ +syntax = "proto3"; + +package inetmock.audit.v1; + +option csharp_namespace = "INetMock.Client.Audit"; +option go_package = "gitlab.com/inetmock/inetmock/pkg/audit"; +option java_multiple_files = true; +option java_outer_classname = "HandlerEventProto"; +option java_package = "com.github.baez90.inetmock.audit"; + +enum HTTPMethod { + HTTP_METHOD_UNSPECIFIED = 0; + HTTP_METHOD_GET = 1; + HTTP_METHOD_HEAD = 2; + HTTP_METHOD_POST = 3; + HTTP_METHOD_PUT = 4; + HTTP_METHOD_DELETE = 5; + HTTP_METHOD_CONNECT = 6; + HTTP_METHOD_OPTIONS = 7; + HTTP_METHOD_TRACE = 8; + HTTP_METHOD_PATCH = 9; +} + +message HTTPHeaderValue { + repeated string values = 1; +} + +message HTTPDetailsEntity { + HTTPMethod method = 1; + string host = 2; + string uri = 3; + string proto = 4; + map headers = 5; +} diff --git a/proto/rpc/audit.proto b/proto/rpc/audit.proto deleted file mode 100644 index 2bd2caa..0000000 --- a/proto/rpc/audit.proto +++ /dev/null @@ -1,51 +0,0 @@ -syntax = "proto3"; - -option go_package = "gitlab.com/inetmock/inetmock/pkg/rpc"; -option java_multiple_files = true; -option java_package = "com.github.baez90.inetmock.rpc"; -option java_outer_classname = "AuditProto"; -option csharp_namespace = "INetMock.Client.Rpc"; - -import 'audit/event_entity.proto'; - -package inetmock.rpc; - -enum FileOpenMode { - TRUNCATE = 0; - APPEND = 1; -} - -message WatchEventsRequest { - string watcherName = 1; -} - -message RegisterFileSinkRequest { - string targetPath = 1; -} - -message RegisterFileSinkResponse { - string resolvedPath = 1; -} - -message RemoveFileSinkRequest { - string targetPath = 1; -} - -message RemoveFileSinkResponse { - bool SinkGotRemoved = 1; -} - -message ListSinksRequest { - -} - -message ListSinksResponse { - repeated string sinks = 1; -} - -service Audit { - rpc WatchEvents (WatchEventsRequest) returns (stream inetmock.audit.EventEntity); - rpc RegisterFileSink (RegisterFileSinkRequest) returns (RegisterFileSinkResponse); - rpc RemoveFileSink (RemoveFileSinkRequest) returns (RemoveFileSinkResponse); - rpc ListSinks(ListSinksRequest) returns (ListSinksResponse); -} diff --git a/proto/rpc/health.proto b/proto/rpc/health.proto deleted file mode 100644 index 193bc8c..0000000 --- a/proto/rpc/health.proto +++ /dev/null @@ -1,35 +0,0 @@ -syntax = "proto3"; - -option go_package = "gitlab.com/inetmock/inetmock/internal/rpc"; -option java_multiple_files = true; -option java_package = "com.github.baez90.inetmock.rpc"; -option java_outer_classname = "HealthProto"; -option csharp_namespace = "INetMock.Client.Rpc"; - -package inetmock.rpc; - -service Health { - rpc GetHealth (HealthRequest) returns (HealthResponse) { - } -} - -enum HealthState { - HEALTHY = 0; - INITIALIZING = 1; - UNHEALTHY = 2; - UNKNOWN = 3; -} - -message HealthRequest { - repeated string components = 1; -} - -message ComponentHealth { - HealthState State = 1; - string message = 2; -} - -message HealthResponse { - HealthState overallHealthState = 1; - map componentsHealth = 2; -} diff --git a/proto/rpc/v1/audit.proto b/proto/rpc/v1/audit.proto new file mode 100644 index 0000000..f296e77 --- /dev/null +++ b/proto/rpc/v1/audit.proto @@ -0,0 +1,48 @@ +syntax = "proto3"; + +package inetmock.rpc.v1; + +option csharp_namespace = "INetMock.Client.Rpc"; +option go_package = "gitlab.com/inetmock/inetmock/pkg/rpc"; +option java_multiple_files = true; +option java_outer_classname = "AuditProto"; +option java_package = "com.github.baez90.inetmock.rpc"; + +import "audit/v1/event_entity.proto"; + +message WatchEventsRequest { + string watcher_name = 1; +} + +message WatchEventsResponse { + inetmock.audit.v1.EventEntity entity = 1; +} + +message RegisterFileSinkRequest { + string target_path = 1; +} + +message RegisterFileSinkResponse { + string resolved_path = 1; +} + +message RemoveFileSinkRequest { + string target_path = 1; +} + +message RemoveFileSinkResponse { + bool sink_got_removed = 1; +} + +message ListSinksRequest {} + +message ListSinksResponse { + repeated string sinks = 1; +} + +service AuditService { + rpc WatchEvents(WatchEventsRequest) returns (stream WatchEventsResponse); + rpc RegisterFileSink(RegisterFileSinkRequest) returns (RegisterFileSinkResponse); + rpc RemoveFileSink(RemoveFileSinkRequest) returns (RemoveFileSinkResponse); + rpc ListSinks(ListSinksRequest) returns (ListSinksResponse); +} diff --git a/proto/rpc/v1/health.proto b/proto/rpc/v1/health.proto new file mode 100644 index 0000000..16813a8 --- /dev/null +++ b/proto/rpc/v1/health.proto @@ -0,0 +1,34 @@ +syntax = "proto3"; + +package inetmock.rpc.v1; + +option csharp_namespace = "INetMock.Client.Rpc"; +option go_package = "gitlab.com/inetmock/inetmock/pkg/rpc"; +option java_multiple_files = true; +option java_outer_classname = "HealthProto"; +option java_package = "com.github.baez90.inetmock.rpc"; + +enum HealthState { + HEALTH_STATE_UNSPECIFIED = 0; + HEALTH_STATE_INITIALIZING = 1; + HEALTH_STATE_UNHEALTHY = 2; + HEALTH_STATE_HEALTHY = 3; +} + +message GetHealthRequest { + repeated string components = 1; +} + +message ComponentHealth { + HealthState state = 1; + string message = 2; +} + +message GetHealthResponse { + HealthState overall_health_state = 1; + map components_health = 2; +} + +service HealthService { + rpc GetHealth(GetHealthRequest) returns (GetHealthResponse); +} diff --git a/proto/rpc/v1/pcap.proto b/proto/rpc/v1/pcap.proto new file mode 100644 index 0000000..214d09a --- /dev/null +++ b/proto/rpc/v1/pcap.proto @@ -0,0 +1,53 @@ +syntax = "proto3"; + +package inetmock.rpc.v1; + +option csharp_namespace = "INetMock.Client.Rpc"; +option go_package = "gitlab.com/inetmock/inetmock/pkg/rpc"; +option java_multiple_files = true; +option java_outer_classname = "AuditProto"; +option java_package = "com.github.baez90.inetmock.rpc"; + +import "google/protobuf/duration.proto"; + +message ListAvailableDevicesRequest {} + +message ListAvailableDevicesResponse { + message PCAPDevice { + string name = 1; + repeated bytes addresses = 2; + } + repeated PCAPDevice available_devices = 1; +} + +message ListActiveRecordingsRequest {} + +message ListActiveRecordingsResponse { + repeated string subscriptions = 1; +} + +message StartPCAPFileRecordingRequest { + string device = 1; + string target_path = 2; + bool promiscuous = 3; + google.protobuf.Duration read_timeout = 4; +} + +message StartPCAPFileRecordingResponse { + string resolved_path = 1; +} + +message StopPCAPFileRecordRequest { + string consumer_key = 1; +} + +message StopPCAPFileRecordResponse { + bool removed = 1; +} + +service PCAPService { + rpc ListAvailableDevices(ListAvailableDevicesRequest) returns (ListAvailableDevicesResponse); + rpc ListActiveRecordings(ListActiveRecordingsRequest) returns (ListActiveRecordingsResponse); + rpc StartPCAPFileRecording(StartPCAPFileRecordingRequest) returns (StartPCAPFileRecordingResponse); + rpc StopPCAPFileRecord(StopPCAPFileRecordRequest) returns (StopPCAPFileRecordResponse); +}