in data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/mft/MFTRequestHandler.java [58:149]
public MFTDownloadResponse mftDownload(@RequestHeader("Authorization") String authTokenStr,
@PathVariable String resourceid) throws Exception {
logger.info("MFT download request to resource {}", resourceid);
if (authTokenStr == null || authTokenStr.isEmpty()) {
logger.error("Auth token can not be null");
throw new Exception("Auth token can not be null");
}
if (!authTokenStr.startsWith("Bearer")) {
logger.error("No bearer token provided");
throw new Exception("No bearer token provided");
}
authTokenStr = authTokenStr.substring(7).trim();
ManagedChannel channel = ManagedChannelBuilder.forAddress(drmsHost, drmsPort).usePlaintext().build();
ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceGrpc.newBlockingStub(channel);
StoragePreferenceServiceGrpc.StoragePreferenceServiceBlockingStub stoPrefClient = StoragePreferenceServiceGrpc.newBlockingStub(channel);
logger.debug("Using auth token {}", authTokenStr);
DRMSServiceAuthToken authToken = DRMSServiceAuthToken.newBuilder().setAccessToken(authTokenStr).build();
ResourceFetchResponse resourceFetchResponse = resourceClient.fetchResource(ResourceFetchRequest.newBuilder()
.setResourceId(resourceid)
.setAuthToken(authToken).build());
GenericResource resource = resourceFetchResponse.getResource();
if (resource.getResourceId().isEmpty()) {
throw new Exception("No resource with id " + resourceid + " found");
}
HttpDownloadApiRequest.Builder downloadRequest = HttpDownloadApiRequest.newBuilder();
downloadRequest.setSourceResourceId(resourceid);
String storageId = null;
switch (resource.getStorageCase()) {
case S3_STORAGE:
storageId = resource.getS3Storage().getStorageId();
break;
case SSH_STORAGE:
storageId = resource.getSshStorage().getStorageId();
break;
case STORAGE_NOT_SET:
logger.error("Not storage type found for resource {}", resourceid);
throw new Exception("Not storage type found for resource " + resourceid);
}
StoragePreferenceSearchResponse stoPrefResults = stoPrefClient
.searchStoragePreference(StoragePreferenceSearchRequest.newBuilder()
.setAuthToken(authToken)
.addQueries(StoragePreferenceSearchQuery.newBuilder()
.setField("storageId")
.setValue(storageId).build()).build());
List<AnyStoragePreference> storagesPreferenceList = stoPrefResults.getStoragesPreferenceList();
if (storagesPreferenceList.isEmpty()) {
logger.error("No storage preference found for resource {}", resourceid);
throw new Exception("No storage preference found for resource " + resourceid);
}
AnyStoragePreference fistPref = storagesPreferenceList.get(0);
switch (fistPref.getStorageCase()) {
case S3_STORAGE_PREFERENCE:
downloadRequest.setSourceType("S3");
downloadRequest.setSourceToken(fistPref.getS3StoragePreference().getStoragePreferenceId());
break;
case SSH_STORAGE_PREFERENCE:
downloadRequest.setSourceType("SCP");
downloadRequest.setSourceToken(fistPref.getSshStoragePreference().getStoragePreferenceId());
break;
case STORAGE_NOT_SET:
logger.error("Not storage preference type found for resource {}", resourceid);
throw new Exception("Not storage preference type found for resource " + resourceid);
}
downloadRequest.setMftAuthorizationToken(AuthToken.newBuilder()
.setUserTokenAuth(UserTokenAuth.newBuilder().setToken(authTokenStr).build()).build());
HttpDownloadApiResponse downloadResponse;
try (MFTApiClient mftApiClient = new MFTApiClient(mftHost, mftPort)) {
MFTApiServiceGrpc.MFTApiServiceBlockingStub mftClientStub = mftApiClient.get();
downloadResponse = mftClientStub.submitHttpDownload(downloadRequest.build());
}
return new MFTDownloadResponse().setUrl(downloadResponse.getUrl()).setAgentId(downloadResponse.getTargetAgent());
}