Support invites in the registration and login flow
Summary:
Ref T7152. This substantially completes the upstream login flow. Basically, we just cookie you and push you through normal registration, with slight changes:
- All providers allow registration if you have an invite.
- Most providers get minor text changes to say "Register" instead of "Login" or "Login or Register".
- The Username/Password provider changes to just a "choose a username" form.
- We show the user that they're accepting an invite, and who invited them.
Then on actual registration:
- Accepting an invite auto-verifies the address.
- Accepting an invite auto-approves the account.
- Your email is set to the invite email and locked.
- Invites get to reassign nonprimary, unverified addresses from other accounts.
But 98% of the code is the same.
Test Plan:
- Accepted an invite.
- Verified a new address on an existing account via invite.
- Followed a bad invite link.
- Tried to accept a verified invite.
- Reassigned an email by accepting an unverified, nonprimary invite on a new account.
- Verified that reassigns appear in the activity log.
{F291493}
{F291494}
{F291495}
{F291496}
{F291497}
{F291498}
{F291499}
Reviewers: btrahan
Reviewed By: btrahan
Subscribers: epriestley
Maniphest Tasks: T7152
Differential Revision: https://secure.phabricator.com/D11737
This commit is contained in:
@@ -109,14 +109,21 @@ final class PhabricatorAuthStartController
|
||||
}
|
||||
}
|
||||
|
||||
$invite = $this->loadInvite();
|
||||
|
||||
$not_buttons = array();
|
||||
$are_buttons = array();
|
||||
$providers = msort($providers, 'getLoginOrder');
|
||||
foreach ($providers as $provider) {
|
||||
if ($provider->isLoginFormAButton()) {
|
||||
$are_buttons[] = $provider->buildLoginForm($this);
|
||||
if ($invite) {
|
||||
$form = $provider->buildInviteForm($this);
|
||||
} else {
|
||||
$not_buttons[] = $provider->buildLoginForm($this);
|
||||
$form = $provider->buildLoginForm($this);
|
||||
}
|
||||
if ($provider->isLoginFormAButton()) {
|
||||
$are_buttons[] = $form;
|
||||
} else {
|
||||
$not_buttons[] = $form;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -159,6 +166,11 @@ final class PhabricatorAuthStartController
|
||||
$login_message = PhabricatorEnv::getEnvConfig('auth.login-message');
|
||||
$login_message = phutil_safe_html($login_message);
|
||||
|
||||
$invite_message = null;
|
||||
if ($invite) {
|
||||
$invite_message = $this->renderInviteHeader($invite);
|
||||
}
|
||||
|
||||
$crumbs = $this->buildApplicationCrumbs();
|
||||
$crumbs->addTextCrumb(pht('Login'));
|
||||
$crumbs->setBorder(true);
|
||||
@@ -167,6 +179,7 @@ final class PhabricatorAuthStartController
|
||||
array(
|
||||
$crumbs,
|
||||
$login_message,
|
||||
$invite_message,
|
||||
$out,
|
||||
),
|
||||
array(
|
||||
|
||||
Reference in New Issue
Block a user