diff --git a/aruna/api/dataproxy/services/v2/dataproxy_service.proto b/aruna/api/dataproxy/services/v2/dataproxy_service.proto index 9bef3064..9bcfde57 100644 --- a/aruna/api/dataproxy/services/v2/dataproxy_service.proto +++ b/aruna/api/dataproxy/services/v2/dataproxy_service.proto @@ -27,6 +27,20 @@ service DataproxyService { rpc InitReplication(InitReplicationRequest) returns (InitReplicationResponse) {} } + +service DataproxyBackendService { + rpc PutObject(stream PutObjectRequest) returns (PutObjectResponse) {} + rpc GetObject(GetObjectRequest) returns (stream GetObjectResponse) {} + rpc HeadObject(HeadObjectRequest) returns (HeadObjectResponse) {} + rpc InitMultiPartUpload(InitMultiPartUploadRequest) returns (InitMultiPartUploadResponse) {} + rpc UploadPart(stream UploadPartRequest) returns (UploadPartResponse) {} + rpc CompleteMultiPartUpload(CompleteMultiPartUploadRequest) returns (CompleteMultiPartUploadResponse) {} + rpc CreateBucket(CreateBucketRequest) returns (CreateBucketResponse) {} + rpc DeleteBucket(DeleteBucketRequest) returns (DeleteBucketResponse) {} + rpc DeleteObject(DeleteObjectRequest) returns (DeleteObjectResponse) {} + rpc InitLocation(InitLocationRequest) returns (InitLocationResponse) {} +} + service DataproxyUserService { // GetCredentials // @@ -74,6 +88,10 @@ service DataproxyUserService { } } + + + + message DataProxyInfo { string dataproxy_id = 1; int64 available_space = 2; @@ -160,4 +178,95 @@ enum ReplicationStatus { message ReplicationStatusResponse { ReplicationStatus status = 1; string message = 2; -} \ No newline at end of file +} + +message ObjectLocation { + string bucket = 1; + string key = 2; + string upload_id = 3; + string content_length = 4; +} + +message PutObjectRequest { + ObjectLocation location = 1; + bytes data = 2; +} + +message PutObjectResponse {} + +message GetObjectRequest { + ObjectLocation location = 1; +} + +message GetObjectResponse { + bytes data = 1; +} + +message HeadObjectRequest { + ObjectLocation location = 1; +} + +message HeadObjectResponse { + string content_length = 1; + bool exists = 2; +} + +message InitMultiPartUploadRequest { + ObjectLocation location = 1; +} + +message InitMultiPartUploadResponse { + string upload_id = 1; +} + +message UploadPartRequest { + ObjectLocation location = 1; + int32 part_number = 3; + bytes data = 4; +} + +message UploadPartResponse { + string etag = 1; +} + +message CompletedPart { + int32 part_number = 1; + string etag = 2; +} + +message CompleteMultiPartUploadRequest { + ObjectLocation location = 1; + repeated CompletedPart completed_parts = 2; +} + +message CompleteMultiPartUploadResponse {} + +message CreateBucketRequest { + string bucket = 1; +} + +message CreateBucketResponse {} + +message DeleteBucketRequest { + string bucket = 1; +} + +message DeleteBucketResponse {} + +message DeleteObjectRequest { + ObjectLocation location = 1; +} + +message DeleteObjectResponse {} + +message InitLocationRequest { + string object_name = 1; + int64 size = 2; + bool is_temporary = 3; +} + +message InitLocationResponse { + ObjectLocation location = 1; +} + + diff --git a/aruna/api/google b/aruna/api/google index 75346295..bbcd7c56 160000 --- a/aruna/api/google +++ b/aruna/api/google @@ -1 +1 @@ -Subproject commit 75346295df28e55c42c2a3b108c92013a199ae55 +Subproject commit bbcd7c5619a6171baeeb393c387563b5463b4f89 diff --git a/aruna/api/hooks/services/v2/hooks_service.proto b/aruna/api/hooks/services/v2/hooks_service.proto index 73a66891..11bad2cf 100644 --- a/aruna/api/hooks/services/v2/hooks_service.proto +++ b/aruna/api/hooks/services/v2/hooks_service.proto @@ -4,28 +4,40 @@ package aruna.api.hooks.services.v2; option go_package = "github.com/ArunaStorage/go-api/aruna/api/storage/services/v2"; option java_multiple_files = true; option java_package = "com.github.ArunaStorage.java_api.aruna.api.storage.services.v2"; -option java_outer_classname = "HooksService"; +option java_outer_classname = "HooksService"; import "google/api/annotations.proto"; - import "aruna/api/storage/models/v2/models.proto"; + // HooksService // // Status: ALPHA // // A service that enables automatic Hook scheduling service HooksService { + // Created Hooks are always associated with the owner that creates the hook rpc CreateHook(CreateHookRequest) returns (CreateHookResponse) { option (google.api.http) = { post : "/v2/hook" body : "*" }; } - rpc ListHooks(ListHooksRequest) returns (ListHooksResponse) { + rpc AddProjectsToHook(AddProjectsToHookRequest) returns (AddProjectsToHookResponse) { + option (google.api.http) = { + post : "/v2/hook/{hook_id}/{project_id}" + body : "*" + }; + } + rpc ListProjectHooks(ListProjectHooksRequest) returns (ListProjectHooksResponse) { option (google.api.http) = { get : "/v2/hooks/project/{project_id}" }; } + rpc ListOwnedHooks(ListOwnedHooksRequest) returns (ListOwnedHooksResponse) { + option (google.api.http) = { + get : "/v2/hooks/owner/{user_id}" + }; + } rpc DeleteHook(DeleteHookRequest) returns (DeleteHookResponse) { option (google.api.http) = { delete : "/v2/hook/{hook_id}" @@ -42,8 +54,12 @@ enum TriggerType { TRIGGER_TYPE_UNSPECIFIED = 0; TRIGGER_TYPE_HOOK_ADDED = 1; TRIGGER_TYPE_OBJECT_CREATED = 2; + TRIGGER_TYPE_LABEL_ADDED = 3; + TRIGGER_TYPE_STATIC_LABEL_ADDED = 4; + TRIGGER_TYPE_HOOK_STATUS_CHANGED = 5; } + message Trigger { TriggerType trigger_type = 1; string key = 2; @@ -53,8 +69,11 @@ message Trigger { message ExternalHook { string url = 1; Credentials credentials = 2; - string json_template = 3; - Method method = 4; + // If empty a basic JSON template will be used + optional string custom_template = 3; + // Optional Project/Collection/Dataset where hooks can upload results. + optional string result_object = 4; + Method method = 5; } enum Method { @@ -94,10 +113,12 @@ message Credentials { } message CreateHookRequest { - Trigger trigger = 1; - Hook hook = 2; - uint64 timeout = 3; - string project_id = 4; + string name = 1; + Trigger trigger = 2; + Hook hook = 3; + uint64 timeout = 4; + repeated string project_ids = 5; + string description = 6; } message CreateHookResponse { string hook_id = 1; @@ -110,28 +131,54 @@ message DeleteHookRequest { message DeleteHookResponse {} message HookCallbackRequest { - bool success = 1; - repeated storage.models.v2.KeyValue add_key_values = 2; - repeated storage.models.v2.KeyValue remove_key_values = 3; - string secret = 4; - string hook_id = 5; - string object_id = 6; - int32 pubkey_serial = 7; + oneof status { + Finished finished = 1; + Error error = 2; + }; + string secret = 3; + string hook_id = 4; + string object_id = 5; + int32 pubkey_serial = 6; +} +message Finished { + repeated storage.models.v2.KeyValue add_key_values = 1; + repeated storage.models.v2.KeyValue remove_key_values = 2; +} +message Error { + string error = 1; } message HookCallbackResponse{} -message ListHooksRequest{ +message ListProjectHooksRequest{ string project_id = 1; } +message ListOwnedHooksRequest{ + string user_id = 1; +} + message HookInfo { string hook_id = 1; - Hook hook = 2; - Trigger trigger = 3; - uint64 timeout = 4; + repeated string project_ids = 2; + string name = 3; + string description = 4; + Hook hook = 5; + Trigger trigger = 6; + uint64 timeout = 7; +} + +message ListProjectHooksResponse{ + repeated HookInfo infos = 1; } -message ListHooksResponse{ +message ListOwnedHooksResponse{ repeated HookInfo infos = 1; } + +message AddProjectsToHookRequest { + string hook_id = 1; + repeated string project_ids = 2; +} + +message AddProjectsToHookResponse {}; diff --git a/aruna/api/storage/services/v2/object_service.proto b/aruna/api/storage/services/v2/object_service.proto index f1b94f57..2e1d1ca6 100644 --- a/aruna/api/storage/services/v2/object_service.proto +++ b/aruna/api/storage/services/v2/object_service.proto @@ -219,7 +219,7 @@ message UpdateObjectRequest { string object_id = 1; // object name optional string name = 2; - // + // object description optional string description = 3; // key_values to add repeated storage.models.v2.KeyValue add_key_values = 4; @@ -234,6 +234,8 @@ message UpdateObjectRequest { string dataset_id = 10; } repeated storage.models.v2.Hash hashes = 12; + // Force new object revision + bool force_revision = 13; } message UpdateObjectResponse { @@ -308,4 +310,4 @@ message GetObjectEndpointsRequest { string collection_id = 1; // Object id string object_id = 2; -} \ No newline at end of file +} diff --git a/aruna/api/storage/services/v2/search_service.proto b/aruna/api/storage/services/v2/search_service.proto index e576fb37..73a02bcd 100644 --- a/aruna/api/storage/services/v2/search_service.proto +++ b/aruna/api/storage/services/v2/search_service.proto @@ -45,6 +45,16 @@ service SearchService { }; } + // RequestResourceAccess + // + // Status: ALPHA + // + // Requests access to resources + rpc RequestResourceAccess(RequestResourceAccessRequest) returns (RequestResourceAccessResponse){ + option (google.api.http) = { + get : "/v2/resource/{resource_id}/access" + }; + } } message SearchResourcesRequest { @@ -86,3 +96,9 @@ message GetResourcesResponse { repeated ResourceWithPermission resources = 1; } +message RequestResourceAccessRequest { + string resource_id = 1; +} + + +message RequestResourceAccessResponse {} \ No newline at end of file diff --git a/aruna/api/storage/services/v2/user_service.proto b/aruna/api/storage/services/v2/user_service.proto index 9353c7b0..e2b6e4b5 100644 --- a/aruna/api/storage/services/v2/user_service.proto +++ b/aruna/api/storage/services/v2/user_service.proto @@ -211,7 +211,11 @@ service UserService { }; } - + // GetPersonalNotifications + // + // Status: ALPHA + // + // Fetches personal notifications rpc GetPersonalNotifications(GetPersonalNotificationsRequest) returns (GetPersonalNotificationsResponse) { option (google.api.http) = { @@ -219,6 +223,18 @@ service UserService { }; } + // AcknowledgePersonalNotifications + // + // Status: ALPHA + // + // Acknowledges personal notifications + rpc AcknowledgePersonalNotifications(AcknowledgePersonalNotificationsRequest) + returns (AcknowledgePersonalNotificationsResponse) { + option (google.api.http) = { + get : "/v2/user/{user_id}/acknowledge" + }; + } + } message RegisterUserRequest { @@ -383,19 +399,39 @@ message GetPersonalNotificationsRequest { string user_id = 1; } +message GetPersonalNotificationsResponse { + repeated PersonalNotification notifications = 1; +} + +message AcknowledgePersonalNotificationsRequest { + repeated string notification_id = 1; +} + +message AcknowledgePersonalNotificationsResponse {} + +enum ReferenceType { + REFERENCE_TYPE_UNSPECIFIED = 0; + REFERENCE_TYPE_USER = 1; + REFERENCE_TYPE_RESOURCE = 2; +} message References { - string ref_type = 1; // UserRequestAccess + ReferenceType ref_type = 1; string ref_name = 2; // "User A" string ref_value = 3; // 0123AAA123AAA (id) } -message UserNotification { - string variant = 1; // Request access - string message = 2; // User A has requested access for resource B - repeated References refs = 3; // References to resource in the "message" +enum PersonalNotificationVariant { + PERSONAL_NOTIFICATION_VARIANT_UNSPECIFIED = 0; + PERSONAL_NOTIFICATION_VARIANT_ACCESS_REQUESTED = 1; + PERSONAL_NOTIFICATION_VARIANT_PERMISSION_GRANTED = 2; + PERSONAL_NOTIFICATION_VARIANT_PERMISSION_REVOKED = 3; + PERSONAL_NOTIFICATION_VARIANT_ANNOUNCEMENT = 4; } -message GetPersonalNotificationsResponse { - repeated UserNotification notifications = 1; +message PersonalNotification { + string id = 1; + PersonalNotificationVariant variant = 2; + string message = 3; // User A has requested access for resource B + repeated References refs = 4; // References to resource in the "message" } diff --git a/aruna/api/storage/services/v2/workspace_service.proto b/aruna/api/storage/services/v2/workspace_service.proto index a3e9cc62..0156148a 100644 --- a/aruna/api/storage/services/v2/workspace_service.proto +++ b/aruna/api/storage/services/v2/workspace_service.proto @@ -5,7 +5,6 @@ option go_package = "github.com/ArunaStorage/go-api/aruna/api/storage/services/v option java_multiple_files = true; option java_package = "com.github.ArunaStorage.java_api.aruna.api.storage.services.v2"; option java_outer_classname = "WorkspaceService"; -import "aruna/api/storage/models/v2/models.proto"; import "google/api/annotations.proto"; // Service to manage "special" anonymous collections / workspaces @@ -23,6 +22,42 @@ service WorkspaceService { body : "*" }; } + // GetWorkspaceTemplatesById + // + // Status: ALPHA + // + // Gets workspace template by id + rpc GetWorkspaceTemplate(GetWorkspaceTemplateRequest) + returns (GetWorkspaceTemplateResponse) { + option (google.api.http) = { + get: "/v2/workspace/template/{template_id}" + body : "*" + }; + } + // ListOwnedWorkspaceTemplates + // + // Status: ALPHA + // + // Lists owned workspace templates + rpc ListOwnedWorkspaceTemplates(ListOwnedWorkspaceTemplatesRequest) + returns (ListOwnedWorkspaceTemplatesResponse) { + option (google.api.http) = { + get: "/v2/workspace/template" + body : "*" + }; + } + // DeleteWorkspaceTemplates + // + // Status: ALPHA + // + // Deletes specified workspace templates + rpc DeleteWorkspaceTemplate(DeleteWorkspaceTemplateRequest) + returns (DeleteWorkspaceTemplateResponse) { + option (google.api.http) = { + delete: "/v2/workspace/template/{template_id}" + body : "*" + }; + } // CreateWorkspace // @@ -63,19 +98,6 @@ service WorkspaceService { body : "*" }; } - - // MoveWorkspaceData - // - // Status: ALPHA - // - // Claims an anonymous workspace - rpc MoveWorkspaceData(MoveWorkspaceDataRequest) - returns (MoveWorkspaceDataResponse) { - option (google.api.http) = { - post : "/v2/workspace/{workspace_id}/move/{project_id}" - body : "*" - }; - } } // Models: @@ -83,20 +105,55 @@ service WorkspaceService { message CreateWorkspaceTemplateRequest { // The user id of the template owner (will be automatically added as "admin" to each associated workspace) string owner_id = 1; - // Short prefix for each workspace_project (will be prepended by a random id) example: test-i12ashj9g2 + // Short prefix for each workspace_project (will be prepended by a random id) example: test-i12ashj9g2 string prefix = 2; // The name of the workspace template string name = 3; - // Key values / hooks that must be added to each participant of the workspace - repeated storage.models.v2.KeyValue key_values = 4; + // Hooks that are added to created workspaces + repeated string hook_ids = 5; + // Description of the workspace + string description = 6; + // Endpoint ids that are used for this template + repeated string endpoint_id = 7; } message CreateWorkspaceTemplateResponse { - string template_name = 1; + string template_id = 1; +} + +message GetWorkspaceTemplateRequest { + string template_id = 1; +} +message GetWorkspaceTemplateResponse { + WorkspaceInfo workspaces = 1; +} +message DeleteWorkspaceTemplateRequest { + string template_id = 1; +} +message DeleteWorkspaceTemplateResponse {} + +message ListOwnedWorkspaceTemplatesRequest { +} + +message ListOwnedWorkspaceTemplatesResponse { + repeated WorkspaceInfo workspaces = 1; +} + +message WorkspaceInfo { + string workspace_id = 1; + string name = 2; + string description = 3; + string owner = 4; + string prefix = 5; + string hook_ids = 6; + string endpoint_ids = 7; } message CreateWorkspaceRequest { + // Workspace template id string workspace_template = 1; + // Description of this workspace instance + string description = 2; } message CreateWorkspaceResponse{ @@ -121,11 +178,3 @@ message ClaimWorkspaceRequest { } message ClaimWorkspaceResponse {} - -message MoveWorkspaceDataRequest { - // This will update all objects as "non_workspace" and move the root to another project - string workspace_id = 1; - string project_id = 2; -} - -message MoveWorkspaceDataResponse {} \ No newline at end of file