Sources/OSS/ClientPresigner.swift (167 lines of code) (raw):

import Foundation public extension Client { /// Generates the pre-signed URL for GetObject operation. /// If you do not specify expiration, the pre-signed URL uses 15 minutes as default. /// - Parameters: /// - request: The request parameter to send /// - expiration: Optional, The expiration time for the generated presign url. /// - Returns: The result instance. func presign( _ request: GetObjectRequest, _ expiration: Foundation.Date? = nil ) async throws -> PresignResult { var input = OperationInput( operationName: "GetObject", method: "GET" ) input.bucket = try request.bucket.ensureRequired(field: "request.bucket") input.key = try request.key.ensureRequired(field: "request.key") if let expiration = expiration { input.metadata.set(key: AttributeKeys.expirationTime, value: expiration) } var req = request try Serde.serializeInput(&req, &input, [Serde.serializeGetObject]) let output = try await clientImpl.presignInner(with: &input) return PresignResult( method: output.method ?? "", url: output.url ?? "", expiration: output.expiration, signedHeaders: output.signedHeaders ) } /// Generates the pre-signed URL for PutObject operation. /// If you do not specify expiration, the pre-signed URL uses 15 minutes as default. /// - Parameters: /// - request: The request parameter to send /// - expiration: Optional, The expiration time for the generated presign url. /// - Returns: The result instance. func presign( _ request: PutObjectRequest, _ expiration: Foundation.Date? = nil ) async throws -> PresignResult { var input = OperationInput( operationName: "PutObject", method: "PUT" ) input.bucket = try request.bucket.ensureRequired(field: "request.bucket") input.key = try request.key.ensureRequired(field: "request.key") if let expiration = expiration { input.metadata.set(key: AttributeKeys.expirationTime, value: expiration) } var req = request try Serde.serializeInput(&req, &input, [Serde.serializePutObject]) let output = try await clientImpl.presignInner(with: &input) return PresignResult( method: output.method ?? "", url: output.url ?? "", expiration: output.expiration, signedHeaders: output.signedHeaders ) } /// Generates the pre-signed URL for HeadObject operation. /// If you do not specify expiration, the pre-signed URL uses 15 minutes as default. /// - Parameters: /// - request: The request parameter to send /// - expiration: Optional, The expiration time for the generated presign url. /// - Returns: The result instance. func presign( _ request: HeadObjectRequest, _ expiration: Foundation.Date? = nil ) async throws -> PresignResult { var input = OperationInput( operationName: "HeadObject", method: "HEAD" ) input.bucket = try request.bucket.ensureRequired(field: "request.bucket") input.key = try request.key.ensureRequired(field: "request.key") if let expiration = expiration { input.metadata.set(key: AttributeKeys.expirationTime, value: expiration) } var req = request try Serde.serializeInput(&req, &input, [Serde.serializeHeadObject]) let output = try await clientImpl.presignInner(with: &input) return PresignResult( method: output.method ?? "", url: output.url ?? "", expiration: output.expiration, signedHeaders: output.signedHeaders ) } /// Generates the pre-signed URL for InitiateMultipartUpload operation. /// If you do not specify expiration, the pre-signed URL uses 15 minutes as default. /// - Parameters: /// - request: The request parameter to send /// - expiration: Optional, The expiration time for the generated presign url. /// - Returns: The result instance. func presign( _ request: InitiateMultipartUploadRequest, _ expiration: Foundation.Date? = nil ) async throws -> PresignResult { var input = OperationInput( operationName: "InitiateMultipartUpload", method: "PUT", parameters: [ "uploads": "", ] ) input.bucket = try request.bucket.ensureRequired(field: "request.bucket") input.key = try request.key.ensureRequired(field: "request.key") if let expiration = expiration { input.metadata.set(key: AttributeKeys.expirationTime, value: expiration) } var req = request try Serde.serializeInput(&req, &input, [Serde.serializeInitiateMultipartUpload]) let output = try await clientImpl.presignInner(with: &input) return PresignResult( method: output.method ?? "", url: output.url ?? "", expiration: output.expiration, signedHeaders: output.signedHeaders ) } /// Generates the pre-signed URL for UploadPart operation. /// If you do not specify expiration, the pre-signed URL uses 15 minutes as default. /// - Parameters: /// - request: The request parameter to send /// - expiration: Optional, The expiration time for the generated presign url. /// - Returns: The result instance. func presign( _ request: UploadPartRequest, _ expiration: Foundation.Date? = nil ) async throws -> PresignResult { var input = OperationInput( operationName: "UploadPart", method: "PUT" ) input.bucket = try request.bucket.ensureRequired(field: "request.bucket") input.key = try request.key.ensureRequired(field: "request.key") if let expiration = expiration { input.metadata.set(key: AttributeKeys.expirationTime, value: expiration) } var req = request try Serde.serializeInput(&req, &input, [Serde.serializeUploadPart]) let output = try await clientImpl.presignInner(with: &input) return PresignResult( method: output.method ?? "", url: output.url ?? "", expiration: output.expiration, signedHeaders: output.signedHeaders ) } /// Generates the pre-signed URL for CompleteMultipartUpload operation. /// If you do not specify expiration, the pre-signed URL uses 15 minutes as default. /// - Parameters: /// - request: The request parameter to send /// - expiration: Optional, The expiration time for the generated presign url. /// - Returns: The result instance. func presign( _ request: CompleteMultipartUploadRequest, _ expiration: Foundation.Date? = nil ) async throws -> PresignResult { var input = OperationInput( operationName: "CompleteMultipartUpload", method: "POST" ) input.bucket = try request.bucket.ensureRequired(field: "request.bucket") input.key = try request.key.ensureRequired(field: "request.key") if let expiration = expiration { input.metadata.set(key: AttributeKeys.expirationTime, value: expiration) } var req = request try Serde.serializeInput(&req, &input, [Serde.serializeCompleteMultipartUpload]) let output = try await clientImpl.presignInner(with: &input) return PresignResult( method: output.method ?? "", url: output.url ?? "", expiration: output.expiration, signedHeaders: output.signedHeaders ) } /// Generates the pre-signed URL for AbortMultipartUpload operation. /// If you do not specify expiration, the pre-signed URL uses 15 minutes as default. /// - Parameters: /// - request: The request parameter to send /// - expiration: Optional, The expiration time for the generated presign url. /// - Returns: The result instance. func presign( _ request: AbortMultipartUploadRequest, _ expiration: Foundation.Date? = nil ) async throws -> PresignResult { var input = OperationInput( operationName: "AbortMultipartUpload", method: "DELETE" ) input.bucket = try request.bucket.ensureRequired(field: "request.bucket") input.key = try request.key.ensureRequired(field: "request.key") if let expiration = expiration { input.metadata.set(key: AttributeKeys.expirationTime, value: expiration) } var req = request try Serde.serializeInput(&req, &input, [Serde.serializeAbortMultipartUpload]) let output = try await clientImpl.presignInner(with: &input) return PresignResult( method: output.method ?? "", url: output.url ?? "", expiration: output.expiration, signedHeaders: output.signedHeaders ) } }