mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-26 07:20:57 +01:00
3a035c02e7
Summary: Ref T4140. We could hit a redirect loop for a user with a verified primary email address but no "is verified" flag on their account. This shouldn't be possible since the migration should have set the flag, but we can deal with it more gracefully when it does happen (maybe because users forgot to run `storage/upgrade`, or because of ghosts). In the controller, check the same flag we check before forcing the user to the controller. When verifying, allow the verification if either the email or user flag isn't set. Test Plan: Hit `/login/mustverify/`; verified an address. Reviewers: btrahan Reviewed By: btrahan CC: aran Maniphest Tasks: T4140 Differential Revision: https://secure.phabricator.com/D7621
68 lines
1.9 KiB
PHP
68 lines
1.9 KiB
PHP
<?php
|
|
|
|
final class PhabricatorMustVerifyEmailController
|
|
extends PhabricatorAuthController {
|
|
|
|
public function shouldRequireLogin() {
|
|
return false;
|
|
}
|
|
|
|
public function shouldRequireEmailVerification() {
|
|
// NOTE: We don't technically need this since PhabricatorController forces
|
|
// us here in either case, but it's more consistent with intent.
|
|
return false;
|
|
}
|
|
|
|
public function processRequest() {
|
|
$request = $this->getRequest();
|
|
$user = $request->getUser();
|
|
|
|
$email = $user->loadPrimaryEmail();
|
|
|
|
if ($user->getIsEmailVerified()) {
|
|
return id(new AphrontRedirectResponse())->setURI('/');
|
|
}
|
|
|
|
$email_address = $email->getAddress();
|
|
|
|
$sent = null;
|
|
if ($request->isFormPost()) {
|
|
$email->sendVerificationEmail($user);
|
|
$sent = new AphrontErrorView();
|
|
$sent->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
|
|
$sent->setTitle(pht('Email Sent'));
|
|
$sent->appendChild(
|
|
pht(
|
|
'Another verification email was sent to %s.',
|
|
phutil_tag('strong', array(), $email_address)));
|
|
}
|
|
|
|
$must_verify = pht(
|
|
'You must verify your email address to login. You should have a '.
|
|
'new email message from Phabricator with verification instructions '.
|
|
'in your inbox (%s).',
|
|
phutil_tag('strong', array(), $email_address));
|
|
|
|
$send_again = pht(
|
|
'If you did not receive an email, you can click the button below '.
|
|
'to try sending another one.');
|
|
|
|
$dialog = id(new AphrontDialogView())
|
|
->setUser($user)
|
|
->setTitle(pht('Check Your Email'))
|
|
->appendParagraph($must_verify)
|
|
->appendParagraph($send_again)
|
|
->addSubmitButton(pht('Send Another Email'));
|
|
|
|
return $this->buildApplicationPage(
|
|
array(
|
|
$sent,
|
|
$dialog,
|
|
),
|
|
array(
|
|
'title' => pht('Must Verify Email'),
|
|
'device' => true
|
|
));
|
|
}
|
|
|
|
}
|