Skip to content

Commit 94c7ed6

Browse files
committed
chore(Storage): Simplify Storage.getURL
1 parent f7d9cc1 commit 94c7ed6

17 files changed

+325
-357
lines changed

AmplifyPlugins/Core/AWSPluginsTestCommon/MockAWSAuthService.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import AWSPluginsCore
1212

1313
public class MockAWSAuthService: AWSAuthServiceBehavior {
1414

15+
var interactions: [String] = []
1516
var getIdentityIdError: AuthError?
1617
var getTokenError: AuthError?
1718
var getTokenClaimsError: AuthError?
@@ -20,17 +21,21 @@ public class MockAWSAuthService: AWSAuthServiceBehavior {
2021
var tokenClaims: [String: AnyObject]?
2122

2223
public func configure() {
24+
interactions.append(#function)
2325
}
2426

2527
public func reset() {
28+
interactions.append(#function)
2629
}
2730

2831
public func getCredentialsProvider() -> CredentialsProvider {
32+
interactions.append(#function)
2933
let cognitoCredentialsProvider = MyCustomCredentialsProvider()
3034
return cognitoCredentialsProvider
3135
}
3236

3337
public func getIdentityID() async throws -> String {
38+
interactions.append(#function)
3439
if let error = getIdentityIdError {
3540
throw error
3641
}
@@ -39,6 +44,7 @@ public class MockAWSAuthService: AWSAuthServiceBehavior {
3944
}
4045

4146
public func getUserPoolAccessToken() async throws -> String {
47+
interactions.append(#function)
4248
if let error = getTokenError {
4349
throw error
4450
} else {
@@ -47,6 +53,7 @@ public class MockAWSAuthService: AWSAuthServiceBehavior {
4753
}
4854

4955
public func getTokenClaims(tokenString: String) -> Result<[String: AnyObject], AuthError> {
56+
interactions.append(#function)
5057
if let error = getTokenClaimsError {
5158
return .failure(error)
5259
}

AmplifyPlugins/Storage/Sources/AWSS3StoragePlugin/AWSS3StoragePlugin+AsyncClientBehavior.swift

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,21 @@ extension AWSS3StoragePlugin {
2020
) async throws -> URL {
2121
let options = options ?? StorageGetURLRequest.Options()
2222
let request = StorageGetURLRequest(key: key, options: options)
23-
let operation = AWSS3StorageGetURLOperation(request,
24-
storageConfiguration: storageConfiguration,
25-
storageService: storageService,
26-
authService: authService)
27-
let taskAdapter = AmplifyOperationTaskAdapter(operation: operation)
28-
queue.addOperation(operation)
29-
30-
return try await taskAdapter.value
23+
if let error = request.validate() {
24+
throw error
25+
}
26+
let prefixResolver = storageConfiguration.prefixResolver ?? StorageAccessLevelAwarePrefixResolver(authService: authService)
27+
let prefix = try await prefixResolver.resolvePrefix(for: options.accessLevel,
28+
targetIdentityId: options.targetIdentityId)
29+
let serviceKey = prefix + request.key
30+
let result = try await storageService.getPreSignedURL(serviceKey: serviceKey,
31+
signingOperation: .getObject,
32+
expires: options.expires)
33+
34+
let channel = HubChannel(from: categoryType)
35+
let payload = HubPayload(eventName: HubPayload.EventName.Storage.getURL, context: options, data: result)
36+
Amplify.Hub.dispatch(to: channel, payload: payload)
37+
return result
3138
}
3239

3340
@discardableResult

AmplifyPlugins/Storage/Sources/AWSS3StoragePlugin/Dependency/AWSS3PreSignedURLBuilderBehavior.swift

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,3 @@ protocol AWSS3PreSignedURLBuilderBehavior {
2323
/// - Returns: Pre-Signed URL
2424
func getPreSignedURL(key: String, signingOperation: AWSS3SigningOperation, expires: Int64?) async throws -> URL
2525
}
26-
27-
extension AWSS3PreSignedURLBuilderBehavior {
28-
29-
func getPreSignedURL(key: String, signingOperation: AWSS3SigningOperation, expires: Int64? = nil) async throws -> URL {
30-
try await getPreSignedURL(key: key, signingOperation: signingOperation, expires: expires)
31-
}
32-
33-
func getPreSignedURL(key: String, expires: Int64? = nil) async throws -> URL {
34-
try await getPreSignedURL(key: key, signingOperation: .getObject, expires: expires)
35-
}
36-
37-
}

AmplifyPlugins/Storage/Sources/AWSS3StoragePlugin/Operation/AWSS3StorageGetURLOperation.swift

Lines changed: 0 additions & 99 deletions
This file was deleted.

AmplifyPlugins/Storage/Sources/AWSS3StoragePlugin/Service/Storage/AWSS3StorageService+DownloadBehavior.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ extension AWSS3StorageService {
2727

2828
Task {
2929
do {
30-
let preSignedURL = try await preSignedURLBuilder.getPreSignedURL(key: serviceKey)
30+
let preSignedURL = try await preSignedURLBuilder.getPreSignedURL(key: serviceKey, signingOperation: .getObject, expires: nil)
3131
startDownload(preSignedURL: preSignedURL, transferTask: transferTask)
3232
} catch {
3333
onEvent(.failed(StorageError.unknown("Failed to get pre-signed URL", nil)))

AmplifyPlugins/Storage/Sources/AWSS3StoragePlugin/Service/Storage/AWSS3StorageService+GetPreSignedURLBehavior.swift

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,8 @@ import Amplify
1111
extension AWSS3StorageService {
1212

1313
func getPreSignedURL(serviceKey: String,
14-
signingOperation: AWSS3SigningOperation = .getObject,
15-
expires: Int,
16-
onEvent: @escaping StorageServiceGetPreSignedURLEventHandler) {
17-
Task {
18-
do {
19-
onEvent(.completed(try await preSignedURLBuilder.getPreSignedURL(key: serviceKey,
20-
expires: Int64(expires))))
21-
} catch {
22-
onEvent(.failed(StorageError.unknown("Failed to get pre-signed URL", nil)))
23-
}
24-
}
14+
signingOperation: AWSS3SigningOperation,
15+
expires: Int) async throws -> URL {
16+
return try await preSignedURLBuilder.getPreSignedURL(key: serviceKey, signingOperation: signingOperation, expires: Int64(expires))
2517
}
2618
}

AmplifyPlugins/Storage/Sources/AWSS3StoragePlugin/Service/Storage/AWSS3StorageService+UploadBehavior.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ extension AWSS3StorageService {
3434

3535
do {
3636
let preSignedURL = try await preSignedURLBuilder.getPreSignedURL(key: serviceKey,
37-
signingOperation: .putObject)
37+
signingOperation: .putObject,
38+
expires: nil)
3839
startUpload(preSignedURL: preSignedURL,
3940
fileURL: uploadFileURL,
4041
contentType: contentType,

AmplifyPlugins/Storage/Sources/AWSS3StoragePlugin/Service/Storage/AWSS3StorageServiceBehaviour.swift

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ protocol AWSS3StorageServiceBehaviour {
4343

4444
func getPreSignedURL(serviceKey: String,
4545
signingOperation: AWSS3SigningOperation,
46-
expires: Int,
47-
onEvent: @escaping StorageServiceGetPreSignedURLEventHandler)
46+
expires: Int) async throws -> URL
4847

4948
func upload(serviceKey: String,
5049
uploadSource: UploadSource,
@@ -64,11 +63,3 @@ protocol AWSS3StorageServiceBehaviour {
6463
func delete(serviceKey: String,
6564
onEvent: @escaping StorageServiceDeleteEventHandler)
6665
}
67-
68-
extension AWSS3StorageServiceBehaviour {
69-
func getPreSignedURL(serviceKey: String,
70-
expires: Int,
71-
onEvent: @escaping StorageServiceGetPreSignedURLEventHandler) {
72-
getPreSignedURL(serviceKey: serviceKey, signingOperation: .getObject, expires: expires, onEvent: onEvent)
73-
}
74-
}

AmplifyPlugins/Storage/Sources/AWSS3StoragePlugin/Support/Internal/StorageMultipartUploadClient.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,8 @@ class DefaultStorageMultipartUploadClient: StorageMultipartUploadClient {
128128
let operation = AWSS3SigningOperation.uploadPart(partNumber: partNumber, uploadId: uploadId)
129129
let preSignedURL = try await serviceProxy.preSignedURLBuilder.getPreSignedURL(
130130
key: self.key,
131-
signingOperation: operation
131+
signingOperation: operation,
132+
expires: nil
132133
)
133134
startUploadPart(partialFileURL, preSignedURL)
134135
} catch {

AmplifyPlugins/Storage/Tests/AWSS3StoragePluginTests/AWSS3StoragePluginAsyncBehaviorTests.swift

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -47,21 +47,6 @@ class AWSS3StoragePluginAsyncBehaviorTests: XCTestCase {
4747
queue = nil
4848
}
4949

50-
func testPluginGetURLAsync() async throws {
51-
let done = asyncExpectation(description: "done")
52-
let input = URL(string: "https://bucket.aws.amazon.com/\(testKey ?? "")")!
53-
54-
Task {
55-
storageService.storageServiceGetPreSignedURLEvents = [.completed(input)]
56-
let output = try await storagePlugin.getURL(key: testKey, options: nil)
57-
XCTAssertEqual(input, output)
58-
XCTAssertEqual(1, storageService.getPreSignedURLCalled)
59-
await done.fulfill()
60-
}
61-
62-
await waitForExpectations([done], timeout: 3.0)
63-
}
64-
6550
func testPluginDownloadDataAsync() async throws {
6651
let input = "AWS".data(using: .utf8)!
6752
storageService.storageServiceDownloadEvents = [.completed(input)]

0 commit comments

Comments
 (0)