Skip to content

Commit af9e966

Browse files
KM-13514 Replace all preconditionFailures with better handling
1 parent 2859d2a commit af9e966

3 files changed

Lines changed: 121 additions & 64 deletions

File tree

LocalPackages/PIALibrary/Sources/PIALibrary/Account/DefaultAccountProvider.swift

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,8 @@ open class DefaultAccountProvider: AccountProvider, ConfigurationAccess, Databas
185185
}
186186

187187
guard let username = self?.vpnTokenUsername, let password = self?.vpnTokenPassword else {
188-
preconditionFailure()
188+
callback?(ClientError.unauthorized)
189+
return
189190
}
190191

191192
self?.accessedDatabase.secure.setPassword(password, for: username)
@@ -201,7 +202,8 @@ open class DefaultAccountProvider: AccountProvider, ConfigurationAccess, Databas
201202

202203
public func login(with receiptRequest: LoginReceiptRequest, _ callback: ((UserAccount?, Error?) -> Void)?) {
203204
guard !isLoggedIn else {
204-
preconditionFailure()
205+
callback?(currentUser, nil)
206+
return
205207
}
206208

207209
webServices.token(receipt: receiptRequest.receipt) { (error) in
@@ -212,7 +214,8 @@ open class DefaultAccountProvider: AccountProvider, ConfigurationAccess, Databas
212214

213215
public func login(with linkToken: String, _ callback: ((UserAccount?, Error?) -> Void)?) {
214216
guard !isLoggedIn else {
215-
preconditionFailure()
217+
callback?(currentUser, nil)
218+
return
216219
}
217220

218221
self.webServices.migrateToken(token: linkToken) { (error) in
@@ -223,7 +226,8 @@ open class DefaultAccountProvider: AccountProvider, ConfigurationAccess, Databas
223226

224227
public func login(with request: LoginRequest, _ callback: ((UserAccount?, Error?) -> Void)?) {
225228
guard !isLoggedIn else {
226-
preconditionFailure()
229+
callback?(currentUser, nil)
230+
return
227231
}
228232

229233
webServices.token(credentials: request.credentials) { (error) in
@@ -279,13 +283,10 @@ open class DefaultAccountProvider: AccountProvider, ConfigurationAccess, Databas
279283
}
280284

281285
public func refreshAccountInfo(_ callback: ((AccountInfo?, Error?) -> Void)?) {
282-
guard isLoggedIn,
283-
let _ = self.publicUsername else {
284-
guard let user = currentUser else {
285-
preconditionFailure()
286+
guard isLoggedIn, self.publicUsername != nil else {
287+
if currentUser == nil {
288+
self.logout(nil)
286289
}
287-
288-
self.logout(nil)
289290
return
290291
}
291292
accountInfoWith(callback)
@@ -314,7 +315,8 @@ open class DefaultAccountProvider: AccountProvider, ConfigurationAccess, Databas
314315

315316
public func update(with request: UpdateAccountRequest, resetPassword reset: Bool, andPassword password: String, _ callback: ((AccountInfo?, Error?) -> Void)?) {
316317
guard let user = currentUser else {
317-
preconditionFailure()
318+
callback?(nil, ClientError.unauthorized)
319+
return
318320
}
319321
let credentials = Credentials(username: Client.providers.accountProvider.publicUsername ?? "",
320322
password: password)
@@ -340,7 +342,8 @@ open class DefaultAccountProvider: AccountProvider, ConfigurationAccess, Databas
340342

341343
public func logout(_ callback: SuccessLibraryCallback?) {
342344
guard isLoggedIn else {
343-
preconditionFailure()
345+
callback?(nil)
346+
return
344347
}
345348
webServices.logout { [weak self] (result, error) in
346349
self?.cleanDatabase()
@@ -351,7 +354,8 @@ open class DefaultAccountProvider: AccountProvider, ConfigurationAccess, Databas
351354

352355
public func deleteAccount(_ callback: SuccessLibraryCallback?) {
353356
guard isLoggedIn else {
354-
preconditionFailure()
357+
callback?(ClientError.unauthorized)
358+
return
355359
}
356360
webServices.deleteAccount { (result, error) in
357361
guard let result = result, result != false else {
@@ -443,7 +447,8 @@ open class DefaultAccountProvider: AccountProvider, ConfigurationAccess, Databas
443447

444448
public func signup(with request: SignupRequest, _ callback: ((UserAccount?, Error?) -> Void)?) {
445449
guard !isLoggedIn else {
446-
preconditionFailure()
450+
callback?(nil, ClientError.unauthorized)
451+
return
447452
}
448453
guard let signup = request.signup(withStore: accessedStore) else {
449454
callback?(nil, ClientError.noReceipt)
@@ -504,7 +509,8 @@ open class DefaultAccountProvider: AccountProvider, ConfigurationAccess, Databas
504509

505510
public func listRenewablePlans(_ callback: (([Plan]?, Error?) -> Void)?) {
506511
guard let info = currentUser?.info else {
507-
preconditionFailure()
512+
callback?(nil, ClientError.unauthorized)
513+
return
508514
}
509515

510516
listPlanProducts { (_, error) in
@@ -539,13 +545,16 @@ open class DefaultAccountProvider: AccountProvider, ConfigurationAccess, Databas
539545

540546
public func renew(with request: RenewRequest, _ callback: ((UserAccount?, Error?) -> Void)?) {
541547
guard isLoggedIn else {
542-
preconditionFailure()
548+
callback?(nil, ClientError.unauthorized)
549+
return
543550
}
544551
guard let user = currentUser else {
545-
preconditionFailure()
552+
callback?(nil, ClientError.unauthorized)
553+
return
546554
}
547555
guard let accountInfo = user.info, accountInfo.isRenewable else {
548-
preconditionFailure()
556+
callback?(nil, ClientError.renewingNonRenewable)
557+
return
549558
}
550559
guard let payment = request.payment(withStore: accessedStore) else {
551560
callback?(nil, ClientError.noReceipt)

LocalPackages/PIALibrary/Sources/PIALibrary/Account/NativeAccountProvider.swift

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,8 @@ open class NativeAccountProvider: AccountProvider, ConfigurationAccess, Database
203203
}
204204

205205
guard let username = self?.vpnTokenUsername, let password = self?.vpnTokenPassword else {
206-
preconditionFailure()
206+
callback?(ClientError.unauthorized)
207+
return
207208
}
208209

209210
self?.accessedDatabase.secure.setPassword(password, for: username)
@@ -218,9 +219,9 @@ open class NativeAccountProvider: AccountProvider, ConfigurationAccess, Database
218219
}
219220

220221
public func login(with receiptRequest: LoginReceiptRequest, _ callback: ((UserAccount?, Error?) -> Void)?) {
221-
222222
guard !isLoggedIn else {
223-
preconditionFailure()
223+
callback?(currentUser, nil)
224+
return
224225
}
225226

226227
loginUseCase.login(with: receiptRequest.receipt) { error in
@@ -234,7 +235,8 @@ open class NativeAccountProvider: AccountProvider, ConfigurationAccess, Database
234235

235236
public func login(with linkToken: String, _ callback: ((UserAccount?, Error?) -> Void)?) {
236237
guard !isLoggedIn else {
237-
preconditionFailure()
238+
callback?(currentUser, nil)
239+
return
238240
}
239241

240242
self.webServices.migrateToken(token: linkToken) { (error) in
@@ -245,7 +247,8 @@ open class NativeAccountProvider: AccountProvider, ConfigurationAccess, Database
245247

246248
public func login(with request: LoginRequest, _ callback: ((UserAccount?, Error?) -> Void)?) {
247249
guard !isLoggedIn else {
248-
preconditionFailure()
250+
callback?(currentUser, nil)
251+
return
249252
}
250253

251254
loginWithCredentials(request.credentials, callback: callback)
@@ -290,6 +293,7 @@ open class NativeAccountProvider: AccountProvider, ConfigurationAccess, Database
290293

291294
switch result {
292295
case .failure(let error):
296+
log.error("updateUserAccount failed with error: \(error.localizedDescription)")
293297
self.logout(nil)
294298
self.cleanDatabase()
295299
DispatchQueue.main.async {
@@ -308,12 +312,7 @@ open class NativeAccountProvider: AccountProvider, ConfigurationAccess, Database
308312
}
309313

310314
public func refreshAccountInfo(_ callback: ((AccountInfo?, Error?) -> Void)?) {
311-
guard isLoggedIn,
312-
let _ = self.publicUsername else {
313-
guard let user = currentUser else {
314-
preconditionFailure()
315-
}
316-
315+
guard isLoggedIn, self.publicUsername != nil else {
317316
self.logout(nil)
318317
return
319318
}
@@ -388,9 +387,10 @@ open class NativeAccountProvider: AccountProvider, ConfigurationAccess, Database
388387
}
389388

390389
private func handleUpdateAccountSuccessRequest(_ request: UpdateAccountRequest, callback: ((AccountInfo?, Error?) -> Void)?) {
391-
390+
392391
guard let user = currentUser else {
393-
preconditionFailure()
392+
callback?(nil, ClientError.unauthorized)
393+
return
394394
}
395395

396396
guard let newAccountInfo = user.info?.with(email: request.email) else {
@@ -421,7 +421,8 @@ open class NativeAccountProvider: AccountProvider, ConfigurationAccess, Database
421421

422422
public func deleteAccount(_ callback: SuccessLibraryCallback?) {
423423
guard isLoggedIn else {
424-
preconditionFailure()
424+
callback?(ClientError.unauthorized)
425+
return
425426
}
426427

427428
deleteAccountUseCase() { error in
@@ -530,7 +531,8 @@ open class NativeAccountProvider: AccountProvider, ConfigurationAccess, Database
530531

531532
public func signup(with request: SignupRequest, _ callback: ((UserAccount?, Error?) -> Void)?) {
532533
guard !isLoggedIn else {
533-
preconditionFailure()
534+
callback?(nil, ClientError.unauthorized)
535+
return
534536
}
535537
guard let signup = request.signup(withStore: accessedStore) else {
536538
callback?(nil, ClientError.noReceipt)
@@ -587,7 +589,8 @@ open class NativeAccountProvider: AccountProvider, ConfigurationAccess, Database
587589

588590
public func listRenewablePlans(_ callback: (([Plan]?, Error?) -> Void)?) {
589591
guard let info = currentUser?.info else {
590-
preconditionFailure()
592+
callback?(nil, ClientError.unauthorized)
593+
return
591594
}
592595

593596
listPlanProducts { (_, error) in
@@ -622,13 +625,16 @@ open class NativeAccountProvider: AccountProvider, ConfigurationAccess, Database
622625

623626
public func renew(with request: RenewRequest, _ callback: ((UserAccount?, Error?) -> Void)?) {
624627
guard isLoggedIn else {
625-
preconditionFailure()
628+
callback?(nil, ClientError.unauthorized)
629+
return
626630
}
627631
guard let user = currentUser else {
628-
preconditionFailure()
632+
callback?(nil, ClientError.unauthorized)
633+
return
629634
}
630635
guard let accountInfo = user.info, accountInfo.isRenewable else {
631-
preconditionFailure()
636+
callback?(nil, ClientError.renewingNonRenewable)
637+
return
632638
}
633639
guard let payment = request.payment(withStore: accessedStore) else {
634640
callback?(nil, ClientError.noReceipt)
@@ -637,7 +643,7 @@ open class NativeAccountProvider: AccountProvider, ConfigurationAccess, Database
637643

638644
paymentUseCase(with: user.credentials, request: payment) { (error) in
639645

640-
log.debug("Payment processed with error: \(error)")
646+
log.debug("Payment processed with error: \(error?.localizedDescription ?? "N/A")")
641647

642648
DispatchQueue.main.async {
643649
if let error {

0 commit comments

Comments
 (0)