Skip to content

Commit 478ca9d

Browse files
Customize user agent (#223)
* OKTA-293234 - OIDC-IOS: Support customized User-Agent
1 parent 65bbaa9 commit 478ca9d

File tree

6 files changed

+65
-35
lines changed

6 files changed

+65
-35
lines changed

Okta/Framework/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<key>CFBundlePackageType</key>
1818
<string>FMWK</string>
1919
<key>CFBundleShortVersionString</key>
20-
<string>3.6.1</string>
20+
<string>3.7.0</string>
2121
<key>CFBundleVersion</key>
2222
<string>$(CURRENT_PROJECT_VERSION)</string>
2323
</dict>

Okta/OktaOidc/Internal/OktaUserAgent.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ NS_ASSUME_NONNULL_BEGIN
1616

1717
@interface OktaUserAgent : NSObject
1818

19+
+(void)setUserAgentValue:(NSString*)value;
1920
+(NSString*)userAgentVersion;
2021
+(NSString*)userAgentHeaderKey;
2122
+(NSString*)userAgentHeaderValue;

Okta/OktaOidc/Internal/OktaUserAgent.m

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,32 +15,42 @@
1515

1616
@implementation OktaUserAgent
1717

18+
static NSString *userAgentValue = nil;
19+
20+
+(void)setUserAgentValue:(NSString*)value {
21+
userAgentValue = value;
22+
}
23+
1824
+(NSString*)userAgentVersion {
19-
return @"3.6.1";
25+
return @"3.7.0";
2026
}
2127

2228
+(NSString*)userAgentHeaderKey {
2329
return @"User-Agent";
2430
}
2531

2632
+(NSString*)userAgentHeaderValue {
27-
28-
NSString *bundleVersion = [self.class userAgentVersion];
29-
NSString *systemVersion = [[NSProcessInfo processInfo] operatingSystemVersionString];
30-
struct utsname deviceInfo;
31-
uname(&deviceInfo);
32-
NSString *deviceModel = [NSString stringWithUTF8String:deviceInfo.machine];
33-
NSString *osName = @"iOS";
34-
#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED
35-
osName = @"macOS";
33+
34+
if (userAgentValue.length > 0) {
35+
return userAgentValue;
36+
} else {
37+
NSString *bundleVersion = [self.class userAgentVersion];
38+
NSString *systemVersion = [[NSProcessInfo processInfo] operatingSystemVersionString];
39+
struct utsname deviceInfo;
40+
uname(&deviceInfo);
41+
NSString *deviceModel = [NSString stringWithUTF8String:deviceInfo.machine];
42+
NSString *osName = @"iOS";
43+
#ifdef __MAC_OS_X_VERSION_MIN_REQUIRE
44+
osName = @"macOS";
3645
#endif
3746

38-
NSString *formattedString = [NSString stringWithFormat:@"okta-oidc-ios/%@ %@/%@ Device/%@",
39-
bundleVersion.length > 0 ? bundleVersion : @"",
40-
osName,
41-
systemVersion,
42-
deviceModel];
43-
return formattedString;
47+
NSString *formattedString = [NSString stringWithFormat:@"okta-oidc-ios/%@ %@/%@ Device/%@",
48+
bundleVersion.length > 0 ? bundleVersion : @"",
49+
osName,
50+
systemVersion,
51+
deviceModel];
52+
return formattedString;
53+
}
4454
}
4555

4656
@end

Okta/OktaOidc/OktaOidcConfig.swift

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -64,19 +64,9 @@ public class OktaOidcConfig: NSObject, Codable {
6464

6565
try self.init(with: configDict)
6666
}
67-
68-
private static func extractAdditionalParams(_ config: [String: String]) -> [String: String]? {
69-
// Parse the additional parameters to be passed to the /authorization endpoint
70-
var configCopy = config
71-
72-
// Remove "issuer", "clientId", "redirectUri", "scopes" and "logoutRedirectUri"
73-
configCopy.removeValue(forKey: "issuer")
74-
configCopy.removeValue(forKey: "clientId")
75-
configCopy.removeValue(forKey: "redirectUri")
76-
configCopy.removeValue(forKey: "scopes")
77-
configCopy.removeValue(forKey: "logoutRedirectUri")
78-
79-
return configCopy
67+
68+
public class func setUserAgent(value: String) {
69+
OktaUserAgent.setUserAgentValue(value)
8070
}
8171

8272
override public func isEqual(_ object: Any?) -> Bool {
@@ -108,6 +98,20 @@ public class OktaOidcConfig: NSObject, Codable {
10898
OIDURLSessionProvider.setSession(session)
10999
}
110100

101+
private static func extractAdditionalParams(_ config: [String: String]) -> [String: String]? {
102+
// Parse the additional parameters to be passed to the /authorization endpoint
103+
var configCopy = config
104+
105+
// Remove "issuer", "clientId", "redirectUri", "scopes" and "logoutRedirectUri"
106+
configCopy.removeValue(forKey: "issuer")
107+
configCopy.removeValue(forKey: "clientId")
108+
configCopy.removeValue(forKey: "redirectUri")
109+
configCopy.removeValue(forKey: "scopes")
110+
configCopy.removeValue(forKey: "logoutRedirectUri")
111+
112+
return configCopy
113+
}
114+
111115
class RedirectBlockingURLSessionDelegate: NSObject, URLSessionTaskDelegate {
112116

113117
static let shared = RedirectBlockingURLSessionDelegate()

OktaOidc.podspec

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = 'OktaOidc'
3-
s.version = '3.6.1'
3+
s.version = '3.7.0'
44
s.summary = 'SDK to easily integrate AppAuth with Okta'
55
s.description = <<-DESC
66
Integrate your native app with Okta using the AppAuth library.
@@ -23,15 +23,25 @@ Integrate your native app with Okta using the AppAuth library.
2323
s.subspec 'Okta' do |okta|
2424
okta.dependency 'OktaOidc/AppAuth'
2525
okta.subspec 'Classes' do |classes|
26-
classes.source_files = 'Okta/OktaOidc/*.{h,m,swift}','Okta/OktaOidc/Internal/*.{h,m,swift}','Okta/OktaOidc/Internal/Tasks/*.{h,m,swift}'
27-
classes.exclude_files = 'Okta/OktaOidc/OktaOidc.swift','Okta/OktaOidc/iOS/OktaOidc+Browser.swift','Okta/OktaOidc/macOS/OktaOidc+Browser.swift'
28-
classes.ios.source_files = 'Okta/OktaOidc/iOS/*.{swift}','Okta/OktaOidc/Internal/iOS/*.{swift}','Okta/OktaOidc/Internal/Tasks/iOS/*.{swift}'
26+
classes.source_files = 'Okta/OktaOidc/*.{h,m,swift}',
27+
'Okta/OktaOidc/Internal/*.{h,m,swift}',
28+
'Okta/OktaOidc/Internal/Tasks/*.{h,m,swift}'
29+
classes.exclude_files = 'Okta/OktaOidc/OktaOidc.swift',
30+
'Okta/OktaOidc/iOS/OktaOidc+Browser.swift',
31+
'Okta/OktaOidc/macOS/OktaOidc+Browser.swift'
32+
classes.ios.source_files = 'Okta/OktaOidc/iOS/*.{swift}',
33+
'Okta/OktaOidc/Internal/iOS/*.{swift}',
34+
'Okta/OktaOidc/Internal/Tasks/iOS/*.{swift}'
2935
classes.ios.deployment_target = '9.0'
30-
classes.osx.source_files = 'Okta/OktaOidc/macOS/*.{swift}','Okta/OktaOidc/Internal/macOS/*.{swift}','Okta/OktaOidc/Internal/Tasks/macOS/*.{swift}'
36+
classes.osx.source_files = 'Okta/OktaOidc/macOS/*.{swift}',
37+
'Okta/OktaOidc/Internal/macOS/*.{swift}',
38+
'Okta/OktaOidc/Internal/Tasks/macOS/*.{swift}'
3139
classes.osx.deployment_target = '10.10'
3240
end
3341
okta.source_files = 'Okta/OktaOidc/OktaOidc.swift'
3442
okta.ios.source_files = 'Okta/OktaOidc/iOS/OktaOidc+Browser.swift'
3543
okta.osx.source_files = 'Okta/OktaOidc/macOS/OktaOidc+Browser.swift'
3644
end
45+
46+
s.xcconfig = { 'USER_HEADER_SEARCH_PATHS' => '${SRCROOT}/OktaOidc/**' }
3747
end

Tests/OktaOidcConfigTests.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,4 +165,9 @@ class OktaOidcConfigTests: XCTestCase {
165165

166166
XCTAssertNil(config)
167167
}
168+
169+
func testUserAgent() {
170+
OktaOidcConfig.setUserAgent(value: "some user agent")
171+
XCTAssertEqual(OktaUserAgent.userAgentHeaderValue(), "some user agent")
172+
}
168173
}

0 commit comments

Comments
 (0)