sshpiper/libplugin/plugin.proto
Boshi Lian 7fdd88982a
introduce uri for flexable upstream conn (#615)
* Deprecate host and port fields in Upstream message; introduce uri field for connection details

* Update libplugin/plugin.proto

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* refactor(grpc): streamline upstream connection handling and add GetOrGenerateUri method

* refactor(libplugin): update GetOrGenerateUri to return error and add IPv6 test

* refactor(libplugin): simplify GetOrGenerateUri to remove error return and update tests

* Update cmd/sshpiperd/internal/plugin/grpc.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-06-30 15:18:57 -07:00

227 lines
4.7 KiB
Protocol Buffer

syntax = "proto3";
package libplugin;
option go_package = "github.com/tg123/sshpiper/libplugin";
message ConnMeta {
string user_name = 1;
string from_addr = 2;
string uniq_id = 3;
map<string, string> metadata = 4;
}
message Upstream {
// Deprecated fields use uri instead.
string host = 1 [deprecated = true];
// Deprecated fields use uri instead.
int32 port = 2 [deprecated = true];
string user_name = 3;
bool ignore_host_key = 4;
string uri = 5;
oneof auth {
UpstreamNoneAuth none = 100;
UpstreamPasswordAuth password = 101;
UpstreamPrivateKeyAuth private_key = 102;
UpstreamRemoteSignerAuth remote_signer = 103;
UpstreamNextPluginAuth next_plugin = 200;
UpstreamRetryCurrentPluginAuth retry_current_plugin = 201;
}
}
message UpstreamNoneAuth {
}
message UpstreamPasswordAuth {
string password = 1;
}
message UpstreamPrivateKeyAuth {
bytes private_key = 1;
bytes ca_public_key = 2;
}
message UpstreamRemoteSignerAuth{
string meta = 1;
}
message UpstreamNextPluginAuth {
map<string, string> meta = 1;
}
message UpstreamRetryCurrentPluginAuth {
map<string, string> meta = 1;
}
service SshPiperPlugin {
rpc Logs(StartLogRequest) returns (stream Log) {}
rpc ListCallbacks(ListCallbackRequest) returns (ListCallbackResponse) {}
rpc NewConnection(NewConnectionRequest) returns (NewConnectionResponse) {}
rpc NextAuthMethods(NextAuthMethodsRequest) returns (NextAuthMethodsResponse) {}
rpc NoneAuth(NoneAuthRequest) returns (NoneAuthResponse) {}
rpc PasswordAuth(PasswordAuthRequest) returns (PasswordAuthResponse) {}
rpc PublicKeyAuth(PublicKeyAuthRequest) returns (PublicKeyAuthResponse) {}
rpc KeyboardInteractiveAuth(stream KeyboardInteractiveAuthMessage) returns (stream KeyboardInteractiveAuthMessage) {}
rpc UpstreamAuthFailureNotice(UpstreamAuthFailureNoticeRequest) returns (UpstreamAuthFailureNoticeResponse) {}
rpc Banner(BannerRequest) returns (BannerResponse) {}
rpc VerifyHostKey (VerifyHostKeyRequest) returns (VerifyHostKeyResponse) {}
rpc PipeCreateErrorNotice(PipeCreateErrorNoticeRequest) returns (PipeCreateErrorNoticeResponse) {}
rpc PipeStartNotice(PipeStartNoticeRequest) returns (PipeStartNoticeResponse) {}
rpc PipeErrorNotice(PipeErrorNoticeRequest) returns (PipeErrorNoticeResponse) {}
}
message StartLogRequest {
string uniq_id = 1;
string level = 2;
bool tty = 3;
}
message Log {
string message = 1;
}
message ListCallbackRequest {
}
message ListCallbackResponse {
repeated string callbacks = 1;
}
message NewConnectionRequest {
ConnMeta meta = 1;
}
message NewConnectionResponse {
}
message NextAuthMethodsRequest {
ConnMeta meta = 1;
}
enum AuthMethod {
NONE = 0;
PASSWORD = 1;
PUBLICKEY = 2;
KEYBOARD_INTERACTIVE = 3;
}
message NextAuthMethodsResponse {
repeated AuthMethod methods = 1;
}
message NoneAuthRequest {
ConnMeta meta = 1;
}
message NoneAuthResponse {
Upstream upstream = 1;
}
message PasswordAuthRequest {
ConnMeta meta = 1;
bytes password = 2;
}
message PasswordAuthResponse {
Upstream upstream = 1;
}
message PublicKeyAuthRequest {
ConnMeta meta = 1;
bytes public_key = 2;
}
message PublicKeyAuthResponse {
Upstream upstream = 1;
}
message KeyboardInteractiveUserResponse {
repeated string answers = 1;
}
message KeyboardInteractivePromptRequest {
message Question{
string text = 1;
bool echo = 2;
}
string name = 1;
string instruction = 2;
repeated Question questions = 3;
}
message KeyboardInteractiveMetaRequest {
}
message KeyboardInteractiveMetaResponse {
ConnMeta meta = 1;
}
message KeyboardInteractiveFinishRequest {
Upstream upstream = 1;
}
message KeyboardInteractiveAuthMessage {
oneof message {
KeyboardInteractivePromptRequest prompt_request = 1;
KeyboardInteractiveUserResponse user_response = 2;
KeyboardInteractiveMetaRequest meta_request = 3;
KeyboardInteractiveMetaResponse meta_response = 4;
KeyboardInteractiveFinishRequest finish_request = 5;
}
}
message UpstreamAuthFailureNoticeRequest {
ConnMeta meta = 1;
string method = 2;
string error = 3;
repeated AuthMethod allowed_methods = 4;
}
message UpstreamAuthFailureNoticeResponse {
}
message BannerRequest {
ConnMeta meta = 1;
}
message BannerResponse {
string message = 1;
}
message VerifyHostKeyRequest {
ConnMeta meta = 1;
bytes key = 2;
string hostname = 3;
string netaddress = 4;
}
message VerifyHostKeyResponse {
bool verified = 1;
}
message PipeStartNoticeRequest {
ConnMeta meta = 1;
}
message PipeStartNoticeResponse {
}
message PipeErrorNoticeRequest {
ConnMeta meta = 1;
string error = 2;
}
message PipeErrorNoticeResponse {
}
message PipeCreateErrorNoticeRequest {
string from_addr = 1;
string error = 2;
}
message PipeCreateErrorNoticeResponse {
}