Skip to content
This repository was archived by the owner on Feb 5, 2025. It is now read-only.

Commit 560b2b6

Browse files
authored
Merge pull request #160 from wordpress-mobile/release/1.10.3
Release/1.10.3
2 parents 4e7611c + 0fc9e2d commit 560b2b6

File tree

8 files changed

+298
-228
lines changed

8 files changed

+298
-228
lines changed

WordPressAuthenticator.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = "WordPressAuthenticator"
3-
s.version = "1.10.2"
3+
s.version = "1.10.3"
44
s.summary = "WordPressAuthenticator implements an easy and elegant way to authenticate your WordPress Apps."
55

66
s.description = <<-DESC

WordPressAuthenticator.xcodeproj/project.pbxproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -347,15 +347,16 @@
347347
B5609095208A4EAF00399AE4 /* Signin */ = {
348348
isa = PBXGroup;
349349
children = (
350+
98C9195A2308E3D900A90E12 /* AppleAuthenticator.swift */,
350351
B5609126208A563600399AE4 /* EmailMagicLink.storyboard */,
351352
B560912E208A563700399AE4 /* Login.storyboard */,
352353
B5609125208A563600399AE4 /* Login2FAViewController.swift */,
353354
B5609128208A563600399AE4 /* LoginEmailViewController.swift */,
354355
B5609129208A563600399AE4 /* LoginLinkRequestViewController.swift */,
355356
B5609131208A563700399AE4 /* LoginNavigationController.swift */,
357+
982C8E7823021C20003F1BA0 /* LoginPrologueLoginMethodViewController.swift */,
356358
B560912C208A563700399AE4 /* LoginProloguePageViewController.swift */,
357359
B560912B208A563600399AE4 /* LoginProloguePromoViewController.swift */,
358-
982C8E7823021C20003F1BA0 /* LoginPrologueLoginMethodViewController.swift */,
359360
B5609133208A563700399AE4 /* LoginPrologueSignupMethodViewController.swift */,
360361
B5609130208A563700399AE4 /* LoginPrologueViewController.swift */,
361362
B560912A208A563600399AE4 /* LoginSelfHostedViewController.swift */,
@@ -366,7 +367,6 @@
366367
B5609134208A563700399AE4 /* LoginViewController.swift */,
367368
B5609124208A563600399AE4 /* LoginWPComViewController.swift */,
368369
B560912D208A563700399AE4 /* SigninEditingState.swift */,
369-
98C9195A2308E3D900A90E12 /* AppleAuthenticator.swift */,
370370
);
371371
path = Signin;
372372
sourceTree = "<group>";

WordPressAuthenticator/Signin/Login.storyboard

Lines changed: 65 additions & 67 deletions
Large diffs are not rendered by default.

WordPressAuthenticator/Signin/Login2FAViewController.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,8 @@ class Login2FAViewController: LoginViewController, NUXKeyboardResponder, UITextF
178178

179179
// Disconnect now that we're done with Google.
180180
GIDSignIn.sharedInstance().disconnect()
181+
182+
WordPressAuthenticator.track(.signedIn)
181183
WordPressAuthenticator.track(.loginSocialSuccess)
182184
}
183185

WordPressAuthenticator/Signin/LoginEmailViewController.swift

Lines changed: 26 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ open class LoginEmailViewController: LoginViewController, NUXKeyboardResponder {
2929
var didFindSafariSharedCredentials = false
3030
var didRequestSafariSharedCredentials = false
3131
open var offerSignupOption = false
32-
fileprivate var awaitingGoogle = false
3332
private let showNewLoginFlow = WordPressAuthenticator.shared.configuration.showNewLoginFlow
3433

3534
private struct Constants {
@@ -145,7 +144,7 @@ open class LoginEmailViewController: LoginViewController, NUXKeyboardResponder {
145144

146145
let button = WPStyleGuide.googleLoginButton()
147146
stackView.addArrangedSubview(button)
148-
button.addTarget(self, action: #selector(googleLoginTapped), for: .touchUpInside)
147+
button.addTarget(self, action: #selector(handleGoogleLoginTapped), for: .touchUpInside)
149148

150149
stackView.addConstraints([
151150
button.leadingAnchor.constraint(equalTo: instructionLabel.leadingAnchor),
@@ -155,26 +154,6 @@ open class LoginEmailViewController: LoginViewController, NUXKeyboardResponder {
155154
googleLoginButton = button
156155
}
157156

158-
@objc func googleLoginTapped() {
159-
awaitingGoogle = true
160-
configureViewLoading(true)
161-
162-
GIDSignIn.sharedInstance().disconnect()
163-
164-
// Flag this as a social sign in.
165-
loginFields.meta.socialService = SocialServiceName.google
166-
167-
// Configure all the things and sign in.
168-
GIDSignIn.sharedInstance().delegate = self
169-
GIDSignIn.sharedInstance().uiDelegate = self
170-
GIDSignIn.sharedInstance().clientID = WordPressAuthenticator.shared.configuration.googleLoginClientId
171-
GIDSignIn.sharedInstance().serverClientID = WordPressAuthenticator.shared.configuration.googleLoginServerClientId
172-
173-
GIDSignIn.sharedInstance().signIn()
174-
175-
WordPressAuthenticator.track(.loginSocialButtonClick, properties: ["source": "google"])
176-
}
177-
178157
/// Add the log in with site address button to the view
179158
///
180159
func addSelfHostedLogInButton() {
@@ -321,14 +300,6 @@ open class LoginEmailViewController: LoginViewController, NUXKeyboardResponder {
321300
}
322301
}
323302

324-
325-
/// Displays the self-hosted sign in form.
326-
///
327-
func loginToSelfHostedSite() {
328-
performSegue(withIdentifier: .showSelfHostedLogin, sender: self)
329-
}
330-
331-
332303
/// Proceeds along the "magic link" sign-in flow, showing a form that let's
333304
/// the user request a magic link.
334305
///
@@ -404,32 +375,7 @@ open class LoginEmailViewController: LoginViewController, NUXKeyboardResponder {
404375

405376
override open func displayRemoteError(_ error: Error) {
406377
configureViewLoading(false)
407-
408-
if awaitingGoogle {
409-
awaitingGoogle = false
410-
GIDSignIn.sharedInstance().disconnect()
411-
412-
let errorTitle: String
413-
let errorDescription: String
414-
if (error as NSError).code == WordPressComOAuthError.unknownUser.rawValue {
415-
errorTitle = NSLocalizedString("Connected But…", comment: "Title shown when a user logs in with Google but no matching WordPress.com account is found")
416-
errorDescription = NSLocalizedString("The Google account \"\(loginFields.username)\" doesn't match any account on WordPress.com", comment: "Description shown when a user logs in with Google but no matching WordPress.com account is found")
417-
WordPressAuthenticator.track(.loginSocialErrorUnknownUser)
418-
} else {
419-
errorTitle = NSLocalizedString("Unable To Connect", comment: "Shown when a user logs in with Google but it subsequently fails to work as login to WordPress.com")
420-
errorDescription = error.localizedDescription
421-
}
422-
423-
let socialErrorVC = LoginSocialErrorViewController(title: errorTitle, description: errorDescription)
424-
let socialErrorNav = LoginNavigationController(rootViewController: socialErrorVC)
425-
socialErrorVC.delegate = self
426-
socialErrorVC.loginFields = loginFields
427-
socialErrorVC.modalPresentationStyle = .fullScreen
428-
present(socialErrorNav, animated: true) {}
429-
} else {
430-
errorToPresent = error
431-
performSegue(withIdentifier: .showWPComLogin, sender: self)
432-
}
378+
displayRemoteErrorForGoogle(error)
433379
}
434380

435381

@@ -484,6 +430,9 @@ open class LoginEmailViewController: LoginViewController, NUXKeyboardResponder {
484430
}
485431
}
486432

433+
@objc func handleGoogleLoginTapped() {
434+
googleLoginTapped(withDelegate: self)
435+
}
487436

488437
@IBAction func handleSelfHostedButtonTapped(_ sender: UIButton) {
489438
loginToSelfHostedSite()
@@ -550,100 +499,42 @@ open class LoginEmailViewController: LoginViewController, NUXKeyboardResponder {
550499
}
551500
}
552501

502+
// MARK: - AppleAuthenticatorDelegate
503+
504+
extension LoginEmailViewController: AppleAuthenticatorDelegate {
505+
506+
func showWPComLogin(loginFields: LoginFields) {
507+
self.loginFields = loginFields
508+
performSegue(withIdentifier: .showWPComLogin, sender: self)
509+
}
510+
511+
func authFailedWithError(message: String) {
512+
displayErrorAlert(message, sourceTag: .wpComSignupApple)
513+
}
514+
515+
}
516+
517+
// MARK: - Google Sign In
518+
553519
// LoginFacadeDelegate methods for Google Google Sign In
554520
extension LoginEmailViewController {
555521
func finishedLogin(withGoogleIDToken googleIDToken: String, authToken: String) {
556-
let wpcom = WordPressComCredentials(authToken: authToken, isJetpackLogin: isJetpackLogin, multifactor: false, siteURL: loginFields.siteAddress)
557-
let credentials = AuthenticatorCredentials(wpcom: wpcom)
558-
syncWPComAndPresentEpilogue(credentials: credentials)
559-
560-
// Disconnect now that we're done with Google.
561-
GIDSignIn.sharedInstance().disconnect()
562-
WordPressAuthenticator.track(.loginSocialSuccess, properties: ["source": "google"])
522+
googleFinishedLogin(withGoogleIDToken: googleIDToken, authToken: authToken)
563523
}
564524

565-
566525
func existingUserNeedsConnection(_ email: String) {
567-
// Disconnect now that we're done with Google.
568-
GIDSignIn.sharedInstance().disconnect()
569-
570-
loginFields.username = email
571-
loginFields.emailAddress = email
572-
573-
performSegue(withIdentifier: .showWPComLogin, sender: self)
574-
WordPressAuthenticator.track(.loginSocialAccountsNeedConnecting, properties: ["source": "google"])
575526
configureViewLoading(false)
527+
googleExistingUserNeedsConnection(email)
576528
}
577529

578-
579530
func needsMultifactorCode(forUserID userID: Int, andNonceInfo nonceInfo: SocialLogin2FANonceInfo) {
580-
loginFields.nonceInfo = nonceInfo
581-
loginFields.nonceUserID = userID
582-
583-
performSegue(withIdentifier: .show2FA, sender: self)
584-
WordPressAuthenticator.track(.loginSocial2faNeeded)
585531
configureViewLoading(false)
532+
googleNeedsMultifactorCode(forUserID: userID, andNonceInfo: nonceInfo)
586533
}
587534
}
588535

589536
extension LoginEmailViewController: GIDSignInDelegate {
590537
open func sign(_ signIn: GIDSignIn?, didSignInFor user: GIDGoogleUser?, withError error: Error?) {
591-
guard let user = user,
592-
let token = user.authentication.idToken,
593-
let email = user.profile.email else {
594-
// The Google SignIn for may have been canceled.
595-
WordPressAuthenticator.track(.loginSocialButtonFailure, error: error)
596-
configureViewLoading(false)
597-
return
598-
}
599-
600-
// Store the email address and token.
601-
loginFields.emailAddress = email
602-
loginFields.username = email
603-
loginFields.meta.socialServiceIDToken = token
604-
605-
loginFacade.loginToWordPressDotCom(withGoogleIDToken: token)
538+
signInGoogleAccount(signIn, didSignInFor: user, withError: error)
606539
}
607540
}
608-
609-
extension LoginEmailViewController: LoginSocialErrorViewControllerDelegate {
610-
private func cleanupAfterSocialErrors() {
611-
dismiss(animated: true) {}
612-
}
613-
614-
func retryWithEmail() {
615-
loginFields.username = ""
616-
cleanupAfterSocialErrors()
617-
}
618-
func retryWithAddress() {
619-
cleanupAfterSocialErrors()
620-
loginToSelfHostedSite()
621-
}
622-
func retryAsSignup() {
623-
cleanupAfterSocialErrors()
624-
625-
626-
let storyboard = UIStoryboard(name: "Signup", bundle: WordPressAuthenticator.bundle)
627-
if let controller = storyboard.instantiateViewController(withIdentifier: "emailEntry") as? SignupEmailViewController {
628-
controller.loginFields = loginFields
629-
navigationController?.pushViewController(controller, animated: true)
630-
}
631-
}
632-
}
633-
634-
/// This is needed to set self as uiDelegate, even though none of the methods are called
635-
extension LoginEmailViewController: GIDSignInUIDelegate {
636-
}
637-
638-
extension LoginEmailViewController: AppleAuthenticatorDelegate {
639-
640-
func showWPComLogin(loginFields: LoginFields) {
641-
self.loginFields = loginFields
642-
performSegue(withIdentifier: .showWPComLogin, sender: self)
643-
}
644-
645-
func authFailedWithError(message: String) {
646-
displayErrorAlert(message, sourceTag: .wpComSignupApple)
647-
}
648-
649-
}

WordPressAuthenticator/Signin/LoginPrologueViewController.swift

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import UIKit
22
import Lottie
33
import WordPressShared
44
import WordPressUI
5+
import GoogleSignIn
6+
import WordPressKit
57

68
class LoginPrologueViewController: LoginViewController {
79

@@ -56,18 +58,18 @@ class LoginPrologueViewController: LoginViewController {
5658
}
5759
vc.modalPresentationStyle = .custom
5860
}
59-
61+
6062
else if let vc = segue.destination as? LoginPrologueLoginMethodViewController {
6163
vc.transitioningDelegate = self
6264

6365
vc.emailTapped = { [weak self] in
6466
self?.performSegue(withIdentifier: .showEmailLogin, sender: self)
6567
}
6668
vc.googleTapped = { [weak self] in
67-
self?.performSegue(withIdentifier: .showGoogle, sender: self)
69+
self?.googleLoginTapped(withDelegate: self)
6870
}
6971
vc.selfHostedTapped = { [weak self] in
70-
self?.performSegue(withIdentifier: .showSelfHostedLogin, sender: self)
72+
self?.loginToSelfHostedSite()
7173
}
7274
vc.appleTapped = { [weak self] in
7375
self?.appleTapped()
@@ -124,6 +126,8 @@ class LoginPrologueViewController: LoginViewController {
124126

125127
}
126128

129+
// MARK: - AppleAuthenticatorDelegate
130+
127131
extension LoginPrologueViewController: AppleAuthenticatorDelegate {
128132

129133
func showWPComLogin(loginFields: LoginFields) {
@@ -134,5 +138,37 @@ extension LoginPrologueViewController: AppleAuthenticatorDelegate {
134138
func authFailedWithError(message: String) {
135139
displayErrorAlert(message, sourceTag: .loginApple)
136140
}
141+
142+
}
143+
144+
// MARK: - Google Sign In
145+
146+
// LoginFacadeDelegate methods for Google Google Sign In
147+
extension LoginPrologueViewController {
148+
149+
override open func displayRemoteError(_ error: Error) {
150+
configureViewLoading(false)
151+
displayRemoteErrorForGoogle(error)
152+
}
137153

154+
func finishedLogin(withGoogleIDToken googleIDToken: String, authToken: String) {
155+
googleFinishedLogin(withGoogleIDToken: googleIDToken, authToken: authToken)
156+
}
157+
158+
func existingUserNeedsConnection(_ email: String) {
159+
configureViewLoading(false)
160+
googleExistingUserNeedsConnection(email)
161+
}
162+
163+
func needsMultifactorCode(forUserID userID: Int, andNonceInfo nonceInfo: SocialLogin2FANonceInfo) {
164+
configureViewLoading(false)
165+
googleNeedsMultifactorCode(forUserID: userID, andNonceInfo: nonceInfo)
166+
}
167+
168+
}
169+
170+
extension LoginPrologueViewController: GIDSignInDelegate {
171+
open func sign(_ signIn: GIDSignIn?, didSignInFor user: GIDGoogleUser?, withError error: Error?) {
172+
signInGoogleAccount(signIn, didSignInFor: user, withError: error)
173+
}
138174
}

0 commit comments

Comments
 (0)