From 900a9895de12f040743d9316bcfbebc13facb485 Mon Sep 17 00:00:00 2001 From: Yael Rubinstein Date: Thu, 23 May 2019 18:28:30 -0700 Subject: [PATCH 1/3] Allowing to continue login flow for self hosted sites that have Jetpack. Self hosted sites that have jet pack return with a successful response from the fetch site so we don't show the "logout" prompt for those sites. --- .../Signin/LoginSiteAddressViewController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPressAuthenticator/Signin/LoginSiteAddressViewController.swift b/WordPressAuthenticator/Signin/LoginSiteAddressViewController.swift index e43579a17..2a409049d 100644 --- a/WordPressAuthenticator/Signin/LoginSiteAddressViewController.swift +++ b/WordPressAuthenticator/Signin/LoginSiteAddressViewController.swift @@ -194,7 +194,7 @@ class LoginSiteAddressViewController: LoginViewController, NUXKeyboardResponder let baseSiteUrl = WordPressAuthenticator.baseSiteURL(string: loginFields.siteAddress) let successBlock: (WordPressComSiteInfo) -> Void = { [weak self] siteInfo in self?.loginFields.meta.siteInfo = siteInfo - if WordPressAuthenticator.shared.delegate?.allowWPComLogin == false { + if WordPressAuthenticator.shared.delegate?.allowWPComLogin == false && !siteInfo.hasJetpack { // Hey, you have to log out of your existing WP.com account before logging into another one. self?.promptUserToLogoutBeforeConnectingWPComSite() self?.configureViewLoading(false) From 544141e2617bd406c3364a33896ca486a399d638 Mon Sep 17 00:00:00 2001 From: Yael Rubinstein Date: Tue, 28 May 2019 17:11:14 -0700 Subject: [PATCH 2/3] Refactored and cleaned fetchSiteInfo method according to code review. Tested with self hosted, self hosted with JP, WP site and private WP site. --- .../Model/WordPressComSiteInfo.swift | 4 + .../LoginSiteAddressViewController.swift | 75 ++++++------------- 2 files changed, 25 insertions(+), 54 deletions(-) diff --git a/WordPressAuthenticator/Model/WordPressComSiteInfo.swift b/WordPressAuthenticator/Model/WordPressComSiteInfo.swift index e2d3b0380..f56a6f2bd 100644 --- a/WordPressAuthenticator/Model/WordPressComSiteInfo.swift +++ b/WordPressAuthenticator/Model/WordPressComSiteInfo.swift @@ -24,6 +24,8 @@ public class WordPressComSiteInfo { /// URL of the Site's Blavatar. /// public let icon: String + + public let isWPCom: Bool @@ -35,5 +37,7 @@ public class WordPressComSiteInfo { url = remote["URL"] as? String ?? "" hasJetpack = remote["jetpack"] as? Bool ?? false icon = remote["icon.img"] as? String ?? "" + isWPCom = remote["isWordPressDotCom"] as? Bool ?? false + } } diff --git a/WordPressAuthenticator/Signin/LoginSiteAddressViewController.swift b/WordPressAuthenticator/Signin/LoginSiteAddressViewController.swift index 2a409049d..9763a85dd 100644 --- a/WordPressAuthenticator/Signin/LoginSiteAddressViewController.swift +++ b/WordPressAuthenticator/Signin/LoginSiteAddressViewController.swift @@ -188,69 +188,36 @@ class LoginSiteAddressViewController: LoginViewController, NUXKeyboardResponder } }) } - - + @objc func fetchSiteInfo() { let baseSiteUrl = WordPressAuthenticator.baseSiteURL(string: loginFields.siteAddress) + let service = WordPressComBlogService() let successBlock: (WordPressComSiteInfo) -> Void = { [weak self] siteInfo in - self?.loginFields.meta.siteInfo = siteInfo - if WordPressAuthenticator.shared.delegate?.allowWPComLogin == false && !siteInfo.hasJetpack { - // Hey, you have to log out of your existing WP.com account before logging into another one. - self?.promptUserToLogoutBeforeConnectingWPComSite() - self?.configureViewLoading(false) - } else { - self?.configureViewLoading(false) - guard let self = self else { - return - } - self.presentNextControllerIfPossible(siteInfo: siteInfo) + guard let self = self else { + return } - } - - // Is this a WP.com site address? - if let siteAddress = baseSiteUrl.components(separatedBy: "://").last { - let service = WordPressComBlogService() - // Yes. Then let's attempt to grab the site info. - service.fetchSiteInfo(for: siteAddress, success: successBlock, failure: { [weak self] (error) in - // If fetchSiteInfo failed because the site is private (errorCode == .authorizationRequired), - // then we try to fetch the site info with a call to the `connect/site-info` endpoint. - // If this call succeeds, we check if login is allowed. - let originalError = error as NSError - let errorCode = WordPressComRestApiError(rawValue: originalError.code) - if errorCode == .authorizationRequired { - service.fetchUnauthenticatedSiteInfoForAddress(for: baseSiteUrl, success: successBlock, failure: { error in - // The un-authed site info request failed. - self?.configureViewLoading(false) - guard let self = self else { - return - } - - self.presentNextControllerIfPossible(siteInfo: nil) - }) + self.configureViewLoading(false) + if siteInfo.isWPCom { + if WordPressAuthenticator.shared.delegate?.allowWPComLogin == true { + self.presentNextControllerIfPossible(siteInfo: siteInfo) } else { - // Failed to get the site info. - self?.configureViewLoading(false) - guard let self = self else { - return - } - - self.presentNextControllerIfPossible(siteInfo: nil) + // Hey, you have to log out of your existing WP.com account before logging into another one. + self.promptUserToLogoutBeforeConnectingWPComSite() } - }) - } else { - // Not a WP.com site. Let's make an un-authenticated site info request. - let service = WordPressComBlogService() - service.fetchUnauthenticatedSiteInfoForAddress(for: baseSiteUrl, success: successBlock, failure: { [weak self] error in - self?.configureViewLoading(false) - guard let self = self else { - return - } - - self.presentNextControllerIfPossible(siteInfo: nil) - }) + } else { + self.presentNextControllerIfPossible(siteInfo: siteInfo) + } } + service.fetchUnauthenticatedSiteInfoForAddress(for: baseSiteUrl, success: successBlock, failure: { [weak self] error in + self?.configureViewLoading(false) + guard let self = self else { + return + } + self.presentNextControllerIfPossible(siteInfo: nil) + }) } + func presentNextControllerIfPossible(siteInfo: WordPressComSiteInfo?) { WordPressAuthenticator.shared.delegate?.shouldPresentUsernamePasswordController(for: siteInfo, onCompletion: { (error, isSelfHosted) in guard let originalError = error else { From 337a36b072051ee502683033fab620a34d9cc3f8 Mon Sep 17 00:00:00 2001 From: Yael Rubinstein Date: Wed, 29 May 2019 12:47:40 -0700 Subject: [PATCH 3/3] Updated according to code review --- .../Model/WordPressComSiteInfo.swift | 4 +++- .../Signin/LoginSiteAddressViewController.swift | 14 +++++--------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/WordPressAuthenticator/Model/WordPressComSiteInfo.swift b/WordPressAuthenticator/Model/WordPressComSiteInfo.swift index f56a6f2bd..8c569d965 100644 --- a/WordPressAuthenticator/Model/WordPressComSiteInfo.swift +++ b/WordPressAuthenticator/Model/WordPressComSiteInfo.swift @@ -17,7 +17,7 @@ public class WordPressComSiteInfo { /// public let url: String - /// Indicates if Jetpack is available, or not, + /// Indicates if Jetpack is available, or not. /// public let hasJetpack: Bool @@ -25,6 +25,8 @@ public class WordPressComSiteInfo { /// public let icon: String + /// Indicates whether the site is WordPressDotCom, or not. + /// public let isWPCom: Bool diff --git a/WordPressAuthenticator/Signin/LoginSiteAddressViewController.swift b/WordPressAuthenticator/Signin/LoginSiteAddressViewController.swift index 9763a85dd..68690115d 100644 --- a/WordPressAuthenticator/Signin/LoginSiteAddressViewController.swift +++ b/WordPressAuthenticator/Signin/LoginSiteAddressViewController.swift @@ -197,16 +197,12 @@ class LoginSiteAddressViewController: LoginViewController, NUXKeyboardResponder return } self.configureViewLoading(false) - if siteInfo.isWPCom { - if WordPressAuthenticator.shared.delegate?.allowWPComLogin == true { - self.presentNextControllerIfPossible(siteInfo: siteInfo) - } else { - // Hey, you have to log out of your existing WP.com account before logging into another one. - self.promptUserToLogoutBeforeConnectingWPComSite() - } - } else { - self.presentNextControllerIfPossible(siteInfo: siteInfo) + if siteInfo.isWPCom && WordPressAuthenticator.shared.delegate?.allowWPComLogin == false { + // Hey, you have to log out of your existing WP.com account before logging into another one. + self.promptUserToLogoutBeforeConnectingWPComSite() + return } + self.presentNextControllerIfPossible(siteInfo: siteInfo) } service.fetchUnauthenticatedSiteInfoForAddress(for: baseSiteUrl, success: successBlock, failure: { [weak self] error in self?.configureViewLoading(false)