diff --git a/WordPressAuthenticator/Model/WordPressComSiteInfo.swift b/WordPressAuthenticator/Model/WordPressComSiteInfo.swift index e2d3b0380..8c569d965 100644 --- a/WordPressAuthenticator/Model/WordPressComSiteInfo.swift +++ b/WordPressAuthenticator/Model/WordPressComSiteInfo.swift @@ -17,13 +17,17 @@ 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 /// URL of the Site's Blavatar. /// public let icon: String + + /// Indicates whether the site is WordPressDotCom, or not. + /// + public let isWPCom: Bool @@ -35,5 +39,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 e43579a17..68690115d 100644 --- a/WordPressAuthenticator/Signin/LoginSiteAddressViewController.swift +++ b/WordPressAuthenticator/Signin/LoginSiteAddressViewController.swift @@ -188,69 +188,32 @@ 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 { + guard let self = self else { + return + } + self.configureViewLoading(false) + 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() - self?.configureViewLoading(false) - } else { - self?.configureViewLoading(false) - guard let self = self else { - return - } - self.presentNextControllerIfPossible(siteInfo: siteInfo) + self.promptUserToLogoutBeforeConnectingWPComSite() + return } + self.presentNextControllerIfPossible(siteInfo: siteInfo) } - - // 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) - }) - } else { - // Failed to get the site info. - self?.configureViewLoading(false) - guard let self = self else { - return - } - - self.presentNextControllerIfPossible(siteInfo: nil) - } - }) - } 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) - }) - } + 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 {