syntax = "proto3";

option go_package = "github.com/hashicorp/vault/builtin/logical/database/dbplugin";

package dbplugin;

import "google/protobuf/timestamp.proto";

message InitializeRequest {
	option deprecated = true;
	bytes config = 1;
	bool verify_connection = 2;
}

message InitRequest {
	bytes config = 1;
	bool verify_connection = 2;
}

message CreateUserRequest {
	Statements     statements = 1;
	UsernameConfig username_config = 2;
	google.protobuf.Timestamp expiration = 3;
}

message RenewUserRequest {
	Statements statements = 1;
	string username = 2;
	google.protobuf.Timestamp expiration = 3;
}

message RevokeUserRequest {
	Statements statements = 1;
	string username = 2;
}

message RotateRootCredentialsRequest {
	repeated string statements = 1;
}

message Statements {
	// DEPRECATED, will be removed in 0.12
	string creation_statements = 1 [deprecated=true];
	// DEPRECATED, will be removed in 0.12
	string revocation_statements = 2 [deprecated=true];
	// DEPRECATED, will be removed in 0.12
	string rollback_statements  = 3 [deprecated=true];
	// DEPRECATED, will be removed in 0.12
	string renew_statements = 4 [deprecated=true];

	repeated string creation = 5;
	repeated string revocation = 6;
	repeated string rollback  = 7;
	repeated string renewal = 8;
}

message UsernameConfig {
	string DisplayName = 1;
	string RoleName = 2;
}

message InitResponse {
	bytes config = 1;
}

message CreateUserResponse {
	string username = 1;
	string password = 2;
}

message TypeResponse {
	string type = 1;
}

message RotateRootCredentialsResponse {
	bytes config = 1;
}

message Empty {}

service Database {
	rpc Type(Empty) returns (TypeResponse);
	rpc CreateUser(CreateUserRequest) returns (CreateUserResponse);
	rpc RenewUser(RenewUserRequest) returns (Empty);
	rpc RevokeUser(RevokeUserRequest) returns (Empty);
	rpc RotateRootCredentials(RotateRootCredentialsRequest) returns (RotateRootCredentialsResponse);
	rpc Init(InitRequest) returns (InitResponse);
	rpc Close(Empty) returns (Empty);
	
	rpc Initialize(InitializeRequest) returns (Empty) {
		option deprecated = true;
	};
}
