mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-20 13:52:40 +01:00
Modernize email verification page
Summary: Fixes T3517. Moves the email verification page out of People and into Auth. Makes it look less awful. Test Plan: {F49636} {F49637} Reviewers: chad, btrahan Reviewed By: btrahan CC: aran Maniphest Tasks: T3517 Differential Revision: https://secure.phabricator.com/D6425
This commit is contained in:
parent
7edc84aa20
commit
cff8c50903
5 changed files with 86 additions and 99 deletions
|
@ -1049,7 +1049,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorEditor' => 'infrastructure/PhabricatorEditor.php',
|
||||
'PhabricatorEmailLoginController' => 'applications/auth/controller/PhabricatorEmailLoginController.php',
|
||||
'PhabricatorEmailTokenController' => 'applications/auth/controller/PhabricatorEmailTokenController.php',
|
||||
'PhabricatorEmailVerificationController' => 'applications/people/controller/PhabricatorEmailVerificationController.php',
|
||||
'PhabricatorEmailVerificationController' => 'applications/auth/controller/PhabricatorEmailVerificationController.php',
|
||||
'PhabricatorEmptyQueryException' => 'infrastructure/query/PhabricatorEmptyQueryException.php',
|
||||
'PhabricatorEnglishTranslation' => 'infrastructure/internationalization/PhabricatorEnglishTranslation.php',
|
||||
'PhabricatorEnv' => 'infrastructure/env/PhabricatorEnv.php',
|
||||
|
@ -3004,7 +3004,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorEditor' => 'Phobject',
|
||||
'PhabricatorEmailLoginController' => 'PhabricatorAuthController',
|
||||
'PhabricatorEmailTokenController' => 'PhabricatorAuthController',
|
||||
'PhabricatorEmailVerificationController' => 'PhabricatorPeopleController',
|
||||
'PhabricatorEmailVerificationController' => 'PhabricatorAuthController',
|
||||
'PhabricatorEmptyQueryException' => 'Exception',
|
||||
'PhabricatorEnglishTranslation' => 'PhabricatorBaseEnglishTranslation',
|
||||
'PhabricatorEnvTestCase' => 'PhabricatorTestCase',
|
||||
|
|
|
@ -83,6 +83,9 @@ final class PhabricatorApplicationAuth extends PhabricatorApplication {
|
|||
'mustverify/' => 'PhabricatorMustVerifyEmailController',
|
||||
),
|
||||
|
||||
'/emailverify/(?P<code>[^/]+)/' =>
|
||||
'PhabricatorEmailVerificationController',
|
||||
|
||||
'/logout/' => 'PhabricatorLogoutController',
|
||||
);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,81 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorEmailVerificationController
|
||||
extends PhabricatorAuthController {
|
||||
|
||||
private $code;
|
||||
|
||||
public function willProcessRequest(array $data) {
|
||||
$this->code = $data['code'];
|
||||
}
|
||||
|
||||
public function shouldRequireEmailVerification() {
|
||||
// Since users need to be able to hit this endpoint in order to verify
|
||||
// email, we can't ever require email verification here.
|
||||
return false;
|
||||
}
|
||||
|
||||
public function processRequest() {
|
||||
$request = $this->getRequest();
|
||||
$user = $request->getUser();
|
||||
|
||||
$email = id(new PhabricatorUserEmail())->loadOneWhere(
|
||||
'userPHID = %s AND verificationCode = %s',
|
||||
$user->getPHID(),
|
||||
$this->code);
|
||||
|
||||
$color = PhabricatorActionHeaderView::HEADER_DARK_GREY;
|
||||
|
||||
if (!$email) {
|
||||
$title = pht('Unable to Verify Email');
|
||||
$content = pht(
|
||||
'The verification code you provided is incorrect, or the email '.
|
||||
'address has been removed, or the email address is owned by another '.
|
||||
'user. Make sure you followed the link in the email correctly and are '.
|
||||
'logged in with the user account associated with the email address.');
|
||||
$color = PhabricatorActionHeaderView::HEADER_RED;
|
||||
$continue = pht('Rats!');
|
||||
} else if ($email->getIsVerified()) {
|
||||
$title = pht('Address Already Verified');
|
||||
$content = pht(
|
||||
'This email address has already been verified.');
|
||||
$continue = pht('Continue to Phabricator');
|
||||
} else {
|
||||
$guard = AphrontWriteGuard::beginScopedUnguardedWrites();
|
||||
$email->setIsVerified(1);
|
||||
$email->save();
|
||||
unset($guard);
|
||||
|
||||
$title = pht('Address Verified');
|
||||
$content = pht(
|
||||
'The email address %s is now verified.',
|
||||
phutil_tag('strong', array(), $email->getAddress()));
|
||||
$continue = pht('Continue to Phabricator');
|
||||
}
|
||||
|
||||
$dialog = id(new AphrontDialogView())
|
||||
->setUser($user)
|
||||
->setTitle($title)
|
||||
->setHeaderColor($color)
|
||||
->setMethod('GET')
|
||||
->addCancelButton('/', $continue)
|
||||
->appendChild($content);
|
||||
|
||||
$crumbs = $this->buildApplicationCrumbs();
|
||||
$crumbs->addCrumb(
|
||||
id(new PhabricatorCrumbView())
|
||||
->setName(pht('Verify Email')));
|
||||
|
||||
return $this->buildApplicationPage(
|
||||
array(
|
||||
$crumbs,
|
||||
$dialog,
|
||||
),
|
||||
array(
|
||||
'title' => pht('Verify Email'),
|
||||
'device' => true,
|
||||
'dust' => true,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
|
@ -51,8 +51,6 @@ final class PhabricatorApplicationPeople extends PhabricatorApplication {
|
|||
),
|
||||
'/p/(?P<username>[\w._-]+)/'
|
||||
=> 'PhabricatorPeopleProfileController',
|
||||
'/emailverify/(?P<code>[^/]+)/' =>
|
||||
'PhabricatorEmailVerificationController',
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,95 +0,0 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorEmailVerificationController
|
||||
extends PhabricatorPeopleController {
|
||||
|
||||
private $code;
|
||||
|
||||
public function willProcessRequest(array $data) {
|
||||
$this->code = $data['code'];
|
||||
}
|
||||
|
||||
public function shouldRequireAdmin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public function shouldRequireEmailVerification() {
|
||||
// Since users need to be able to hit this endpoint in order to verify
|
||||
// email, we can't ever require email verification here.
|
||||
return false;
|
||||
}
|
||||
|
||||
public function processRequest() {
|
||||
$request = $this->getRequest();
|
||||
$user = $request->getUser();
|
||||
|
||||
$email = id(new PhabricatorUserEmail())->loadOneWhere(
|
||||
'userPHID = %s AND verificationCode = %s',
|
||||
$user->getPHID(),
|
||||
$this->code);
|
||||
|
||||
$home_link = phutil_tag(
|
||||
'a',
|
||||
array(
|
||||
'href' => '/',
|
||||
),
|
||||
pht('Continue to Phabricator'));
|
||||
$home_link = hsprintf(
|
||||
'<br /><p><strong>%s</strong></p>',
|
||||
$home_link);
|
||||
|
||||
$settings_link = phutil_tag(
|
||||
'a',
|
||||
array(
|
||||
'href' => '/settings/panel/email/',
|
||||
),
|
||||
pht('Return to Email Settings'));
|
||||
$settings_link = hsprintf(
|
||||
'<br /><p><strong>%s</strong></p>',
|
||||
$settings_link);
|
||||
|
||||
if (!$email) {
|
||||
$content = id(new AphrontErrorView())
|
||||
->setTitle(pht('Unable To Verify'))
|
||||
->appendChild(phutil_tag(
|
||||
'p',
|
||||
array(),
|
||||
pht('The verification code is incorrect, the email address has been '.
|
||||
'removed, or the email address is owned by another user. Make '.
|
||||
'sure you followed the link in the email correctly.')));
|
||||
} else if ($email->getIsVerified()) {
|
||||
$inst = pht('This email address has already been verified.');
|
||||
$content = id(new AphrontErrorView())
|
||||
->setSeverity(AphrontErrorView::SEVERITY_NOTICE)
|
||||
->setTitle(pht('Address Already Verified'))
|
||||
->appendChild(hsprintf(
|
||||
'<p>%s</p>%s',
|
||||
$inst,
|
||||
$settings_link));
|
||||
} else {
|
||||
|
||||
$guard = AphrontWriteGuard::beginScopedUnguardedWrites();
|
||||
$email->setIsVerified(1);
|
||||
$email->save();
|
||||
unset($guard);
|
||||
|
||||
$inst = pht('This email address has now been verified. Thanks!');
|
||||
$content = id(new AphrontErrorView())
|
||||
->setSeverity(AphrontErrorView::SEVERITY_NOTICE)
|
||||
->setTitle(pht('Address Verified'))
|
||||
->appendChild(hsprintf(
|
||||
'<p>%s</p>%s%s',
|
||||
$inst,
|
||||
$home_link,
|
||||
$settings_link));
|
||||
}
|
||||
|
||||
return $this->buildApplicationPage(
|
||||
$content,
|
||||
array(
|
||||
'title' => pht('Verify Email'),
|
||||
'device' => true,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue