chore(API): Update the API definitions for RDP (#6758)
This commit is contained in:
1 parent
b495fe653b
commit
6f03523372
30 files changed
+4189
-268
No files matched your search
@@ -44,6 +44,29 @@ message ChannelRecording {
|
||||
// MimeTypes define the mime types that can
|
||||
// be used to consume the recording of this Channel.
|
||||
// The only supported mime type is "application/x-asciicast".
|
||||
// Deprecated: This field has been moved to SSH-specific attributes and will be removed
|
||||
// entirely in a future Boundary version.
|
||||
repeated string mime_types = 9 [
|
||||
json_name = "mime_types",
|
||||
deprecated = true
|
||||
]; // @gotags: class:"public" eventstream:"observation"
|
||||
|
||||
// The detailed state of the channel recording.
|
||||
RecordingState recording_state = 23 [json_name = "recording_state"]; // @gotags: class:"public" eventstream:"observation"
|
||||
|
||||
oneof attrs {
|
||||
// The attributes that are applicable for the specific Channel Recording type.
|
||||
google.protobuf.Struct attributes = 10 [(custom_options.v1.subtype) = "default"];
|
||||
|
||||
SshChannelRecording ssh_channel_recording = 11 [
|
||||
(google.api.field_visibility).restriction = "INTERNAL",
|
||||
(custom_options.v1.subtype) = "ssh_channel_recording"
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// SshChannelRecording contains SSH-specific attributes for a channel recording.
|
||||
message SshChannelRecording {
|
||||
repeated string mime_types = 9 [json_name = "mime_types"]; // @gotags: class:"public" eventstream:"observation"
|
||||
}
|
||||
|
||||
@@ -83,6 +106,17 @@ message ConnectionRecording {
|
||||
// Optionally, the channels used in this Connection,
|
||||
// if it is using a multiplexed protocol, such as SSH.
|
||||
repeated ChannelRecording channel_recordings = 10 [json_name = "channel_recordings"];
|
||||
|
||||
// The detailed state of the connection recording.
|
||||
RecordingState recording_state = 11 [json_name = "recording_state"]; // @gotags: class:"public" eventstream:"observation"
|
||||
|
||||
// Optionally, exports that may have been created for this Connection
|
||||
// Recording.
|
||||
repeated Export exports = 12 [json_name = "exports"]; // @gotags: class:"public"
|
||||
|
||||
// Optionally, videos that may have been recorded for this Connection
|
||||
// Recording.
|
||||
repeated Video videos = 13 [json_name = "videos"]; // @gotags: class:"public"
|
||||
}
|
||||
|
||||
// User describes an authenticated user in Boundary.
|
||||
@@ -216,6 +250,10 @@ message Target {
|
||||
(google.api.field_visibility).restriction = "INTERNAL",
|
||||
(custom_options.v1.subtype) = "ssh"
|
||||
];
|
||||
RdpTargetAttributes rdp_target_attributes = 13 [
|
||||
(google.api.field_visibility).restriction = "INTERNAL",
|
||||
(custom_options.v1.subtype) = "rdp"
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -228,6 +266,15 @@ message SshTargetAttributes {
|
||||
uint32 default_client_port = 2 [json_name = "default_client_port"]; // @gotags: class:"public"
|
||||
}
|
||||
|
||||
// RdpTargetAttributes contains attributes relevant to Targets of type "rdp"
|
||||
message RdpTargetAttributes {
|
||||
// The default RDP port used when connecting to the endpoint.
|
||||
uint32 default_port = 1 [json_name = "default_port"]; // @gotags: class:"public"
|
||||
|
||||
// The default TCP port listened on by the client's local proxy.
|
||||
uint32 default_client_port = 2 [json_name = "default_client_port"]; // @gotags: class:"public"
|
||||
}
|
||||
|
||||
// CredentialStore contains all fields related to a Credential Store resource
|
||||
message CredentialStore {
|
||||
// The ID of the Credential Store.
|
||||
@@ -312,6 +359,10 @@ message Credential {
|
||||
(google.api.field_visibility).restriction = "INTERNAL",
|
||||
(custom_options.v1.subtype) = "password"
|
||||
];
|
||||
UsernamePasswordDomainCredentialAttributes username_password_domain_attributes = 12 [
|
||||
(google.api.field_visibility).restriction = "INTERNAL",
|
||||
(custom_options.v1.subtype) = "username_password_domain"
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -324,6 +375,18 @@ message UsernamePasswordCredentialAttributes {
|
||||
string password_hmac = 2; // @gotags: class:"public"
|
||||
}
|
||||
|
||||
// The attributes of a UsernamePasswordDomain Credential.
|
||||
message UsernamePasswordDomainCredentialAttributes {
|
||||
// The username associated with the credential.
|
||||
string username = 1; // @gotags: class:"sensitive"
|
||||
|
||||
// The hmac value of the password.
|
||||
string password_hmac = 2; // @gotags: class:"public"
|
||||
|
||||
// The domain associated with the credential.
|
||||
string domain = 3; // @gotags: class:"public"
|
||||
}
|
||||
|
||||
// The attributes of a SshPrivateKey Credential.
|
||||
message SshPrivateKeyCredentialAttributes {
|
||||
// The username associated with the credential.
|
||||
@@ -383,6 +446,10 @@ message CredentialLibrary {
|
||||
(google.api.field_visibility).restriction = "INTERNAL",
|
||||
(custom_options.v1.subtype) = "vault-ssh-certificate"
|
||||
];
|
||||
VaultLdapCredentialLibraryAttributes vault_ldap_credential_library_attributes = 11 [
|
||||
(google.api.field_visibility).restriction = "INTERNAL",
|
||||
(custom_options.v1.subtype) = "vault-ldap"
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -398,6 +465,12 @@ message VaultCredentialLibraryAttributes {
|
||||
string http_request_body = 3; // @gotags: `class:"secret"`
|
||||
}
|
||||
|
||||
// The attributes of a Vault typed LDAP Credential Library.
|
||||
message VaultLdapCredentialLibraryAttributes {
|
||||
// The path in Vault to request credentials from.
|
||||
string path = 1; // @gotags: class:"public"
|
||||
}
|
||||
|
||||
// The attributes of a vault SSH Certificate Credential Library.
|
||||
message VaultSSHCertificateCredentialLibraryAttributes {
|
||||
// The path in Vault to request credentials from.
|
||||
@@ -444,6 +517,59 @@ message ValuesAtTime {
|
||||
repeated CredentialLibrary credential_libraries = 5 [json_name = "credential_libraries"];
|
||||
}
|
||||
|
||||
// RecordingState contain information about the state of a recording.
|
||||
message RecordingState {
|
||||
// Information about the storage state of the recording.
|
||||
string storage_state = 1; // @gotags: class:"public"
|
||||
|
||||
// Information about the syncing error details of the recording.
|
||||
string syncing_error_details = 2; // @gotags: class:"public"
|
||||
|
||||
// Information about the verification error details of the recording.
|
||||
string verification_error_details = 3; // @gotags: class:"public"
|
||||
}
|
||||
|
||||
// Export contains information about the export of a session recording.
|
||||
message Export {
|
||||
// The ID of the Export.
|
||||
string id = 10; // @gotags: class:"public"
|
||||
// The scope that the Export is in. This is inferred from the storage bucket
|
||||
// associated with the session recording.
|
||||
resources.scopes.v1.ScopeInfo scope = 20; // @gotags: class:"public"
|
||||
// The mime type of the Export.
|
||||
string mime_type = 30; // @gotags: class:"public" eventstream:"observation"
|
||||
// The current state of the Export.
|
||||
string state = 40; // @gotags: class:"public" eventstream:"observation"
|
||||
// The export's current progress.
|
||||
uint32 progress_percent = 50; // @gotags: class:"public" eventstream:"observation"
|
||||
// The ID of the worker processing the Export.
|
||||
string worker_id = 60; // @gotags: class:"public" eventstream:"observation"
|
||||
// The time the Export was created.
|
||||
google.protobuf.Timestamp created_time = 70; // @gotags: class:"public" eventstream:"observation"
|
||||
// The time of the most recent update to the Export.
|
||||
google.protobuf.Timestamp updated_time = 80; // @gotags: class:"public" eventstream:"observation"
|
||||
// The version of the Export.
|
||||
uint32 version = 90; // @gotags: `class:"public"`
|
||||
// The ID of the Connection Recording being exported.
|
||||
string connection_recording_id = 100; // @gotags: class:"public" eventstream:"observation"
|
||||
// Any error encountered during the Export, if the Export failed.
|
||||
string error = 110; // @gotags: class:"public"
|
||||
// The available actions on this resource for this user.
|
||||
repeated string authorized_actions = 300 [json_name = "authorized_actions"]; // @gotags: class:"public"
|
||||
}
|
||||
|
||||
// Video contains information about the video recording of a Session Recording.
|
||||
message Video {
|
||||
// The ID of the Video.
|
||||
string id = 10; // @gotags: class:"public"
|
||||
// The time the Video was created.
|
||||
google.protobuf.Timestamp created_time = 20; // @gotags: class:"public" eventstream:"observation"
|
||||
// The duration of the Video in seconds.
|
||||
uint64 length_seconds = 30; // @gotags: class:"public" eventstream:"observation"
|
||||
// The size of the Video in bytes.
|
||||
uint64 size_bytes = 40; // @gotags: class:"public" eventstream:"observation"
|
||||
}
|
||||
|
||||
// SessionRecording contains information about the recording of a Session.
|
||||
message SessionRecording {
|
||||
// The ID of the Session recording.
|
||||
@@ -490,10 +616,16 @@ message SessionRecording {
|
||||
|
||||
// The current state of the session recording. One of
|
||||
// "started", "available" and "unknown".
|
||||
//
|
||||
// Note: this field will eventually be deprecated two release after 1.0.0
|
||||
// in favor of the availability field.
|
||||
string state = 13; // @gotags: class:"public" eventstream:"observation"
|
||||
|
||||
// Any error seen during the closing of the session recording.
|
||||
// Currently only set if state is "unknown".
|
||||
//
|
||||
// Note: this field will eventually be deprecated two release after 1.0.0
|
||||
// in favor of the error details contained in the recording_state field.
|
||||
string error_details = 14; // @gotags: class:"public"
|
||||
|
||||
// MimeTypes define the mime types that can
|
||||
@@ -520,4 +652,10 @@ message SessionRecording {
|
||||
|
||||
// The time a session recording is scheduled to be automatically deleted.
|
||||
google.protobuf.Timestamp delete_after = 21 [json_name = "delete_after"]; // @gotags: class:"public" eventstream:"observation"
|
||||
|
||||
// The availability of the session recording. One of "available" or "not available".
|
||||
string availability = 22 [json_name = "availability"]; // @gotags: class:"public" eventstream:"observation"
|
||||
|
||||
// The detailed state of the session recording.
|
||||
RecordingState recording_state = 23 [json_name = "recording_state"]; // @gotags: class:"public" eventstream:"observation"
|
||||
}
|
||||
@@ -350,6 +350,26 @@ message RdpTargetAttributes {
|
||||
that: "DefaultClientPort"
|
||||
}
|
||||
]; // @gotags: `class:"public"`
|
||||
|
||||
// PublicId of the storage bucket associated with the target
|
||||
google.protobuf.StringValue storage_bucket_id = 30 [
|
||||
json_name = "storage_bucket_id",
|
||||
(custom_options.v1.generate_sdk_option) = true,
|
||||
(custom_options.v1.mask_mapping) = {
|
||||
this: "attributes.storage_bucket_id"
|
||||
that: "StorageBucketId"
|
||||
}
|
||||
]; // @gotags: `class:"public" eventstream:"observation"`
|
||||
|
||||
// A boolean indicating if session recording has been enabled
|
||||
google.protobuf.BoolValue enable_session_recording = 40 [
|
||||
json_name = "enable_session_recording",
|
||||
(custom_options.v1.generate_sdk_option) = true,
|
||||
(custom_options.v1.mask_mapping) = {
|
||||
this: "attributes.enable_session_recording"
|
||||
that: "EnableSessionRecording"
|
||||
}
|
||||
]; // @gotags: `class:"public" eventstream:"observation"`
|
||||
}
|
||||
|
||||
// WorkerInfo contains information about workers, returned in to the client in SessionAuthorization
|
||||
|
||||
@@ -20,8 +20,8 @@ service SessionRecordingService {
|
||||
"It provides an audit trail of user activity and lets administrators monitor access. "
|
||||
"The session recording service provides endpoints that let you manage session recordings in Boundary."
|
||||
external_docs: {
|
||||
url: "https://developer.hashicorp.com/boundary/docs/concepts/domain-model/session-recordings";
|
||||
description: "Read about session recordings in the Boundary domain model";
|
||||
url: "https://developer.hashicorp.com/boundary/docs/concepts/domain-model/session-recordings"
|
||||
description: "Read about session recordings in the Boundary domain model"
|
||||
}
|
||||
};
|
||||
|
||||
@@ -48,10 +48,11 @@ service SessionRecordingService {
|
||||
// Supports both Session ID and Session recording ID for looking up a Session recording.
|
||||
// Supports both Connection ID and Connection recording ID to look up a Connection recording.
|
||||
// A Channel recording ID is required to look up a Channel recording.
|
||||
// The only supported mime type is "application/x-asciicast".
|
||||
// A Video ID is required to look up a Video recording.
|
||||
// Supported mime types: "application/x-asciicast", "video/webm"
|
||||
rpc Download(DownloadRequest) returns (stream google.api.HttpBody) {
|
||||
option (google.api.http) = {get: "/v1/session-recordings/{id}:download"};
|
||||
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {summary: "Download returns the contents of the specified resource in the specified mime type. Supports both Session ID and Session recording ID for looking up a Session recording. Supports both Connection ID and Connection recording ID to look up a Connection recording. A Channel recording ID is required to look up a Channel recording. The only supported mime type is \"application/x-asciicast\"."};
|
||||
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {summary: "Download returns the contents of the specified resource in the specified mime type. Supports both Session ID and Session recording ID for looking up a Session recording. Supports both Connection ID and Connection recording ID to look up a Connection recording. A Channel recording ID is required to look up a Channel recording. A Video ID is required to look up a Video recording. Supported mime types: \"application/x-asciicast\", \"video/webm\"."};
|
||||
}
|
||||
|
||||
// ReApplyStoragePolicy calculates the resultant set of policy for a given session recording
|
||||
@@ -66,11 +67,52 @@ service SessionRecordingService {
|
||||
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {summary: "ReApplyStoragePolicy will recalculate the resultant set of policy and apply the result to the given session recording."};
|
||||
}
|
||||
|
||||
// DeleteSessionRecording removes a Session Recording from Boundary. If the Session Recording id
|
||||
// is malformed or not provided an error is returned.
|
||||
// DeleteSessionRecording deletes a Session Recording or Video recording.
|
||||
// Supports Session Recording ID to delete a Session Recording.
|
||||
// Supports Video ID to delete a Video recording.
|
||||
// If the Session Recording id is malformed or not provided an error is returned.
|
||||
rpc DeleteSessionRecording(DeleteSessionRecordingRequest) returns (DeleteSessionRecordingResponse) {
|
||||
option (google.api.http) = {delete: "/v1/session-recordings/{id}"};
|
||||
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {summary: "Deletes a Session Recording"};
|
||||
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {summary: "Deletes a Session Recording when provided a Session Recording ID, or deletes a Video recording when provided a Video ID. If the ID is malformed or not provided an error is returned."};
|
||||
}
|
||||
|
||||
// CreateExport creates an export of the specified Connection Recording in the requested mime type.
|
||||
// The provided request must include the Connection Recording ID. The export is processed
|
||||
// asynchronously; use GetExport to poll the status of the export. If the ID is missing,
|
||||
// malformed, or references a non-existing resource, an error is returned.
|
||||
rpc CreateExport(CreateExportRequest) returns (CreateExportResponse) {
|
||||
option (google.api.http) = {
|
||||
post: "/v1/session-recordings/{connection_recording_id}:export"
|
||||
body: "*"
|
||||
response_body: "item"
|
||||
};
|
||||
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {summary: "CreateExport creates an export of the specified Connection Recording in the requested mime type. The export is processed asynchronously; use GetExport to poll the status of the export. If the ID is missing, malformed, or references a non-existing resource, an error is returned."};
|
||||
}
|
||||
|
||||
// GetExport returns a stored Export if present. The provided request must include the Export ID
|
||||
// for the Export being retrieved. If that ID is missing, malformed, or references a non-existing
|
||||
// resource, an error is returned.
|
||||
rpc GetExport(GetExportRequest) returns (GetExportResponse) {
|
||||
option (google.api.http) = {
|
||||
get: "/v1/session-recordings/{id}:export"
|
||||
response_body: "item"
|
||||
};
|
||||
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {summary: "GetExport returns a stored Export if present. The provided request must include the Export ID for the Export being retrieved. If that ID is missing, malformed, or references a non-existing resource, an error is returned."};
|
||||
}
|
||||
|
||||
// ListExports lists all Exports. Exports are ordered by create time descending
|
||||
// (most recently created first).
|
||||
rpc ListExports(ListExportsRequest) returns (ListExportsResponse) {
|
||||
option (google.api.http) = {get: "/v1/session-recordings:list-exports"};
|
||||
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {summary: "ListExports lists all exports. Exports are ordered by created_time descending (most recently created first)."};
|
||||
}
|
||||
|
||||
// CancelExport cancels an Export that is in progress. The provided request must include the
|
||||
// Export ID for the Export being cancelled. If that ID is missing, malformed, or references a
|
||||
// non-existing resource, an error is returned. Returns the Export in its cancelled state.
|
||||
rpc CancelExport(CancelExportRequest) returns (CancelExportResponse) {
|
||||
option (google.api.http) = {post: "/v1/session-recordings/{id}:export:cancel"};
|
||||
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {summary: "CancelExport cancels an Export that is in progress. The provided request must include the Export ID for the Export being cancelled. If that ID is missing, malformed, or references a non-existing resource, an error is returned. Returns the Export in its cancelled state."};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,8 +176,9 @@ message DownloadRequest {
|
||||
// - Session ID and Session recording ID for Session recordings
|
||||
// - Connection ID and Connection recording ID for Connection recordings
|
||||
// - Channel recording ID for Channel recordings
|
||||
// - Video ID for Video recordings
|
||||
string id = 1; // @gotags: class:"public" eventstream:"observation"
|
||||
// The format of the response. The only supported mime type is "application/x-asciicast".
|
||||
// The format of the response. Supports "application/x-asciicast" and "video/webm".
|
||||
// Defaults to "application/x-asciicast" if not set.
|
||||
string mime_type = 2 [json_name = "mime_type"]; // @gotags: class:"public" eventstream:"observation"
|
||||
}
|
||||
@@ -155,3 +198,77 @@ message DeleteSessionRecordingRequest {
|
||||
}
|
||||
|
||||
message DeleteSessionRecordingResponse {}
|
||||
|
||||
message CreateExportRequest {
|
||||
// The ID of the Connection Recording to export.
|
||||
string connection_recording_id = 1; // @gotags: class:"public" eventstream:"observation"
|
||||
// The mime type of the export.
|
||||
string mime_type = 2 [json_name = "mime_type"]; // @gotags: class:"public" eventstream:"observation"
|
||||
}
|
||||
|
||||
message CreateExportResponse {
|
||||
// The created export.
|
||||
resources.sessionrecordings.v1.Export item = 1;
|
||||
}
|
||||
|
||||
message GetExportRequest {
|
||||
// The ID of the Export to retrieve.
|
||||
string id = 1; // @gotags: class:"public" eventstream:"observation"
|
||||
}
|
||||
|
||||
message GetExportResponse {
|
||||
// The requested export.
|
||||
resources.sessionrecordings.v1.Export item = 1;
|
||||
}
|
||||
|
||||
message ListExportsRequest {
|
||||
// The scope in which to list exports.
|
||||
// Must be set unless recursive is set.
|
||||
string scope_id = 1; // @gotags: class:"public" eventstream:"observation"
|
||||
// Whether to recurse into child scopes when listing.
|
||||
// If set and scope_id is empty, shows exports in
|
||||
// all scopes the caller has access to.
|
||||
bool recursive = 2; // @gotags: class:"public" eventstream:"observation"
|
||||
// An opaque token that Boundary uses to continue an existing iteration or
|
||||
// request updated items. If you do not specify a token, pagination
|
||||
// starts from the beginning. To learn more about list pagination
|
||||
// in Boundary, refer to [list pagination](https://developer.hashicorp.com/boundary/docs/api-clients/api/pagination).
|
||||
string list_token = 3 [json_name = "list_token"]; // @gotags: `class:"public"`
|
||||
// The maximum size of a page in this iteration.
|
||||
// If you do not set a page size, Boundary uses the configured default page size.
|
||||
// If the page_size is greater than the default page size configured,
|
||||
// Boundary truncates the page size to this number.
|
||||
uint32 page_size = 4 [json_name = "page_size"]; // @gotags: class:"public" eventstream:"observation"
|
||||
}
|
||||
|
||||
message ListExportsResponse {
|
||||
// The items returned in this page.
|
||||
repeated resources.sessionrecordings.v1.Export items = 1;
|
||||
// The type of response, either "delta" or "complete".
|
||||
// Delta signifies that this is part of a paginated result
|
||||
// or an update to a previously completed pagination.
|
||||
// Complete signifies that it is the last page.
|
||||
string response_type = 2 [json_name = "response_type"]; // @gotags: class:"public" eventstream:"observation"
|
||||
// An opaque token used to continue an existing pagination or
|
||||
// request updated items. Use this token in the next list request
|
||||
// to request the next page.
|
||||
string list_token = 3 [json_name = "list_token"]; // @gotags: `class:"public"`
|
||||
// The name of the field which the items are sorted by.
|
||||
string sort_by = 4 [json_name = "sort_by"]; // @gotags: class:"public" eventstream:"observation"
|
||||
// The direction of the sort, either "asc" or "desc".
|
||||
string sort_dir = 5 [json_name = "sort_dir"]; // @gotags: class:"public" eventstream:"observation"
|
||||
// A list of item IDs that have been removed since they were returned
|
||||
// as part of a pagination. They should be dropped from any client cache.
|
||||
// This may contain items that are not known to the cache, if they were
|
||||
// created and deleted between listings.
|
||||
repeated string removed_ids = 6 [json_name = "removed_ids"]; // @gotags: class:"public" eventstream:"observation"
|
||||
// An estimate at the total items available. This may change during pagination.
|
||||
uint32 est_item_count = 7 [json_name = "est_item_count"]; // @gotags: class:"public" eventstream:"observation"
|
||||
}
|
||||
|
||||
message CancelExportRequest {
|
||||
// The ID of the Export to cancel.
|
||||
string id = 1; // @gotags: class:"public" eventstream:"observation"
|
||||
}
|
||||
|
||||
message CancelExportResponse {}
|
||||
Reference in new issue
Block a user