Skip to content

Commit b6339cf

Browse files
authored
chore(auth): add custom network preferences for AWSCognitoAuthPlugin (#2208)
1 parent ff86b7c commit b6339cf

File tree

4 files changed

+95
-4
lines changed

4 files changed

+95
-4
lines changed

AmplifyPlugins/Auth/AWSCognitoAuthPlugin/AWSCognitoAuthPlugin+Configure.swift

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,18 @@ extension AWSCognitoAuthPlugin {
9898
}
9999
let region = (regionString as NSString).aws_regionTypeValue()
100100
let anonymousCredentialProvider = AWSAnonymousCredentialsProvider()
101-
return AmplifyAWSServiceConfiguration(region: region, credentialsProvider: anonymousCredentialProvider)
101+
let service = AmplifyAWSServiceConfiguration(region: region, credentialsProvider: anonymousCredentialProvider)
102+
setUserPreferencesForService(service: service)
103+
return service
104+
}
105+
106+
func setUserPreferencesForService(service: AmplifyAWSServiceConfiguration) {
107+
guard let networkPreferences = networkPreferences else {
108+
return
109+
}
110+
service.maxRetryCount = networkPreferences.maxRetryCount
111+
service.timeoutIntervalForRequest = networkPreferences.timeoutIntervalForRequest
112+
service.timeoutIntervalForResource = networkPreferences.timeoutIntervalForResource
102113
}
103114

104115
func userPoolServiceConfiguration(from authConfiguration: JSONValue) throws -> AmplifyAWSServiceConfiguration? {
@@ -109,11 +120,14 @@ extension AWSCognitoAuthPlugin {
109120
}
110121
let region = (regionString as NSString).aws_regionTypeValue()
111122

123+
let service: AmplifyAWSServiceConfiguration
112124
if let endpoint = try resolveCognitoOverrideEndpoint(using: authConfiguration, region: region) {
113-
return AmplifyAWSServiceConfiguration(region: region, endpoint: endpoint)
125+
service = AmplifyAWSServiceConfiguration(region: region, endpoint: endpoint)
114126
} else {
115-
return AmplifyAWSServiceConfiguration(region: region)
127+
service = AmplifyAWSServiceConfiguration(region: region)
116128
}
129+
setUserPreferencesForService(service: service)
130+
return service
117131
}
118132

119133
func resolveCognitoOverrideEndpoint(

AmplifyPlugins/Auth/AWSCognitoAuthPlugin/AWSCognitoAuthPlugin.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ final public class AWSCognitoAuthPlugin: AuthCategoryPlugin {
4444
public var key: PluginKey {
4545
return "awsCognitoAuthPlugin"
4646
}
47+
48+
/// The user network preferences for timeout and retry
49+
let networkPreferences: AWSCognitoNetworkPreferences?
4750

4851
public func getEscapeHatch() -> AWSCognitoAuthService {
4952
if let internalAuthorizationProvider = authorizationProvider as? AuthorizationProviderAdapter,
@@ -55,6 +58,14 @@ final public class AWSCognitoAuthPlugin: AuthCategoryPlugin {
5558

5659
/// Instantiates an instance of the AWSCognitoAuthPlugin.
5760
public init() {
61+
self.networkPreferences = nil
62+
}
63+
64+
/// Instantiates an instance of the AWSCognitoAuthPlugin with custom network preferences
65+
/// - Parameters:
66+
/// - networkPreferences: network preferences
67+
public init(networkPreferences: AWSCognitoNetworkPreferences) {
68+
self.networkPreferences = networkPreferences
5869
}
5970
}
6071

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
//
2+
// Copyright Amazon.com Inc. or its affiliates.
3+
// All Rights Reserved.
4+
//
5+
// SPDX-License-Identifier: Apache-2.0
6+
//
7+
8+
import Foundation
9+
10+
public struct AWSCognitoNetworkPreferences {
11+
12+
/// The maximum number of retries for failed requests. The value needs to be between 0 and 10 inclusive. If set to higher than 10, it becomes 10.
13+
public let maxRetryCount: UInt32
14+
15+
/// The timeout interval to use when waiting for additional data.
16+
public let timeoutIntervalForRequest: Double
17+
18+
/// The maximum amount of time that a resource request should be allowed to take.
19+
public let timeoutIntervalForResource: Double
20+
21+
public init(maxRetryCount: UInt32,
22+
timeoutIntervalForRequest: Double,
23+
timeoutIntervalForResource: Double) {
24+
self.maxRetryCount = maxRetryCount
25+
self.timeoutIntervalForRequest = timeoutIntervalForRequest
26+
self.timeoutIntervalForResource = timeoutIntervalForResource
27+
}
28+
}

AmplifyPlugins/Auth/AWSCognitoAuthPluginTests/ConfigurationTests/AWSCognitoAuthPluginConfigTests.swift

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import XCTest
99
@testable import Amplify
10-
import AWSCognitoAuthPlugin
10+
@testable import AWSCognitoAuthPlugin
1111

1212
class AWSCognitoAuthPluginConfigTests: XCTestCase {
1313

@@ -318,4 +318,42 @@ class AWSCognitoAuthPluginConfigTests: XCTestCase {
318318
expectationList.append(signUpExpectation2)
319319
wait(for: expectationList, timeout: 10, enforceOrder: true)
320320
}
321+
322+
func testUserNetworkPreferencesForIdentityPoolService() throws {
323+
let networkPreferences = AWSCognitoNetworkPreferences(maxRetryCount: 0,
324+
timeoutIntervalForRequest: 30,
325+
timeoutIntervalForResource: 30)
326+
let plugin = AWSCognitoAuthPlugin(networkPreferences: networkPreferences)
327+
328+
let json = JSONValue(dictionaryLiteral: ("CredentialsProvider",
329+
.init(dictionaryLiteral: ("CognitoIdentity",
330+
.init(dictionaryLiteral: ("Default",
331+
.init(dictionaryLiteral: ("Region", "us-east-1"))))))))
332+
let identityPoolConfig = plugin.identityPoolServiceConfiguration(from: json)
333+
334+
XCTAssertEqual(identityPoolConfig?.maxRetryCount, networkPreferences.maxRetryCount)
335+
XCTAssertEqual(identityPoolConfig?.timeoutIntervalForResource, networkPreferences.timeoutIntervalForResource)
336+
XCTAssertEqual(identityPoolConfig?.timeoutIntervalForRequest, networkPreferences.timeoutIntervalForRequest)
337+
}
338+
339+
func testUserNetworkPreferencesForUserPoolService() throws {
340+
let networkPreferences = AWSCognitoNetworkPreferences(maxRetryCount: 0,
341+
timeoutIntervalForRequest: 30,
342+
timeoutIntervalForResource: 30)
343+
let plugin = AWSCognitoAuthPlugin(networkPreferences: networkPreferences)
344+
345+
let json = JSONValue(dictionaryLiteral: ("CognitoUserPool",
346+
.init(dictionaryLiteral: ("Default",
347+
.init(dictionaryLiteral: ("Region", "us-east-1"))))))
348+
let identityPoolConfig = try plugin.userPoolServiceConfiguration(from: json)
349+
350+
XCTAssertEqual(identityPoolConfig?.maxRetryCount, networkPreferences.maxRetryCount)
351+
XCTAssertEqual(identityPoolConfig?.timeoutIntervalForResource, networkPreferences.timeoutIntervalForResource)
352+
XCTAssertEqual(identityPoolConfig?.timeoutIntervalForRequest, networkPreferences.timeoutIntervalForRequest)
353+
}
354+
355+
func testNoUserPreferences() throws {
356+
let plugin = AWSCognitoAuthPlugin()
357+
XCTAssertNil(plugin.networkPreferences)
358+
}
321359
}

0 commit comments

Comments
 (0)