From 4ff342ea6a7f6ad6166406bae7ce383259aba284 Mon Sep 17 00:00:00 2001 From: Mads Odgaard Date: Mon, 30 Mar 2020 20:48:18 +0200 Subject: [PATCH 1/5] vapor4 and swift 5.2 --- .../UserInterfaceState.xcuserstate | Bin 0 -> 74682 bytes .../xcshareddata/xcschemes/S3DemoRun.xcscheme | 4 +- .../xcdebugger/Breakpoints_v2.xcbkptlist | 24 +++++ Package.resolved | 83 ++++++++++------ Package.swift | 53 ++++++----- Sources/S3DemoRun/main.swift | 90 ++++++------------ Sources/S3Kit/Extensions/S3+Bucket.swift | 12 +-- Sources/S3Kit/Extensions/S3+Copy.swift | 4 +- Sources/S3Kit/Extensions/S3+Delete.swift | 8 +- Sources/S3Kit/Extensions/S3+Get.swift | 8 +- Sources/S3Kit/Extensions/S3+List.swift | 8 +- Sources/S3Kit/Extensions/S3+Move.swift | 6 +- Sources/S3Kit/Extensions/S3+ObjectInfo.swift | 14 +-- Sources/S3Kit/Extensions/S3+Put.swift | 24 ++--- Sources/S3Kit/Extensions/S3+Request.swift | 6 +- Sources/S3Kit/Extensions/S3+Service.swift | 4 +- Sources/S3Kit/Extensions/S3+Strings.swift | 20 ++-- Sources/S3Kit/Extensions/String+Tools.swift | 1 - Sources/S3Kit/Protocols/S3Client.swift | 59 ++++++------ Sources/S3Kit/S3.swift | 16 +++- Sources/S3Provider/Application+S3.swift | 23 +++++ Sources/S3Provider/Request+S3.swift | 12 +++ Sources/S3Signer/Extensions/Data+Hex.swift | 5 + Sources/S3Signer/Extensions/HMAC+Tools.swift | 4 +- .../Extensions/S3Signer+Private.swift | 6 +- Sources/S3Signer/Payload.swift | 6 +- Sources/S3Signer/Region.swift | 6 ++ Sources/S3Signer/S3Signer.swift | 10 +- Tests/S3Tests/BaseTestCase.swift | 4 +- Tests/S3Tests/S3SignerV2Tests.swift | 7 +- 30 files changed, 300 insertions(+), 227 deletions(-) create mode 100644 .swiftpm/xcode/package.xcworkspace/xcuserdata/madsodgaard.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 .swiftpm/xcode/xcuserdata/madsodgaard.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 Sources/S3Provider/Application+S3.swift create mode 100644 Sources/S3Provider/Request+S3.swift create mode 100644 Sources/S3Signer/Extensions/Data+Hex.swift diff --git a/.swiftpm/xcode/package.xcworkspace/xcuserdata/madsodgaard.xcuserdatad/UserInterfaceState.xcuserstate b/.swiftpm/xcode/package.xcworkspace/xcuserdata/madsodgaard.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..16ba6670375c6ae3d186c8e265d0acb178ba4386 GIT binary patch literal 74682 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 E1tkYJMgRZ+ literal 0 HcmV?d00001 diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/S3DemoRun.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/S3DemoRun.xcscheme index 0181475..5c15f2f 100644 --- a/.swiftpm/xcode/xcshareddata/xcschemes/S3DemoRun.xcscheme +++ b/.swiftpm/xcode/xcshareddata/xcschemes/S3DemoRun.xcscheme @@ -63,12 +63,12 @@ diff --git a/.swiftpm/xcode/xcuserdata/madsodgaard.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/.swiftpm/xcode/xcuserdata/madsodgaard.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..cc78f53 --- /dev/null +++ b/.swiftpm/xcode/xcuserdata/madsodgaard.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,24 @@ + + + + + + + + + diff --git a/Package.resolved b/Package.resolved index 0118a55..c156a44 100644 --- a/Package.resolved +++ b/Package.resolved @@ -6,8 +6,8 @@ "repositoryURL": "https://github.com/swift-server/async-http-client.git", "state": { "branch": null, - "revision": "64851a1a0a2a9e8fa7ae7b3508ce46a1da4a2e1d", - "version": "1.0.0-alpha.2" + "revision": "e2636a4c24e646d3e480fc666da0c090818beb09", + "version": "1.1.0" } }, { @@ -15,8 +15,8 @@ "repositoryURL": "https://github.com/vapor/async-kit.git", "state": { "branch": null, - "revision": "b5742bfbbe2d60f3b77465a0907777261e418f23", - "version": "1.0.0-alpha.1" + "revision": "1f145cffe2109d0fc420bc03b31dacf9de2c7573", + "version": "1.0.0" } }, { @@ -24,8 +24,8 @@ "repositoryURL": "https://github.com/vapor/console-kit.git", "state": { "branch": null, - "revision": "58d000a6236df517e84f162d21afeca757afc2d1", - "version": "4.0.0-alpha.2" + "revision": "f674ff0d037346ad5f9a4feb5088b769cdb9e5d3", + "version": "4.0.0" } }, { @@ -38,21 +38,30 @@ } }, { - "package": "open-crypto", - "repositoryURL": "https://github.com/vapor/open-crypto.git", + "package": "routing-kit", + "repositoryURL": "https://github.com/vapor/routing-kit.git", "state": { "branch": null, - "revision": "06d26edb8e28295bb7103b4f950d5ea58d634c1b", - "version": "4.0.0-alpha.2" + "revision": "35da702471cbcc308f58d38aa8fea971fa3fb166", + "version": "4.0.0" } }, { - "package": "routing-kit", - "repositoryURL": "https://github.com/vapor/routing-kit.git", + "package": "swift-backtrace", + "repositoryURL": "https://github.com/swift-server/swift-backtrace.git", + "state": { + "branch": null, + "revision": "f2fd8c4845a123419c348e0bc4b3839c414077d5", + "version": "1.2.0" + } + }, + { + "package": "swift-crypto", + "repositoryURL": "https://github.com/apple/swift-crypto.git", "state": { "branch": null, - "revision": "6c7f4b471f9662d05045d82e64e22d5572a16a82", - "version": "4.0.0-alpha.1" + "revision": "d67ac68d09a95443303e9d6e37b34e7ba101d5f1", + "version": "1.0.1" } }, { @@ -60,8 +69,17 @@ "repositoryURL": "https://github.com/apple/swift-log.git", "state": { "branch": null, - "revision": "e8aabbe95db22e064ad42f1a4a9f8982664c70ed", - "version": "1.1.1" + "revision": "74d7b91ceebc85daf387ebb206003f78813f71aa", + "version": "1.2.0" + } + }, + { + "package": "swift-metrics", + "repositoryURL": "https://github.com/apple/swift-metrics.git", + "state": { + "branch": null, + "revision": "708b960b4605abb20bc55d65abf6bad607252200", + "version": "2.0.0" } }, { @@ -69,8 +87,8 @@ "repositoryURL": "https://github.com/apple/swift-nio.git", "state": { "branch": null, - "revision": "32760eae40e6b7cb81d4d543bb0a9f548356d9a2", - "version": "2.7.1" + "revision": "a27a07719ca785bcaca019a5b9fe1814b981b4a2", + "version": "2.15.0" } }, { @@ -78,8 +96,8 @@ "repositoryURL": "https://github.com/apple/swift-nio-extras.git", "state": { "branch": null, - "revision": "66f9a509ed3cc56b6eb367515e421beca4a0af53", - "version": "1.2.0" + "revision": "b4dbfacff47fb8d0f9e0a422d8d37935a9f10570", + "version": "1.4.0" } }, { @@ -87,8 +105,8 @@ "repositoryURL": "https://github.com/apple/swift-nio-http2.git", "state": { "branch": null, - "revision": "86ce1dcd0df501401eb1a0d445dbd90aaad84a64", - "version": "1.5.0" + "revision": "82eb3fa0974b838358ee46bc6c5381e5ae5de6b9", + "version": "1.11.0" } }, { @@ -96,8 +114,8 @@ "repositoryURL": "https://github.com/apple/swift-nio-ssl.git", "state": { "branch": null, - "revision": "f5dd7a60ff56f501ff7bf9be753e4b1875bfaf20", - "version": "2.4.0" + "revision": "ae213938e151964aa691f0e902462fbe06baeeb6", + "version": "2.7.1" } }, { @@ -105,8 +123,8 @@ "repositoryURL": "https://github.com/vapor/vapor.git", "state": { "branch": null, - "revision": "35f8dc3df0976cff76945a03bfcb763e46a16440", - "version": "4.0.0-alpha.3.1" + "revision": "ad2aeccfbdd1275c0a8817a8024f0b98d65e3880", + "version": "4.0.0-rc.3.12" } }, { @@ -118,13 +136,22 @@ "version": "0.0.1" } }, + { + "package": "websocket-kit", + "repositoryURL": "https://github.com/vapor/websocket-kit.git", + "state": { + "branch": null, + "revision": "aac462481bcd3039d5db9a0fbe7f4e47eefe2295", + "version": "2.0.0-rc.1" + } + }, { "package": "XMLCoding", "repositoryURL": "https://github.com/LiveUI/XMLCoding.git", "state": { "branch": null, - "revision": "8c760e960a5e53a5338c2871c4fcdf06b8c5ace4", - "version": "0.4.0" + "revision": "f0fbfe17e73f329e13a6133ff5437f7b174049fd", + "version": "0.4.1" } } ] diff --git a/Package.swift b/Package.swift index 9f5861b..5d86f50 100644 --- a/Package.swift +++ b/Package.swift @@ -1,62 +1,65 @@ -// swift-tools-version:4.0 +// swift-tools-version:5.2 import PackageDescription let package = Package( name: "S3Kit", + platforms: [ + .macOS(.v10_15) + ], products: [ .library(name: "S3Kit", targets: ["S3Kit"]), .library(name: "S3Signer", targets: ["S3Signer"]), -// .library(name: "S3TestTools", targets: ["S3TestTools"]) + // .library(name: "S3TestTools", targets: ["S3TestTools"]) ], dependencies: [ - .package(url: "https://github.com/apple/swift-nio.git", from: "2.5.0"), - .package(url: "https://github.com/vapor/vapor.git", from: "4.0.0-alpha.3"), - .package(url: "https://github.com/vapor/open-crypto.git", from: "4.0.0-alpha.2"), - .package(url: "https://github.com/swift-server/async-http-client.git", from: "1.0.0-alpha.2"), + .package(url: "https://github.com/vapor/vapor.git", from: "4.0.0-rc.3.11"), + .package(url: "https://github.com/apple/swift-nio.git", from: "2.13.1"), + .package(url: "https://github.com/apple/swift-crypto.git", from: "1.0.0"), + .package(url: "https://github.com/swift-server/async-http-client.git", from: "1.0.0"), .package(url: "https://github.com/Einstore/HTTPMediaTypes.git", from: "0.0.1"), - .package(url: "https://github.com/Einstore/WebErrorKit.git", from: "0.0.1"), + .package(name: "WebError", url: "https://github.com/Einstore/WebErrorKit.git", from: "0.0.1"), .package(url: "https://github.com/LiveUI/XMLCoding.git", from: "0.1.0") ], targets: [ .target( name: "S3Kit", dependencies: [ - "S3Signer", - "AsyncHTTPClient", - "HTTPMediaTypes", - "XMLCoding" + .target(name: "S3Signer"), + .product(name: "AsyncHTTPClient", package: "async-http-client"), + .product(name: "XMLCoding", package: "XMLCoding"), + .product(name: "HTTPMediaTypes", package: "HTTPMediaTypes") ] ), .target( name: "S3Provider", dependencies: [ - "Vapor", - "S3Kit" + .target(name: "S3Kit"), + .product(name: "Vapor", package: "vapor") ] ), .target( name: "S3DemoRun", dependencies: [ - "Vapor", - "S3Provider" + .target(name: "S3Provider"), + .product(name: "Vapor", package: "vapor") ] ), .target( name: "S3Signer", dependencies: [ - "OpenCrypto", - "NIOHTTP1", - "HTTPMediaTypes", - "WebErrorKit" + .product(name: "Crypto", package: "swift-crypto"), + .product(name: "HTTPMediaTypes", package: "HTTPMediaTypes"), + .product(name: "WebErrorKit", package: "WebError"), + .product(name: "NIOHTTP1", package: "swift-nio"), ] ), -// .target(name: "S3TestTools", dependencies: [ -// "Vapor", -// "S3Kit" -// ] -// ), + // .target(name: "S3TestTools", dependencies: [ + // "Vapor", + // "S3Kit" + // ] + // ), .testTarget(name: "S3Tests", dependencies: [ - "S3Kit" + .target(name: "S3Kit") ] ) ] diff --git a/Sources/S3DemoRun/main.swift b/Sources/S3DemoRun/main.swift index bea445b..8582c12 100644 --- a/Sources/S3DemoRun/main.swift +++ b/Sources/S3DemoRun/main.swift @@ -1,26 +1,23 @@ import Vapor import S3Provider +let DEFAULT_BUCKET = "test-bucket-s3-vapor" -let DEFAULT_BUCKET = "s3-lib-test.einstore.mgw.cz" - - -func routes(_ router: Routes, _ c: Container) throws { +func routes(_ app: Application) throws { guard let key = Environment.get("S3_ACCESS_KEY"), let secret = Environment.get("S3_SECRET") else { fatalError("Missing AWS API key/secret") } - let config = S3Signer.Config(accessKey: key, secretKey: secret, region: Region.euCentral1) - let s3: S3Client = try S3(defaultBucket: DEFAULT_BUCKET, config: config) + app.s3.configuration = .init(accessKey: key, secretKey: secret, region: Region.euNorth1, defaultBucket: DEFAULT_BUCKET) // Get all available buckets - router.get("buckets") { req -> EventLoopFuture in - return s3.buckets(on: req.eventLoop) + app.get("buckets") { req -> EventLoopFuture in + req.s3.buckets() } // Create new bucket - router.put("bucket") { req -> EventLoopFuture in - return s3.create(bucket: "api-created-bucket", region: .euCentral1, on: req.eventLoop).map { + app.put("bucket") { req -> EventLoopFuture in + return req.s3.create(bucket: "api-created-bucket", region: .euCentral1).map { return ":)" }.recover { error in if let error = error.s3ErrorMessage() { @@ -29,10 +26,10 @@ func routes(_ router: Routes, _ c: Container) throws { return ":(" } } - + // Delete bucket - router.delete("bucket") { req -> EventLoopFuture in - return s3.delete(bucket: "api-created-bucket", region: .euCentral1, on: req.eventLoop).map { + app.delete("bucket") { req -> EventLoopFuture in + return req.s3.delete(bucket: "api-created-bucket", region: .euCentral1).map { return ":)" }.recover { error in if let error = error.s3ErrorMessage() { @@ -41,10 +38,10 @@ func routes(_ router: Routes, _ c: Container) throws { return ":(" } } - + // Delete bucket - router.get("files") { req -> EventLoopFuture in - return s3.list(bucket: DEFAULT_BUCKET, region: .euCentral1, headers: [:], on: req.eventLoop).flatMapErrorThrowing { error in + app.get("files") { req -> EventLoopFuture in + return req.s3.list(bucket: DEFAULT_BUCKET, region: .euCentral1, headers: [:]).flatMapErrorThrowing { error in if let error = error.s3ErrorMessage() { print(error.message) } @@ -52,10 +49,10 @@ func routes(_ router: Routes, _ c: Container) throws { throw error } } - + // Bucket location - router.get("bucket", "location") { req -> EventLoopFuture in - return s3.location(bucket: DEFAULT_BUCKET, on: req.eventLoop).map { region in + app.get("bucket", "location") { req -> EventLoopFuture in + return req.s3.location(bucket: DEFAULT_BUCKET).map { region in return region.hostUrlString() }.recover { error -> String in if let error = error as? S3.Error { @@ -69,25 +66,25 @@ func routes(_ router: Routes, _ c: Container) throws { return ":(" } } - + // Demonstrate work with files - router.get("files", "test") { req -> EventLoopFuture in + app.get("files", "test") { req -> EventLoopFuture in let string = "Content of my example file" - + let fileName = "file-hu.txt" - return s3.put(string: string, destination: fileName, access: .publicRead, on: req.eventLoop).flatMap { putResponse -> EventLoopFuture in + return req.s3.put(string: string, destination: fileName, access: .publicRead).flatMap { putResponse -> EventLoopFuture in print("PUT response:") print(putResponse) - return s3.get(file: fileName, on: req.eventLoop).flatMap { getResponse in + return req.s3.get(file: fileName).flatMap { getResponse in print("GET response:") print(getResponse) print(String(data: getResponse.data, encoding: .utf8) ?? "Unknown content!") - return s3.get(fileInfo: fileName, on: req.eventLoop).flatMap { infoResponse in + return req.s3.get(fileInfo: fileName).flatMap { infoResponse in print("HEAD/Info response:") print(infoResponse) - return s3.delete(file: fileName, on: req.eventLoop).flatMapThrowing { response in + return req.s3.delete(file: fileName).flatMapThrowing { response in print("DELETE response:") print(response) let json = try JSONEncoder().encode(infoResponse) @@ -110,38 +107,13 @@ func routes(_ router: Routes, _ c: Container) throws { } /// Called before your application initializes. -func configure(_ s: inout Services) throws { - /// Register routes - s.extend(Routes.self) { r, c in - try routes(r, c) - } - - /// Register middleware - s.register(MiddlewareConfiguration.self) { c in - // Create _empty_ middleware config - var middlewares = MiddlewareConfiguration() - - // Serves files from `Public/` directory - /// middlewares.use(FileMiddleware.self) - - // Catches errors and converts to HTTP response - try middlewares.use(c.make(ErrorMiddleware.self)) - - return middlewares - } -} - -func boot(_ app: Application) throws { - try LoggingSystem.bootstrap(from: &app.environment) - try app.boot() -} - -public func app(_ environment: Environment) throws -> Application { - let app = Application.init(environment: environment) { s in - try configure(&s) - } - try boot(app) - return app +func configure(_ app: Application) throws { + try routes(app) } -try app(.detect()).run() +var env = try Environment.detect() +try LoggingSystem.bootstrap(from: &env) +let app = Application(env) +defer { app.shutdown() } +try configure(app) +try app.run() diff --git a/Sources/S3Kit/Extensions/S3+Bucket.swift b/Sources/S3Kit/Extensions/S3+Bucket.swift index 47c461e..6934b3b 100644 --- a/Sources/S3Kit/Extensions/S3+Bucket.swift +++ b/Sources/S3Kit/Extensions/S3+Bucket.swift @@ -9,7 +9,7 @@ extension S3 { // MARK: Buckets /// Get bucket location - public func location(bucket: String, on eventLoop: EventLoop) -> EventLoopFuture { + public func location(bucket: String) -> EventLoopFuture { let url: URL let awsHeaders: HTTPHeaders let region = Region.euWest2 @@ -21,7 +21,7 @@ extension S3 { return eventLoop.makeFailedFuture(error) } - return make(request: url, method: .GET, headers: awsHeaders, data: Data(), on: eventLoop).flatMapThrowing { response in + return make(request: url, method: .GET, headers: awsHeaders, data: Data()).flatMapThrowing { response in if response.status == .notFound { throw Error.notFound } @@ -48,7 +48,7 @@ extension S3 { } /// Delete bucket - public func delete(bucket: String, region: Region? = nil, on eventLoop: EventLoop) -> EventLoopFuture { + public func delete(bucket: String, region: Region? = nil) -> EventLoopFuture { let url: URL let awsHeaders: HTTPHeaders @@ -59,13 +59,13 @@ extension S3 { return eventLoop.makeFailedFuture(error) } - return make(request: url, method: .DELETE, headers: awsHeaders, data: Data(), on: eventLoop).flatMapThrowing(self.check).map { _ in + return make(request: url, method: .DELETE, headers: awsHeaders, data: Data()).flatMapThrowing(self.check).map { _ in return Void() } } /// Create a bucket - public func create(bucket: String, region: Region? = nil, on eventLoop: EventLoop) -> EventLoopFuture { + public func create(bucket: String, region: Region? = nil) -> EventLoopFuture { let region = region ?? signer.config.region let content = """ @@ -84,7 +84,7 @@ extension S3 { return eventLoop.makeFailedFuture(error) } - return make(request: url, method: .PUT, headers: awsHeaders, data: data, on: eventLoop).flatMapThrowing(self.check).map { _ in + return make(request: url, method: .PUT, headers: awsHeaders, data: data).flatMapThrowing(self.check).map { _ in return Void() } } diff --git a/Sources/S3Kit/Extensions/S3+Copy.swift b/Sources/S3Kit/Extensions/S3+Copy.swift index dc0200a..270dbf1 100644 --- a/Sources/S3Kit/Extensions/S3+Copy.swift +++ b/Sources/S3Kit/Extensions/S3+Copy.swift @@ -8,7 +8,7 @@ extension S3 { // MARK: Copy /// Copy file on S3 - public func copy(file: LocationConvertible, to: LocationConvertible, headers strHeaders: [String: String], on eventLoop: EventLoop) -> EventLoopFuture { + public func copy(file: LocationConvertible, to: LocationConvertible, headers strHeaders: [String: String]) -> EventLoopFuture { do { let destinationUrl = try makeURLBuilder().url(file: to) @@ -21,7 +21,7 @@ extension S3 { payload: .none ) - return make(request: destinationUrl, method: .PUT, headers: headers, on: eventLoop).flatMapThrowing { response in + return make(request: destinationUrl, method: .PUT, headers: headers).flatMapThrowing { response in return try self.check(response).decode(to: File.CopyResponse.self) } } catch let error { diff --git a/Sources/S3Kit/Extensions/S3+Delete.swift b/Sources/S3Kit/Extensions/S3+Delete.swift index 8a6df8b..7f90e1e 100644 --- a/Sources/S3Kit/Extensions/S3+Delete.swift +++ b/Sources/S3Kit/Extensions/S3+Delete.swift @@ -8,7 +8,7 @@ extension S3 { // MARK: Delete /// Delete file from S3 - public func delete(file: LocationConvertible, headers strHeaders: [String: String], on eventLoop: EventLoop) -> EventLoopFuture { + public func delete(file: LocationConvertible, headers strHeaders: [String: String]) -> EventLoopFuture { let headers: HTTPHeaders let url: URL @@ -19,15 +19,15 @@ extension S3 { return eventLoop.makeFailedFuture(error) } - return make(request: url, method: .DELETE, headers: headers, data: nil, on: eventLoop).flatMapThrowing(self.check).map { _ in + return make(request: url, method: .DELETE, headers: headers, data: nil).flatMapThrowing(self.check).map { _ in return Void() } } /// Delete file from S3 - public func delete(file: LocationConvertible, on eventLoop: EventLoop) -> EventLoopFuture { + public func delete(file: LocationConvertible) -> EventLoopFuture { return - delete(file: file, headers: [:], on: eventLoop) + delete(file: file, headers: [:]) } } diff --git a/Sources/S3Kit/Extensions/S3+Get.swift b/Sources/S3Kit/Extensions/S3+Get.swift index 3cc2ada..9c64125 100644 --- a/Sources/S3Kit/Extensions/S3+Get.swift +++ b/Sources/S3Kit/Extensions/S3+Get.swift @@ -16,7 +16,7 @@ extension S3 { // MARK: Get /// Retrieve file data from S3 - public func get(file: LocationConvertible, headers strHeaders: [String: String], on eventLoop: EventLoop) -> EventLoopFuture { + public func get(file: LocationConvertible, headers strHeaders: [String: String]) -> EventLoopFuture { let url: URL let headers: HTTPHeaders @@ -27,7 +27,7 @@ extension S3 { return eventLoop.makeFailedFuture(error) } - return make(request: url, method: .GET, headers: headers, on: eventLoop).flatMapThrowing { response in + return make(request: url, method: .GET, headers: headers).flatMapThrowing { response in try self.check(response) guard var b = response.body, let data = b.readBytes(length: b.readableBytes) else { @@ -40,8 +40,8 @@ extension S3 { } /// Retrieve file data from S3 - public func get(file: LocationConvertible, on eventLoop: EventLoop) -> EventLoopFuture { - return get(file: file, headers: [:], on: eventLoop) + public func get(file: LocationConvertible) -> EventLoopFuture { + return get(file: file, headers: [:]) } } diff --git a/Sources/S3Kit/Extensions/S3+List.swift b/Sources/S3Kit/Extensions/S3+List.swift index 07abee5..af913da 100644 --- a/Sources/S3Kit/Extensions/S3+List.swift +++ b/Sources/S3Kit/Extensions/S3+List.swift @@ -7,7 +7,7 @@ import NIOHTTP1 extension S3 { /// Get list of objects - public func list(bucket: String, region: Region? = nil, headers: [String: String], on eventLoop: EventLoop) -> EventLoopFuture { + public func list(bucket: String, region: Region? = nil, headers: [String: String]) -> EventLoopFuture { let region = region ?? signer.config.region guard let baseUrl = URL(string: region.hostUrlString(bucket: bucket)), let host = baseUrl.host, var components = URLComponents(string: baseUrl.absoluteString) else { @@ -30,15 +30,15 @@ extension S3 { return eventLoop.makeFailedFuture(error) } - return make(request: url, method: .GET, headers: awsHeaders, data: Data(), on: eventLoop).flatMapThrowing { response in + return make(request: url, method: .GET, headers: awsHeaders, data: Data()).flatMapThrowing { response in try self.check(response) return try response.decode(to: BucketResults.self) } } /// Get list of objects - public func list(bucket: String, region: Region? = nil, on eventLoop: EventLoop) -> EventLoopFuture { - return list(bucket: bucket, region: region, headers: [:], on: eventLoop) + public func list(bucket: String, region: Region? = nil) -> EventLoopFuture { + return list(bucket: bucket, region: region, headers: [:]) } } diff --git a/Sources/S3Kit/Extensions/S3+Move.swift b/Sources/S3Kit/Extensions/S3+Move.swift index 3801b02..b626364 100644 --- a/Sources/S3Kit/Extensions/S3+Move.swift +++ b/Sources/S3Kit/Extensions/S3+Move.swift @@ -7,9 +7,9 @@ extension S3 { // MARK: Move /// Copy file on S3 - public func move(file: LocationConvertible, to destination: LocationConvertible, headers: [String: String], on eventLoop: EventLoop) -> EventLoopFuture { - return copy(file: file, to: destination, headers: headers, on: eventLoop).flatMap { copyResult in - return self.delete(file: file, on: eventLoop).map { _ in + public func move(file: LocationConvertible, to destination: LocationConvertible, headers: [String: String]) -> EventLoopFuture { + return copy(file: file, to: destination, headers: headers).flatMap { copyResult in + return self.delete(file: file).map { _ in return copyResult } } diff --git a/Sources/S3Kit/Extensions/S3+ObjectInfo.swift b/Sources/S3Kit/Extensions/S3+ObjectInfo.swift index 1b9f91f..aa36b62 100644 --- a/Sources/S3Kit/Extensions/S3+ObjectInfo.swift +++ b/Sources/S3Kit/Extensions/S3+ObjectInfo.swift @@ -9,19 +9,19 @@ extension S3 { /// Get acl file information (ACL) /// https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGETacl.html - public func get(acl file: LocationConvertible, headers: [String: String], on eventLoop: EventLoop) -> EventLoopFuture { + public func get(acl file: LocationConvertible, headers: [String: String]) -> EventLoopFuture { fatalError("Not implemented") } /// Get acl file information /// https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGETacl.html - func get(acl file: LocationConvertible, on eventLoop: EventLoop) -> EventLoopFuture { - return get(fileInfo: file, headers: [:], on: eventLoop) + func get(acl file: LocationConvertible) -> EventLoopFuture { + return get(fileInfo: file, headers: [:]) } /// Get file information (HEAD) /// https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectHEAD.html - public func get(fileInfo file: LocationConvertible, headers strHeaders: [String: String], on eventLoop: EventLoop) -> EventLoopFuture { + public func get(fileInfo file: LocationConvertible, headers strHeaders: [String: String]) -> EventLoopFuture { let url: URL let headers: HTTPHeaders @@ -32,7 +32,7 @@ extension S3 { return eventLoop.makeFailedFuture(error) } - return make(request: url, method: .HEAD, headers: headers, data: Data(), on: eventLoop).flatMapThrowing { response in + return make(request: url, method: .HEAD, headers: headers, data: Data()).flatMapThrowing { response in try self.check(response) let bucket = file.bucket ?? self.defaultBucket @@ -54,8 +54,8 @@ extension S3 { /// Get file information (HEAD) /// https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectHEAD.html - public func get(fileInfo file: LocationConvertible, on eventLoop: EventLoop) -> EventLoopFuture { - return get(fileInfo: file, headers: [:], on: eventLoop) + public func get(fileInfo file: LocationConvertible) -> EventLoopFuture { + return get(fileInfo: file, headers: [:]) } } diff --git a/Sources/S3Kit/Extensions/S3+Put.swift b/Sources/S3Kit/Extensions/S3+Put.swift index 4875e16..6948d19 100755 --- a/Sources/S3Kit/Extensions/S3+Put.swift +++ b/Sources/S3Kit/Extensions/S3+Put.swift @@ -7,7 +7,7 @@ extension S3 { // MARK: Upload /// Upload file to S3 - public func put(file: File.Upload, headers strHeaders: [String: String], on eventLoop: EventLoop) -> EventLoopFuture { + public func put(file: File.Upload, headers strHeaders: [String: String]) -> EventLoopFuture { let headers: HTTPHeaders let url: URL @@ -27,7 +27,7 @@ extension S3 { return eventLoop.makeFailedFuture(error) } - return make(request: url, method: .PUT, headers: headers, data: file.data, on: eventLoop).flatMapThrowing { response in + return make(request: url, method: .PUT, headers: headers, data: file.data).flatMapThrowing { response in try self.check(response) let res = File.Response(data: file.data, bucket: file.bucket ?? self.defaultBucket, path: file.path, access: file.access, mime: file.mime) return res @@ -35,12 +35,12 @@ extension S3 { } /// Upload file to S3 - public func put(file: File.Upload, on eventLoop: EventLoop) -> EventLoopFuture { - return put(file: file, headers: [:], on: eventLoop) + public func put(file: File.Upload) -> EventLoopFuture { + return put(file: file, headers: [:]) } /// Upload file by it's URL to S3 - public func put(file url: URL, destination: String, access: AccessControlList = .privateAccess, on eventLoop: EventLoop) -> EventLoopFuture { + public func put(file url: URL, destination: String, access: AccessControlList = .privateAccess) -> EventLoopFuture { let data: Data do { data = try Data(contentsOf: url) @@ -49,17 +49,17 @@ extension S3 { } let file = File.Upload(data: data, bucket: nil, destination: destination, access: access, mime: mimeType(forFileAtUrl: url)) - return put(file: file, on: eventLoop) + return put(file: file) } /// Upload file by it's path to S3 - public func put(file path: String, destination: String, access: AccessControlList = .privateAccess, on eventLoop: EventLoop) -> EventLoopFuture { + public func put(file path: String, destination: String, access: AccessControlList = .privateAccess) -> EventLoopFuture { let url: URL = URL(fileURLWithPath: path) - return put(file: url, destination: destination, bucket: nil, access: access, on: eventLoop) + return put(file: url, destination: destination, bucket: nil, access: access) } /// Upload file by it's URL to S3, full set - public func put(file url: URL, destination: String, bucket: String?, access: AccessControlList = .privateAccess, on eventLoop: EventLoop) -> EventLoopFuture { + public func put(file url: URL, destination: String, bucket: String?, access: AccessControlList = .privateAccess) -> EventLoopFuture { let data: Data do { data = try Data(contentsOf: url) @@ -68,13 +68,13 @@ extension S3 { } let file = File.Upload(data: data, bucket: bucket, destination: destination, access: access, mime: mimeType(forFileAtUrl: url)) - return put(file: file, on: eventLoop) + return put(file: file) } /// Upload file by it's path to S3, full set - public func put(file path: String, destination: String, bucket: String?, access: AccessControlList = .privateAccess, on eventLoop: EventLoop) -> EventLoopFuture { + public func put(file path: String, destination: String, bucket: String?, access: AccessControlList = .privateAccess) -> EventLoopFuture { let url: URL = URL(fileURLWithPath: path) - return put(file: url, destination: destination, bucket: bucket, access: access, on: eventLoop) + return put(file: url, destination: destination, bucket: bucket, access: access) } } diff --git a/Sources/S3Kit/Extensions/S3+Request.swift b/Sources/S3Kit/Extensions/S3+Request.swift index 4c23d74..34f00f4 100644 --- a/Sources/S3Kit/Extensions/S3+Request.swift +++ b/Sources/S3Kit/Extensions/S3+Request.swift @@ -6,7 +6,7 @@ import AsyncHTTPClient extension S3 { /// Make an S3 request - func make(request url: URL, method: HTTPMethod, headers: HTTPHeaders, data: Data? = nil, cachePolicy: URLRequest.CachePolicy = .useProtocolCachePolicy, on eventLoop: EventLoop) -> EventLoopFuture { + func make(request url: URL, method: HTTPMethod, headers: HTTPHeaders, data: Data? = nil, cachePolicy: URLRequest.CachePolicy = .useProtocolCachePolicy) -> EventLoopFuture { do { let body: HTTPClient.Body? if let data = data { @@ -27,8 +27,8 @@ extension S3 { headers: headers, body: body ) - let client = HTTPClient(eventLoopGroupProvider: .shared(eventLoop)) - return client.execute(request: request) + + return httpClient.execute(request: request, eventLoop: .delegate(on: eventLoop)) } catch { return eventLoop.makeFailedFuture(error) } diff --git a/Sources/S3Kit/Extensions/S3+Service.swift b/Sources/S3Kit/Extensions/S3+Service.swift index e7d72a9..6b74536 100644 --- a/Sources/S3Kit/Extensions/S3+Service.swift +++ b/Sources/S3Kit/Extensions/S3+Service.swift @@ -7,7 +7,7 @@ extension S3 { // MARK: Buckets /// Get list of buckets - public func buckets(on eventLoop: EventLoop) -> EventLoopFuture { + public func buckets() -> EventLoopFuture { let headers: HTTPHeaders let url: URL @@ -18,7 +18,7 @@ extension S3 { return eventLoop.makeFailedFuture(error) } - return make(request: url, method: .GET, headers: headers, data: Data(), on: eventLoop).flatMapThrowing { response in + return make(request: url, method: .GET, headers: headers, data: Data()).flatMapThrowing { response in try self.check(response) return try response.decode(to: BucketsInfo.self) } diff --git a/Sources/S3Kit/Extensions/S3+Strings.swift b/Sources/S3Kit/Extensions/S3+Strings.swift index ea70679..ecba9c5 100755 --- a/Sources/S3Kit/Extensions/S3+Strings.swift +++ b/Sources/S3Kit/Extensions/S3+Strings.swift @@ -5,32 +5,32 @@ import HTTPMediaTypes extension S3 { /// Upload file content to S3, full set - public func put(string: String, mime: HTTPMediaType, destination: String, bucket: String?, access: AccessControlList, on eventLoop: EventLoop) -> EventLoopFuture { + public func put(string: String, mime: HTTPMediaType, destination: String, bucket: String?, access: AccessControlList) -> EventLoopFuture { guard let data: Data = string.data(using: String.Encoding.utf8) else { return eventLoop.makeFailedFuture(Error.badStringData) } let file = File.Upload(data: data, bucket: bucket, destination: destination, access: access, mime: mime.description) - return put(file: file, on: eventLoop) + return put(file: file) } /// Upload file content to S3 - public func put(string: String, mime: HTTPMediaType, destination: String, access: AccessControlList, on eventLoop: EventLoop) -> EventLoopFuture { - return put(string: string, mime: mime, destination: destination, bucket: nil, access: access, on: eventLoop) + public func put(string: String, mime: HTTPMediaType, destination: String, access: AccessControlList) -> EventLoopFuture { + return put(string: string, mime: mime, destination: destination, bucket: nil, access: access) } /// Upload file content to S3 - public func put(string: String, destination: String, access: AccessControlList, on eventLoop: EventLoop) -> EventLoopFuture { - return put(string: string, mime: .plainText, destination: destination, bucket: nil, access: access, on: eventLoop) + public func put(string: String, destination: String, access: AccessControlList) -> EventLoopFuture { + return put(string: string, mime: .plainText, destination: destination, bucket: nil, access: access) } /// Upload file content to S3 - public func put(string: String, mime: HTTPMediaType, destination: String, on eventLoop: EventLoop) -> EventLoopFuture { - return put(string: string, mime: mime, destination: destination, access: .privateAccess, on: eventLoop) + public func put(string: String, mime: HTTPMediaType, destination: String) -> EventLoopFuture { + return put(string: string, mime: mime, destination: destination, access: .privateAccess) } /// Upload file content to S3 - public func put(string: String, destination: String, on eventLoop: EventLoop) -> EventLoopFuture { - return put(string: string, mime: .plainText, destination: destination, bucket: nil, access: .privateAccess, on: eventLoop) + public func put(string: String, destination: String) -> EventLoopFuture { + return put(string: string, mime: .plainText, destination: destination, bucket: nil, access: .privateAccess) } } diff --git a/Sources/S3Kit/Extensions/String+Tools.swift b/Sources/S3Kit/Extensions/String+Tools.swift index 83195b0..fd54f4a 100644 --- a/Sources/S3Kit/Extensions/String+Tools.swift +++ b/Sources/S3Kit/Extensions/String+Tools.swift @@ -11,5 +11,4 @@ extension String { } var bytes: [UInt8] { .init(utf8) } - } diff --git a/Sources/S3Kit/Protocols/S3Client.swift b/Sources/S3Kit/Protocols/S3Client.swift index 4cf4645..9787fd1 100644 --- a/Sources/S3Kit/Protocols/S3Client.swift +++ b/Sources/S3Kit/Protocols/S3Client.swift @@ -4,97 +4,96 @@ import HTTPMediaTypes /// S3 client Protocol -public protocol S3Client { - +public protocol S3Client { /// Get list of objects - func buckets(on eventLoop: EventLoop) -> EventLoopFuture + func buckets() -> EventLoopFuture /// Create a bucket - func create(bucket: String, region: Region?, on eventLoop: EventLoop) -> EventLoopFuture + func create(bucket: String, region: Region?) -> EventLoopFuture /// Delete a bucket wherever it is // func delete(bucket: String, on container: Container) -> EventLoopFuture /// Delete a bucket - func delete(bucket: String, region: Region?, on eventLoop: EventLoop) -> EventLoopFuture + func delete(bucket: String, region: Region?) -> EventLoopFuture /// Get bucket location - func location(bucket: String, on eventLoop: EventLoop) -> EventLoopFuture + func location(bucket: String) -> EventLoopFuture /// Get list of objects - func list(bucket: String, region: Region?, on eventLoop: EventLoop) -> EventLoopFuture + func list(bucket: String, region: Region?) -> EventLoopFuture /// Get list of objects - func list(bucket: String, region: Region?, headers: [String: String], on eventLoop: EventLoop) -> EventLoopFuture + func list(bucket: String, region: Region?, headers: [String: String]) -> EventLoopFuture /// Upload file to S3 - func put(file: File.Upload, on eventLoop: EventLoop) -> EventLoopFuture + func put(file: File.Upload) -> EventLoopFuture /// Upload file to S3 - func put(file: File.Upload, headers: [String: String], on eventLoop: EventLoop) -> EventLoopFuture + func put(file: File.Upload, headers: [String: String]) -> EventLoopFuture /// Upload file to S3 - func put(file url: URL, destination: String, access: AccessControlList, on eventLoop: EventLoop) -> EventLoopFuture + func put(file url: URL, destination: String, access: AccessControlList) -> EventLoopFuture /// Upload file to S3 - func put(file url: URL, destination: String, bucket: String?, access: AccessControlList, on eventLoop: EventLoop) -> EventLoopFuture + func put(file url: URL, destination: String, bucket: String?, access: AccessControlList) -> EventLoopFuture /// Upload file to S3 - func put(file path: String, destination: String, access: AccessControlList, on eventLoop: EventLoop) -> EventLoopFuture + func put(file path: String, destination: String, access: AccessControlList) -> EventLoopFuture /// Upload file to S3 - func put(file path: String, destination: String, bucket: String?, access: AccessControlList, on eventLoop: EventLoop) -> EventLoopFuture + func put(file path: String, destination: String, bucket: String?, access: AccessControlList) -> EventLoopFuture /// Upload file to S3 - func put(string: String, destination: String, on eventLoop: EventLoop) -> EventLoopFuture + func put(string: String, destination: String) -> EventLoopFuture /// Upload file to S3 - func put(string: String, destination: String, access: AccessControlList, on eventLoop: EventLoop) -> EventLoopFuture + func put(string: String, destination: String, access: AccessControlList) -> EventLoopFuture /// Upload file to S3 - func put(string: String, mime: HTTPMediaType, destination: String, on eventLoop: EventLoop) -> EventLoopFuture + func put(string: String, mime: HTTPMediaType, destination: String) -> EventLoopFuture /// Upload file to S3 - func put(string: String, mime: HTTPMediaType, destination: String, access: AccessControlList, on eventLoop: EventLoop) -> EventLoopFuture + func put(string: String, mime: HTTPMediaType, destination: String, access: AccessControlList) -> EventLoopFuture /// Upload file to S3 - func put(string: String, mime: HTTPMediaType, destination: String, bucket: String?, access: AccessControlList, on eventLoop: EventLoop) -> EventLoopFuture + func put(string: String, mime: HTTPMediaType, destination: String, bucket: String?, access: AccessControlList) -> EventLoopFuture /// File URL func url(fileInfo file: LocationConvertible) throws -> URL /// Retrieve file data from S3 - func get(fileInfo file: LocationConvertible, on eventLoop: EventLoop) -> EventLoopFuture + func get(fileInfo file: LocationConvertible) -> EventLoopFuture /// Retrieve file data from S3 - func get(fileInfo file: LocationConvertible, headers: [String: String], on eventLoop: EventLoop) -> EventLoopFuture + func get(fileInfo file: LocationConvertible, headers: [String: String]) -> EventLoopFuture /// Retrieve file data from S3 - func get(file: LocationConvertible, on eventLoop: EventLoop) -> EventLoopFuture + func get(file: LocationConvertible) -> EventLoopFuture /// Retrieve file data from S3 - func get(file: LocationConvertible, headers: [String: String], on eventLoop: EventLoop) -> EventLoopFuture + func get(file: LocationConvertible, headers: [String: String]) -> EventLoopFuture /// Delete file from S3 - func delete(file: LocationConvertible, on eventLoop: EventLoop) -> EventLoopFuture + func delete(file: LocationConvertible) -> EventLoopFuture /// Delete file from S3 - func delete(file: LocationConvertible, headers: [String: String], on eventLoop: EventLoop) -> EventLoopFuture + func delete(file: LocationConvertible, headers: [String: String]) -> EventLoopFuture /// Copy file on S3 - func copy(file: LocationConvertible, to: LocationConvertible, headers: [String: String], on eventLoop: EventLoop) -> EventLoopFuture + func copy(file: LocationConvertible, to: LocationConvertible, headers: [String: String]) -> EventLoopFuture } extension S3Client { /// Retrieve file data from S3 - func get(file: LocationConvertible, on eventLoop: EventLoop) -> EventLoopFuture { - return get(file: file, headers: [:], on: eventLoop) + func get(file: LocationConvertible) -> EventLoopFuture { + return get(file: file, headers: [:]) } /// Copy file on S3 - public func copy(file: LocationConvertible, to: LocationConvertible, on eventLoop: EventLoop) -> EventLoopFuture { - return self.copy(file: file, to: to, headers: [:], on: eventLoop) + public func copy(file: LocationConvertible, to: LocationConvertible) -> EventLoopFuture { + return self.copy(file: file, to: to, headers: [:]) } static var dateFormatter: DateFormatter { diff --git a/Sources/S3Kit/S3.swift b/Sources/S3Kit/S3.swift index a485f73..afbe8ae 100755 --- a/Sources/S3Kit/S3.swift +++ b/Sources/S3Kit/S3.swift @@ -6,6 +6,8 @@ import AsyncHTTPClient /// Main S3 class public class S3: S3Client { + public let eventLoop: EventLoop + public let httpClient: HTTPClient /// Error messages public enum Error: Swift.Error { @@ -30,23 +32,27 @@ public class S3: S3Client { // MARK: Initialization /// Basic initialization method, also registers S3Signer and self with services - @discardableResult public convenience init(defaultBucket: String, config: S3Signer.Config) throws { - let signer = try S3Signer(config) - try self.init(defaultBucket: defaultBucket, signer: signer) + public convenience init(config: S3Signer.Config, eventLoop: EventLoop, httpClient: HTTPClient) { + let signer = S3Signer(config) + self.init(defaultBucket: config.defaultBucket, signer: signer, eventLoop: eventLoop, httpClient: httpClient) } /// Basic initialization method - public init(defaultBucket: String, signer: S3Signer) throws { + public init(defaultBucket: String, signer: S3Signer, eventLoop: EventLoop, httpClient: HTTPClient) { self.defaultBucket = defaultBucket self.signer = signer self.urlBuilder = nil + self.eventLoop = eventLoop + self.httpClient = httpClient } /// Basic initialization method - public init(urlBuilder: URLBuilder, defaultBucket: String, signer: S3Signer) throws { + public init(urlBuilder: URLBuilder, defaultBucket: String, signer: S3Signer, eventLoop: EventLoop, httpClient: HTTPClient) { self.defaultBucket = defaultBucket self.signer = signer self.urlBuilder = nil + self.eventLoop = eventLoop + self.httpClient = httpClient } } diff --git a/Sources/S3Provider/Application+S3.swift b/Sources/S3Provider/Application+S3.swift new file mode 100644 index 0000000..b18230f --- /dev/null +++ b/Sources/S3Provider/Application+S3.swift @@ -0,0 +1,23 @@ +import Vapor +import S3Signer + +extension Application { + public struct S3 { + fileprivate let application: Application + + struct ConfigurationKey: StorageKey { + typealias Value = S3Signer.Config + } + + public var configuration: S3Signer.Config? { + get { + application.storage[ConfigurationKey.self] + } + nonmutating set { + application.storage[ConfigurationKey.self] = newValue + } + } + } + + public var s3: S3 { .init(application: self) } +} diff --git a/Sources/S3Provider/Request+S3.swift b/Sources/S3Provider/Request+S3.swift new file mode 100644 index 0000000..e9c4056 --- /dev/null +++ b/Sources/S3Provider/Request+S3.swift @@ -0,0 +1,12 @@ +import Vapor +import S3Kit + +extension Request { + public var s3: S3 { + guard let config = application.s3.configuration else { + fatalError("S3 is not configured, please use application.s3.configuration = ...") + } + + return .init(config: config, eventLoop: eventLoop, httpClient: application.client.http) + } +} diff --git a/Sources/S3Signer/Extensions/Data+Hex.swift b/Sources/S3Signer/Extensions/Data+Hex.swift new file mode 100644 index 0000000..433ddd9 --- /dev/null +++ b/Sources/S3Signer/Extensions/Data+Hex.swift @@ -0,0 +1,5 @@ +extension Data { + var hexString: String { + return self.reduce("", { $0 + String(format: "%02x", $1) }) + } +} diff --git a/Sources/S3Signer/Extensions/HMAC+Tools.swift b/Sources/S3Signer/Extensions/HMAC+Tools.swift index a4c2238..1438842 100644 --- a/Sources/S3Signer/Extensions/HMAC+Tools.swift +++ b/Sources/S3Signer/Extensions/HMAC+Tools.swift @@ -1,5 +1,4 @@ -import OpenCrypto - +import Crypto extension HMAC { @@ -26,5 +25,4 @@ extension HashedAuthenticationCode { var data: Data { return Data(self) } - } diff --git a/Sources/S3Signer/Extensions/S3Signer+Private.swift b/Sources/S3Signer/Extensions/S3Signer+Private.swift index ee00b5b..b7d5d2d 100755 --- a/Sources/S3Signer/Extensions/S3Signer+Private.swift +++ b/Sources/S3Signer/Extensions/S3Signer+Private.swift @@ -1,5 +1,5 @@ import Foundation -import OpenCrypto +import Crypto import NIOHTTP1 import HTTPMediaTypes @@ -55,11 +55,11 @@ extension S3Signer { let dateRegionServiceKey = HMAC.signature(config.service, key: dateRegionKey) let signingKey = HMAC.signature("aws4_request", key: dateRegionServiceKey) let signature = HMAC.signature(stringToSign, key: signingKey) - return signature.description + return Data(signature).hexString } func createStringToSign(_ canonicalRequest: String, dates: Dates, region: Region) throws -> String { - let canonRequestHash = SHA256.hash(data: canonicalRequest.bytes).description + let canonRequestHash = Data(SHA256.hash(data: canonicalRequest.bytes)).hexString let components = [ "AWS4-HMAC-SHA256", dates.long, diff --git a/Sources/S3Signer/Payload.swift b/Sources/S3Signer/Payload.swift index 025e8a2..cca390c 100755 --- a/Sources/S3Signer/Payload.swift +++ b/Sources/S3Signer/Payload.swift @@ -1,5 +1,5 @@ import Foundation -import OpenCrypto +import Crypto /// Payload object @@ -30,9 +30,9 @@ extension Payload { func hashed() -> String { switch self { case .bytes(let bytes): - return SHA256.hash(data: [UInt8](bytes)).description + return Data(SHA256.hash(data: [UInt8](bytes))).hexString case .none: - return SHA256.hash(data: []).description + return Data(SHA256.hash(data: [])).hexString case .unsigned: return "UNSIGNED-PAYLOAD" } diff --git a/Sources/S3Signer/Region.swift b/Sources/S3Signer/Region.swift index 596235b..a45e6b8 100755 --- a/Sources/S3Signer/Region.swift +++ b/Sources/S3Signer/Region.swift @@ -32,6 +32,9 @@ public struct Region { /// EU (Frankfurt) public static let euCentral1: Name = "eu-central-1" + /// EU (Stockholm) + public static let euNorth1: Name = "eu-north-1" + /// EU (Ireland) public static let euWest1: Name = "eu-west-1" @@ -124,6 +127,9 @@ extension Region { /// convenience var for EU (Frankfurt) public static let euCentral1 = Region(name: .euCentral1) + /// EU (Stockholm) + public static let euNorth1 = Region(name: .euNorth1) + /// convenience var for EU (Ireland) public static let euWest1 = Region(name: .euWest1) diff --git a/Sources/S3Signer/S3Signer.swift b/Sources/S3Signer/S3Signer.swift index e17e7fd..fe8ff98 100755 --- a/Sources/S3Signer/S3Signer.swift +++ b/Sources/S3Signer/S3Signer.swift @@ -1,5 +1,5 @@ import Foundation -import OpenCrypto +import Crypto import NIOHTTP1 import WebErrorKit @@ -65,6 +65,9 @@ public final class S3Signer { /// AWS Service type let service: String = "s3" + /// Default bucket name + public let defaultBucket: String + /// Initalizer /// - Parameter accessKey: S3 access token @@ -72,12 +75,13 @@ public final class S3Signer { /// - Parameter region: Region /// - Parameter version: Signing version /// - Parameter securityToken: Temporary security token - public init(accessKey: String, secretKey: String, region: Region, version: Version = .v4, securityToken: String? = nil) { + public init(accessKey: String, secretKey: String, region: Region, version: Version = .v4, securityToken: String? = nil, defaultBucket: String) { self.accessKey = accessKey self.secretKey = secretKey self.region = region self.securityToken = securityToken self.authVersion = version + self.defaultBucket = defaultBucket } } @@ -86,7 +90,7 @@ public final class S3Signer { public private(set) var config: Config /// Initializer - public init(_ config: Config) throws { + public init(_ config: Config) { self.config = config } diff --git a/Tests/S3Tests/BaseTestCase.swift b/Tests/S3Tests/BaseTestCase.swift index bfb7b10..cbc1d0b 100644 --- a/Tests/S3Tests/BaseTestCase.swift +++ b/Tests/S3Tests/BaseTestCase.swift @@ -14,12 +14,12 @@ class BaseTestCase: XCTestCase { override func setUp() { super.setUp() region = Region.usEast1 - signer = try! S3Signer(S3Signer.Config(accessKey: accessKey, secretKey: secretKey, region: region)) + signer = try! S3Signer(S3Signer.Config(accessKey: accessKey, secretKey: secretKey, region: region, defaultBucket: "")) // this is the "seconds" representation of "20130524T000000Z" overridenDate = Dates(Date(timeIntervalSince1970: (60*60*24) * 15849)) - if let s = try? S3Signer(S3Signer.Config(accessKey: accessKey, secretKey: secretKey, region: region)) { + if let s = try? S3Signer(S3Signer.Config(accessKey: accessKey, secretKey: secretKey, region: region, defaultBucket: "")) { signer = s } else { XCTFail("Could not intialize signer") diff --git a/Tests/S3Tests/S3SignerV2Tests.swift b/Tests/S3Tests/S3SignerV2Tests.swift index 96f5fd0..e1d6c67 100644 --- a/Tests/S3Tests/S3SignerV2Tests.swift +++ b/Tests/S3Tests/S3SignerV2Tests.swift @@ -5,12 +5,7 @@ import XCTest class S3SignerV2Tests: BaseTestCase { override func setUp() { super.setUp() - signer = try! S3Signer(S3Signer.Config(accessKey: accessKey, secretKey: secretKey, region: region, version: .v2)) - if let s = try? S3Signer(S3Signer.Config(accessKey: accessKey, secretKey: secretKey, region: region, version: .v2)) { - signer = s - } else { - XCTFail("Could not intialize signer") - } + signer = S3Signer(S3Signer.Config(accessKey: accessKey, secretKey: secretKey, region: region, version: .v2, defaultBucket: "")) } // TOOD: appropriate testing would try various cases (where URL has signable query items, etc) From 8ef9fe78e04eab4f01796393ab2953a434946615 Mon Sep 17 00:00:00 2001 From: Mads Odgaard Date: Mon, 30 Mar 2020 20:55:46 +0200 Subject: [PATCH 2/5] update readme --- .../UserInterfaceState.xcuserstate | Bin 74682 -> 74400 bytes .../xcschemes/S3Kit-Package.xcscheme | 14 ++ .../xcschemes/xcschememanagement.plist | 34 +++ Package.swift | 4 +- README.md | 238 ++++++++---------- .../{S3Provider => S3}/Application+S3.swift | 0 Sources/{S3Provider => S3}/Exports.swift | 0 .../Model/Models+Content.swift | 0 Sources/{S3Provider => S3}/Request+S3.swift | 0 Sources/S3DemoRun/main.swift | 2 +- 10 files changed, 154 insertions(+), 138 deletions(-) create mode 100644 .swiftpm/xcode/xcuserdata/madsodgaard.xcuserdatad/xcschemes/xcschememanagement.plist rename Sources/{S3Provider => S3}/Application+S3.swift (100%) rename Sources/{S3Provider => S3}/Exports.swift (100%) rename Sources/{S3Provider => S3}/Model/Models+Content.swift (100%) rename Sources/{S3Provider => S3}/Request+S3.swift (100%) diff --git a/.swiftpm/xcode/package.xcworkspace/xcuserdata/madsodgaard.xcuserdatad/UserInterfaceState.xcuserstate b/.swiftpm/xcode/package.xcworkspace/xcuserdata/madsodgaard.xcuserdatad/UserInterfaceState.xcuserstate index 16ba6670375c6ae3d186c8e265d0acb178ba4386..581e83029be30b1f661bb2fec03c65a0c03c05ee 100644 GIT binary patch delta 32555 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 delta 32985 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

-n*o&mET$ooFbL10K%e;Ak}z#IkU7%(KToT#w8 zsI<<%9elC|nD1PC#5zw_@|{-s>dHLflLcVDck;;+;Uh15sxLq)D^mXX2BhpI`>JrV zj|z8+7@q8}8s-o7-_H5@hRES6oE)aYopDc3yzJdAR!${wa-3X6j+d*-338%bO-_=N znhQ?OcEZ&J=BgXq^-8!~DqNXdPl2ls z%rzHWBLc_2NB5MC%qlBu#MFJIcydeG;drvc@op&fcR1e7|Jp1*=CoP4lkD(Exr>T@ zTPdb>ma{9|y=289<=%21xv$($?k^9J2g-xw!SWDbegX1&6!R-EzX5X(nESx|4$K2! z{s87-g7veO}D;*gJA+{7XOs^os=_F^7*^`jt z<3jjcUg%JEfvW5iVwUn^)oh>s5AyF_#g@yf9D=V@$)76|2(EG}`PcGxg?z2NPF^o> zkT=Sk<>SOh_k{4b5feipQaJedQwO^wM&DxdLNNbce+8Sex1(uMLbH@Rj0Blm_+r8F!Yc=JBRjmouL|{XJ4FxuA zxi!g}Y)t`{v`hrBkv8(7k_dai^8ow(tE0nnthN4Ekvwa@Qio_@W0X2fzvdfW$J*e3 zo+0a`{}yOI!2SzzG=TM9Y+Lp92`_FAwD@>ysr*ot>ehI12mG2{?N*ktWz{G>alX` zRA6(Q?_66ysm!UA%r{wQs~^*GoaR%_-U{>ydD}3U4QGuk&!&(!5);V_cjTo)>LpOb zobNhcJ|r&~Qn!F2iyv+FF)zH!?ilZrZ{EGXLVp+~F=U4Kp`8E7k{967Pe?ia)vE;*ZJ%tM4E8&E2PPii#mC0X{FJFC40>B31{9EL0 z@(y_y`R3IP^&3|n)&grwYd7m4@QU~o&SQheCXX#1+dOu7?D9D3aopoOkCPrhc%1P#=W*WS zu_xyl=2^qDtiESo&;FjHJtuok^_=cG!*iDB9M46bOFYXxmwT@CT3zSpLeuI~=t!@k#iZ}{Hwz2ke=_c!1Bz7KpK`absk%lE18b3c=xZ zhksB1UjBpqNBEEQpX~pM|4jec{`36j`+woT(0_;j5&v`kSNyN}-|)ZXf5-n1|406R z`aki1=Kmr<45%8A70@uCall6b{Q@Qj%n4W+uqt32OJDI9B{NO;9|hz zfL8(U0yTkjAP(dMJp;W1BLb@i<^~oAHVSMVI52Qn;LO0)fnNu14g4waa^T;AZ-clX z&miw0-yr{>z@Xru(4d5%YC*|CsX^&MnL*h>IYG^Wx(AI3S`ze4(6ONJf=&jV4mun3 zW6<58Cqd7HUIx7hdK>gUSQ{({`v;c=1_uX+28Rd72PXtq3r-GB4Necv2(A;{GPq-K zx8Om+LxYD0j|?6iToyb%cxLeI;7^0+1q)JHDki?MukVYXrLxz@x zObD42G9_eM$R{B)LuQBALzacC2w4^KWk^NH*CFddHiT>nITP|*s4+Axv?O$R=&aC1 zp-V%Tg{}-;9l9oTTj)2T--hlDJrsH*^jPSL(9@xRguV`=!cZ6!rVSIq#4vN19Oe-g z5Ed4e7?v599hMVTGptrvov?ag4Z<3QH3=(g7FHV8BWzHZEo?&Aq_8PrGs0$t%?bN7 zY)RPHVH?9Xhiwhp6}CHUPuRY&V`1mRE{0tSyBc;q>}J@*us_3|ggp;?8TL9{8_tCr z!%g8*xFtL&JTyE!JSsdUJT5#VJUcumJU2Wqydb=Bc(d>p;jP2lhPMyz6aI1d=u5q;U~hs4?h)tI{bZvPef!y zOhjBn)riE1q==dkxe>J@@*^5WG>vE;(JG=%M7xNOB6>yij_4aPF~S}(FJgYgf`~;C zOCr9GSR1h}Vnf8Y5&I$zL>!Jd8gV@0kBH|HFCtz=vXNzmNIudODMxxldPVv~R*P&J z*)g(9WVgtkk-Z}OL{5vGAGsiMQRLFdWsxf)cSP=wJQjH(^83hBk*6cCM&60M8~I!0 z{m4HfpF}>3d=dF7N*g6dMMh;trQLCc9EQ_j$`Z{WF)Ul}ZQIDhkih3ILJnCiC>!`n@-bHJo>1Z6yM(d)v z=2G3HXtm6*pduVUWCYGUbF94p0o#rnjS`NamrhQ~(6M#sj+ zR*6lEtr=S{wrOnh*p{)aV>`xnj_n%TJ+^1;$k_3*vtw7r?ugwLdocEg*dJqW#QqWc zF!oXGpK)xQE{=;c#tCs^T&=h|an0je#sdlN_yCnal?4*LE;-orB z^^%$=l_qsc>XOtwsb^BJq&`U>Cyh)Rl{6-4TGFf}d(yn51xbsO%9EBStxwvMbTsK$ z(ut&#Nk1i(-A?)~>G!0ENl%iVC%sB~lT0Ox$u*N(C3i|5kvt}OZt~*fZOPvxpG&@x z{A=>PGa`m?ETjrud}zr{tvMrsSs-rPNNTm(nn$NlNpS zUMYQ32BZv18JaRYr6Of>%AS<{DTh*yrkqGQnes!*m6Yo#H_K9Pr~H-jK9x?zscfp0 z8ju>C8k!oO8lRe#nvGJefuGD9*8$}-z$_R8#=**|ko z=FrUHnUFa#b4up)%o&*rGM8np$Xu2AW#;Z^jRKR-dTQGfmy*>p;>8J`B^QpT4%M(>X6krt6NsjtlnAuvIb^N z$eNTjHS3eCSy}e1d0C%lEzBxgl2x9yBkO$Dt*lqsaoIW9ZL<4hPtKm3y*Rr(dqwu@ z?27Eo+1s*rX7A44o4r5#_v%sA8&@A&eP;DJ)#p~9UwuLKMb#^+e_efj^-a~EC*)4fot8TzcXsZlxu4~Jk-I*3Q|^}BZMi#gzscQ` zyFd3}?%~{HxhHaet;N=gsa3aD|5|fu?WlF7)|)(^ywJReyy(2xyyU#HhWfSr~&0CbWIB#j*+PvL)d-D$D9nL$J z_g&tpyfb+>@^0td&AXTPAn#G$UwO~+UgYC^Hea7_%+JlQpWiUQNq+PEY5DW>zsO&d zzcl}R{;m8w`M>7hF94A!s>-J3-byK3R@TUDI8Y#ap9=K(S^3cv4ztLR}_9#c&PAF;je}F3;!s5 zT==B$SrJ{t6zPf#MM9BS7tbu7Q#`kLe({3h#l_{tD~eYaR}`-; z-cY=`cw6z#;@!o2iw_hZEQgOW!jf0aBd zd0FzNi?uDaJ!*T`_NyIOJGgdy?S$G%wNq$+ zst#L6SI1CCs8e2NU7ZbeHrLr!m#J&6E7$d`>r=OV-ClM3)a_q)P(55vs%NR^QO~+PzyyWZY<2kPtUTmP?y^L|TuaU5^i?N+zF_ifMH-h1A5Idi0@ z5)MQV5k!>mrGyfqh$13N2oi{h5~73y5k!;_Bm@yfY43F#YWw?np7-M|_X_X8IQR7Wy)MOMGAY4*QP!e)s+5=jj*XchxV#59}xRYxUFmwfl8m z4!j(BIr?(!W!PoSW%FgrWuWJBum4Q{zx|i{ukv5(AMcOz$NQ)I-|+A9clrz?}ej;Pk*Hfqw_C2wWYA3QP|q1ZD=_40HrO349j#GVo2% z&Y)vKCxT7|oeg3I34=sIRY5gD->yu!GU>{cE7PyEU9nuTUa?>43!WCd7zkb(ygYbS zaB?s)I4hVOoD*yheiZy9_<8WFkmL|zNLC0rBqwAjk_0ZLGS1(-kyy|nc)7dKu6Fc*b!wBRz!=Q1XiJ-}#X`tDld7y=$#h{I#y`YOAFOV+)@&^Th zLO@|45GWE91A>A85CKF4Wr1#jC?F~*A5;h`0o*T~nZuXSB} zeeLtLk!##PXo^c&jHT|F9I(C{|#Oa-VELW-VNRdJ`6qvJ_$Yrz6=foM}V(^ z5nwbp8Jr3Rzyxq6m;?rjzV5cMwVd-ROx+0pZ&7e+6M zUKYJFdQJ5D=zpTOM4ya49epSO))JotucleYm7anFJ>TSDCR-TqnIZ#|HTZ)e2w`584LLXG66CPvH-Fe zvJ|orvK6uevKs;%fE2nLb@xefs!1V|?2CWHc^Lh>O(NF}5SQVo$p zY9aLyC8QD33{gWgkRiy=*cGuSV`E~;vC`O{*pJYe&_&Rt(B;sT(0`!2pnIVEpa-Cb zphut=px#hFXaF<>8U_VH!O%n~8kzykf|8**05l(32xUT9P!Y5qdJk%XTA)49UZ@l5 zg1VuPpiiMMpg-fr#CgR15%*`@q_`<@)8l5w&5oNFw;*nJ+~qiITuEF@+ymI3u#K>D zFbE6@L&K6`DKG+z0?UQv!SZ2r7z0)gtAL4N)v#JvJxmE}gc)F6FehvX_7Da;n)75yucG5vLJn5rK$EL<-_M0zeQDnTVSR3WAErM-(EM z2nj-pkRjxVdV~_uglIvuBD9EhLkCD%iFOhGM?~xyoUy!57@5oyG|iR%(KByLLFl6WBz znn+E&lW0pEMlC@dLxrQ#P$X0~Di@W9Dn{{8e3SrHfvQARp_C{Usuk6S>O>h)W|Rfx zMm+>j?@*sm!>F&QU+A&uKhS@o=b~4l_o5G=52KHvPohtw&!I1(z0kgBe>4;gMB#W*o8j2rV1^91uOd0g_!`vL6vOncu z%8``gDgUONNjaBtF~u__E+spqCdHESIdxv@q11>}AeEC^kt$BDPL-xAQ#Gl&)Q;49 zsixHK)cdJJsgF~ir2;Qg-=+SS`Z;wNHy$?;HxoA-w;ZRea6}vl$HtZ6csM>zfD_@Wa5cC)xLRC2?k>)T`*eN&_5Ihc zUI(rVt{bkuz)!%>z|Y3d!!N+Ez;DEF#&5&##P7lH!yf?fhw$g{o_HVpW&9Oz2Kk&cP#-@!+ z8=p2YZF1VQv>9o$(&nbkPurE|mzJEyN>in|f$_iw;4BaWBmgJ?17Lv+AREX9XaF4m zihyFE1YiS|Kn)-R>VO8I8BhZnzykCD4}hn@3*a^I0r&(A1Ec8^(&waaNZ*vcHGN0= z?(}`>2h)$FA5Z@`{Y-jjdU!f09h@GO4oQzok55OYqtY?y*mOpEU3y>ow~W6tj%7q= zWM@=nbY|Souw^(hoEeWYUT3@mGXBf>oH3H|HRF56&y3%MDTJAXIfVIyC4^;!m4wxV zorFDvqlDuGPl6vIfN+HnMgS2a3DJZk0)fCJln`zaxCA~yNT?)82vR~Vp`LJ$U?OxA z?h|?ly#y!0MHnJHAUq~Kz2R|V#f?)pVs21wRNv^iF+!Y2+)X?}1dbE`C7vdF5rc>! z#4sX=7)gvKLWodeGVwYQAQFfqVm2|Cm`CIgdBhr`oTwl+5L<{EqK>F1+KG>dBgAjS zpP6Ga$7TMRIVp2W=Jd>2nR7EYW^T^hnz=o5XXc*F{h5a{k7gdv{5SJ-CODIjDa`E5 ze3LaTYgblKRx*%PlvS2ho+Zet$hwo&kky=}&eCSJXLV#5vW!`MS%X;*vL0u>$ay%8&O-eQ;my$=xr*J5IijY!CsiDXybrc1q zozh9MQ~D``ln0cjloyoOl(&>0Ig@h!&RLPOI%i$Z#+=PL+j4g1?8(`mb126r=WB!2HA@PV~adl3bEfa=ipdD=95$EEy^t zQ@XnJbSbQqRw^wumpV%OO9xBcr7ueVEB#zLT>7>2d+E>8-|Q*und~|2`Rpa^W$cyg z)$E<@J?xY0v+N6OPqrUBfPIA>!iKVw**WYyb^)8gE@qdqIcy&LHoJl?W~-NRh$~m9gdpQ#d*ki!g!5 zL|zt;&(rdrl}{|+RPI@hE-x;>Ti#plE`L=1wETJbhw`uG-^+jT$MDDT$MYxfC-LX; z7xVw-ui&rcZ{Tm@Z{Z*2ALF0n2k=AqVSErjnjg!D@#Fb;em1|1U(OfsMf@s$4PVBu zP5*-_CdNo%{j*5FdERf5Lyxf60Hte|LNG?TxoRZztR?ysfzH5{wZn6C4qo z5u6uX5_k!M1Rz1AAX*SBh!emC2mw-%Cb%KU5|9N{LB60+P$UotL;|tkuAo_<7H9<> zf_nm!pj$8`cr6?w94Gu!I7v7~I9)hPI9IqpxLEkNaHnvOa33H%AUq^IDm)=PB|IZM zC%h>16vhd&g*8Hp@N>nyibE9<6+i{2qM|}vQC%UeP*!Lv+A7*BIw}km#)`g*!HNeJ zk1JkOysmgx@uA|k$U`(;G)FXFv`Dl}v{JN2v`(}~bW#)~3K4~gK%z)dj0h@%ixNaA z5k^E2QAGevR3Iu8F-0Y!TcR=%Pjp)(6t#&SRsLDIzVc#ad}U#!veHpGT=`qRQ#{_jQG6xqBukxCXN#)h*4sU7$;5>XNYfz z3&dsOI`Lg`qgW+w6}O4?VuQF#+%2|>p9A7o;y2=V;t%3a;$iVu@ptjhsxeg_Rm-Z5 zR9&kgR*9;Fp zT%wS)NjfD)iCNMk>6JJo1Cm#gk?JYc)2nAy&#hiiy}0`C>J`I>DL)jrjJ)&A8%)xp)t)kW2f)vlT`H7je**1&2gHR2k1jiRQZrm03(W2&*# z^wjj$IBN!K25Vl`ys!CK^QGon%}?nVsfTo?bdGd|bgguQbdz+ubeD9mbieeh)L#mf z!lemPloTUPkzSVqQi3!SklvKul5(Zx(%Vv@v{EXON~JQXT&j>NrFQA(I}7d{xD$3K z{f_X?y*n>u6J;}Hb7b>n3uP;1|H!t;w## zwUcY7)=saTRXeA4d#!gZy0)mcvDPK`kgt`Wl1Iwn@&q|bo+M9`ljPa*Tscinmowx{ z`E7ZnTq2js>*ROkjq+x>QErwG$REfb%b&?#%iqcWlYgr7sGDB5x^7+F#=6aQ+v;}K z?Wx-j)E%ljT6dx@ur9bRv@WbJq7GaaT^CyyR|l_4s7tKNtE;KA)_tyDP=BC4qMlgK zuh-Ta>&^A|>wD^5^-t?x)W5EOSN~uAr}{4n55)wQ{fZ-s z6--5m;+BG|s8=Wzjf!SPi$bH&DLNDe zg;8NvSQKyXPPx17uJ2vU-Qv3~cONOoDwiuaC^sp$Dz_^SC{HR+DbFa+DK985DT9^a z%4^CfB~%GlCMXk?8A_^>t}IfrlpG~bd0Qz|)+@D2hq7NesC=M&tbC??2`Jwv-zz^V zzcl>SFtuTN!_0=+4f7fnHY{oQyJ305s)jWUCmKKvnGF>U#)h|zvm5s|1~eu$rZr|X z5*xD`^BRjAOB-)BavRGVZ#N1X<&Db5rpA`WwnlxUq0!jb-#FO#s_}i}$Hp&>-x_~5 zjcM{|n%VSs)6S+nP5YY;H63jNPBfirI@@%i$+O9)DY_}PDXt0LglI}^N@~J3r8Zq} z0-7?KI8Caiht1=f*EOGOMl{o#Yn$&k_csqVKWKi`{JQyb^GNg8<{!N<6Ux>>DOYt$C? zp!%cwiy9bJe^>u%9ozax>x9<7TBo+oXkF8~zI9{krq(U3+go?F?rq)Qda(6K>#^3W zt=C(*t=iUSnu(e%8ea`kL({M{Y)zSlrx9!98il4o)2vZzG@3R|yT+<MR|M@!Y_YYVkZElXRf=x>r%TYGbQm30N74a>x=Niy zC)L&J>UBz8ldeUl(dl#@I+xC^d#HP?d#Zb(d#!t?`=I-%`=T3ZpVPjxJ+M8c{Z_lW z{i%MEe!c#T-dpdd56}ncL3*ejrjOSr=o9s5eTF_uPuAz?^Yw*#rk8tcgy-MGz zZ_{_`je4`*qIU!OHyvX;{^*#{@mI&xju{=ZJLYvP>{!yVtYcTl-j4kp2RjaT9P2pQ zak}Gd$N7#+9bO%<4oZi#<9^4N&iS2(J3*c4on@V(&Z^Fu&O4nAo!ZX!&dyF_r@7P8 zY3;OiKJ0wf`Lgp(=YO4_J4ZUd8YUVh8x|Or8kQSY8P*&AF#uZ(+YCny7Y!goq#?!t zHNXuC29yC~NHJVD0ER*X)4(#68g3c52EIXPs5Dd=Y7BP_Cc~S1Gw$uU7jO@Ik8@9Z z@1b#waguS0ak_D)aglMAajkKKag%YYal3J+@tE6V~kKE%$QG3FWbja*~3QEO~Bb{dUFv+=&sW^@?)jf2Jq#xKTE<2U0E<(udx zu1R1LnW{{8OmdULq%?Jy?wK4WmkDs29+{q-UYXvS-kW}zC!3d>SDDwEH<&k>x0-jD zcboT_51Nmd{mcR8Aak%e)EsWUW{xt)m}AW_bG(^i7MsoH58ZRR_jHGLr+1fiw{&-O z-|IGYcX#)7KkREE6r0Ez>MBEXyn_En6+S0Lxy>0n1U# z3Ck(V8B2f#Y{6P^mNZL-g=isJvMsq5nuTsDvQ$}WEO#ummO9H_OQS_)QCl*WK^CKVqF{U1nWrU1MEm-DcfyJ!Cy13S%CqvVwN|y&W_4Kmt%KGF*2mUo)|b{d*7w$rJrjEV z>Y36rt!GBh?4Ef&3wsv#EbUp|v$E%CPgoD3=XOtL&nw#u+b)}*EzyRvrP(rUH*7gJ zhOO9EVq@DlHm%*z`ohO z&A!vV$G+cw$bQs*!hXtr)_%brVF%lz>@oIOJIs!-C)&|=j6KDUvlrX%+6U}Edsp}e4y+nDGY~zH zIY1rAA1E9s8YmkO4TuLM12qG825JY?1G<5ZfqMhp1J(iifMWo7Ht=#_c;NfMFV|St zpRP%+DXwX*rLK*x&8}^(ovuBueXi3kZ`V~dyQCu7s&&78M zTq0MMtHvdB)wvWdrAzBFxt_Vc4$c@{Gk9RocQ9@+c@RHXK3F*@9&8xY51IxogFS=2 zgM)()1|I{1&jw!%Egsr4*L;-S(Z&Jb^i zKh!n!&AryW)xF2P-+kJB$?fg-a|gJux+C0RceESgM!He%6nB<8*G+TN-9_$OZmyf} z7P>`lnY+&2;x@XiZo9kBJ>Y)ie(HYV241`0x<9*r4p$CW4J(J+hdYOj!{*`p!?t0^ z@RQ-^!!L*548I@#Z}`*jmytyyM@M2u=p*cr+auK@cSagUT1VPPY$LrR?vY0$Pez`N zd>R=Z86EjP@@sU==%mppqtixbj4m8qG`eJT&FF#A!=uMWPmZ1*JvVxB)N9mt)PFQ+ U`Tx2}50C$OF86=_{~Qhef0ZpB0{{R3 diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/S3Kit-Package.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/S3Kit-Package.xcscheme index c4be616..100ebf9 100644 --- a/.swiftpm/xcode/xcshareddata/xcschemes/S3Kit-Package.xcscheme +++ b/.swiftpm/xcode/xcshareddata/xcschemes/S3Kit-Package.xcscheme @@ -62,6 +62,20 @@ ReferencedContainer = "container:"> + + + + + + + + SchemeUserState + + S3DemoRun.xcscheme_^#shared#^_ + + orderHint + 1 + + S3Kit-Package.xcscheme_^#shared#^_ + + orderHint + 3 + + S3Kit.xcscheme_^#shared#^_ + + orderHint + 2 + + S3Signer.xcscheme_^#shared#^_ + + orderHint + 4 + + s3-Package.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/Package.swift b/Package.swift index 5d86f50..176eb09 100644 --- a/Package.swift +++ b/Package.swift @@ -31,7 +31,7 @@ let package = Package( ] ), .target( - name: "S3Provider", + name: "S3", dependencies: [ .target(name: "S3Kit"), .product(name: "Vapor", package: "vapor") @@ -40,7 +40,7 @@ let package = Package( .target( name: "S3DemoRun", dependencies: [ - .target(name: "S3Provider"), + .target(name: "S3"), .product(name: "Vapor", package: "vapor") ] ), diff --git a/README.md b/README.md index 9297b7b..fbeae2c 100644 --- a/README.md +++ b/README.md @@ -26,50 +26,30 @@ Update dependencies and targets in Package.swift ```swift dependencies: [ ... - .package(url: "https://github.com/LiveUI/S3.git", from: "3.0.0-RC3.2"), + .package(url: "https://github.com/LiveUI/S3.git", from: "4.0.0-rc.1"), ], targets: [ - .target(name: "App", dependencies: ["Vapor", "S3"]), + .target(name: "App", dependencies: [ + .package(name: "S3", package: "S3Kit") + ], ... ] ``` -Run ```vapor update``` - -Register S3Client as a service in your configure method +Configure S3 in your `configure` method: ```swift -try services.register(s3: S3Signer.Config(...), defaultBucket: "my-bucket") -``` - -to use a custom Minio server, use this Config/Region: - -``` -S3Signer.Config(accessKey: accessKey, - secretKey: secretKey, - region: Region(name: RegionName.usEast1, - hostName: "127.0.0.1:9000", - useTLS: false) +app.s3.configuration = .init(accessKey: "", secretKey: "", region: Region.euNorth1, defaultBucket: "my-bucket") ``` -use S3Client +Using S3 inside your route handlers ```swift import S3 -let s3 = try req.makeS3Client() // or req.make(S3Client.self) as? S3 -s3.put(...) -s3.get(...) -s3.delete(...) -``` - -if you only want to use the signer - -```swift -import S3Signer - -let s3 = try req.makeS3Signer() // or req.make(S3Signer.self) -s3.headers(...) +app.get("buckets") { req -> EventLoopFuture in + req.s3.buckets() +} ``` ### Available methods @@ -82,178 +62,166 @@ public protocol S3Client: Service { func buckets(on: Container) -> EventLoopFuture /// Create a bucket - func create(bucket: String, region: Region?, on container: Container) -> EventLoopFuture + func create(bucket: String, region: Region?) -> EventLoopFuture /// Delete a bucket - func delete(bucket: String, region: Region?, on container: Container) -> EventLoopFuture + func delete(bucket: String, region: Region?) -> EventLoopFuture /// Get bucket location - func location(bucket: String, on container: Container) -> EventLoopFuture + func location(bucket: String) -> EventLoopFuture /// Get list of objects - func list(bucket: String, region: Region?, on container: Container) -> EventLoopFuture + func list(bucket: String, region: Region?) -> EventLoopFuture /// Get list of objects - func list(bucket: String, region: Region?, headers: [String: String], on container: Container) -> EventLoopFuture + func list(bucket: String, region: Region?, headers: [String: String]) -> EventLoopFuture /// Upload file to S3 - func put(file: File.Upload, headers: [String: String], on: Container) throws -> EventLoopEventLoopFuture + func put(file: File.Upload, headers: [String: String]) throws -> EventLoopEventLoopFuture /// Upload file to S3 - func put(file url: URL, destination: String, access: AccessControlList, on: Container) -> EventLoopFuture + func put(file url: URL, destination: String, access: AccessControlList) -> EventLoopFuture /// Upload file to S3 - func put(file url: URL, destination: String, bucket: String?, access: AccessControlList, on: Container) -> EventLoopFuture + func put(file url: URL, destination: String, bucket: String?, access: AccessControlList) -> EventLoopFuture /// Upload file to S3 - func put(file path: String, destination: String, access: AccessControlList, on: Container) -> EventLoopFuture + func put(file path: String, destination: String, access: AccessControlList) -> EventLoopFuture /// Upload file to S3 - func put(file path: String, destination: String, bucket: String?, access: AccessControlList, on: Container) -> EventLoopFuture + func put(file path: String, destination: String, bucket: String?, access: AccessControlList) -> EventLoopFuture /// Upload file to S3 - func put(string: String, destination: String, on: Container) -> EventLoopFuture + func put(string: String, destination: String) -> EventLoopFuture /// Upload file to S3 - func put(string: String, destination: String, access: AccessControlList, on: Container) -> EventLoopFuture + func put(string: String, destination: String, access: AccessControlList) -> EventLoopFuture /// Upload file to S3 - func put(string: String, mime: MediaType, destination: String, on: Container) -> EventLoopFuture + func put(string: String, mime: MediaType, destination: String) -> EventLoopFuture /// Upload file to S3 - func put(string: String, mime: MediaType, destination: String, access: AccessControlList, on: Container) -> EventLoopFuture + func put(string: String, mime: MediaType, destination: String, access: AccessControlList) -> EventLoopFuture /// Upload file to S3 - func put(string: String, mime: MediaType, destination: String, bucket: String?, access: AccessControlList, on: Container) -> EventLoopFuture + func put(string: String, mime: MediaType, destination: String, bucket: String?, access: AccessControlList) -> EventLoopFuture /// Retrieve file data from S3 - func get(fileInfo file: LocationConvertible, on container: Container) -> EventLoopFuture + func get(fileInfo file: LocationConvertible) -> EventLoopFuture /// Retrieve file data from S3 - func get(fileInfo file: LocationConvertible, headers: [String: String], on container: Container) -> EventLoopFuture + func get(fileInfo file: LocationConvertible, headers: [String: String]) -> EventLoopFuture /// Retrieve file data from S3 - func get(file: LocationConvertible, on: Container) -> EventLoopFuture + func get(file: LocationConvertible) -> EventLoopFuture /// Retrieve file data from S3 - func get(file: LocationConvertible, headers: [String: String], on: Container) -> EventLoopFuture + func get(file: LocationConvertible, headers: [String: String]) -> EventLoopFuture /// Delete file from S3 - func delete(file: LocationConvertible, on: Container) -> EventLoopFuture + func delete(file: LocationConvertible) -> EventLoopFuture /// Delete file from S3 - func delete(file: LocationConvertible, headers: [String: String], on: Container) -> EventLoopFuture + func delete(file: LocationConvertible, headers: [String: String]) -> EventLoopFuture } ``` ### Example usage ```swift -public func routes(_ router: Router) throws { - +public func routes(_ app: Application) throws { // Get all available buckets - router.get("buckets") { req -> EventLoopFuture in - let s3 = try req.makeS3Client() - return try s3.buckets(on: req) + app.get("buckets") { req -> EventLoopFuture in + req.s3.buckets() } // Create new bucket - router.put("bucket") { req -> EventLoopFuture in - let s3 = try req.makeS3Client() - return try s3.create(bucket: "api-created-bucket", region: .euCentral1, on: req).map(to: String.self) { + app.put("bucket") { req -> EventLoopFuture in + return req.s3.create(bucket: "api-created-bucket", region: .euCentral1).map { return ":)" - }.catchMap({ (error) -> (String) in - if let error = error.s3ErrorMessage() { - return error.message - } - return ":(" - } - ) - } - - // Locate bucket (get region) - router.get("bucket/location") { req -> EventLoopFuture in - let s3 = try req.makeS3Client() - return try s3.location(bucket: "bucket-name", on: req).map(to: String.self) { region in - return region.hostUrlString() - }.catchMap({ (error) -> (String) in - if let error = error as? S3.Error { - switch error { - case .errorResponse(_, let error): - return error.message - default: - return "S3 :(" - } - } - return ":(" + }.recover { error in + if let error = error.s3ErrorMessage() { + return error.message } - ) + return ":(" + } } + // Delete bucket - router.delete("bucket") { req -> EventLoopFuture in - let s3 = try req.makeS3Client() - return try s3.delete(bucket: "api-created-bucket", region: .euCentral1, on: req).map(to: String.self) { + app.delete("bucket") { req -> EventLoopFuture in + return req.s3.delete(bucket: "api-created-bucket", region: .euCentral1).map { return ":)" - }.catchMap({ (error) -> (String) in - if let error = error.s3ErrorMessage() { - return error.message - } - return ":(" - } - ) + }.recover { error in + if let error = error.s3ErrorMessage() { + return error.message + } + return ":(" + } } - - // Get list of objects - router.get("files") { req -> EventLoopFuture in - let s3 = try req.makeS3Client() - return try s3.list(bucket: "booststore", region: .usEast1, headers: [:], on: req).catchMap({ (error) -> (BucketResults) in + + // List files + app.get("files") { req -> EventLoopFuture in + return req.s3.list(bucket: DEFAULT_BUCKET, region: .euCentral1, headers: [:]).flatMapErrorThrowing { error in if let error = error.s3ErrorMessage() { print(error.message) } + throw error - }) + } } - + + // Bucket location + app.get("bucket", "location") { req -> EventLoopFuture in + return req.s3.location(bucket: DEFAULT_BUCKET).map { region in + return region.hostUrlString() + }.recover { error -> String in + if let error = error as? S3.Error { + switch error { + case .errorResponse(_, let error): + return error.message + default: + return "S3 :(" + } + } + return ":(" + } + } + // Demonstrate work with files - router.get("files/test") { req -> EventLoopFuture in + app.get("files", "test") { req -> EventLoopFuture in let string = "Content of my example file" - + let fileName = "file-hu.txt" - - let s3 = try req.makeS3Client() - do { - // Upload a file from string - return try s3.put(string: string, destination: fileName, access: .publicRead, on: req).flatMap(to: String.self) { putResponse in - print("PUT response:") - print(putResponse) - // Get the content of the newly uploaded file - return try s3.get(file: fileName, on: req).flatMap(to: String.self) { getResponse in - print("GET response:") - print(getResponse) - print(String(data: getResponse.data, encoding: .utf8) ?? "Unknown content!") - // Get info about the file (HEAD) - return try s3.get(fileInfo: fileName, on: req).flatMap(to: String.self) { infoResponse in - print("HEAD/Info response:") - print(infoResponse) - // Delete the file - return try s3.delete(file: fileName, on: req).map() { response in - print("DELETE response:") - print(response) - let json = try JSONEncoder().encode(infoResponse) - return String(data: json, encoding: .utf8) ?? "Unknown content!" - }.catchMap({ error -> (String) in - if let error = error.s3ErrorMessage() { - return error.message - } - return ":(" - } - ) + return req.s3.put(string: string, destination: fileName, access: .publicRead).flatMap { putResponse -> EventLoopFuture in + print("PUT response:") + print(putResponse) + return req.s3.get(file: fileName).flatMap { getResponse in + print("GET response:") + print(getResponse) + print(String(data: getResponse.data, encoding: .utf8) ?? "Unknown content!") + + return req.s3.get(fileInfo: fileName).flatMap { infoResponse in + print("HEAD/Info response:") + print(infoResponse) + + return req.s3.delete(file: fileName).flatMapThrowing { response in + print("DELETE response:") + print(response) + let json = try JSONEncoder().encode(infoResponse) + return String(data: json, encoding: .utf8) ?? "Unknown content!" + }.recover { error -> (String) in + if let error = error.s3ErrorMessage() { + return error.message + } + return ":(" } } } - } catch { - print(error) - fatalError() + }.recover { error -> (String) in + if let error = error.s3ErrorMessage() { + return error.message + } + return ":(" } } } diff --git a/Sources/S3Provider/Application+S3.swift b/Sources/S3/Application+S3.swift similarity index 100% rename from Sources/S3Provider/Application+S3.swift rename to Sources/S3/Application+S3.swift diff --git a/Sources/S3Provider/Exports.swift b/Sources/S3/Exports.swift similarity index 100% rename from Sources/S3Provider/Exports.swift rename to Sources/S3/Exports.swift diff --git a/Sources/S3Provider/Model/Models+Content.swift b/Sources/S3/Model/Models+Content.swift similarity index 100% rename from Sources/S3Provider/Model/Models+Content.swift rename to Sources/S3/Model/Models+Content.swift diff --git a/Sources/S3Provider/Request+S3.swift b/Sources/S3/Request+S3.swift similarity index 100% rename from Sources/S3Provider/Request+S3.swift rename to Sources/S3/Request+S3.swift diff --git a/Sources/S3DemoRun/main.swift b/Sources/S3DemoRun/main.swift index 8582c12..5537345 100644 --- a/Sources/S3DemoRun/main.swift +++ b/Sources/S3DemoRun/main.swift @@ -39,7 +39,7 @@ func routes(_ app: Application) throws { } } - // Delete bucket + // List files app.get("files") { req -> EventLoopFuture in return req.s3.list(bucket: DEFAULT_BUCKET, region: .euCentral1, headers: [:]).flatMapErrorThrowing { error in if let error = error.s3ErrorMessage() { From f53f48082e117fd549359998f6c79dc4957d9c8d Mon Sep 17 00:00:00 2001 From: Mads Odgaard Date: Mon, 30 Mar 2020 20:56:31 +0200 Subject: [PATCH 3/5] fix package name --- .../UserInterfaceState.xcuserstate | Bin 74400 -> 74825 bytes Sources/S3DemoRun/main.swift | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.swiftpm/xcode/package.xcworkspace/xcuserdata/madsodgaard.xcuserdatad/UserInterfaceState.xcuserstate b/.swiftpm/xcode/package.xcworkspace/xcuserdata/madsodgaard.xcuserdatad/UserInterfaceState.xcuserstate index 581e83029be30b1f661bb2fec03c65a0c03c05ee..6de07a5bd2c96d3e3fd34649822ea09310420c48 100644 GIT binary patch delta 33644 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

qP6b))%dx6;l+` z6*CpTD&{H{C>AN!DmEzG6bBTC6~`2(6lWFgiVKQh1w?^W;1!vQYz0Y?tGK410Sbnq zNKv9_P>2o%gcB4(#_Pl*j`+@d=_ABl9_RRL|_MGN;(HRt({|?~WYLjZS>Y(a~%3bxZ%1h;|3Q~otB2-Z- zgeqM{R~4#QDz*wJQ&p(=DuJq6Ri_fE)T$npR;5$*s|+fmYFIU*vZ}^Z4%L^g6fY0qP)ih&oIit4>fO)hIPaovsGdnQEH4 zKwYk`RNqk7s6}dtx=G!v)~Jo@$Lgo*7wXr5`ki`G{Ym|`drJ58?wQ@oyH|C)cCYPT z-@U1OOZWEfo!z^;_jd2^_U%sUF6x$d+q%DL)@$4~mo+(>d`*FdsbOg z5o;PX9hz=UuSTaaXpEX+&4}iaW=Hd(wK+dw?E753z^TL++vUP+CQ~hwY#)?wEMLOwdb`L zw1L_%ZKU>+_OceHg=-O7yf#l;0ciPJfwo#(rxj@>+9s`BtI)P-joM-Dh}NpLX&u^o z+6UUl+6nD*?aSM9Zg0Kqc^i3~dAs@cm~N`hRd-zHuDhu7(0S>Cb(eH8I;bvAm!M13 zCFuZNwvMFB)#d97bW9yfC(u>vBs!_CQ>W2sb$z-4-H^_#11!47y7zsv`+n=2-?yl5 zao@7O6@9Dw*7j}a`?K#@--*6ceP{a4_5I!VPoHO>cb{)xKwnVbmA=A0d7riKTfb}n zxqetbxnI~X?w9sA_qX(``gQ&K{(=6XesjO2f3*K`|MUJ={cro7{h#~4>8I%D=@;r( z>(}cy>9^>2>fHeSKK%jxIlZqQs*lqr=#hGqK1H9V$LTZlS^6A(sh+E^&|lYA>Tl?4 z^!0j?UaXhuWqPCj&7H+}4&Dj7gTGUGr}xey!%V|G!$O0LVTr-ju-UNHu-&lJu-mZ5 zaKdob;BL5R@G|%s0t`Wh%LbSs#gJ|Q3%fJ9gaO)sbYOVk%b@Gv@xh3} z%Y(2%_#k31bue=fC8>}3>F<3V!8k7u52fGF}gT}#;!O=nc;C*25 z;oy_Or-Pr2KO0vVR~y$FHyHmkZZ+;O?l$f<9xxs@dK!I;anwJH>s;${>n`ga>wfDY>rv}*>nZD5tGo50)x!$5Lab0L%o=Y+ zSd*+*tSMHEHQkE0mReh__R%S$>qpOx#*flQMWgyr^Qd)nY}7IOc=Yw?+tK%{brkQTVz{mTW(urbG7ZXx!I1}&H%RawhJ~-n~%-k7HEUml5J=k#+GgaY?-!v zTZv6zYq8z3wcAv-Zd&Lf_ z?-<`bzIS~8__6VGz=t;<-c3%OoIAN-^7qLllYdOEoOGSsKDlesZF1k_!O6puM<@T9 z1W#U_luX(tA51=<{4n{^In6oCIoG+;x!U=sbE|W^bEosD^SJY*^NjPn^KYk*)885B z40c{}f}JtW1ZS2r$4PclocYcIC(~K%EOm07y#GC5nlfeDvT6VKaq0TM`Twtz|3Bz} BmlXg2 delta 32933 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 z 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 EKco)sKL7v# diff --git a/Sources/S3DemoRun/main.swift b/Sources/S3DemoRun/main.swift index 5537345..ba213b9 100644 --- a/Sources/S3DemoRun/main.swift +++ b/Sources/S3DemoRun/main.swift @@ -1,5 +1,5 @@ import Vapor -import S3Provider +import S3 let DEFAULT_BUCKET = "test-bucket-s3-vapor" From 39cae8583a8dc8c1c498873c8534c09488821352 Mon Sep 17 00:00:00 2001 From: Mads Odgaard Date: Mon, 30 Mar 2020 21:00:35 +0200 Subject: [PATCH 4/5] update gitignore --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9661543..c07535b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,7 @@ Packages *.xcodeproj *.xcodeproj/xcshareddata/xcbaselines/4724F8141DA88A530003BAC6.xcbaseline Package.pins - +xcuserdata +DerrivedData/ +.swiftpm +.env From 937cdf22346ef961bb4718c044f7a0f99c63bab2 Mon Sep 17 00:00:00 2001 From: Mads Odgaard Date: Mon, 30 Mar 2020 21:01:20 +0200 Subject: [PATCH 5/5] remove gitignore files --- .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../UserInterfaceState.xcuserstate | Bin 66736 -> 0 bytes .../UserInterfaceState.xcuserstate | Bin 74825 -> 0 bytes .../IDEFindNavigatorScopes.plist | 5 - .../UserInterfaceState.xcuserstate | Bin 151250 -> 0 bytes .../xcshareddata/xcschemes/S3DemoRun.xcscheme | 100 ------------ .../xcschemes/S3Kit-Package.xcscheme | 142 ------------------ .../xcshareddata/xcschemes/S3Kit.xcscheme | 67 --------- .../xcshareddata/xcschemes/S3Signer.xcscheme | 67 --------- .../xcschemes/xcschememanagement.plist | 67 --------- .../xcdebugger/Breakpoints_v2.xcbkptlist | 24 --- .../xcschemes/xcschememanagement.plist | 34 ----- .../xcdebugger/Breakpoints_v2.xcbkptlist | 56 ------- .../xcschemes/xcschememanagement.plist | 62 -------- 15 files changed, 639 deletions(-) delete mode 100644 .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata delete mode 100644 .swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 .swiftpm/xcode/package.xcworkspace/xcuserdata/calebkleveter.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 .swiftpm/xcode/package.xcworkspace/xcuserdata/madsodgaard.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 .swiftpm/xcode/package.xcworkspace/xcuserdata/pro.xcuserdatad/IDEFindNavigatorScopes.plist delete mode 100644 .swiftpm/xcode/package.xcworkspace/xcuserdata/pro.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 .swiftpm/xcode/xcshareddata/xcschemes/S3DemoRun.xcscheme delete mode 100644 .swiftpm/xcode/xcshareddata/xcschemes/S3Kit-Package.xcscheme delete mode 100644 .swiftpm/xcode/xcshareddata/xcschemes/S3Kit.xcscheme delete mode 100644 .swiftpm/xcode/xcshareddata/xcschemes/S3Signer.xcscheme delete mode 100644 .swiftpm/xcode/xcuserdata/calebkleveter.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 .swiftpm/xcode/xcuserdata/madsodgaard.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist delete mode 100644 .swiftpm/xcode/xcuserdata/madsodgaard.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 .swiftpm/xcode/xcuserdata/pro.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist delete mode 100644 .swiftpm/xcode/xcuserdata/pro.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/.swiftpm/xcode/package.xcworkspace/xcuserdata/calebkleveter.xcuserdatad/UserInterfaceState.xcuserstate b/.swiftpm/xcode/package.xcworkspace/xcuserdata/calebkleveter.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 0100a0995394384959744397e2879a39798b562f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66736 zcmeF42YeJo|L}KacK2?}T`mxM3xp1-^iC>-5&}u+5HFWYa->|iy8xl?AfN&^R1~oh z5CfuEK~NO1U_nF>>~1WpVY6f$^n$2o4F-{UQr+|ipe%k2vIr*w4sTm>Guo!K$qEp5c1 z758lq<(G37&dN3B!nh_}53VN{$whI|Tnrb>#c{p3-drDU7&n}Y=MuR4xXs)H+(X=> z++*AhZYTFN_YAj}+sD1gy~MrBy~e%49p>KRj&bjD?{O!%kGRv^C)`=?9QP&n756Q7 zk^7PRiTjQF9U+8~h%87!DsrGu)C4s}Em14f4uzwRs1xdjx}zu*je4Qps6QHjhM=J+ z0VSdlXe1hg#-j0P0-A^>p=oG3x(Ydw8|9%{s1SKkDGH!6RF3AO#b^n-8ZATDqU+Gz z=pJ-0x({tY6=);cgziUM&?D$k^cZ>)?La%xQ)n;RhxVfv(M#wRbP%0Hr_jgfH2MUc zL7$?}&{=dIT}0oZ@6iwF4|EB0I1D$zO>r~a9JjzNaVy*!hvP1|EAED4aUAZ2N8ph- z6_3KB@fbW7r{Qrp15d>{*oEifdAJPB;k#aJhEFcTXBC?n)AsSgmR*_rCt>iYcg={4cl5ON6@-W#>9wCpCC&@Ep z4|$e6M-Gse$t&bTa)NwBPLfmPV{)2&Le7wL-pRGwfyb;gZwuBA^u^0JO2p(DE}D$IKPvBmVb^v zz`xAD!hgu0;6LI|@~8NZ`P2L-{2Bfne}Vsr|C#?qunQrALkJZb35|s?p^4B`XeqQ8 zItbl`9zsuHxDYQS2#G?HkSwGKBZQH{7$HN*6taYg!XzPExJqyeWx^a`t}st17v>8K zgoVN)feP0O*9j|yRl+U8t-@`>7GbOKps-DNNO)M-E<7SUDm*DXBkU2L6`m6g2rmn- z2prGu-IjYS_ge0= zY_L>VHd;1WDlOYBk650v?6T~(9J0J&Ic#~;a>R1f@|NY8<+$ZN%PGq_%jcFaESIdD z6U{S$kXiSo>Q0S^HZDSch1XtYfTWt!dUA ztIL{ebzAeS`PKrf$2!YeVlA`IvCg&5vuajqU20uxz1@0;b)EH2>w4>5*1N6uSSzes ztdCkBvp#M;V13#8iuG0NYu1C-*R6-FZ&;67-?P4N{lNO6^^EmX>u1(qt-o1+xBg+h zBykdwutX$_WS2rDhtynZA+?mEq-ZHdik0G|UQ%zVkJMKhBqd0x(kN+ylp$qG1(HXa zB^63VQn6Gbd8JY*AT5v(hBKLX}xrpbhmVmbgy)uv_YznHcJml4@=vnozhd% zF6njYko1OhSb9@BA{~|9l8#C5N++dL(#O*0(ihTsnUj%>Wg_#kAd9j^w#us9SZ*b^ zmfOg&a-7^t?k)F``^x>~{_+5MsGKa1k;lqe@vQPHQbLGYI z68ReWTKPKp7WsDh4*4$mZh3=TA@7iP%1_C=#}U&|NdZ{%;~ALQTVKjcdar&tw9k(IVeJ0)CcuXIo%l#WU#rL)pS ziB@8iSY?P3uOuib$_Qn&GDb;P#w(MQ$;vdvskjxd5>VzT3l&XSuB=jSR&G<)D;tyw zWuvl7*{wXSJfrMUo>iVx_A2|7{mS#o3(AYiOUeP|W#x!+RC!A|rhKS;rkqvIDW5A} zDCdOysqx>#MJ-mTuF-mBiHZcr=Kjp`=#es#0@fLf_;QMalOs*kFV zsXNtu>VEZk^#%1s^(FPN`lfnBJ*pm8-%~$P�fP7u0Xm@715xU(`Qr*e2R!TT@#z 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 - - - - diff --git a/.swiftpm/xcode/package.xcworkspace/xcuserdata/pro.xcuserdatad/UserInterfaceState.xcuserstate b/.swiftpm/xcode/package.xcworkspace/xcuserdata/pro.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 4aaf76076e7890f8475ea51ab7444855e0ae599d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151250 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 z 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 diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/S3DemoRun.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/S3DemoRun.xcscheme deleted file mode 100644 index 5c15f2f..0000000 --- a/.swiftpm/xcode/xcshareddata/xcschemes/S3DemoRun.xcscheme +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/S3Kit-Package.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/S3Kit-Package.xcscheme deleted file mode 100644 index 100ebf9..0000000 --- a/.swiftpm/xcode/xcshareddata/xcschemes/S3Kit-Package.xcscheme +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/S3Kit.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/S3Kit.xcscheme deleted file mode 100644 index f206166..0000000 --- a/.swiftpm/xcode/xcshareddata/xcschemes/S3Kit.xcscheme +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/S3Signer.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/S3Signer.xcscheme deleted file mode 100644 index 4c63c95..0000000 --- a/.swiftpm/xcode/xcshareddata/xcschemes/S3Signer.xcscheme +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.swiftpm/xcode/xcuserdata/calebkleveter.xcuserdatad/xcschemes/xcschememanagement.plist b/.swiftpm/xcode/xcuserdata/calebkleveter.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 5bb8aa3..0000000 --- a/.swiftpm/xcode/xcuserdata/calebkleveter.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,67 +0,0 @@ - - - - - SchemeUserState - - S3-Package.xcscheme_^#shared#^_ - - orderHint - 0 - - S3.xcscheme_^#shared#^_ - - orderHint - 1 - - S3DemoRun.xcscheme_^#shared#^_ - - orderHint - 4 - - S3Signer.xcscheme_^#shared#^_ - - orderHint - 2 - - S3TestTools.xcscheme_^#shared#^_ - - orderHint - 3 - - - SuppressBuildableAutocreation - - S3 - - primary - - - S3DemoApp - - primary - - - S3DemoRun - - primary - - - S3Signer - - primary - - - S3TestTools - - primary - - - S3Tests - - primary - - - - - diff --git a/.swiftpm/xcode/xcuserdata/madsodgaard.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/.swiftpm/xcode/xcuserdata/madsodgaard.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist deleted file mode 100644 index cc78f53..0000000 --- a/.swiftpm/xcode/xcuserdata/madsodgaard.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - diff --git a/.swiftpm/xcode/xcuserdata/madsodgaard.xcuserdatad/xcschemes/xcschememanagement.plist b/.swiftpm/xcode/xcuserdata/madsodgaard.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index c8133f0..0000000 --- a/.swiftpm/xcode/xcuserdata/madsodgaard.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,34 +0,0 @@ - - - - - SchemeUserState - - S3DemoRun.xcscheme_^#shared#^_ - - orderHint - 1 - - S3Kit-Package.xcscheme_^#shared#^_ - - orderHint - 3 - - S3Kit.xcscheme_^#shared#^_ - - orderHint - 2 - - S3Signer.xcscheme_^#shared#^_ - - orderHint - 4 - - s3-Package.xcscheme_^#shared#^_ - - orderHint - 0 - - - - diff --git a/.swiftpm/xcode/xcuserdata/pro.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/.swiftpm/xcode/xcuserdata/pro.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist deleted file mode 100644 index aa5f7f4..0000000 --- a/.swiftpm/xcode/xcuserdata/pro.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/.swiftpm/xcode/xcuserdata/pro.xcuserdatad/xcschemes/xcschememanagement.plist b/.swiftpm/xcode/xcuserdata/pro.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 0f43d6c..0000000 --- a/.swiftpm/xcode/xcuserdata/pro.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,62 +0,0 @@ - - - - - SchemeUserState - - S3DemoRun.xcscheme_^#shared#^_ - - orderHint - 3 - - S3Kit-Package.xcscheme_^#shared#^_ - - orderHint - 0 - - S3Kit.xcscheme_^#shared#^_ - - orderHint - 1 - - S3Signer.xcscheme_^#shared#^_ - - orderHint - 2 - - S3TestTools.xcscheme_^#shared#^_ - - orderHint - 3 - - - SuppressBuildableAutocreation - - S3 - - primary - - - S3DemoRun - - primary - - - S3Kit - - primary - - - S3Provider - - primary - - - S3Signer - - primary - - - - -