DImuthuUpe commented on a change in pull request #6:
URL: https://github.com/apache/airavata-mft/pull/6#discussion_r411819553
##########
File path: api-gateway/.mvn/wrapper/MavenWrapperDownloader.java
##########
@@ -0,0 +1,118 @@
+/*
Review comment:
Is this an auto generated file? What is the purpose of this?
##########
File path: api-gateway/.mvn/wrapper/maven-wrapper.properties
##########
@@ -0,0 +1,2 @@
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
Review comment:
Remove this as this is not related to the PR
##########
File path: api-gateway/.gitignore
##########
@@ -0,0 +1,31 @@
+HELP.md
Review comment:
What is the purpose of this api-gateway directory?
##########
File path: services/resource-service/server/pom.xml
##########
@@ -47,7 +47,7 @@
<dependency>
<groupId>org.apache.airavata</groupId>
<artifactId>registry-api-stubs</artifactId>
- <version>0.19-SNAPSHOT</version>
Review comment:
Bring 0.19-SNAPSHOT back. You should build latest mft-integration branch
of airavata repo locally to get this dependency version
##########
File path: api-gateway/pom.xml
##########
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
Review comment:
Remove this as this is not related to the PR
##########
File path: api-gateway/mvnw
##########
@@ -0,0 +1,322 @@
+#!/bin/sh
Review comment:
Remove this as this is not related to the PR
##########
File path: api-gateway/mvnw.cmd
##########
@@ -0,0 +1,182 @@
+@REM
----------------------------------------------------------------------------
Review comment:
Remove this as this is not related to the PR
##########
File path:
api-gateway/src/main/java/com/example/apigateway/ApiGatewayApplication.java
##########
@@ -0,0 +1,13 @@
+package com.example.apigateway;
Review comment:
Remove this as this is not related to the PR
##########
File path: transport/gcp-transport/mvnw.cmd
##########
@@ -0,0 +1,182 @@
+@REM
----------------------------------------------------------------------------
Review comment:
Remove this file
##########
File path: api-gateway/src/main/java/com/example/apigateway/controller.java
##########
@@ -0,0 +1,123 @@
+package com.example.apigateway;
Review comment:
Remove this as this is not related to the PR
##########
File path: services/resource-service/server/src/main/resources/resources.json
##########
@@ -5,18 +5,18 @@
"resourcePath": "/tmp/1mb.txt",
"scpStorage" : {
"storageId": "remote-ssh-storage",
- "host": "149.165.156.124",
+ "host": "149.165.171.139",
"port": 22,
"user": "root"
}
},
{
"type": "SCP",
"resourceId": "remote-ssh-resource2",
- "resourcePath": "/tmp/10mb.txt",
+ "resourcePath": "/tmp/KAMA20200408_003653_V06",
"scpStorage" : {
"storageId": "remote-ssh-storage",
- "host": "149.165.156.124",
Review comment:
Bring original value back
##########
File path: services/resource-service/server/src/main/resources/resources.json
##########
@@ -5,18 +5,18 @@
"resourcePath": "/tmp/1mb.txt",
"scpStorage" : {
"storageId": "remote-ssh-storage",
- "host": "149.165.156.124",
Review comment:
Bring original value back
##########
File path:
transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSMetadataCollector.java
##########
@@ -0,0 +1,96 @@
+package org.apache.airavata.mft.transport.gcp;
+
+import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
+import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
+import com.google.api.client.http.HttpTransport;
+import com.google.api.client.json.JsonFactory;
+import com.google.api.client.json.jackson2.JacksonFactory;
+import com.google.api.services.storage.Storage;
+import com.google.api.services.storage.StorageScopes;
+import com.google.api.services.storage.model.StorageObject;
+
+import org.apache.airavata.mft.core.ResourceMetadata;
+import org.apache.airavata.mft.core.api.MetadataCollector;
+import org.apache.airavata.mft.resource.client.ResourceServiceClient;
+import org.apache.airavata.mft.resource.service.*;
+import org.apache.airavata.mft.secret.client.SecretServiceClient;
+import org.apache.airavata.mft.secret.service.*;
+
+import java.io.FileInputStream;
+import java.math.BigInteger;
+import java.util.Base64;
+import java.util.Collection;
+
+public class GCSMetadataCollector implements MetadataCollector{
+
+ private String resourceServiceHost;
+ private int resourceServicePort;
+ private String secretServiceHost;
+ private int secretServicePort;
+ boolean initialized = false;
+
+ @Override
+ public void init(String resourceServiceHost, int resourceServicePort,
String secretServiceHost, int secretServicePort) {
+ this.resourceServiceHost = resourceServiceHost;
+ this.resourceServicePort = resourceServicePort;
+ this.secretServiceHost = secretServiceHost;
+ this.secretServicePort = secretServicePort;
+ this.initialized = true;
+ }
+
+ private void checkInitialized() {
+ if (!initialized) {
+ throw new IllegalStateException("GCS Metadata Collector is not
initialized");
+ }
+ }
+
+ @Override
+ public ResourceMetadata getGetResourceMetadata(String resourceId, String
credentialToken) throws Exception {
+ checkInitialized();
+ ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient =
ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
+ GCSResource gcsResource =
resourceClient.getGCSResource(GCSResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+
+ SecretServiceGrpc.SecretServiceBlockingStub secretClient =
SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
+ GCSSecret gcsSecret =
secretClient.getGCSSecret(GCSSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
+
+ HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
+ JsonFactory jsonFactory = new JacksonFactory();
+ GoogleCredential credential = GoogleCredential.fromStream(new
FileInputStream(gcsSecret.getJsonCredentialsFilePath()),transport,jsonFactory);
+ if (credential.createScopedRequired()) {
+ Collection<String> scopes = StorageScopes.all();
+ credential = credential.createScoped(scopes);
+ }
+
+ Storage storage=new Storage.Builder(transport, jsonFactory,
credential).build();
+
+ ResourceMetadata metadata = new ResourceMetadata();
+ StorageObject gcsMetadata =
storage.objects().get(gcsResource.getBucketName(),gcsResource.getResourcePath()).execute();
+ metadata.setResourceSize(gcsMetadata.getSize().longValue());
+ String md5Sum=String.format("%032x", new BigInteger(1,
Base64.getDecoder().decode(gcsMetadata.getMd5Hash())));
Review comment:
Spaces around =
##########
File path:
api-gateway/src/test/java/com/example/apigateway/ApiGatewayApplicationTests.java
##########
@@ -0,0 +1,13 @@
+package com.example.apigateway;
Review comment:
Remove this as this is not related to the PR
##########
File path: services/secret-service/server/pom.xml
##########
@@ -66,7 +66,7 @@
<dependency>
<groupId>org.apache.airavata</groupId>
<artifactId>airavata-data-models</artifactId>
- <version>0.19-SNAPSHOT</version>
Review comment:
Bring original value back
##########
File path:
services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/file/FileBasedSecretBackend.java
##########
@@ -170,4 +170,46 @@ public boolean updateAzureSecret(AzureSecretUpdateRequest
request) throws Except
public boolean deleteAzureSecret(AzureSecretDeleteRequest request) throws
Exception {
throw new UnsupportedOperationException("Operation is not supported in
backend");
}
+
+ @Override
+ public Optional<GCSSecret> getGCSSecret(GCSSecretGetRequest request)
throws Exception {
+ JSONParser jsonParser = new JSONParser();
+ InputStream inputStream =
FileBasedSecretBackend.class.getClassLoader().getResourceAsStream(secretFile);
+
+ try (InputStreamReader reader = new InputStreamReader(inputStream)) {
+ Object obj = jsonParser.parse(reader);
+
+ JSONArray resourceList = (JSONArray) obj;
+
+ List<GCSSecret> gcsSecrets = (List<GCSSecret>)
resourceList.stream()
+ .filter(resource -> "GCS".equals(((JSONObject)
resource).get("type").toString()))
+ .map(resource -> {
+ JSONObject r = (JSONObject) resource;
+
+ GCSSecret gcsSecret = GCSSecret.newBuilder()
+ .setSecretId(r.get("secretId").toString())
+
.setJsonCredentialsFilePath(r.get("jsonCredentialsFilePath").toString()).build();
Review comment:
We can't expect the JSON file path available in agent running location.
This makes very hard to make the agent stateless. You should serialize json
into the secret itself
##########
File path: services/resource-service/server/src/main/resources/resources.json
##########
@@ -5,18 +5,18 @@
"resourcePath": "/tmp/1mb.txt",
"scpStorage" : {
"storageId": "remote-ssh-storage",
- "host": "149.165.156.124",
+ "host": "149.165.171.139",
"port": 22,
"user": "root"
}
},
{
"type": "SCP",
"resourceId": "remote-ssh-resource2",
- "resourcePath": "/tmp/10mb.txt",
Review comment:
Bring original value back
##########
File path:
transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSMetadataCollector.java
##########
@@ -0,0 +1,96 @@
+package org.apache.airavata.mft.transport.gcp;
+
+import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
+import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
+import com.google.api.client.http.HttpTransport;
+import com.google.api.client.json.JsonFactory;
+import com.google.api.client.json.jackson2.JacksonFactory;
+import com.google.api.services.storage.Storage;
+import com.google.api.services.storage.StorageScopes;
+import com.google.api.services.storage.model.StorageObject;
+
+import org.apache.airavata.mft.core.ResourceMetadata;
+import org.apache.airavata.mft.core.api.MetadataCollector;
+import org.apache.airavata.mft.resource.client.ResourceServiceClient;
+import org.apache.airavata.mft.resource.service.*;
+import org.apache.airavata.mft.secret.client.SecretServiceClient;
+import org.apache.airavata.mft.secret.service.*;
+
+import java.io.FileInputStream;
+import java.math.BigInteger;
+import java.util.Base64;
+import java.util.Collection;
+
+public class GCSMetadataCollector implements MetadataCollector{
+
+ private String resourceServiceHost;
+ private int resourceServicePort;
+ private String secretServiceHost;
+ private int secretServicePort;
+ boolean initialized = false;
+
+ @Override
+ public void init(String resourceServiceHost, int resourceServicePort,
String secretServiceHost, int secretServicePort) {
+ this.resourceServiceHost = resourceServiceHost;
+ this.resourceServicePort = resourceServicePort;
+ this.secretServiceHost = secretServiceHost;
+ this.secretServicePort = secretServicePort;
+ this.initialized = true;
+ }
+
+ private void checkInitialized() {
+ if (!initialized) {
+ throw new IllegalStateException("GCS Metadata Collector is not
initialized");
+ }
+ }
+
+ @Override
+ public ResourceMetadata getGetResourceMetadata(String resourceId, String
credentialToken) throws Exception {
+ checkInitialized();
+ ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient =
ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
+ GCSResource gcsResource =
resourceClient.getGCSResource(GCSResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+
+ SecretServiceGrpc.SecretServiceBlockingStub secretClient =
SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
+ GCSSecret gcsSecret =
secretClient.getGCSSecret(GCSSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
+
+ HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
+ JsonFactory jsonFactory = new JacksonFactory();
+ GoogleCredential credential = GoogleCredential.fromStream(new
FileInputStream(gcsSecret.getJsonCredentialsFilePath()),transport,jsonFactory);
+ if (credential.createScopedRequired()) {
+ Collection<String> scopes = StorageScopes.all();
+ credential = credential.createScoped(scopes);
+ }
+
+ Storage storage=new Storage.Builder(transport, jsonFactory,
credential).build();
Review comment:
keep spaces around =
##########
File path: transport/gcp-transport/mvnw
##########
@@ -0,0 +1,310 @@
+#!/bin/sh
Review comment:
Remove this file
##########
File path:
transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSMetadataCollector.java
##########
@@ -0,0 +1,96 @@
+package org.apache.airavata.mft.transport.gcp;
+
+import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
+import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
+import com.google.api.client.http.HttpTransport;
+import com.google.api.client.json.JsonFactory;
+import com.google.api.client.json.jackson2.JacksonFactory;
+import com.google.api.services.storage.Storage;
+import com.google.api.services.storage.StorageScopes;
+import com.google.api.services.storage.model.StorageObject;
+
+import org.apache.airavata.mft.core.ResourceMetadata;
+import org.apache.airavata.mft.core.api.MetadataCollector;
+import org.apache.airavata.mft.resource.client.ResourceServiceClient;
+import org.apache.airavata.mft.resource.service.*;
+import org.apache.airavata.mft.secret.client.SecretServiceClient;
+import org.apache.airavata.mft.secret.service.*;
+
+import java.io.FileInputStream;
+import java.math.BigInteger;
+import java.util.Base64;
+import java.util.Collection;
+
+public class GCSMetadataCollector implements MetadataCollector{
+
+ private String resourceServiceHost;
+ private int resourceServicePort;
+ private String secretServiceHost;
+ private int secretServicePort;
+ boolean initialized = false;
+
+ @Override
+ public void init(String resourceServiceHost, int resourceServicePort,
String secretServiceHost, int secretServicePort) {
+ this.resourceServiceHost = resourceServiceHost;
+ this.resourceServicePort = resourceServicePort;
+ this.secretServiceHost = secretServiceHost;
+ this.secretServicePort = secretServicePort;
+ this.initialized = true;
+ }
+
+ private void checkInitialized() {
+ if (!initialized) {
+ throw new IllegalStateException("GCS Metadata Collector is not
initialized");
+ }
+ }
+
+ @Override
+ public ResourceMetadata getGetResourceMetadata(String resourceId, String
credentialToken) throws Exception {
+ checkInitialized();
+ ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient =
ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
+ GCSResource gcsResource =
resourceClient.getGCSResource(GCSResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+
+ SecretServiceGrpc.SecretServiceBlockingStub secretClient =
SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
+ GCSSecret gcsSecret =
secretClient.getGCSSecret(GCSSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
+
+ HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
+ JsonFactory jsonFactory = new JacksonFactory();
+ GoogleCredential credential = GoogleCredential.fromStream(new
FileInputStream(gcsSecret.getJsonCredentialsFilePath()),transport,jsonFactory);
+ if (credential.createScopedRequired()) {
+ Collection<String> scopes = StorageScopes.all();
+ credential = credential.createScoped(scopes);
+ }
+
+ Storage storage=new Storage.Builder(transport, jsonFactory,
credential).build();
+
+ ResourceMetadata metadata = new ResourceMetadata();
+ StorageObject gcsMetadata =
storage.objects().get(gcsResource.getBucketName(),gcsResource.getResourcePath()).execute();
+ metadata.setResourceSize(gcsMetadata.getSize().longValue());
+ String md5Sum=String.format("%032x", new BigInteger(1,
Base64.getDecoder().decode(gcsMetadata.getMd5Hash())));
+ metadata.setMd5sum(md5Sum);
+
metadata.setUpdateTime(gcsMetadata.getTimeStorageClassUpdated().getValue());
+ metadata.setCreatedTime(gcsMetadata.getTimeCreated().getValue());
+ return metadata;
+ }
+
+ @Override
+ public Boolean isAvailable(String resourceId, String credentialToken)
throws Exception {
+ checkInitialized();
+ ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient =
ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
+ GCSResource gcsResource =
resourceClient.getGCSResource(GCSResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+
+ SecretServiceGrpc.SecretServiceBlockingStub secretClient =
SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
+ GCSSecret gcsSecret =
secretClient.getGCSSecret(GCSSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
+
+ HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
+ JsonFactory jsonFactory = new JacksonFactory();
+ GoogleCredential credential = GoogleCredential.fromStream(new
FileInputStream(gcsSecret.getJsonCredentialsFilePath()),transport,jsonFactory);
+ if (credential.createScopedRequired()) {
+ Collection<String> scopes = StorageScopes.all();
+ credential = credential.createScoped(scopes);
+ }
+
+ Storage storage=new Storage.Builder(transport, jsonFactory,
credential).build();
Review comment:
Spaces around =
##########
File path:
transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSMetadataCollector.java
##########
@@ -0,0 +1,96 @@
+package org.apache.airavata.mft.transport.gcp;
+
+import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
+import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
+import com.google.api.client.http.HttpTransport;
+import com.google.api.client.json.JsonFactory;
+import com.google.api.client.json.jackson2.JacksonFactory;
+import com.google.api.services.storage.Storage;
+import com.google.api.services.storage.StorageScopes;
+import com.google.api.services.storage.model.StorageObject;
+
+import org.apache.airavata.mft.core.ResourceMetadata;
+import org.apache.airavata.mft.core.api.MetadataCollector;
+import org.apache.airavata.mft.resource.client.ResourceServiceClient;
+import org.apache.airavata.mft.resource.service.*;
+import org.apache.airavata.mft.secret.client.SecretServiceClient;
+import org.apache.airavata.mft.secret.service.*;
+
+import java.io.FileInputStream;
+import java.math.BigInteger;
+import java.util.Base64;
+import java.util.Collection;
+
+public class GCSMetadataCollector implements MetadataCollector{
+
+ private String resourceServiceHost;
+ private int resourceServicePort;
+ private String secretServiceHost;
+ private int secretServicePort;
+ boolean initialized = false;
+
+ @Override
+ public void init(String resourceServiceHost, int resourceServicePort,
String secretServiceHost, int secretServicePort) {
+ this.resourceServiceHost = resourceServiceHost;
+ this.resourceServicePort = resourceServicePort;
+ this.secretServiceHost = secretServiceHost;
+ this.secretServicePort = secretServicePort;
+ this.initialized = true;
+ }
+
+ private void checkInitialized() {
+ if (!initialized) {
+ throw new IllegalStateException("GCS Metadata Collector is not
initialized");
+ }
+ }
+
+ @Override
+ public ResourceMetadata getGetResourceMetadata(String resourceId, String
credentialToken) throws Exception {
+ checkInitialized();
+ ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient =
ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
+ GCSResource gcsResource =
resourceClient.getGCSResource(GCSResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+
+ SecretServiceGrpc.SecretServiceBlockingStub secretClient =
SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
+ GCSSecret gcsSecret =
secretClient.getGCSSecret(GCSSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
+
+ HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
+ JsonFactory jsonFactory = new JacksonFactory();
+ GoogleCredential credential = GoogleCredential.fromStream(new
FileInputStream(gcsSecret.getJsonCredentialsFilePath()),transport,jsonFactory);
Review comment:
Read the credential form a string input stream and load the json content
from the secret instead of a file
##########
File path: services/secret-service/server/pom.xml
##########
@@ -47,7 +47,7 @@
<dependency>
<groupId>org.apache.airavata</groupId>
<artifactId>airavata-credential-store-stubs</artifactId>
- <version>0.19-SNAPSHOT</version>
Review comment:
Bring original value back
##########
File path: services/resource-service/server/src/main/resources/resources.json
##########
@@ -29,14 +29,20 @@
{
"type": "S3",
"resourceId": "s3-file",
- "resourcePath": "new-file.txt",
Review comment:
Bring original values back
##########
File path:
transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSReceiver.java
##########
@@ -0,0 +1,72 @@
+package org.apache.airavata.mft.transport.gcp;
+
+import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
+import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
+import com.google.api.client.http.HttpTransport;
+import com.google.api.client.json.JsonFactory;
+import com.google.api.client.json.jackson2.JacksonFactory;
+import com.google.api.services.storage.Storage;
+import com.google.api.services.storage.StorageScopes;
+
+import org.apache.airavata.mft.core.ConnectorContext;
+import org.apache.airavata.mft.core.api.Connector;
+import org.apache.airavata.mft.resource.client.ResourceServiceClient;
+import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
+import org.apache.airavata.mft.resource.service.GCSResource;
+import org.apache.airavata.mft.resource.service.GCSResourceGetRequest;
+import org.apache.airavata.mft.secret.client.SecretServiceClient;
+import org.apache.airavata.mft.secret.service.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.*;
+import java.util.Collection;
+
+
+public class GCSReceiver implements Connector{
+
+ private static final Logger logger =
LoggerFactory.getLogger(GCSReceiver.class);
+
+ private GCSResource gcsResource;
+ private Storage storage;
+
+ @Override
+ public void init(String resourceId, String credentialToken, String
resourceServiceHost, int resourceServicePort, String secretServiceHost, int
secretServicePort) throws Exception {
+ ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient =
ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
+ this.gcsResource =
resourceClient.getGCSResource(GCSResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+
+ SecretServiceGrpc.SecretServiceBlockingStub secretClient =
SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
+ GCSSecret gcsSecret =
secretClient.getGCSSecret(GCSSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
+ HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
+ JsonFactory jsonFactory = new JacksonFactory();
+ GoogleCredential credential = GoogleCredential.fromStream(new
FileInputStream(gcsSecret.getJsonCredentialsFilePath()));
+ if (credential.createScopedRequired()) {
+ Collection<String> scopes = StorageScopes.all();
+ credential = credential.createScoped(scopes);
+ }
+ storage=new Storage.Builder(transport, jsonFactory,
credential).build();
Review comment:
Spaces around =
##########
File path:
transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSSender.java
##########
@@ -0,0 +1,82 @@
+package org.apache.airavata.mft.transport.gcp;
+
+import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
+import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
+import com.google.api.client.http.HttpTransport;
+import com.google.api.client.http.InputStreamContent;
+import com.google.api.client.json.JsonFactory;
+import com.google.api.client.json.jackson2.JacksonFactory;
+import com.google.api.services.storage.StorageScopes;
+import com.google.api.services.storage.model.ObjectAccessControl;
+import com.google.api.services.storage.model.StorageObject;
+import com.google.api.services.storage.Storage;
+import com.google.api.services.storage.Storage.Objects.Insert;
+
+import org.apache.airavata.mft.secret.service.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.airavata.mft.core.ConnectorContext;
+import org.apache.airavata.mft.core.api.Connector;
+import org.apache.airavata.mft.resource.client.ResourceServiceClient;
+import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
+import org.apache.airavata.mft.secret.client.SecretServiceClient;
+import org.apache.airavata.mft.resource.service.GCSResource;
+import org.apache.airavata.mft.resource.service.GCSResourceGetRequest;
+
+import java.io.FileInputStream;
+import java.util.Arrays;
+import java.util.Collection;
+
+
+public class GCSSender implements Connector{
+
+ private static final Logger logger =
LoggerFactory.getLogger(GCSSender.class);
+
+ private GCSResource gcsResource;
+ private Storage storage;
+ @Override
+ public void init(String resourceId, String credentialToken, String
resourceServiceHost, int resourceServicePort, String secretServiceHost, int
secretServicePort) throws Exception {
+
+ ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient =
ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
+ this.gcsResource =
resourceClient.getGCSResource(GCSResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+
+ SecretServiceGrpc.SecretServiceBlockingStub secretClient =
SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
+ GCSSecret gcsSecret =
secretClient.getGCSSecret(GCSSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
+
+ HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
+ JsonFactory jsonFactory = new JacksonFactory();
+ GoogleCredential credential = GoogleCredential.fromStream(new
FileInputStream(gcsSecret.getJsonCredentialsFilePath()));
+ if (credential.createScopedRequired()) {
+ Collection<String> scopes = StorageScopes.all();
+ credential = credential.createScoped(scopes);
+ }
+
+ storage=new Storage.Builder(transport, jsonFactory,
credential).build();
Review comment:
Spaces around =
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]