getRequest(); $e_email = true; $e_captcha = true; $errors = array(); if ($request->isFormPost()) { $e_email = null; $e_captcha = 'Again'; $captcha_ok = AphrontFormRecaptchaControl::processCaptcha($request); if (!$captcha_ok) { $errors[] = "Captcha response is incorrect, try again."; $e_captcha = 'Invalid'; } $email = $request->getStr('email'); if (!strlen($email)) { $errors[] = "You must provide an email address."; $e_email = 'Required'; } if (!$errors) { // NOTE: Don't validate the email unless the captcha is good; this makes // it expensive to fish for valid email addresses while giving the user // a better error if they goof their email. $target_user = id(new PhabricatorUser())->loadOneWhere( 'email = %s', $email); if (!$target_user) { $errors[] = "There is no account associated with that email address."; $e_email = "Invalid"; } if (!$errors) { $etoken = $target_user->generateEmailToken(); $mail = new PhabricatorMetaMTAMail(); $mail->setSubject('Phabricator Email Authentication'); $mail->addTos( array( $target_user->getEmail(), )); $mail->setBody( "blah blah blah ". PhabricatorEnv::getURI('/login/etoken/'.$etoken.'/').'?email='.phutil_escape_uri($target_user->getEmail())); $mail->save(); $view = new AphrontRequestFailureView(); $view->setHeader('Check Your Email'); $view->appendChild( '
An email has been sent with a link you can use to login.
'); return $this->buildStandardPageResponse( $view, array( 'title' => 'Email Sent', )); } } } $email_auth = new AphrontFormView(); $email_auth ->setAction('/login/email/') ->setUser($request->getUser()) ->appendChild( id(new AphrontFormTextControl()) ->setLabel('Email') ->setName('email') ->setValue($request->getStr('email')) ->setError($e_email)) ->appendChild( id(new AphrontFormRecaptchaControl()) ->setLabel('Captcha') ->setError($e_captcha)) ->appendChild( id(new AphrontFormSubmitControl()) ->setValue('Send Email')); $error_view = null; if ($errors) { $error_view = new AphrontErrorView(); $error_view->setTitle('Login Error'); $error_view->setErrors($errors); } $panel = new AphrontPanelView(); $panel->setWidth(AphrontPanelView::WIDTH_FORM); $panel->appendChild('