@@ -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
554520extension 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
589536extension 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- }
0 commit comments