You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ya...@apache.org on 2026/04/01 19:04:39 UTC
(airavata) 06/49: feat: add service protos — profile, credential, sharing, data product domains
This is an automated email from the ASF dual-hosted git repository.
yasith pushed a commit to branch feat/grpc-armeria-migration
in repository https://gitbox.apache.org/repos/asf/airavata.git
commit 037cc7c99f7a3702c9b05eda826f1e2dcc40597a
Author: yasithdev <ya...@icloud.com>
AuthorDate: Tue Mar 31 02:41:13 2026 -0400
feat: add service protos — profile, credential, sharing, data product domains
---
.../main/proto/services/credential_service.proto | 164 +++++++++++++
.../main/proto/services/data_product_service.proto | 97 ++++++++
.../gateway_resource_profile_service.proto | 244 ++++++++++++++++++
.../services/group_resource_profile_service.proto | 220 +++++++++++++++++
.../src/main/proto/services/sharing_service.proto | 158 ++++++++++++
.../services/user_resource_profile_service.proto | 272 +++++++++++++++++++++
6 files changed, 1155 insertions(+)
diff --git a/airavata-api/src/main/proto/services/credential_service.proto b/airavata-api/src/main/proto/services/credential_service.proto
new file mode 100644
index 0000000000..385489dab6
--- /dev/null
+++ b/airavata-api/src/main/proto/services/credential_service.proto
@@ -0,0 +1,164 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.api.credential;
+
+option java_package = "org.apache.airavata.api.credential";
+option java_multiple_files = true;
+
+import "google/api/annotations.proto";
+import "google/protobuf/empty.proto";
+import "org/apache/airavata/model/credential/store/credential_store.proto";
+
+// CredentialService provides RPCs for managing SSH keys, password credentials,
+// and SSH account setup on compute resources.
+service CredentialService {
+
+ rpc GenerateAndRegisterSSHKeys(GenerateAndRegisterSSHKeysRequest) returns (GenerateAndRegisterSSHKeysResponse) {
+ option (google.api.http) = {
+ post: "/api/v1/credentials/ssh-keys"
+ body: "*"
+ };
+ }
+
+ rpc RegisterPwdCredential(RegisterPwdCredentialRequest) returns (RegisterPwdCredentialResponse) {
+ option (google.api.http) = {
+ post: "/api/v1/credentials/passwords"
+ body: "*"
+ };
+ }
+
+ rpc GetCredentialSummary(GetCredentialSummaryRequest) returns (org.apache.airavata.model.credential.store.CredentialSummary) {
+ option (google.api.http) = {
+ get: "/api/v1/credentials/{token_id}"
+ };
+ }
+
+ rpc GetAllCredentialSummaries(GetAllCredentialSummariesRequest) returns (GetAllCredentialSummariesResponse) {
+ option (google.api.http) = {
+ get: "/api/v1/credentials"
+ };
+ }
+
+ rpc DeleteSSHPubKey(DeleteSSHPubKeyRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete: "/api/v1/credentials/ssh-keys/{token_id}"
+ };
+ }
+
+ rpc DeletePWDCredential(DeletePWDCredentialRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete: "/api/v1/credentials/passwords/{token_id}"
+ };
+ }
+
+ rpc DoesUserHaveSSHAccount(DoesUserHaveSSHAccountRequest) returns (DoesUserHaveSSHAccountResponse) {
+ option (google.api.http) = {
+ get: "/api/v1/credentials/ssh-accounts/{compute_resource_id}:check"
+ };
+ }
+
+ rpc IsSSHSetupComplete(IsSSHSetupCompleteRequest) returns (IsSSHSetupCompleteResponse) {
+ option (google.api.http) = {
+ get: "/api/v1/credentials/ssh-accounts/{compute_resource_id}:setup-status"
+ };
+ }
+
+ rpc SetupSSHAccount(SetupSSHAccountRequest) returns (SetupSSHAccountResponse) {
+ option (google.api.http) = {
+ post: "/api/v1/credentials/ssh-accounts/{compute_resource_id}:setup"
+ body: "*"
+ };
+ }
+}
+
+// Request/Response messages
+
+message GenerateAndRegisterSSHKeysRequest {
+ string gateway_id = 1;
+ string username = 2;
+ string description = 3;
+}
+
+message GenerateAndRegisterSSHKeysResponse {
+ string token = 1;
+}
+
+message RegisterPwdCredentialRequest {
+ string gateway_id = 1;
+ org.apache.airavata.model.credential.store.PasswordCredential password_credential = 2;
+}
+
+message RegisterPwdCredentialResponse {
+ string token = 1;
+}
+
+message GetCredentialSummaryRequest {
+ string token_id = 1;
+ string gateway_id = 2;
+}
+
+message GetAllCredentialSummariesRequest {
+ string gateway_id = 1;
+ org.apache.airavata.model.credential.store.SummaryType type = 2;
+}
+
+message GetAllCredentialSummariesResponse {
+ repeated org.apache.airavata.model.credential.store.CredentialSummary credential_summaries = 1;
+}
+
+message DeleteSSHPubKeyRequest {
+ string token_id = 1;
+ string gateway_id = 2;
+}
+
+message DeletePWDCredentialRequest {
+ string token_id = 1;
+ string gateway_id = 2;
+}
+
+message DoesUserHaveSSHAccountRequest {
+ string compute_resource_id = 1;
+ string gateway_id = 2;
+ string username = 3;
+}
+
+message DoesUserHaveSSHAccountResponse {
+ bool has_account = 1;
+}
+
+message IsSSHSetupCompleteRequest {
+ string compute_resource_id = 1;
+ string gateway_id = 2;
+ string username = 3;
+}
+
+message IsSSHSetupCompleteResponse {
+ bool is_complete = 1;
+}
+
+message SetupSSHAccountRequest {
+ string compute_resource_id = 1;
+ string gateway_id = 2;
+ string username = 3;
+}
+
+message SetupSSHAccountResponse {
+ bool success = 1;
+}
diff --git a/airavata-api/src/main/proto/services/data_product_service.proto b/airavata-api/src/main/proto/services/data_product_service.proto
new file mode 100644
index 0000000000..26c4c2880d
--- /dev/null
+++ b/airavata-api/src/main/proto/services/data_product_service.proto
@@ -0,0 +1,97 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.api.dataproduct;
+
+option java_package = "org.apache.airavata.api.dataproduct";
+option java_multiple_files = true;
+
+import "google/api/annotations.proto";
+import "org/apache/airavata/model/data/replica/replica_catalog.proto";
+
+// DataProductService provides RPCs for managing data products and replica locations.
+service DataProductService {
+
+ rpc RegisterDataProduct(RegisterDataProductRequest) returns (RegisterDataProductResponse) {
+ option (google.api.http) = {
+ post: "/api/v1/data-products"
+ body: "data_product"
+ };
+ }
+
+ rpc GetDataProduct(GetDataProductRequest) returns (org.apache.airavata.model.data.replica.DataProductModel) {
+ option (google.api.http) = {
+ get: "/api/v1/data-products/{product_uri}"
+ };
+ }
+
+ rpc RegisterReplicaLocation(RegisterReplicaLocationRequest) returns (RegisterReplicaLocationResponse) {
+ option (google.api.http) = {
+ post: "/api/v1/data-products/{product_uri}/replicas"
+ body: "replica_location"
+ };
+ }
+
+ rpc GetParentDataProduct(GetParentDataProductRequest) returns (org.apache.airavata.model.data.replica.DataProductModel) {
+ option (google.api.http) = {
+ get: "/api/v1/data-products/{product_uri}/parent"
+ };
+ }
+
+ rpc GetChildDataProducts(GetChildDataProductsRequest) returns (GetChildDataProductsResponse) {
+ option (google.api.http) = {
+ get: "/api/v1/data-products/{product_uri}/children"
+ };
+ }
+}
+
+// Request/Response messages
+
+message RegisterDataProductRequest {
+ org.apache.airavata.model.data.replica.DataProductModel data_product = 1;
+}
+
+message RegisterDataProductResponse {
+ string product_uri = 1;
+}
+
+message GetDataProductRequest {
+ string product_uri = 1;
+}
+
+message RegisterReplicaLocationRequest {
+ string product_uri = 1;
+ org.apache.airavata.model.data.replica.DataReplicaLocationModel replica_location = 2;
+}
+
+message RegisterReplicaLocationResponse {
+ string replica_id = 1;
+}
+
+message GetParentDataProductRequest {
+ string product_uri = 1;
+}
+
+message GetChildDataProductsRequest {
+ string product_uri = 1;
+}
+
+message GetChildDataProductsResponse {
+ repeated org.apache.airavata.model.data.replica.DataProductModel data_products = 1;
+}
diff --git a/airavata-api/src/main/proto/services/gateway_resource_profile_service.proto b/airavata-api/src/main/proto/services/gateway_resource_profile_service.proto
new file mode 100644
index 0000000000..ad2b346764
--- /dev/null
+++ b/airavata-api/src/main/proto/services/gateway_resource_profile_service.proto
@@ -0,0 +1,244 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.api.gatewayprofile;
+
+option java_package = "org.apache.airavata.api.gatewayprofile";
+option java_multiple_files = true;
+
+import "google/api/annotations.proto";
+import "google/protobuf/empty.proto";
+import "org/apache/airavata/model/appcatalog/gatewayprofile/gateway_profile.proto";
+import "org/apache/airavata/model/appcatalog/accountprovisioning/account_provisioning.proto";
+
+// GatewayResourceProfileService provides RPCs for managing gateway resource profiles,
+// compute preferences, storage preferences, and SSH account provisioners.
+service GatewayResourceProfileService {
+
+ // --- Gateway Resource Profiles ---
+
+ rpc RegisterGatewayResourceProfile(RegisterGatewayResourceProfileRequest) returns (RegisterGatewayResourceProfileResponse) {
+ option (google.api.http) = {
+ post: "/api/v1/gateway-profiles"
+ body: "gateway_resource_profile"
+ };
+ }
+
+ rpc GetGatewayResourceProfile(GetGatewayResourceProfileRequest) returns (org.apache.airavata.model.appcatalog.gatewayprofile.GatewayResourceProfile) {
+ option (google.api.http) = {
+ get: "/api/v1/gateway-profiles/{gateway_id}"
+ };
+ }
+
+ rpc UpdateGatewayResourceProfile(UpdateGatewayResourceProfileRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put: "/api/v1/gateway-profiles/{gateway_id}"
+ body: "gateway_resource_profile"
+ };
+ }
+
+ rpc DeleteGatewayResourceProfile(DeleteGatewayResourceProfileRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete: "/api/v1/gateway-profiles/{gateway_id}"
+ };
+ }
+
+ rpc GetAllGatewayResourceProfiles(GetAllGatewayResourceProfilesRequest) returns (GetAllGatewayResourceProfilesResponse) {
+ option (google.api.http) = {
+ get: "/api/v1/gateway-profiles"
+ };
+ }
+
+ // --- Compute Preferences ---
+
+ rpc AddComputePreference(AddComputePreferenceRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post: "/api/v1/gateway-profiles/{gateway_id}/compute-preferences"
+ body: "compute_resource_preference"
+ };
+ }
+
+ rpc GetComputePreference(GetComputePreferenceRequest) returns (org.apache.airavata.model.appcatalog.gatewayprofile.ComputeResourcePreference) {
+ option (google.api.http) = {
+ get: "/api/v1/gateway-profiles/{gateway_id}/compute-preferences/{compute_resource_id}"
+ };
+ }
+
+ rpc UpdateComputePreference(UpdateComputePreferenceRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put: "/api/v1/gateway-profiles/{gateway_id}/compute-preferences/{compute_resource_id}"
+ body: "compute_resource_preference"
+ };
+ }
+
+ rpc DeleteComputePreference(DeleteComputePreferenceRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete: "/api/v1/gateway-profiles/{gateway_id}/compute-preferences/{compute_resource_id}"
+ };
+ }
+
+ rpc GetAllComputePreferences(GetAllComputePreferencesRequest) returns (GetAllComputePreferencesResponse) {
+ option (google.api.http) = {
+ get: "/api/v1/gateway-profiles/{gateway_id}/compute-preferences"
+ };
+ }
+
+ // --- Storage Preferences ---
+
+ rpc AddStoragePreference(AddStoragePreferenceRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post: "/api/v1/gateway-profiles/{gateway_id}/storage-preferences"
+ body: "storage_preference"
+ };
+ }
+
+ rpc GetStoragePreference(GetStoragePreferenceRequest) returns (org.apache.airavata.model.appcatalog.gatewayprofile.StoragePreference) {
+ option (google.api.http) = {
+ get: "/api/v1/gateway-profiles/{gateway_id}/storage-preferences/{storage_resource_id}"
+ };
+ }
+
+ rpc UpdateStoragePreference(UpdateStoragePreferenceRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put: "/api/v1/gateway-profiles/{gateway_id}/storage-preferences/{storage_resource_id}"
+ body: "storage_preference"
+ };
+ }
+
+ rpc DeleteStoragePreference(DeleteStoragePreferenceRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete: "/api/v1/gateway-profiles/{gateway_id}/storage-preferences/{storage_resource_id}"
+ };
+ }
+
+ rpc GetAllStoragePreferences(GetAllStoragePreferencesRequest) returns (GetAllStoragePreferencesResponse) {
+ option (google.api.http) = {
+ get: "/api/v1/gateway-profiles/{gateway_id}/storage-preferences"
+ };
+ }
+
+ // --- SSH Account Provisioners ---
+
+ rpc GetSSHAccountProvisioners(GetSSHAccountProvisionersRequest) returns (GetSSHAccountProvisionersResponse) {
+ option (google.api.http) = {
+ get: "/api/v1/ssh-account-provisioners"
+ };
+ }
+}
+
+// --- Gateway Resource Profile Request/Response messages ---
+
+message RegisterGatewayResourceProfileRequest {
+ org.apache.airavata.model.appcatalog.gatewayprofile.GatewayResourceProfile gateway_resource_profile = 1;
+}
+
+message RegisterGatewayResourceProfileResponse {
+ string gateway_id = 1;
+}
+
+message GetGatewayResourceProfileRequest {
+ string gateway_id = 1;
+}
+
+message UpdateGatewayResourceProfileRequest {
+ string gateway_id = 1;
+ org.apache.airavata.model.appcatalog.gatewayprofile.GatewayResourceProfile gateway_resource_profile = 2;
+}
+
+message DeleteGatewayResourceProfileRequest {
+ string gateway_id = 1;
+}
+
+message GetAllGatewayResourceProfilesRequest {}
+
+message GetAllGatewayResourceProfilesResponse {
+ repeated org.apache.airavata.model.appcatalog.gatewayprofile.GatewayResourceProfile gateway_resource_profiles = 1;
+}
+
+// --- Compute Preference Request/Response messages ---
+
+message AddComputePreferenceRequest {
+ string gateway_id = 1;
+ string compute_resource_id = 2;
+ org.apache.airavata.model.appcatalog.gatewayprofile.ComputeResourcePreference compute_resource_preference = 3;
+}
+
+message GetComputePreferenceRequest {
+ string gateway_id = 1;
+ string compute_resource_id = 2;
+}
+
+message UpdateComputePreferenceRequest {
+ string gateway_id = 1;
+ string compute_resource_id = 2;
+ org.apache.airavata.model.appcatalog.gatewayprofile.ComputeResourcePreference compute_resource_preference = 3;
+}
+
+message DeleteComputePreferenceRequest {
+ string gateway_id = 1;
+ string compute_resource_id = 2;
+}
+
+message GetAllComputePreferencesRequest {
+ string gateway_id = 1;
+}
+
+message GetAllComputePreferencesResponse {
+ repeated org.apache.airavata.model.appcatalog.gatewayprofile.ComputeResourcePreference compute_resource_preferences = 1;
+}
+
+// --- Storage Preference Request/Response messages ---
+
+message AddStoragePreferenceRequest {
+ string gateway_id = 1;
+ string storage_resource_id = 2;
+ org.apache.airavata.model.appcatalog.gatewayprofile.StoragePreference storage_preference = 3;
+}
+
+message GetStoragePreferenceRequest {
+ string gateway_id = 1;
+ string storage_resource_id = 2;
+}
+
+message UpdateStoragePreferenceRequest {
+ string gateway_id = 1;
+ string storage_resource_id = 2;
+ org.apache.airavata.model.appcatalog.gatewayprofile.StoragePreference storage_preference = 3;
+}
+
+message DeleteStoragePreferenceRequest {
+ string gateway_id = 1;
+ string storage_resource_id = 2;
+}
+
+message GetAllStoragePreferencesRequest {
+ string gateway_id = 1;
+}
+
+message GetAllStoragePreferencesResponse {
+ repeated org.apache.airavata.model.appcatalog.gatewayprofile.StoragePreference storage_preferences = 1;
+}
+
+// --- SSH Account Provisioner Request/Response messages ---
+
+message GetSSHAccountProvisionersRequest {}
+
+message GetSSHAccountProvisionersResponse {
+ repeated org.apache.airavata.model.appcatalog.accountprovisioning.SSHAccountProvisioner ssh_account_provisioners = 1;
+}
diff --git a/airavata-api/src/main/proto/services/group_resource_profile_service.proto b/airavata-api/src/main/proto/services/group_resource_profile_service.proto
new file mode 100644
index 0000000000..fbbbfb2a99
--- /dev/null
+++ b/airavata-api/src/main/proto/services/group_resource_profile_service.proto
@@ -0,0 +1,220 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.api.groupprofile;
+
+option java_package = "org.apache.airavata.api.groupprofile";
+option java_multiple_files = true;
+
+import "google/api/annotations.proto";
+import "google/protobuf/empty.proto";
+import "org/apache/airavata/model/appcatalog/groupresourceprofile/group_resource_profile.proto";
+import "org/apache/airavata/model/appcatalog/gatewaygroups/gateway_groups.proto";
+
+// GroupResourceProfileService provides RPCs for managing group resource profiles,
+// compute preferences, compute resource policies, and batch queue policies.
+service GroupResourceProfileService {
+
+ // --- Group Resource Profiles ---
+
+ rpc CreateGroupResourceProfile(CreateGroupResourceProfileRequest) returns (org.apache.airavata.model.appcatalog.groupresourceprofile.GroupResourceProfile) {
+ option (google.api.http) = {
+ post: "/api/v1/group-profiles"
+ body: "group_resource_profile"
+ };
+ }
+
+ rpc GetGroupResourceProfile(GetGroupResourceProfileRequest) returns (org.apache.airavata.model.appcatalog.groupresourceprofile.GroupResourceProfile) {
+ option (google.api.http) = {
+ get: "/api/v1/group-profiles/{group_resource_profile_id}"
+ };
+ }
+
+ rpc UpdateGroupResourceProfile(UpdateGroupResourceProfileRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put: "/api/v1/group-profiles/{group_resource_profile_id}"
+ body: "group_resource_profile"
+ };
+ }
+
+ rpc RemoveGroupResourceProfile(RemoveGroupResourceProfileRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete: "/api/v1/group-profiles/{group_resource_profile_id}"
+ };
+ }
+
+ rpc GetGroupResourceList(GetGroupResourceListRequest) returns (GetGroupResourceListResponse) {
+ option (google.api.http) = {
+ get: "/api/v1/group-profiles"
+ };
+ }
+
+ // --- Group Compute Preferences ---
+
+ rpc GetGroupComputePreference(GetGroupComputePreferenceRequest) returns (org.apache.airavata.model.appcatalog.groupresourceprofile.GroupComputeResourcePreference) {
+ option (google.api.http) = {
+ get: "/api/v1/group-profiles/{group_resource_profile_id}/compute-preferences/{compute_resource_id}"
+ };
+ }
+
+ rpc RemoveGroupComputePrefs(RemoveGroupComputePrefsRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete: "/api/v1/group-profiles/{group_resource_profile_id}/compute-preferences/{compute_resource_id}"
+ };
+ }
+
+ rpc GetGroupComputePrefList(GetGroupComputePrefListRequest) returns (GetGroupComputePrefListResponse) {
+ option (google.api.http) = {
+ get: "/api/v1/group-profiles/{group_resource_profile_id}/compute-preferences"
+ };
+ }
+
+ // --- Compute Resource Policies ---
+
+ rpc GetGroupComputeResourcePolicy(GetGroupComputeResourcePolicyRequest) returns (org.apache.airavata.model.appcatalog.groupresourceprofile.ComputeResourcePolicy) {
+ option (google.api.http) = {
+ get: "/api/v1/group-compute-policies/{resource_policy_id}"
+ };
+ }
+
+ rpc RemoveGroupComputeResourcePolicy(RemoveGroupComputeResourcePolicyRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete: "/api/v1/group-compute-policies/{resource_policy_id}"
+ };
+ }
+
+ rpc GetGroupComputeResourcePolicyList(GetGroupComputeResourcePolicyListRequest) returns (GetGroupComputeResourcePolicyListResponse) {
+ option (google.api.http) = {
+ get: "/api/v1/group-profiles/{group_resource_profile_id}/compute-policies"
+ };
+ }
+
+ // --- Batch Queue Resource Policies ---
+
+ rpc GetBatchQueueResourcePolicy(GetBatchQueueResourcePolicyRequest) returns (org.apache.airavata.model.appcatalog.groupresourceprofile.BatchQueueResourcePolicy) {
+ option (google.api.http) = {
+ get: "/api/v1/batch-queue-policies/{resource_policy_id}"
+ };
+ }
+
+ rpc RemoveGroupBatchQueueResourcePolicy(RemoveGroupBatchQueueResourcePolicyRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete: "/api/v1/batch-queue-policies/{resource_policy_id}"
+ };
+ }
+
+ rpc GetGroupBatchQueuePolicyList(GetGroupBatchQueuePolicyListRequest) returns (GetGroupBatchQueuePolicyListResponse) {
+ option (google.api.http) = {
+ get: "/api/v1/group-profiles/{group_resource_profile_id}/batch-queue-policies"
+ };
+ }
+
+ // --- Gateway Groups ---
+
+ rpc GetGatewayGroups(GetGatewayGroupsRequest) returns (org.apache.airavata.model.appcatalog.gatewaygroups.GatewayGroups) {
+ option (google.api.http) = {
+ get: "/api/v1/gateway-groups"
+ };
+ }
+}
+
+// --- Group Resource Profile Request/Response messages ---
+
+message CreateGroupResourceProfileRequest {
+ org.apache.airavata.model.appcatalog.groupresourceprofile.GroupResourceProfile group_resource_profile = 1;
+}
+
+message GetGroupResourceProfileRequest {
+ string group_resource_profile_id = 1;
+}
+
+message UpdateGroupResourceProfileRequest {
+ string group_resource_profile_id = 1;
+ org.apache.airavata.model.appcatalog.groupresourceprofile.GroupResourceProfile group_resource_profile = 2;
+}
+
+message RemoveGroupResourceProfileRequest {
+ string group_resource_profile_id = 1;
+}
+
+message GetGroupResourceListRequest {}
+
+message GetGroupResourceListResponse {
+ repeated org.apache.airavata.model.appcatalog.groupresourceprofile.GroupResourceProfile group_resource_profiles = 1;
+}
+
+// --- Group Compute Preference Request/Response messages ---
+
+message GetGroupComputePreferenceRequest {
+ string group_resource_profile_id = 1;
+ string compute_resource_id = 2;
+}
+
+message RemoveGroupComputePrefsRequest {
+ string group_resource_profile_id = 1;
+ string compute_resource_id = 2;
+}
+
+message GetGroupComputePrefListRequest {
+ string group_resource_profile_id = 1;
+}
+
+message GetGroupComputePrefListResponse {
+ repeated org.apache.airavata.model.appcatalog.groupresourceprofile.GroupComputeResourcePreference group_compute_resource_preferences = 1;
+}
+
+// --- Compute Resource Policy Request/Response messages ---
+
+message GetGroupComputeResourcePolicyRequest {
+ string resource_policy_id = 1;
+}
+
+message RemoveGroupComputeResourcePolicyRequest {
+ string resource_policy_id = 1;
+}
+
+message GetGroupComputeResourcePolicyListRequest {
+ string group_resource_profile_id = 1;
+}
+
+message GetGroupComputeResourcePolicyListResponse {
+ repeated org.apache.airavata.model.appcatalog.groupresourceprofile.ComputeResourcePolicy compute_resource_policies = 1;
+}
+
+// --- Batch Queue Resource Policy Request/Response messages ---
+
+message GetBatchQueueResourcePolicyRequest {
+ string resource_policy_id = 1;
+}
+
+message RemoveGroupBatchQueueResourcePolicyRequest {
+ string resource_policy_id = 1;
+}
+
+message GetGroupBatchQueuePolicyListRequest {
+ string group_resource_profile_id = 1;
+}
+
+message GetGroupBatchQueuePolicyListResponse {
+ repeated org.apache.airavata.model.appcatalog.groupresourceprofile.BatchQueueResourcePolicy batch_queue_resource_policies = 1;
+}
+
+// --- Gateway Groups Request/Response messages ---
+
+message GetGatewayGroupsRequest {}
diff --git a/airavata-api/src/main/proto/services/sharing_service.proto b/airavata-api/src/main/proto/services/sharing_service.proto
new file mode 100644
index 0000000000..60386d9473
--- /dev/null
+++ b/airavata-api/src/main/proto/services/sharing_service.proto
@@ -0,0 +1,158 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.api.sharing;
+
+option java_package = "org.apache.airavata.api.sharing";
+option java_multiple_files = true;
+
+import "google/api/annotations.proto";
+import "google/protobuf/empty.proto";
+
+// SharingService provides RPCs for managing resource sharing with users and groups.
+service SharingService {
+
+ rpc ShareResourceWithUsers(ShareResourceWithUsersRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post: "/api/v1/sharing/{resource_id}/users"
+ body: "*"
+ };
+ }
+
+ rpc ShareResourceWithGroups(ShareResourceWithGroupsRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post: "/api/v1/sharing/{resource_id}/groups"
+ body: "*"
+ };
+ }
+
+ rpc RevokeFromUsers(RevokeFromUsersRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete: "/api/v1/sharing/{resource_id}/users"
+ };
+ }
+
+ rpc RevokeFromGroups(RevokeFromGroupsRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete: "/api/v1/sharing/{resource_id}/groups"
+ };
+ }
+
+ rpc GetAllAccessibleUsers(GetAllAccessibleUsersRequest) returns (GetAllAccessibleUsersResponse) {
+ option (google.api.http) = {
+ get: "/api/v1/sharing/{resource_id}/users"
+ };
+ }
+
+ rpc GetAllDirectlyAccessibleUsers(GetAllDirectlyAccessibleUsersRequest) returns (GetAllDirectlyAccessibleUsersResponse) {
+ option (google.api.http) = {
+ get: "/api/v1/sharing/{resource_id}/users:direct"
+ };
+ }
+
+ rpc GetAllAccessibleGroups(GetAllAccessibleGroupsRequest) returns (GetAllAccessibleGroupsResponse) {
+ option (google.api.http) = {
+ get: "/api/v1/sharing/{resource_id}/groups"
+ };
+ }
+
+ rpc GetAllDirectlyAccessibleGroups(GetAllDirectlyAccessibleGroupsRequest) returns (GetAllDirectlyAccessibleGroupsResponse) {
+ option (google.api.http) = {
+ get: "/api/v1/sharing/{resource_id}/groups:direct"
+ };
+ }
+
+ rpc UserHasAccess(UserHasAccessRequest) returns (UserHasAccessResponse) {
+ option (google.api.http) = {
+ get: "/api/v1/sharing/{resource_id}/users/{user_id}:check"
+ };
+ }
+}
+
+// Request/Response messages
+
+message ShareResourceWithUsersRequest {
+ string resource_id = 1;
+ // Map of user_id to permission type string.
+ map<string, string> user_permissions = 2;
+}
+
+message ShareResourceWithGroupsRequest {
+ string resource_id = 1;
+ // Map of group_id to permission type string.
+ map<string, string> group_permissions = 2;
+}
+
+message RevokeFromUsersRequest {
+ string resource_id = 1;
+ // Map of user_id to permission type string.
+ map<string, string> user_permissions = 2;
+}
+
+message RevokeFromGroupsRequest {
+ string resource_id = 1;
+ // Map of group_id to permission type string.
+ map<string, string> group_permissions = 2;
+}
+
+message GetAllAccessibleUsersRequest {
+ string resource_id = 1;
+ string permission_type = 2;
+}
+
+message GetAllAccessibleUsersResponse {
+ repeated string user_ids = 1;
+}
+
+message GetAllDirectlyAccessibleUsersRequest {
+ string resource_id = 1;
+ string permission_type = 2;
+}
+
+message GetAllDirectlyAccessibleUsersResponse {
+ repeated string user_ids = 1;
+}
+
+message GetAllAccessibleGroupsRequest {
+ string resource_id = 1;
+ string permission_type = 2;
+}
+
+message GetAllAccessibleGroupsResponse {
+ repeated string group_ids = 1;
+}
+
+message GetAllDirectlyAccessibleGroupsRequest {
+ string resource_id = 1;
+ string permission_type = 2;
+}
+
+message GetAllDirectlyAccessibleGroupsResponse {
+ repeated string group_ids = 1;
+}
+
+message UserHasAccessRequest {
+ string resource_id = 1;
+ string user_id = 2;
+ string permission_type = 3;
+}
+
+message UserHasAccessResponse {
+ bool has_access = 1;
+}
diff --git a/airavata-api/src/main/proto/services/user_resource_profile_service.proto b/airavata-api/src/main/proto/services/user_resource_profile_service.proto
new file mode 100644
index 0000000000..46012b8ee2
--- /dev/null
+++ b/airavata-api/src/main/proto/services/user_resource_profile_service.proto
@@ -0,0 +1,272 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.api.userprofile;
+
+option java_package = "org.apache.airavata.api.userprofile";
+option java_multiple_files = true;
+
+import "google/api/annotations.proto";
+import "google/protobuf/empty.proto";
+import "org/apache/airavata/model/appcatalog/userresourceprofile/user_resource_profile.proto";
+import "org/apache/airavata/model/status/status.proto";
+
+// UserResourceProfileService provides RPCs for managing user resource profiles,
+// user compute preferences, user storage preferences, and queue statuses.
+service UserResourceProfileService {
+
+ // --- User Resource Profiles ---
+
+ rpc RegisterUserResourceProfile(RegisterUserResourceProfileRequest) returns (RegisterUserResourceProfileResponse) {
+ option (google.api.http) = {
+ post: "/api/v1/user-profiles"
+ body: "user_resource_profile"
+ };
+ }
+
+ rpc IsUserResourceProfileExists(IsUserResourceProfileExistsRequest) returns (IsUserResourceProfileExistsResponse) {
+ option (google.api.http) = {
+ get: "/api/v1/user-profiles/{user_id}:exists"
+ };
+ }
+
+ rpc GetUserResourceProfile(GetUserResourceProfileRequest) returns (org.apache.airavata.model.appcatalog.userresourceprofile.UserResourceProfile) {
+ option (google.api.http) = {
+ get: "/api/v1/user-profiles/{user_id}"
+ };
+ }
+
+ rpc UpdateUserResourceProfile(UpdateUserResourceProfileRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put: "/api/v1/user-profiles/{user_id}"
+ body: "user_resource_profile"
+ };
+ }
+
+ rpc DeleteUserResourceProfile(DeleteUserResourceProfileRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete: "/api/v1/user-profiles/{user_id}"
+ };
+ }
+
+ rpc GetAllUserResourceProfiles(GetAllUserResourceProfilesRequest) returns (GetAllUserResourceProfilesResponse) {
+ option (google.api.http) = {
+ get: "/api/v1/user-profiles"
+ };
+ }
+
+ // --- User Compute Preferences ---
+
+ rpc AddUserComputePreference(AddUserComputePreferenceRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post: "/api/v1/user-profiles/{user_id}/compute-preferences"
+ body: "user_compute_resource_preference"
+ };
+ }
+
+ rpc GetUserComputePreference(GetUserComputePreferenceRequest) returns (org.apache.airavata.model.appcatalog.userresourceprofile.UserComputeResourcePreference) {
+ option (google.api.http) = {
+ get: "/api/v1/user-profiles/{user_id}/compute-preferences/{compute_resource_id}"
+ };
+ }
+
+ rpc UpdateUserComputePreference(UpdateUserComputePreferenceRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put: "/api/v1/user-profiles/{user_id}/compute-preferences/{compute_resource_id}"
+ body: "user_compute_resource_preference"
+ };
+ }
+
+ rpc DeleteUserComputePreference(DeleteUserComputePreferenceRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete: "/api/v1/user-profiles/{user_id}/compute-preferences/{compute_resource_id}"
+ };
+ }
+
+ rpc GetAllUserComputePreferences(GetAllUserComputePreferencesRequest) returns (GetAllUserComputePreferencesResponse) {
+ option (google.api.http) = {
+ get: "/api/v1/user-profiles/{user_id}/compute-preferences"
+ };
+ }
+
+ // --- User Storage Preferences ---
+
+ rpc AddUserStoragePreference(AddUserStoragePreferenceRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post: "/api/v1/user-profiles/{user_id}/storage-preferences"
+ body: "user_storage_preference"
+ };
+ }
+
+ rpc GetUserStoragePreference(GetUserStoragePreferenceRequest) returns (org.apache.airavata.model.appcatalog.userresourceprofile.UserStoragePreference) {
+ option (google.api.http) = {
+ get: "/api/v1/user-profiles/{user_id}/storage-preferences/{storage_resource_id}"
+ };
+ }
+
+ rpc UpdateUserStoragePreference(UpdateUserStoragePreferenceRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put: "/api/v1/user-profiles/{user_id}/storage-preferences/{storage_resource_id}"
+ body: "user_storage_preference"
+ };
+ }
+
+ rpc DeleteUserStoragePreference(DeleteUserStoragePreferenceRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete: "/api/v1/user-profiles/{user_id}/storage-preferences/{storage_resource_id}"
+ };
+ }
+
+ rpc GetAllUserStoragePreferences(GetAllUserStoragePreferencesRequest) returns (GetAllUserStoragePreferencesResponse) {
+ option (google.api.http) = {
+ get: "/api/v1/user-profiles/{user_id}/storage-preferences"
+ };
+ }
+
+ // --- Queue Statuses ---
+
+ rpc GetLatestQueueStatuses(GetLatestQueueStatusesRequest) returns (GetLatestQueueStatusesResponse) {
+ option (google.api.http) = {
+ get: "/api/v1/queue-statuses"
+ };
+ }
+}
+
+// --- User Resource Profile Request/Response messages ---
+
+message RegisterUserResourceProfileRequest {
+ org.apache.airavata.model.appcatalog.userresourceprofile.UserResourceProfile user_resource_profile = 1;
+}
+
+message RegisterUserResourceProfileResponse {
+ string user_id = 1;
+}
+
+message IsUserResourceProfileExistsRequest {
+ string user_id = 1;
+ string gateway_id = 2;
+}
+
+message IsUserResourceProfileExistsResponse {
+ bool exists = 1;
+}
+
+message GetUserResourceProfileRequest {
+ string user_id = 1;
+ string gateway_id = 2;
+}
+
+message UpdateUserResourceProfileRequest {
+ string user_id = 1;
+ string gateway_id = 2;
+ org.apache.airavata.model.appcatalog.userresourceprofile.UserResourceProfile user_resource_profile = 3;
+}
+
+message DeleteUserResourceProfileRequest {
+ string user_id = 1;
+ string gateway_id = 2;
+}
+
+message GetAllUserResourceProfilesRequest {}
+
+message GetAllUserResourceProfilesResponse {
+ repeated org.apache.airavata.model.appcatalog.userresourceprofile.UserResourceProfile user_resource_profiles = 1;
+}
+
+// --- User Compute Preference Request/Response messages ---
+
+message AddUserComputePreferenceRequest {
+ string user_id = 1;
+ string gateway_id = 2;
+ string compute_resource_id = 3;
+ org.apache.airavata.model.appcatalog.userresourceprofile.UserComputeResourcePreference user_compute_resource_preference = 4;
+}
+
+message GetUserComputePreferenceRequest {
+ string user_id = 1;
+ string gateway_id = 2;
+ string compute_resource_id = 3;
+}
+
+message UpdateUserComputePreferenceRequest {
+ string user_id = 1;
+ string gateway_id = 2;
+ string compute_resource_id = 3;
+ org.apache.airavata.model.appcatalog.userresourceprofile.UserComputeResourcePreference user_compute_resource_preference = 4;
+}
+
+message DeleteUserComputePreferenceRequest {
+ string user_id = 1;
+ string gateway_id = 2;
+ string compute_resource_id = 3;
+}
+
+message GetAllUserComputePreferencesRequest {
+ string user_id = 1;
+ string gateway_id = 2;
+}
+
+message GetAllUserComputePreferencesResponse {
+ repeated org.apache.airavata.model.appcatalog.userresourceprofile.UserComputeResourcePreference user_compute_resource_preferences = 1;
+}
+
+// --- User Storage Preference Request/Response messages ---
+
+message AddUserStoragePreferenceRequest {
+ string user_id = 1;
+ string gateway_id = 2;
+ string storage_resource_id = 3;
+ org.apache.airavata.model.appcatalog.userresourceprofile.UserStoragePreference user_storage_preference = 4;
+}
+
+message GetUserStoragePreferenceRequest {
+ string user_id = 1;
+ string gateway_id = 2;
+ string storage_resource_id = 3;
+}
+
+message UpdateUserStoragePreferenceRequest {
+ string user_id = 1;
+ string gateway_id = 2;
+ string storage_resource_id = 3;
+ org.apache.airavata.model.appcatalog.userresourceprofile.UserStoragePreference user_storage_preference = 4;
+}
+
+message DeleteUserStoragePreferenceRequest {
+ string user_id = 1;
+ string gateway_id = 2;
+ string storage_resource_id = 3;
+}
+
+message GetAllUserStoragePreferencesRequest {
+ string user_id = 1;
+ string gateway_id = 2;
+}
+
+message GetAllUserStoragePreferencesResponse {
+ repeated org.apache.airavata.model.appcatalog.userresourceprofile.UserStoragePreference user_storage_preferences = 1;
+}
+
+// --- Queue Status Request/Response messages ---
+
+message GetLatestQueueStatusesRequest {}
+
+message GetLatestQueueStatusesResponse {
+ repeated org.apache.airavata.model.status.QueueStatusModel queue_statuses = 1;
+}