syntax = "proto3";

package milotic_grpc_proxy;

import "google/protobuf/any.proto";

option optimize_for = CODE_SIZE;

message RedfishV1Options {}

message VoyagerTelemetryOptions {}

message Ownership {
  uint32 id = 1;
}

enum Permission {
  // Default behavior is implementation dependent, but ensures that the
  // specified user has read/write access. It is currently the same as
  // PERM_USER_AND_GROUP. Generally, the default should only be used if we don't
  // care about what permissions are set.
  PERM_DEFAULT = 0;
  PERM_USER_ONLY = 1;       // rwx------
  PERM_USER_AND_GROUP = 2;  // rwxr-x---
}

message UdsConfiguration {
  string path = 1;
  Ownership user = 2;
  Ownership group = 3;
  Permission permission = 4;
}

message NetConfiguration {
  string host = 1;
  uint32 port = 2;
}

message ChannelArgumentsConfiguration {
  uint32 keepalive_time_ms = 1;
  uint32 keepalive_timeout_ms = 2;
  uint32 keepalive_permit_without_calls = 3;
  uint32 http2_max_pings_without_data = 4;
  uint32 http2_min_recv_ping_interval_without_data_ms = 5;
  uint32 http2_max_ping_strikes = 6;
}

message MtlsServerCredentialsConfiguration {
  string keypair_path = 1;
  string trust_bundle_path = 2;
  string root_cert_name = 3;
  uint32 keypair_file_check_retry_duration_sec = 4;
  uint32 keypair_refresh_interval_sec = 5;

  string authz_policy_path = 11;
  uint32 authz_policy_refresh_interval_sec = 12;
}

// gRPC server configuration per proxy.
message GrpcConfiguration {
  // Endpoints are added if the configuration is set
  UdsConfiguration uds_endpoint = 1;
  // The server will listen at host:port, so host should usually be the FQDN.
  NetConfiguration net_endpoint = 2;
  // Channel arguments to be added to the gRPC server builder.
  ChannelArgumentsConfiguration channel_arguments = 3;
  // If set, the server will be configured with mTLS credentials.
  MtlsServerCredentialsConfiguration mtls_server_credentials = 4;
}

message RetryConfig {
  int64 delay_sec = 1;
  int64 max_attempts = 2;
}

enum CacheMode {
  CACHE_MODE_UNSPECIFIED = 0;
  CACHE_MODE_NEVER = 1;
  CACHE_MODE_ONCE = 2;
}

message CredentialsFile {
  repeated string path = 1;
  string private_cache_path = 2;
}

// Contains multiple methods to search ReasonID from the event,
message EventReasonIdParse {
  message ReasonIdMessageArgsIndex {
    string message_key = 1;
    int32 message_arg_index = 2;
  }

  oneof reason_id_parse {
    // Path to the Oem json field
    string oem_field_path = 1;
    // Search for ReasonID in message args for a MessageKey at an index of
    // MessageArgs
    ReasonIdMessageArgsIndex message_args_index = 2;
    // Search for ReasonID in message string using regex parsing
    string message_string_regex = 3;
  }
}

message EventParse {
  // Path of events registry which contains mapping of reasonId to severity
  // platforms/vbmc/platform/<machine>/vendor_events.proto:VendorEventRegistry
  string events_registry_config = 1;
  // For tests
  bool skip_event_registry = 2;
  // Config on which methods to use for finding reason id from the event
  repeated EventReasonIdParse reason_id_parse = 3;
  // List of MessageKeys for which we should ignore event severity
  repeated string ignore_event_sev_message_keys = 4;
  // List of MessageRegistryPrefix for which we should ignore event severity
  repeated string ignore_event_sev_message_prefix = 5;
  // If set true, only events with a reason id will be used to determine the
  // health of the machine
  bool ignore_event_sev_wo_reason_id = 6;
}

enum RequestVerb {
  REQUEST_VERB_UNSPECIFIED = 0;
  REQUEST_VERB_GET = 1;
  REQUEST_VERB_POST = 2;
  REQUEST_VERB_PUT = 3;
  REQUEST_VERB_PATCH = 4;
  REQUEST_VERB_DELETE = 5;
  REQUEST_VERB_SUBSCRIBE = 6;
  REQUEST_VERB_INTERNAL = 7;
  REQUEST_VERB_BIDIRECTIONAL_STREAM = 8;
}

message AuthorizationPolicy {
  message Rule {
    // An empty Rule will always succeed.

    // gRPC AuthContext properties. All specified AuthContext properties should
    // have at least one value that matches exactly. The same name may be
    // repeated multiple times to match multiple values.
    reserved 1;
    reserved "property_value";
    oneof permission {
      // This permission ID is passed to the milotic::PermissionChecker
      // implementation.
      string permission_id = 2;
      // If true, requests from local connections (e.g. UDS) are authorized.
      bool local = 3;
    }
  }

  message Mapping {
    // This name is used for logging, monitoring and error messages.
    string name = 1;
    // A map of rule names to rules. At least one rule should apply for the
    // request to be approved.
    map<string, Rule> allow = 2;
    // The resource path to authorize. If omitted or empty, this matches all
    // resource paths.
    repeated string resource_path = 3;
    // Request verb to match. If not specified, all request verbs will match.
    RequestVerb request_verb = 4;
    // If true, this rule will match the entire subtree at `resource_path`. This
    // is also required for $expand.
    bool with_subtree = 5;
  }

  // Mappings are tried in sequence. If a mapping matches, at least one Rule
  // should pass to authorize the resource
  repeated Mapping mappings = 2;
  // If set to true, query parameters are preserved in the request. Otherwise,
  // query parameters are stripped before authorization (they are not passed to
  // the handlers either).
  bool keep_query_params = 3;
}

message TargetHostConnectedCheck {
  bool include_in_machine_info = 1;
  oneof check_path {
    string internal_session_check_path = 2;
    string get_redfish_check_path = 3;
  }
  // string internal_session_check_path = 2;
  // string get_redfish_check_path = 3;
}

message GrpcAuth {
  oneof auth_type {
    SecureTls secure_tls = 1;
    Loas3 loas3 = 2;
    TlsNotVerifyServer tls_not_verify_server = 3;
  }
  message SecureTls {
    string tls_key_path = 1;
    string tls_cert_path = 2;
    string root_cert_path = 3;
    string crl_dir_path = 4;
  }
  message Loas3 {}
  message TlsNotVerifyServer {
    string tls_key_path = 1;
    string tls_cert_path = 2;
  }
}

message Plugin {
  // This is for tests only. Replaces the URI in all requests.
  message Test {
    string fixed_redfish_id = 1;
  }

  // This is for tests only. This plugin is registered, but should never be
  // used.
  message TestDummy {}

  message EventsManager {
    // Size of the event queue for storing redfish events received from BMC.
    int64 events_queue_size = 1;

    // Time to wait before receiving first event from BMC.
    // This is to allow for the BMC to start sending events on the SSE steam.
    // Once this time expires, the plugin state is set to serving.
    int64 init_timer_start_wait_sec = 2;
    // Time to wait for subsequent events from BMC. This updates the timer
    // duration after every event is received.
    int64 init_timer_restart_wait_sec = 3;
    // Time to wait for the plugin to be in serving state.
    // If the plugin is not in serving state for this duration, the machine
    // will move to Critical health state.
    int64 serving_state_timeout_sec = 4;

    // API path exposed by events manager plugin to PUT processed events from
    // storage manager.
    string put_processed_events_path = 5;
    // API path exposed by events manager plugin to subscribe to SSE stream from
    // storage manager.
    string subscribe_events_path = 6;

    // Path to the redfish logs resource which is queried after a non-OK event.
    // If the value is empty, the logs are not fetched.
    string redfish_logs_path = 12;
    // Json pointer to the field to find the LogsUri value in GET response
    // on `redfish_logs_path`
    // Similar to `health_rollup_fields`
    string redfish_logs_fields = 13;

    string redfish_event_service_path = 14;
    string redfish_event_service_fields = 15;
    RetryConfig sse_connection_retry = 16;

    // Config used only for testing.
    // For testing use logs as event storage instead of CNS borg collector
    bool use_logger_storage = 30;
    // Use vlog with verbosity level
    int64 vlog_level = 31;
    // SSE connection does't work on surrogate machines, used for tests
    bool skip_sse_connection = 32;
    // Collector request ID filter, used for selecting specific collector
    // instance which connects to vBMC, required in Mtest
    string collector_request_id_filter = 33;
  }

  message CperEvents {
    EventsManager events_manager = 1;
    int64 remapping_ready_timeout_sec = 2;
    int64 remapping_retry_delay_ms = 3;

    message CounterFile {
      string path = 1;
      bool path_must_exist = 2;
      string filename = 3;
      string temp_filename = 4;
      string memory_error_field_name = 5;
      string cpu_error_field_name = 6;
      int64 save_retry_interval_ms = 7;
    }
    CounterFile counter_file = 4;
  }

  message RedfishSessionAuth {
    string username = 1;
    oneof password_management {
      string password = 2;
      CredentialsFile credentials_file = 3;
    }
    bool only_use_basic_auth = 4;
    uint32 session_check_interval_sec = 5;
  }

  // This plugin is used to add OAuth token to redfish requests.
  message RedfishOAuth {
    message MintTokenRequestConfig {
      // Sets time duration for token.
      int64 token_valid_time_sec = 1;
    }

    AuthzServerSettings authz_server_settings = 1;
    MintTokenRequestConfig mint_token_request_config = 2;
    string redfish_role = 3;
  }

  message StaticResource {
    string path = 1;
  }

  message RedfishPassthrough {
    uint64 request_timeout_msec = 1;
    uint64 connect_timeout_msec = 2;
    int64 dns_timeout_sec = 3;
    int64 max_recv_speed = 4;
    uint64 sse_low_speed_limit_bytes_per_sec = 5;
    uint64 sse_low_speed_time_sec = 6;
    uint32 max_concurrent_requests = 7;
    int64 acquire_client_timeout_sec = 8;
  }

  message SshActions {
    message Action {
      string action_path = 1;
      string ssh_command = 2;
      uint64 timeout_sec = 3;
      uint64 args_count = 4;
    }
    repeated Action actions = 1;
    uint64 execute_timeout_sec = 2;
    uint64 execute_retry_interval_ms = 3;
  }

  message RedfishGrpc {
    GrpcAuth grpc_auth = 1;
  }
   oneof plugin {
   Test test = 1;
   TestDummy test_do_not_use = 2;
   RedfishSessionAuth redfish_session_auth = 4;
   StaticResource static_resource = 5;
   RedfishPassthrough redfish_passthrough = 6;
   SshActions ssh_actions = 8;
   RedfishGrpc redfish_grpc = 11;
   CperEvents cper_events = 12;
  }
  string name = 99;
}

message AuthzServerSettings {
  GrpcAuth grpc_auth = 1;
  int32 oauth_port = 2;
  string hostname = 3;
  int64 rpc_timeout_sec = 4;
}

message SshOptions {
  oneof credentials {
    CredentialsFile credentials_file = 1;
    AuthzServerSettings authz_server_settings = 6;
  }
  uint32 port = 2;
  uint32 max_connections = 3;
  uint64 connect_timeout_sec = 4;
  uint64 connect_retry_interval_ms = 5;
  google.protobuf.Any connector_config = 7;
}

message HiscConnectorConfig {
  int32 serial_port = 1;
}

enum TargetScheme {
  TARGET_SCHEME_UNSPECIFIED = 0;
  TARGET_SCHEME_HTTP = 1;
  TARGET_SCHEME_HTTPS = 2;
  TARGET_SCHEME_GRPC = 3;
  TARGET_SCHEME_SSH = 4;
}

message Target {
  TargetScheme scheme = 1;
  oneof host {
    string hostname = 2;
    NEAHost nea_host = 4;
  }
  uint32 port = 3;
}

message NEAHost {
  string entity_tag = 1;
  oneof role {
    string interface_role = 2;
    bool legacy_hostname = 3;
  }
}

// Configuration for a single proxy.
message ProxyConfiguration {
  reserved 1;
  reserved "target_host";

  oneof target_spec {
    Target target = 7;
  }

  repeated Target fallback_targets = 11;

  GrpcConfiguration grpc_configuration = 2;
  // Services are enabled if their configuration is present
  RedfishV1Options redfish_v1_options = 3;
  VoyagerTelemetryOptions voyager_telemetry_options = 4;
  repeated Plugin plugins = 5;
  SshOptions ssh_options = 6;
  AuthorizationPolicy resource_authorization_policy = 8;
  // If set, the additional gRPC services will be added to the proxy. The
  // services must be registered using `Proxy::RegisterService` before starting
  // the server.
  repeated google.protobuf.Any additional_services = 9;

  string name = 10;
}

message QueueOptions {
  uint32 size = 1;
  uint32 quantum = 2;
  uint32 max_parallel_jobs = 3;
}

// A Configuration message configures a set of proxies in a common gRPC server.
// Right now, only a single proxy is supported.
// TODO(b/279213767): Support multiple proxies
message Configuration {
  repeated ProxyConfiguration proxy_configuration = 1;
  QueueOptions queue_options = 2;
}
