syntax = "proto3";

option go_package = "github.com/edgelesssys/constellation/v2/debugd/service";

package debugd;

service Debugd {
    rpc UploadAuthorizedKeys(UploadAuthorizedKeysRequest) returns (UploadAuthorizedKeysResponse) {}
    rpc UploadBootstrapper(stream Chunk) returns (UploadBootstrapperResponse) {}
    rpc DownloadBootstrapper(DownloadBootstrapperRequest) returns (stream Chunk) {}
    rpc DownloadAuthorizedKeys(DownloadAuthorizedKeysRequest) returns (DownloadAuthorizedKeysResponse) {}
    rpc UploadSystemServiceUnits(UploadSystemdServiceUnitsRequest) returns (UploadSystemdServiceUnitsResponse) {}
}

message DownloadBootstrapperRequest {}

message DownloadAuthorizedKeysRequest {}

message DownloadAuthorizedKeysResponse {
    repeated AuthorizedKey keys = 1;
}

message AuthorizedKey {
    string username = 1;
    string key_value = 2;
}

message UploadAuthorizedKeysRequest {
    repeated AuthorizedKey keys = 1;
}

message UploadAuthorizedKeysResponse {
    UploadAuthorizedKeysStatus status = 1;
}

enum UploadAuthorizedKeysStatus {
    UPLOAD_AUTHORIZED_KEYS_SUCCESS = 0;
    UPLOAD_AUTHORIZED_KEYS_FAILURE = 1;
}

message Chunk {
    bytes content = 1;
}

message UploadBootstrapperResponse {
    UploadBootstrapperStatus status = 1;
}

enum UploadBootstrapperStatus {
    UPLOAD_BOOTSTRAPPER_SUCCESS = 0;
    UPLOAD_BOOTSTRAPPER_UPLOAD_FAILED = 1;
    UPLOAD_BOOTSTRAPPER_START_FAILED = 2;
    UPLOAD_BOOTSTRAPPER_FILE_EXISTS = 3;
}

message ServiceUnit {
    string name = 1;
    string contents = 2;
}

message UploadSystemdServiceUnitsRequest {
    repeated ServiceUnit units = 1;
}

message UploadSystemdServiceUnitsResponse {
    UploadSystemdServiceUnitsStatus status = 1;
}

enum UploadSystemdServiceUnitsStatus {
    UPLOAD_SYSTEMD_SERVICE_UNITS_SUCCESS = 0;
    UPLOAD_SYSTEMD_SERVICE_UNITS_FAILURE = 1;
}