Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions reposerver/src/main/resources/application.conf
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ storage {
bucketId = ${?TUF_REPOSERVER_AWS_BUCKET_ID}
region = "eu-central-1"
region = ${?TUF_REPOSERVER_AWS_REGION}
endpointUrl = ${?TUF_REPOSERVER_S3_URL}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this needs an extra line:

endpointUrl = ""

Otherwise wont run without TUF_REPOSERVER_S3_URL set.

}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ trait Settings {
val secretKey = _config.getString("storage.s3.secretKey")
val bucketId = _config.getString("storage.s3.bucketId")
val region = Regions.fromName(_config.getString("storage.s3.region"))
new S3Credentials(accessKey, secretKey, bucketId, region)
val endpointUrl = _config.getString("storage.s3.endpointUrl")
new S3Credentials(accessKey, secretKey, bucketId, region, endpointUrl)
}

lazy val useS3 = _config.getString("storage.type").equals("s3")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import akka.util.ByteString
import com.advancedtelematic.libtuf.data.TufDataType.{RepoId, TargetFilename}
import com.advancedtelematic.tuf.reposerver.target_store.TargetStoreEngine.{TargetRedirect, TargetRetrieveResult, TargetStoreResult}
import com.amazonaws.auth.{AWSCredentials, AWSCredentialsProvider}
import com.amazonaws.client.builder.AwsClientBuilder
import com.amazonaws.regions.Regions
import com.amazonaws.services.s3.AmazonS3ClientBuilder
import com.amazonaws.services.s3.model.{CannedAccessControlList, PutObjectRequest}
Expand All @@ -29,10 +30,20 @@ class S3TargetStoreEngine(credentials: S3Credentials)(implicit val system: Actor

private val log = LoggerFactory.getLogger(this.getClass)

private lazy val s3client = AmazonS3ClientBuilder.standard()
.withCredentials(credentials)
.withRegion(credentials.region)
.build()
protected lazy val s3client = {
if(credentials.endpointUrl.length() > 0) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this could be:

  protected lazy val s3client = {
    val builder = AmazonS3ClientBuilder.standard().withCredentials(credentials)
    
    if(credentials.endpointUrl.nonEmpty)
      builder.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(credentials.endpointUrl, credentials.region.getName))
    else
      builder
  }.build()

Copy link
Contributor

@houcros houcros Apr 17, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

else 
  builder.withRegion(credentials.region)

Oder?

log.info(s"Using custom S3 url: ${credentials.endpointUrl}")
AmazonS3ClientBuilder.standard()
.withCredentials(credentials)
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(credentials.endpointUrl, credentials.region.getName()))
.build()
} else {
AmazonS3ClientBuilder.standard()
.withCredentials(credentials)
.withRegion(credentials.region)
.build()
}
}

override def store(repoId: RepoId, filename: TargetFilename, fileData: Source[ByteString, Any]): Future[TargetStoreResult] = {
val tempFile = File.createTempFile("s3file", ".tmp")
Expand Down Expand Up @@ -91,7 +102,7 @@ class S3TargetStoreEngine(credentials: S3Credentials)(implicit val system: Actor
}
}

class S3Credentials(accessKey: String, secretKey: String, val bucketId: String, val region: Regions)
class S3Credentials(accessKey: String, secretKey: String, val bucketId: String, val region: Regions, val endpointUrl: String)
extends AWSCredentials with AWSCredentialsProvider {
override def getAWSAccessKeyId: String = accessKey

Expand Down