Create S3AdapterConfig

This commit is contained in:
Zdenek Topic 2018-10-17 09:45:14 +02:00
parent 6d772b947c
commit 8f6c5fea5f
No known key found for this signature in database
GPG Key ID: 41897C1A6A09DEF5
3 changed files with 57 additions and 13 deletions

View File

@ -5,13 +5,13 @@ extension S3Adapter: FilesystemWriting {
public func write(data: Data, to: String, on worker: Container, options: FileOptions?) -> EventLoopFuture<()> {
return run(path: to, on: worker) {
#warning("FIXME: access")
#warning("FIXME: access overriding")
#warning("FIXME: Region is not passed anywhere to upload!")
let upload = File.Upload(
data: data,
bucket: $0.bucket,
destination: $0.path,
access: .privateAccess,
access: self.config.defaultAccess,
mime: try self.mediaType(of: to).description
)

View File

@ -4,18 +4,59 @@ import Foundation
open class S3Adapter {
public struct Auth {
/// AWS Access Key
let accessKey: String
/// AWS Secret Key
let secretKey: String
/// AWS Security Token. Used to validate temporary credentials, such as those from an EC2 Instance's IAM role
let securityToken : String?
public init(accessKey: String, secretKey: String, securityToken : String? = nil) {
self.accessKey = accessKey
self.secretKey = secretKey
self.securityToken = securityToken
}
}
public struct Config {
let auth: Auth
/// The region where S3 bucket is located.
public let region: Region
public let defaultAccess: AccessControlList
public init(auth: Auth, region: Region, defaultAccess: AccessControlList = .privateAccess) {
self.auth = auth
self.region = region
self.defaultAccess = defaultAccess
}
}
public let bucket: String
public let client: S3
public let signer: S3Signer
public let region: Region
public let config: Config
#warning("TODO: abstract away S3Signer.Config?")
#warning("TODO: default config for access and other properties and metadata")
public init(bucket: String, config: S3Signer.Config) throws {
public init(bucket: String, config: Config) throws {
self.bucket = bucket
self.region = config.region
self.config = config
self.signer = try S3Signer(config)
let signerConfig = S3Signer.Config(
accessKey: config.auth.accessKey,
secretKey: config.auth.secretKey,
region: config.region,
securityToken: config.auth.securityToken
)
self.signer = try S3Signer(signerConfig)
self.client = try S3(defaultBucket: bucket, signer: self.signer)
}
@ -23,7 +64,7 @@ open class S3Adapter {
return File.Location(
path: path,
bucket: bucket,
region: region
region: config.region
)
}

View File

@ -106,10 +106,13 @@ fileprivate extension S3AdapterTests {
func createAdapter() throws -> S3Adapter {
return try S3Adapter(
bucket: "<your-bucket>",
config: S3Signer.Config(
accessKey: "<your-accessKey>",
secretKey: "<your-secretKey>",
region: .euCentral1 // your region
config: S3Adapter.Config(
auth: S3Adapter.Auth(
accessKey: "<your-accessKey>",
secretKey: "<your-secretKey>"
),
region: .euCentral1,
defaultAccess: .publicRead
)
)
}