Skip to content

Commit d962dee

Browse files
committed
Adding amplify specific user agent, revival of PR#166 (271)
1 parent 89fd3a6 commit d962dee

File tree

19 files changed

+1571
-1519
lines changed

19 files changed

+1571
-1519
lines changed

Amplify.xcodeproj/project.pbxproj

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@
9898
2CFB61C7E80D065C0A885A2F /* Pods_Amplify_AWSPluginsCore_AWSPluginsTestConfigs_AWSPluginsTestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D5363CAF9EFAA822FED56808 /* Pods_Amplify_AWSPluginsCore_AWSPluginsTestConfigs_AWSPluginsTestCommon.framework */; };
9999
3263D332138415AF42E64FF7 /* Pods_AmplifyTestApp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDC7F1C368154B364CB74742 /* Pods_AmplifyTestApp.framework */; };
100100
6BB7441023A9954900B0EB6C /* DispatchSource+MakeOneOff.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BB7440F23A9954900B0EB6C /* DispatchSource+MakeOneOff.swift */; };
101+
6BBECD7123ADA7E100C8DFBE /* AmplifyAWSServiceConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BBECD7023ADA7E100C8DFBE /* AmplifyAWSServiceConfiguration.swift */; };
102+
6BBECD7423ADA9D100C8DFBE /* AmplifyAWSServiceConfigurationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BBECD7323ADA9D100C8DFBE /* AmplifyAWSServiceConfigurationTests.swift */; };
101103
7D5ED6C78E25246DDAF2F2EC /* Pods_Amplify.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84F3A76FB68CEFA45F4BB1BB /* Pods_Amplify.framework */; platformFilter = ios; };
102104
7F27B1DCE59C1E674172CCD6 /* Pods_Amplify_AmplifyTestConfigs_AmplifyTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 976D972EC2BBCAAD023694EB /* Pods_Amplify_AmplifyTestConfigs_AmplifyTests.framework */; };
103105
881246F5DCC59436DC932469 /* Pods_Amplify_AWSPluginsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 35D92182B8445C8F9B0FAE94 /* Pods_Amplify_AWSPluginsCore.framework */; };
@@ -652,6 +654,8 @@
652654
6AF0E4775809F0866F9C44D9 /* Pods-AmplifyAWSPlugins-AWSPluginsCore-AWSS3StoragePlugin-AWSS3StoragePluginTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AmplifyAWSPlugins-AWSPluginsCore-AWSS3StoragePlugin-AWSS3StoragePluginTests.debug.xcconfig"; path = "Target Support Files/Pods-AmplifyAWSPlugins-AWSPluginsCore-AWSS3StoragePlugin-AWSS3StoragePluginTests/Pods-AmplifyAWSPlugins-AWSPluginsCore-AWSS3StoragePlugin-AWSS3StoragePluginTests.debug.xcconfig"; sourceTree = "<group>"; };
653655
6BAC32194A15ACB56F07DC87 /* Pods-AWSS3StoragePlugin.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AWSS3StoragePlugin.debug.xcconfig"; path = "Target Support Files/Pods-AWSS3StoragePlugin/Pods-AWSS3StoragePlugin.debug.xcconfig"; sourceTree = "<group>"; };
654656
6BB7440F23A9954900B0EB6C /* DispatchSource+MakeOneOff.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DispatchSource+MakeOneOff.swift"; sourceTree = "<group>"; };
657+
6BBECD7023ADA7E100C8DFBE /* AmplifyAWSServiceConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmplifyAWSServiceConfiguration.swift; sourceTree = "<group>"; };
658+
6BBECD7323ADA9D100C8DFBE /* AmplifyAWSServiceConfigurationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmplifyAWSServiceConfigurationTests.swift; sourceTree = "<group>"; };
655659
6C41D3730B7ED4FD62A43E40 /* Pods-Amplify-AmplifyAWSPlugins-AWSAPICategoryPlugin-AWSAPICategoryPluginTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Amplify-AmplifyAWSPlugins-AWSAPICategoryPlugin-AWSAPICategoryPluginTests.debug.xcconfig"; path = "Target Support Files/Pods-Amplify-AmplifyAWSPlugins-AWSAPICategoryPlugin-AWSAPICategoryPluginTests/Pods-Amplify-AmplifyAWSPlugins-AWSAPICategoryPlugin-AWSAPICategoryPluginTests.debug.xcconfig"; sourceTree = "<group>"; };
656660
6D51240C78418B733FFA6829 /* Pods-Amplify-AWSPluginsCore-AWSPluginsTestConfigs-AWSDataStoreCategoryPluginTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Amplify-AWSPluginsCore-AWSPluginsTestConfigs-AWSDataStoreCategoryPluginTests.debug.xcconfig"; path = "Target Support Files/Pods-Amplify-AWSPluginsCore-AWSPluginsTestConfigs-AWSDataStoreCategoryPluginTests/Pods-Amplify-AWSPluginsCore-AWSPluginsTestConfigs-AWSDataStoreCategoryPluginTests.debug.xcconfig"; sourceTree = "<group>"; };
657661
6D62C9C57736C3BEADEB1E30 /* Pods-AWSPinpointAnalyticsPlugin.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AWSPinpointAnalyticsPlugin.debug.xcconfig"; path = "Target Support Files/Pods-AWSPinpointAnalyticsPlugin/Pods-AWSPinpointAnalyticsPlugin.debug.xcconfig"; sourceTree = "<group>"; };
@@ -1510,6 +1514,22 @@
15101514
path = Pods;
15111515
sourceTree = "<group>";
15121516
};
1517+
6BBECD6F23ADA7C100C8DFBE /* ServiceConfiguration */ = {
1518+
isa = PBXGroup;
1519+
children = (
1520+
6BBECD7023ADA7E100C8DFBE /* AmplifyAWSServiceConfiguration.swift */,
1521+
);
1522+
path = ServiceConfiguration;
1523+
sourceTree = "<group>";
1524+
};
1525+
6BBECD7223ADA9B400C8DFBE /* ServiceConfiguration */ = {
1526+
isa = PBXGroup;
1527+
children = (
1528+
6BBECD7323ADA9D100C8DFBE /* AmplifyAWSServiceConfigurationTests.swift */,
1529+
);
1530+
path = ServiceConfiguration;
1531+
sourceTree = "<group>";
1532+
};
15131533
95DAAB00237E63370028544F /* Models */ = {
15141534
isa = PBXGroup;
15151535
children = (
@@ -1859,6 +1879,7 @@
18591879
FA131AAD2360FE070008381C /* Info.plist */,
18601880
FA131ACB2360FE470008381C /* Auth */,
18611881
2129BE0223947FA3006363A1 /* Model */,
1882+
6BBECD6F23ADA7C100C8DFBE /* ServiceConfiguration */,
18621883
2129BE3F23948909006363A1 /* Sync */,
18631884
);
18641885
path = AWSPluginsCore;
@@ -1870,6 +1891,7 @@
18701891
FA131ABB2360FE070008381C /* Info.plist */,
18711892
2129BE2223948085006363A1 /* Model */,
18721893
2129BE4523948975006363A1 /* Sync */,
1894+
6BBECD7223ADA9B400C8DFBE /* ServiceConfiguration */,
18731895
);
18741896
path = AWSPluginsCoreTests;
18751897
sourceTree = "<group>";
@@ -3368,6 +3390,7 @@
33683390
21420A97237222A900FA140C /* IAMCredentialProvider.swift in Sources */,
33693391
21F40A3223A160FC0074678E /* GraphQLDocument+DeleteSyncMutation.swift in Sources */,
33703392
21420A99237222A900FA140C /* APIKeyProvider.swift in Sources */,
3393+
6BBECD7123ADA7E100C8DFBE /* AmplifyAWSServiceConfiguration.swift in Sources */,
33713394
21420A90237222A900FA140C /* APIKeyConfiguration.swift in Sources */,
33723395
2129BE552395CAEF006363A1 /* PaginatedList.swift in Sources */,
33733396
2129BE212394806B006363A1 /* ModelSchema+GraphQL.swift in Sources */,
@@ -3390,6 +3413,7 @@
33903413
2129BE3B2394828B006363A1 /* GraphQLRequestAnyModelTests.swift in Sources */,
33913414
2129BE562395CAF9006363A1 /* PaginatedListTests.swift in Sources */,
33923415
2129BE372394828B006363A1 /* GraphQLSyncQueryTests.swift in Sources */,
3416+
6BBECD7423ADA9D100C8DFBE /* AmplifyAWSServiceConfigurationTests.swift in Sources */,
33933417
2129BE342394828B006363A1 /* GraphQLMutationTests.swift in Sources */,
33943418
2129BE392394828B006363A1 /* GraphQLSyncMutationTests.swift in Sources */,
33953419
2129BE332394828B006363A1 /* GraphQLSubscriptionTests.swift in Sources */,

AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/RequestInterceptor/APIKeyURLRequestInterceptor.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ struct APIKeyURLRequestInterceptor: URLRequestInterceptor {
2121
var modifiedRequest = request
2222
let apiKey = apiKeyProvider.getAPIKey()
2323
modifiedRequest.addValue(apiKey,
24-
forHTTPHeaderField: URLRequestContants.Header.xApiKey)
24+
forHTTPHeaderField: URLRequestConstants.Header.xApiKey)
25+
modifiedRequest.setValue(AmplifyAWSServiceConfiguration.baseUserAgent(),
26+
forHTTPHeaderField: URLRequestConstants.Header.userAgent)
27+
2528
return modifiedRequest
2629
}
2730

AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/RequestInterceptor/IAMURLRequestInterceptor.swift

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,20 @@ struct IAMURLRequestInterceptor: URLRequestInterceptor {
2929
guard let mutableRequest = (request as NSURLRequest).mutableCopy() as? NSMutableURLRequest else {
3030
throw APIError.unknown("Could not get mutable request", "")
3131
}
32-
3332
mutableRequest.setValue(NSDate().aws_stringValue(AWSDateISO8601DateFormat2),
34-
forHTTPHeaderField: URLRequestContants.Header.xAmzDate)
35-
mutableRequest.setValue(URLRequestContants.ContentType.applicationJson,
36-
forHTTPHeaderField: URLRequestContants.Header.contentType)
37-
mutableRequest.setValue(URLRequestContants.UserAgent.amplify,
38-
forHTTPHeaderField: URLRequestContants.Header.userAgent)
33+
forHTTPHeaderField: URLRequestConstants.Header.xAmzDate)
34+
mutableRequest.setValue(URLRequestConstants.ContentType.applicationJson,
35+
forHTTPHeaderField: URLRequestConstants.Header.contentType)
36+
let serviceConfiguration = AmplifyAWSServiceConfiguration(region: region,
37+
credentialsProvider: iamCredentialsProvider.getCredentialsProvider())
38+
mutableRequest.setValue(serviceConfiguration.userAgent,
39+
forHTTPHeaderField: URLRequestConstants.Header.userAgent)
3940

4041
let endpoint: AWSEndpoint
4142
switch endpointType {
4243
case .graphQL:
4344
endpoint = AWSEndpoint(region: region,
44-
serviceName: URLRequestContants.appSyncServiceName,
45+
serviceName: URLRequestConstants.appSyncServiceName,
4546
url: mutableRequest.url)
4647
case .rest:
4748
endpoint = AWSEndpoint(region: region,

AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/RequestInterceptor/UserPoolRequestInterceptor.swift

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,12 @@ struct UserPoolURLRequestInterceptor: URLRequestInterceptor {
2424
guard let mutableRequest = (request as NSURLRequest).mutableCopy() as? NSMutableURLRequest else {
2525
throw APIError.unknown("Could not get mutable request", "")
2626
}
27-
2827
mutableRequest.setValue(NSDate().aws_stringValue(AWSDateISO8601DateFormat2),
29-
forHTTPHeaderField: URLRequestContants.Header.xAmzDate)
30-
mutableRequest.setValue(URLRequestContants.ContentType.applicationJson,
31-
forHTTPHeaderField: URLRequestContants.Header.contentType)
32-
mutableRequest.setValue(URLRequestContants.UserAgent.amplify,
33-
forHTTPHeaderField: URLRequestContants.Header.userAgent)
28+
forHTTPHeaderField: URLRequestConstants.Header.xAmzDate)
29+
mutableRequest.setValue(URLRequestConstants.ContentType.applicationJson,
30+
forHTTPHeaderField: URLRequestConstants.Header.contentType)
31+
mutableRequest.setValue(AmplifyAWSServiceConfiguration.baseUserAgent(),
32+
forHTTPHeaderField: URLRequestConstants.Header.userAgent)
3433

3534
let tokenResult = userPoolTokenProvider.getToken()
3635
guard case let .success(token) = tokenResult else {

AmplifyPlugins/API/AWSAPICategoryPlugin/Support/Constants/URLRequestConstants.swift

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import Foundation
99

1010
// TODO: remove this https://github.com/aws-amplify/amplify-ios/issues/75
11-
struct URLRequestContants {
11+
struct URLRequestConstants {
1212
static let appSyncServiceName = "appsync"
1313

1414
struct Header {
@@ -21,8 +21,4 @@ struct URLRequestContants {
2121
struct ContentType {
2222
static let applicationJson = "application/json"
2323
}
24-
25-
struct UserAgent {
26-
static let amplify = "amplify-ios/0.9.0 Amplify"
27-
}
2824
}

AmplifyPlugins/Analytics/AWSPinpointAnalyticsPlugin/Dependency/AWSPinpointAdapter.swift

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import Foundation
99
import Amplify
1010
import AWSPinpoint
1111
import AWSMobileClient
12+
import AWSPluginsCore
1213

1314
/// Conforms to `AWSPinpointBehavior` by storing an instance of the `AWSPinpoint` to expose AWS Pinpoint functionality
1415
class AWSPinpointAdapter: AWSPinpointBehavior {
@@ -22,22 +23,10 @@ class AWSPinpointAdapter: AWSPinpointBehavior {
2223
cognitoCredentialsProvider: AWSCognitoCredentialsProvider) throws {
2324

2425
let pinpointConfiguration = AWSPinpointConfiguration(appId: pinpointAnalyticsAppId, launchOptions: nil)
25-
26-
guard let serviceConfiguration = AWSServiceConfiguration(region: pinpointAnalyticsRegion,
27-
credentialsProvider: cognitoCredentialsProvider) else {
28-
throw PluginError.pluginConfigurationError(
29-
AnalyticsPluginErrorConstant.pinpointAnalyticsServiceConfigurationError.errorDescription,
30-
AnalyticsPluginErrorConstant.pinpointAnalyticsServiceConfigurationError.recoverySuggestion)
31-
}
32-
33-
guard let targetingServiceConfiguration =
34-
AWSServiceConfiguration(region: pinpointTargetingRegion,
35-
credentialsProvider: cognitoCredentialsProvider) else {
36-
37-
throw PluginError.pluginConfigurationError(
38-
AnalyticsPluginErrorConstant.pinpointTargetingServiceConfigurationError.errorDescription,
39-
AnalyticsPluginErrorConstant.pinpointTargetingServiceConfigurationError.recoverySuggestion)
40-
}
26+
let serviceConfiguration = AmplifyAWSServiceConfiguration(region: pinpointAnalyticsRegion,
27+
credentialsProvider: cognitoCredentialsProvider)
28+
let targetingServiceConfiguration = AmplifyAWSServiceConfiguration(region: pinpointTargetingRegion,
29+
credentialsProvider: cognitoCredentialsProvider)
4130

4231
pinpointConfiguration.serviceConfiguration = serviceConfiguration
4332
pinpointConfiguration.targetingServiceConfiguration = targetingServiceConfiguration
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//
2+
// Copyright 2018-2019 Amazon.com,
3+
// Inc. or its affiliates. All Rights Reserved.
4+
//
5+
// SPDX-License-Identifier: Apache-2.0
6+
//
7+
8+
import Foundation
9+
import AWSCore
10+
11+
public class AmplifyAWSServiceConfiguration: AWSServiceConfiguration {
12+
override public class func baseUserAgent() -> String! {
13+
//TODO: Retrieve this version from a centralized location:
14+
//https://github.com/aws-amplify/amplify-ios/issues/276
15+
let version = "0.9.0"
16+
let sdkName = "amplify-iOS"
17+
let systemName = UIDevice.current.systemName.replacingOccurrences(of: " ", with: "-")
18+
let systemVersion = UIDevice.current.systemVersion
19+
let localeIdentifier = Locale.current.identifier
20+
return "\(sdkName)/\(version) \(systemName)/\(systemVersion) \(localeIdentifier)"
21+
}
22+
23+
override public var userAgent: String {
24+
return AmplifyAWSServiceConfiguration.baseUserAgent()
25+
}
26+
27+
override public func copy(with zone: NSZone? = nil) -> Any {
28+
return super.copy(with: zone)
29+
}
30+
31+
override init() {
32+
super.init(region: .Unknown, credentialsProvider: nil)
33+
}
34+
35+
override public init(region regionType: AWSRegionType,
36+
credentialsProvider: AWSCredentialsProvider) {
37+
super.init(region: regionType, credentialsProvider: credentialsProvider)
38+
}
39+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
//
2+
// Copyright 2018-2019 Amazon.com,
3+
// Inc. or its affiliates. All Rights Reserved.
4+
//
5+
// SPDX-License-Identifier: Apache-2.0
6+
//
7+
8+
import XCTest
9+
@testable import AWSPluginsCore
10+
11+
class AmplifyAWSServiceConfigurationTests: XCTestCase {
12+
let credentialProvider = AWSAuthService().getCognitoCredentialsProvider()
13+
func testInstantiation() {
14+
let currentSystemName = UIDevice.current.systemName.replacingOccurrences(of: " ", with: "-")
15+
let currentSystemVersion = UIDevice.current.systemVersion
16+
let expectedLocale = Locale.current.identifier
17+
let expectedSystem = "\(currentSystemName)/\(currentSystemVersion)"
18+
19+
let configuration = AmplifyAWSServiceConfiguration(region: .USEast1,
20+
credentialsProvider: credentialProvider)
21+
22+
XCTAssertNotNil(configuration.userAgent)
23+
let userAgentParts = configuration.userAgent.components(separatedBy: " ")
24+
XCTAssertEqual(3, userAgentParts.count)
25+
XCTAssert(userAgentParts[0].starts(with: "amplify-iOS/"))
26+
XCTAssertEqual(expectedSystem, userAgentParts[1])
27+
XCTAssertEqual(expectedLocale, userAgentParts[2])
28+
}
29+
}

AmplifyPlugins/Predictions/AWSPredictionsPlugin/AWSPredictionsPlugin+Configure.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ extension AWSPredictionsPlugin {
3232
from: configurationData)
3333
let authService = AWSAuthService()
3434
let cognitoCredentialsProvider = authService.getCognitoCredentialsProvider()
35-
let coremlService = try CoreMLPredictionService(config: configuration)
36-
let predictionsService = try AWSPredictionsService(config: predictionsConfiguration,
35+
let coremlService = try CoreMLPredictionService(configuration: configuration)
36+
let predictionsService = try AWSPredictionsService(configuration: predictionsConfiguration,
3737
cognitoCredentialsProvider: cognitoCredentialsProvider,
3838
identifier: key)
3939
configure(predictionsService: predictionsService,

AmplifyPlugins/Predictions/AWSPredictionsPlugin/Service/CoreML/CoreMLPredictionService.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ class CoreMLPredictionService: CoreMLPredictionBehavior {
1313

1414
let coreMLPlugin: CoreMLPredictionsPlugin
1515

16-
init(config: Any) throws {
16+
init(configuration: Any) throws {
1717
self.coreMLPlugin = CoreMLPredictionsPlugin()
18-
try coreMLPlugin.configure(using: config)
18+
try coreMLPlugin.configure(using: configuration)
1919
}
2020

2121
func comprehend(text: String, onEvent: @escaping InterpretTextEventHandler) {

0 commit comments

Comments
 (0)