Skip to content

Commit

Permalink
fix(auth,splash,tasks): fix auth errors adn expiration 馃悰
Browse files Browse the repository at this point in the history
  • Loading branch information
PierreBrisorgueil committed May 26, 2019
1 parent 03fb651 commit 826fc27
Show file tree
Hide file tree
Showing 14 changed files with 115 additions and 345 deletions.
44 changes: 0 additions & 44 deletions waosSwift.xcodeproj/project.pbxproj
Expand Up @@ -56,9 +56,6 @@
BF78B5FA22942CBB0057157A /* CoreModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF78B5F922942CBB0057157A /* CoreModel.swift */; };
BF78B5FC22942CCD0057157A /* CoreResponses.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF78B5FB22942CCD0057157A /* CoreResponses.swift */; };
BF78B60822954B3F0057157A /* me.json in Resources */ = {isa = PBXBuildFile; fileRef = BF78B60622954B3F0057157A /* me.json */; };
BF78B6142295713B0057157A /* SplashController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF78B6132295713B0057157A /* SplashController.swift */; };
BF78B616229571460057157A /* SplashFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF78B615229571460057157A /* SplashFlow.swift */; };
BF78B618229571550057157A /* SplashReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF78B617229571550057157A /* SplashReactor.swift */; };
BF78B61A2295DBF70057157A /* RxAppState.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF78B6192295DBF70057157A /* RxAppState.framework */; };
BF78B61C229683A90057157A /* token.json in Resources */ = {isa = PBXBuildFile; fileRef = BF78B61B229683A90057157A /* token.json */; };
BF78B61E2296CE7B0057157A /* TokenState.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF78B61D2296CE7B0057157A /* TokenState.swift */; };
Expand Down Expand Up @@ -188,9 +185,6 @@
BF78B5F922942CBB0057157A /* CoreModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreModel.swift; sourceTree = "<group>"; };
BF78B5FB22942CCD0057157A /* CoreResponses.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreResponses.swift; sourceTree = "<group>"; };
BF78B60622954B3F0057157A /* me.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = me.json; sourceTree = "<group>"; };
BF78B6132295713B0057157A /* SplashController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplashController.swift; sourceTree = "<group>"; };
BF78B615229571460057157A /* SplashFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplashFlow.swift; sourceTree = "<group>"; };
BF78B617229571550057157A /* SplashReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplashReactor.swift; sourceTree = "<group>"; };
BF78B6192295DBF70057157A /* RxAppState.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxAppState.framework; path = Carthage/Build/iOS/RxAppState.framework; sourceTree = "<group>"; };
BF78B61B229683A90057157A /* token.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = token.json; sourceTree = "<group>"; };
BF78B61D2296CE7B0057157A /* TokenState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TokenState.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -488,7 +482,6 @@
BF4A2F88225C9AFF0001B4CE /* app */,
BF4A2F4F225B7C200001B4CE /* core */,
BF4A2F5C225B7C200001B4CE /* onBoarding */,
BF78B60E22956D940057157A /* splash */,
BF058D712282BC5300E2A077 /* auth */,
BF4A2F77225BB65E0001B4CE /* tasks */,
BF4A2F78225BB6690001B4CE /* secondController */,
Expand Down Expand Up @@ -611,40 +604,6 @@
path = Libs;
sourceTree = "<group>";
};
BF78B60E22956D940057157A /* splash */ = {
isa = PBXGroup;
children = (
BF78B60F22956EEE0057157A /* controllers */,
BF78B61022956EF30057157A /* flow */,
BF78B612229571100057157A /* reactors */,
);
path = splash;
sourceTree = "<group>";
};
BF78B60F22956EEE0057157A /* controllers */ = {
isa = PBXGroup;
children = (
BF78B6132295713B0057157A /* SplashController.swift */,
);
path = controllers;
sourceTree = "<group>";
};
BF78B61022956EF30057157A /* flow */ = {
isa = PBXGroup;
children = (
BF78B615229571460057157A /* SplashFlow.swift */,
);
path = flow;
sourceTree = "<group>";
};
BF78B612229571100057157A /* reactors */ = {
isa = PBXGroup;
children = (
BF78B617229571550057157A /* SplashReactor.swift */,
);
path = reactors;
sourceTree = "<group>";
};
BF794D432268722B000B19F3 /* controllers */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -1048,7 +1007,6 @@
files = (
BFDE25FE227B052D008CBD30 /* NSViewController+Rx.swift in Sources */,
BF4A2F7E225BB9270001B4CE /* TasksListReactor.swift in Sources */,
BF78B616229571460057157A /* SplashFlow.swift in Sources */,
BF058D7B2282BCC500E2A077 /* AuthSigninReactor.swift in Sources */,
BF9A3679228EB0A900EE2AB8 /* Networking.swift in Sources */,
BF4A2F6B225B7C200001B4CE /* OnBoardingReactor.swift in Sources */,
Expand Down Expand Up @@ -1076,7 +1034,6 @@
BF4A2F80225BB9360001B4CE /* SecondReactor.swift in Sources */,
BFDE2602227B17D4008CBD30 /* AppServicesProvider.swift in Sources */,
BF8C6731228022140012B5A8 /* UICollectionView+RxReusableKit.swift in Sources */,
BF78B6142295713B0057157A /* SplashController.swift in Sources */,
BF0CD6AB22563C9800844F9A /* Strings.swift in Sources */,
BF8C6723227C3E1E0012B5A8 /* TasksCellReactor.swift in Sources */,
BF4A2F87225C8F160001B4CE /* UILocalizations.swift in Sources */,
Expand All @@ -1099,7 +1056,6 @@
BF4A2F45225B751F0001B4CE /* AppFlow.swift in Sources */,
BF4A2FAE2260F0040001B4CE /* Logger.swift in Sources */,
BF78B61E2296CE7B0057157A /* TokenState.swift in Sources */,
BF78B618229571550057157A /* SplashReactor.swift in Sources */,
BF4A2F74225BB4B90001B4CE /* AppSteps.swift in Sources */,
BF9A3670228D5F2700EE2AB8 /* Stubbed.swift in Sources */,
BF9A3663228C3F2500EE2AB8 /* TasksApi.swift in Sources */,
Expand Down
42 changes: 25 additions & 17 deletions waosSwift/lib/helpers/Errors.swift
Expand Up @@ -13,49 +13,55 @@ import Moya
* @param {Error} error
* @return {CustomError}
*/
func getNetworkError(_ error: Error, file: StaticString = #file, function: StaticString = #function, line: UInt = #line) -> CustomError! {
func getNetworkError(_ error: Error, file: StaticString = #file, function: StaticString = #function, line: UInt = #line) -> NetworkError! {
if let response = (error as? MoyaError)?.response {
if let networkError = try? response.map(NetworkError.self) {
return CustomError.networkError(networkError)
return networkError
} else if response.statusCode != 200, let jsonObject = try? response.mapJSON() {
let networkError = NetworkError(type: "MoyaError", message: "\(response.statusCode) : \(jsonObject)", error: "unknow")
return CustomError.networkError(networkError)
let networkError = NetworkError(type: "MoyaError", message: "\(jsonObject)", error: "unknow", code: response.statusCode)
return networkError
} else if response.statusCode != 200, let jsonObject = try? response.mapString() {
let networkError = NetworkError(type: "MoyaError", message: "\(response.statusCode) : \(jsonObject)", error: "unknow")
return CustomError.networkError(networkError)
let networkError = NetworkError(type: "MoyaError", message: "\(jsonObject)", error: "unknow", code: response.statusCode)
return networkError
} else {
let networkError = NetworkError(type: "MoyaError", message: error.localizedDescription, error: "unknow")
let networkError = NetworkError(type: "MoyaError", message: error.localizedDescription, error: "unknow", code: response.statusCode)
log.warning("馃寧 Error -> \(networkError.type) : \(networkError.message)", file: file, function: function, line: line)
return CustomError.networkError(networkError)
return networkError
}
} else {
let networkError = NetworkError(type: "unknow", message: "unknow", error: "unknow")
log.error("馃寧 Error -> \(networkError.type) : \(networkError.message)", file: file, function: function, line: line)
return CustomError.networkError(networkError)
return networkError
}
}

/**
* Custom Errors
*/

enum CustomError: Swift.Error {
case networkError(NetworkError)
}
//enum CustomError: Error {
// case networkError(NetworkError)
//}

/**
* Model Network Errors
*/

struct NetworkError {
var error: String
var message: String
var type: String
struct NetworkError: Error {
let error: String
let message: String
let type: String
let code: Int?

var localizedDescription: String {
return NSLocalizedString(message, comment: "")
}

init(type: String, message: String, error: String) {
init(type: String, message: String, error: String, code: Int? = 0) {
self.type = type
self.message = message
self.error = error
self.code = code
}
}

Expand All @@ -64,6 +70,7 @@ extension NetworkError: Decodable {
case type
case message
case error
case code
}

init(from decoder: Decoder) throws {
Expand All @@ -72,5 +79,6 @@ extension NetworkError: Decodable {
type = try container.decode(String.self, forKey: .type)
message = try container.decode(String.self, forKey: .message)
error = try container.decode(String.self, forKey: .error)
code = try container.decode(Int.self, forKey: .code)
}
}
30 changes: 30 additions & 0 deletions waosSwift/lib/services/Preferences.swift
@@ -1,10 +1,26 @@
/**
* Struct
*/

struct Status {
var onBoarded: Bool
var isLogged: Bool

init(onBoarded: Bool, isLogged: Bool) {
self.onBoarded = onBoarded
self.isLogged = isLogged
}
}

/**
* protocol
*/

protocol PreferencesServiceType {
var onBoarded: Bool { get set }
var isLogged: Bool { get set }
// global
var status: Status { get }
}

/**
Expand All @@ -28,6 +44,12 @@ class PreferencesService: PreferencesServiceType {
UserDefaults.standard[#function] = newValue
}
}
// global
var status: Status {
get {
return Status(onBoarded: onBoarded, isLogged: isLogged)
}
}
}

/**
Expand All @@ -48,4 +70,12 @@ extension Reactive where Base: PreferencesService {
.observe(Bool.self, #function)
.map { $0 ?? false }
}
var status: Observable<Status> {
return Observable.combineLatest(
onBoarded, isLogged,
resultSelector: { onBoarded, isLogged in
return Status(onBoarded: onBoarded, isLogged: isLogged)
}
)
}
}
44 changes: 21 additions & 23 deletions waosSwift/modules/app/AppFlow.swift
Expand Up @@ -24,9 +24,7 @@ final class AppFlow: Flow {
switch step {
case .onboardingIsRequired:
return navigationToOnboardingScreen()
case .onboardingIsComplete, .splashIsRequired:
return navigationToSplashScreen()
case .splashIsComplete, .authIsRequired:
case .onboardingIsComplete, .authIsRequired:
return navigationToAuthScreen()
case .authIsComplete, .dashboardIsRequired:
return navigationToDashboardScreen()
Expand All @@ -46,16 +44,16 @@ final class AppFlow: Flow {
return .one(flowContributor: .contribute(withNextPresentable: onboardingFlow, withNextStepper: OneStepper(withSingleStep: Steps.onboardingIsRequired)))
}

private func navigationToSplashScreen() -> FlowContributors {
if let rootViewController = self.rootWindow.rootViewController {
rootViewController.dismiss(animated: false)
}
let splashFlow = SplashFlow(withServices: self.services)
Flows.whenReady(flow1: splashFlow) { [unowned self] (root) in
self.rootWindow.rootViewController = root
}
return .one(flowContributor: .contribute(withNextPresentable: splashFlow, withNextStepper: OneStepper(withSingleStep: Steps.splashIsRequired)))
}
// private func navigationToSplashScreen() -> FlowContributors {
// if let rootViewController = self.rootWindow.rootViewController {
// rootViewController.dismiss(animated: false)
// }
// let splashFlow = SplashFlow(withServices: self.services)
// Flows.whenReady(flow1: splashFlow) { [unowned self] (root) in
// self.rootWindow.rootViewController = root
// }
// return .one(flowContributor: .contribute(withNextPresentable: splashFlow, withNextStepper: OneStepper(withSingleStep: Steps.splashIsRequired)))
// }

private func navigationToAuthScreen() -> FlowContributors {
if let rootViewController = self.rootWindow.rootViewController {
Expand Down Expand Up @@ -95,18 +93,18 @@ class AppStepper: Stepper {
func readyToEmitSteps() {
self.servicesProvider
.preferencesService.rx
.onBoarded
.map { $0 ? Steps.onboardingIsComplete : Steps.onboardingIsRequired }
.status
.map { result in
if(result.onBoarded && result.isLogged) {
return Steps.authIsComplete
} else if ( result.onBoarded && !result.isLogged) {
return Steps.onboardingIsComplete
} else {
return Steps.onboardingIsRequired
}
}
.bind(to: self.steps)
.disposed(by: self.disposeBag)
// .debug()

self.servicesProvider
.preferencesService.rx
.isLogged
.map { $0 ? Steps.authIsComplete : Steps.authIsRequired }
.bind(to: self.steps)
.disposed(by: self.disposeBag)
// .debug()
}
}
3 changes: 0 additions & 3 deletions waosSwift/modules/app/AppSteps.swift
Expand Up @@ -2,9 +2,6 @@ enum Steps: Step {
case onboardingIsRequired
case onboardingIsComplete

case splashIsRequired
case splashIsComplete(_ result: Bool)

case authIsRequired
case authIsComplete

Expand Down
8 changes: 5 additions & 3 deletions waosSwift/modules/auth/reactors/AuthSigninReactor.swift
Expand Up @@ -26,7 +26,7 @@ final class AuthSigninReactor: Reactor {
case updatePassword(String)
case goSignUp
case success(String)
case error(CustomError)
case error(NetworkError)
}

// the current view state
Expand Down Expand Up @@ -102,8 +102,10 @@ final class AuthSigninReactor: Reactor {
log.verbose("鈾伙笍 Mutation -> State : succes \(success)")
// error
case let .error(error):
log.verbose("鈾伙笍 Mutation -> State : error")
print("YESSSS \(error)")
log.verbose("鈾伙笍 Mutation -> State : error \(error)")
if let code = error.code, code == 401 {
self.provider.preferencesService.isLogged = false
}
}
return state
}
Expand Down
8 changes: 5 additions & 3 deletions waosSwift/modules/auth/reactors/AuthSignupReactor.swift
Expand Up @@ -30,7 +30,7 @@ final class AuthSignUpReactor: Reactor {
case updatePassword(String)
case goSignIn
case dismiss
case error(CustomError)
case error(NetworkError)
}

// the current view state
Expand Down Expand Up @@ -126,8 +126,10 @@ final class AuthSignUpReactor: Reactor {
state.isDismissed = true
// error
case let .error(error):
log.verbose("鈾伙笍 Mutation -> State : error")
print("YESSSS \(error)")
log.verbose("鈾伙笍 Mutation -> State : error \(error)")
if let code = error.code, code == 401 {
self.provider.preferencesService.isLogged = false
}
}
return state
}
Expand Down

0 comments on commit 826fc27

Please sign in to comment.