Skip to content

Commit dfd4bb7

Browse files
Merge pull request #44 from Cidaas/staging
Staging
2 parents 092d6e1 + 3007176 commit dfd4bb7

File tree

185 files changed

+5012
-15219
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

185 files changed

+5012
-15219
lines changed

.travis.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# * https://www.objc.io/issues/6-build-tools/travis-ci/
33
# * https://github.com/supermarin/xcpretty#usage
44

5-
osx_image: xcode9.4.1
5+
osx_image: xcode10.1
66
language: swift
77
# cache: cocoapods
88
podfile: Example/Podfile
@@ -11,7 +11,7 @@ before_install:
1111
- sudo gem install cocoapods
1212
- pod update
1313
script:
14-
- xcodebuild test -workspace Cidaas.xcworkspace -scheme Cidaas-Example -destination 'platform=iOS Simulator,name=iPhone 7,OS=11.4' -enableCodeCoverage YES | xcpretty -s
14+
- xcodebuild test -workspace Cidaas.xcworkspace -scheme Cidaas-Example -destination 'platform=iOS Simulator,name=iPhone 7,OS=12.1' -enableCodeCoverage YES | xcpretty -s
1515
- cd ..
1616
after_success:
1717
- bash <(curl -s https://codecov.io/bash) -t $CODECOV_TOKEN

Cidaas.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
Pod::Spec.new do |s|
1010
s.name = 'Cidaas'
11-
s.version = '0.0.1.14'
11+
s.version = '1.1.0'
1212
s.summary = 'Native SDK for iOS providing login, registration and verification functionalities'
1313
s.homepage = 'https://github.com/Cidaas/cidaas-sdk-ios-v2'
1414
s.license = { :type => 'MIT', :file => 'LICENSE' }

Cidaas/Classes/Core/Controllers/Repository/AccessToken/AccessTokenController.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public class AccessTokenController {
7373
let seconds = Int64(milliseconds / 1000)
7474

7575
let accessTokenModel = DBHelper.shared.getAccessToken(key: sub)
76-
let expires = accessTokenModel.expiresIn
76+
let expires = accessTokenModel.expires_in
7777
let secs: Int64 = Int64(accessTokenModel.seconds)
7878
let expires_in = expires + secs - 10
7979

@@ -103,7 +103,7 @@ public class AccessTokenController {
103103
}
104104

105105
// call access token from refresh token service
106-
AccessTokenService.shared.getAccessToken(refreshToken: accessTokenModel.refreshToken, properties: properties!) {
106+
AccessTokenService.shared.getAccessToken(refreshToken: accessTokenModel.refresh_token, properties: properties!) {
107107
switch $0 {
108108
case .failure(let error):
109109

Cidaas/Classes/Core/Controllers/Repository/Login/LoginController.swift

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,87 @@
77
//
88

99
import Foundation
10+
import SafariServices
1011

1112
public class LoginController {
1213

1314
// shared instance
1415
public static var shared : LoginController = LoginController()
16+
public var delegate: UIViewController = UIViewController()
17+
public var storage: TransactionStore = TransactionStore.shared
1518

1619
// constructor
1720
public init() {
1821

1922
}
2023

24+
// login With browser
25+
public func loginWithBrowser(delegate: UIViewController, properties: Dictionary<String, String>, callback: @escaping(Result<LoginResponseEntity>) -> Void) {
26+
// null check
27+
if properties["DomainURL"] == "" || properties["DomainURL"] == nil || properties["ClientId"] == "" || properties["ClientId"] == nil || properties["RedirectURL"] == "" || properties["RedirectURL"] == nil {
28+
let error = WebAuthError.shared.propertyMissingException()
29+
// log error
30+
let loggerMessage = "Read properties failure : " + "Error Code - " + String(describing: error.errorCode) + ", Error Message - " + error.errorMessage + ", Status Code - " + String(describing: error.statusCode)
31+
logw(loggerMessage, cname: "cidaas-sdk-error-log")
32+
33+
DispatchQueue.main.async {
34+
callback(Result.failure(error: error))
35+
}
36+
return
37+
}
38+
39+
self.delegate = delegate
40+
41+
// construct url
42+
let loginURL = constructURL(properties: properties)
43+
let redirectURL = URL(string: properties["RedirectURL"] ?? "")!
44+
45+
if #available(iOS 11.0, *) {
46+
47+
// initiate safari session with the constructed url performing single sign on
48+
let session = SafariAuthenticationSession(loginURL: loginURL, redirectURL: redirectURL, callback: callback)
49+
50+
// save the session
51+
self.storage.store(session)
52+
}
53+
else {
54+
55+
// call open safari method
56+
openSafari(loginURL : loginURL)
57+
}
58+
59+
60+
}
61+
62+
// open safari browser. This method opens the Safari browser to display the login page. This method should be called internally and only for lower versions of ios (below 11.0)
63+
private func openSafari(loginURL : URL) {
64+
65+
// assign url to safari controller
66+
let vc = SFSafariViewController(url: loginURL)
67+
68+
// present the safari controller
69+
self.delegate.present(vc, animated: true, completion: nil)
70+
}
71+
72+
private func constructURL(properties: Dictionary<String, String>) -> URL {
73+
74+
var urlParams = Dictionary<String, String>()
75+
urlParams["redirect_uri"] = properties["RedirectURL"] ?? ""
76+
urlParams["response_type"] = "code"
77+
urlParams["client_id"] = properties["ClientId"] ?? ""
78+
urlParams["view_type"] = properties["ViewType"] ?? "login"
79+
urlParams["code_challenge"] = properties["Challenge"]
80+
urlParams["code_challenge_method"] = properties["Method"]
81+
82+
var urlComponents = URLComponents(string : properties["AuthorizationURL"] ?? "")
83+
urlComponents?.queryItems = []
84+
for (key, value) in urlParams {
85+
urlComponents?.queryItems?.append(URLQueryItem(name: key, value: value))
86+
}
87+
88+
return (urlComponents?.url)!
89+
}
90+
2191
// login With Credentials
2292
public func loginWithCredentials(requestId: String, loginEntity: LoginEntity, properties: Dictionary<String, String>, callback: @escaping(Result<LoginResponseEntity>) -> Void) {
2393
// null check
Lines changed: 251 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,251 @@
1+
//
2+
// SettingsController.swift
3+
// Cidaas
4+
//
5+
// Created by ganesh on 27/11/18.
6+
//
7+
8+
import Foundation
9+
10+
public class SettingsController {
11+
12+
// shared instance
13+
public static var shared : SettingsController = SettingsController()
14+
15+
// constructor
16+
public init() {
17+
18+
}
19+
20+
// get end points
21+
public func getEndpoints(properties: Dictionary<String, String>, callback: @escaping (Result<EndpointsResponseEntity>) -> Void) {
22+
23+
// null check
24+
if properties["DomainURL"] == "" || properties["DomainURL"] == nil {
25+
let error = WebAuthError.shared.propertyMissingException()
26+
// log error
27+
let loggerMessage = "Read properties failure : " + "Error Code - " + String(describing: error.errorCode) + ", Error Message - " + error.errorMessage + ", Status Code - " + String(describing: error.statusCode)
28+
logw(loggerMessage, cname: "cidaas-sdk-error-log")
29+
30+
DispatchQueue.main.async {
31+
callback(Result.failure(error: error))
32+
}
33+
return
34+
}
35+
36+
// call getEndpoints service
37+
SettingsService.shared.getEndpoints(properties: properties) {
38+
switch $0 {
39+
case .failure(let error):
40+
// log error
41+
let loggerMessage = "Get endpoints service failure : " + "Error Code - " + String(describing: error.errorCode) + ", Error Message - " + error.errorMessage + ", Status Code - " + String(describing: error.statusCode)
42+
logw(loggerMessage, cname: "cidaas-sdk-error-log")
43+
44+
// return failure callback
45+
DispatchQueue.main.async {
46+
callback(Result.failure(error: error))
47+
}
48+
return
49+
case .success(let serviceResponse):
50+
// log success
51+
let loggerMessage = "Get endpoints service success : " + "Authz URL - " + serviceResponse.authorization_endpoint
52+
logw(loggerMessage, cname: "cidaas-sdk-success-log")
53+
54+
// return callback
55+
DispatchQueue.main.async {
56+
callback(Result.success(result: serviceResponse))
57+
}
58+
}
59+
}
60+
}
61+
62+
// update fcm
63+
public func updateFCMToken(sub: String, fcmId: String, properties: Dictionary<String, String>, callback: @escaping(Result<UpdateFCMTokenResponseEntity>) -> Void) {
64+
// null check
65+
if properties["DomainURL"] == "" || properties["DomainURL"] == nil {
66+
let error = WebAuthError.shared.propertyMissingException()
67+
// log error
68+
let loggerMessage = "Read properties failure : " + "Error Code - " + String(describing: error.errorCode) + ", Error Message - " + error.errorMessage + ", Status Code - " + String(describing: error.statusCode)
69+
logw(loggerMessage, cname: "cidaas-sdk-error-log")
70+
71+
DispatchQueue.main.async {
72+
callback(Result.failure(error: error))
73+
}
74+
return
75+
}
76+
77+
// validating fields
78+
if (sub == "" || fcmId == "") {
79+
let error = WebAuthError.shared.propertyMissingException()
80+
error.errorMessage = "sub or fcmId must not be empty"
81+
DispatchQueue.main.async {
82+
callback(Result.failure(error: error))
83+
}
84+
return
85+
}
86+
87+
AccessTokenController.shared.getAccessToken(sub: sub) {
88+
switch $0 {
89+
case .failure(let error):
90+
DispatchQueue.main.async {
91+
callback(Result.failure(error: error))
92+
}
93+
break
94+
case .success(let tokenResponse):
95+
// call updateFCMToken
96+
SettingsService.shared.updateFCMToken(accessToken: tokenResponse.data.access_token, fcmId: fcmId, properties: properties) {
97+
switch $0 {
98+
case .failure(let error):
99+
// log error
100+
let loggerMessage = "Update FCM service failure : " + "Error Code - " + String(describing: error.errorCode) + ", Error Message - " + error.errorMessage + ", Status Code - " + String(describing: error.statusCode)
101+
logw(loggerMessage, cname: "cidaas-sdk-error-log")
102+
103+
// return failure callback
104+
DispatchQueue.main.async {
105+
callback(Result.failure(error: error))
106+
}
107+
return
108+
case .success(let serviceResponse):
109+
// log success
110+
let loggerMessage = "Update FCM service success : " + "Status code - " + String(describing: serviceResponse.status)
111+
logw(loggerMessage, cname: "cidaas-sdk-success-log")
112+
113+
// return callback
114+
DispatchQueue.main.async {
115+
callback(Result.success(result: serviceResponse))
116+
}
117+
}
118+
}
119+
break
120+
}
121+
}
122+
}
123+
124+
// get pending notification list
125+
public func getPendingNotification(sub: String, properties: Dictionary<String, String>, callback: @escaping(Result<PendingNotificationListResponseEntity>) -> Void) {
126+
// null check
127+
if properties["DomainURL"] == "" || properties["DomainURL"] == nil {
128+
let error = WebAuthError.shared.propertyMissingException()
129+
// log error
130+
let loggerMessage = "Read properties failure : " + "Error Code - " + String(describing: error.errorCode) + ", Error Message - " + error.errorMessage + ", Status Code - " + String(describing: error.statusCode)
131+
logw(loggerMessage, cname: "cidaas-sdk-error-log")
132+
133+
DispatchQueue.main.async {
134+
callback(Result.failure(error: error))
135+
}
136+
return
137+
}
138+
139+
// validating fields
140+
if (sub == "") {
141+
let error = WebAuthError.shared.propertyMissingException()
142+
error.errorMessage = "sub must not be empty"
143+
DispatchQueue.main.async {
144+
callback(Result.failure(error: error))
145+
}
146+
return
147+
}
148+
149+
AccessTokenController.shared.getAccessToken(sub: sub) {
150+
switch $0 {
151+
case .failure(let error):
152+
DispatchQueue.main.async {
153+
callback(Result.failure(error: error))
154+
}
155+
break
156+
case .success(let tokenResponse):
157+
// getting userDeviceId
158+
let userDeviceId = DBHelper.shared.getUserDeviceId(key: properties["DomainURL"] ?? "OAuthUserDeviceId")
159+
160+
// call getPendingNotificationList
161+
SettingsService.shared.getPendingNotificationList(accessToken: tokenResponse.data.access_token, userDeviceId: userDeviceId, properties: properties) {
162+
switch $0 {
163+
case .failure(let error):
164+
// log error
165+
let loggerMessage = "Get pending notification service failure : " + "Error Code - " + String(describing: error.errorCode) + ", Error Message - " + error.errorMessage + ", Status Code - " + String(describing: error.statusCode)
166+
logw(loggerMessage, cname: "cidaas-sdk-error-log")
167+
168+
// return failure callback
169+
DispatchQueue.main.async {
170+
callback(Result.failure(error: error))
171+
}
172+
return
173+
case .success(let serviceResponse):
174+
// log success
175+
let loggerMessage = "Get pending notification service success : " + "Status code - " + String(describing: serviceResponse.status)
176+
logw(loggerMessage, cname: "cidaas-sdk-success-log")
177+
178+
// return callback
179+
DispatchQueue.main.async {
180+
callback(Result.success(result: serviceResponse))
181+
}
182+
}
183+
}
184+
break
185+
}
186+
}
187+
}
188+
189+
// deny notification request
190+
public func denyNotificationRequest(sub: String, statusId: String, rejectReason: String, properties: Dictionary<String, String>, callback: @escaping(Result<DenyNotificationResponseEntity>) -> Void) {
191+
// null check
192+
if properties["DomainURL"] == "" || properties["DomainURL"] == nil {
193+
let error = WebAuthError.shared.propertyMissingException()
194+
// log error
195+
let loggerMessage = "Read properties failure : " + "Error Code - " + String(describing: error.errorCode) + ", Error Message - " + error.errorMessage + ", Status Code - " + String(describing: error.statusCode)
196+
logw(loggerMessage, cname: "cidaas-sdk-error-log")
197+
198+
DispatchQueue.main.async {
199+
callback(Result.failure(error: error))
200+
}
201+
return
202+
}
203+
204+
// validating fields
205+
if (sub == "") {
206+
let error = WebAuthError.shared.propertyMissingException()
207+
error.errorMessage = "sub must not be empty"
208+
DispatchQueue.main.async {
209+
callback(Result.failure(error: error))
210+
}
211+
return
212+
}
213+
214+
AccessTokenController.shared.getAccessToken(sub: sub) {
215+
switch $0 {
216+
case .failure(let error):
217+
DispatchQueue.main.async {
218+
callback(Result.failure(error: error))
219+
}
220+
break
221+
case .success(let tokenResponse):
222+
223+
// call denyNotificationRequest
224+
SettingsService.shared.denyNotificationRequest(accessToken: tokenResponse.data.access_token, statusId: statusId, rejectReason: rejectReason, properties: properties) {
225+
switch $0 {
226+
case .failure(let error):
227+
// log error
228+
let loggerMessage = "Deny notification service failure : " + "Error Code - " + String(describing: error.errorCode) + ", Error Message - " + error.errorMessage + ", Status Code - " + String(describing: error.statusCode)
229+
logw(loggerMessage, cname: "cidaas-sdk-error-log")
230+
231+
// return failure callback
232+
DispatchQueue.main.async {
233+
callback(Result.failure(error: error))
234+
}
235+
return
236+
case .success(let serviceResponse):
237+
// log success
238+
let loggerMessage = "Deny notification service success : " + "Status code - " + String(describing: serviceResponse.status)
239+
logw(loggerMessage, cname: "cidaas-sdk-success-log")
240+
241+
// return callback
242+
DispatchQueue.main.async {
243+
callback(Result.success(result: serviceResponse))
244+
}
245+
}
246+
}
247+
break
248+
}
249+
}
250+
}
251+
}

0 commit comments

Comments
 (0)