Create S3AdapterConfig
This commit is contained in:
parent
6d772b947c
commit
8f6c5fea5f
|
@ -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
|
||||
)
|
||||
|
||||
|
|
|
@ -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
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue