syntax = "proto3";
package rep.framework.event.v1;

option go_package = "v1";

import "protoc-gen-openapiv2/options/annotations.proto";
import "google/api/annotations.proto";
import "google/protobuf/struct.proto";
import "proto/types/commonpb/v3/common.proto";

option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {
  info : {
    title : "AuditLog Service"
    version : "2.0"
    contact : {name : "Paralus Dev"}
  }
  schemes : HTTPS
  consumes : "application/json"
  consumes : "application/yaml"
  produces : "application/json"
  produces : "application/yaml"
  security_definitions : {
    security : {
      key : "BasicAuth"
      value : {type : TYPE_BASIC}
    }
    security : {
      key : "ApiKeyAuth"
      value : {type : TYPE_API_KEY in : IN_HEADER name : "X-PARALUS-API-KEYID"}
    }
  }
  security : {
    security_requirement : {
      key : "BasicAuth"
      value : {}
    }
    security_requirement : {
      key : "ApiKeyAuth"
      value : {}
    }
  }
  responses : {
    key : "403"
    value : {
      description : "Returned when the user does not have permission to access "
                    "the resource."
    }
  }
  responses : {
    key : "404"
    value : {
      description : "Returned when the resource does not exist."
      schema : {json_schema : {type : STRING}}
    }
  }
};

message AuditLogQueryFilter {
  string type = 1;
  string user = 2;
  string client = 3;
  string timefrom = 4;
  string portal = 5;
  string cluster = 6;
  string namespace = 7;
  string kind = 8;
  string method = 9;
  repeated string projects = 10;
  string queryString = 11;
  bool dashboardData = 12;
}

message GetAuditLogSearchRequest {
  paralus.dev.types.common.v3.Metadata metadata = 1;
  AuditLogQueryFilter filter = 2;
}

message GetAuditLogSearchResponse {
  google.protobuf.Struct result = 1;
}

service AuditLogService {
  rpc GetAuditLog(GetAuditLogSearchRequest) returns (GetAuditLogSearchResponse) {
    option (google.api.http) = {
      get : "/event/v1/{metadata.urlScope=project/*}/auditlog"
    };
  };

  rpc GetAuditLogByProjects(GetAuditLogSearchRequest)
      returns (GetAuditLogSearchResponse) {
    option (google.api.http) = {
      get : "/event/v1/auditlog"
    };
  };
}