aws-signer-v4/Sources/AWSSigner/credentials.swift

48 lines
1.5 KiB
Swift

//
// credentials.swift
// aws-sign
//
// Created by Adam Fowler on 29/08/2019.
//
import class Foundation.ProcessInfo
/// Protocol for providing credential details for accessing AWS services
public protocol Credential {
var accessKeyId: String {get}
var secretAccessKey: String {get}
var sessionToken: String? {get}
}
/// basic version of Credential where you supply the credentials
public struct StaticCredential: Credential {
public let accessKeyId: String
public let secretAccessKey: String
public let sessionToken: String?
public init(accessKeyId: String, secretAccessKey: String, sessionToken: String? = nil) {
self.accessKeyId = accessKeyId
self.secretAccessKey = secretAccessKey
self.sessionToken = sessionToken
}
}
/// environment variable version of credential that uses system environment variables to get credential details
public struct EnvironmentCredential: Credential {
public let accessKeyId: String
public let secretAccessKey: String
public let sessionToken: String?
public init?() {
guard let accessKeyId = ProcessInfo.processInfo.environment["AWS_ACCESS_KEY_ID"] else {
return nil
}
guard let secretAccessKey = ProcessInfo.processInfo.environment["AWS_SECRET_ACCESS_KEY"] else {
return nil
}
self.accessKeyId = accessKeyId
self.secretAccessKey = secretAccessKey
self.sessionToken = ProcessInfo.processInfo.environment["AWS_SESSION_TOKEN"]
}
}