We are no longer offering accounts on this server. Consider https://gitlab.freedesktop.org/ as a place to host projects.

Commit 10cffa8a authored by Evan Prodromou's avatar Evan Prodromou

Move business logic of email registration to plugin

Moved the main business logic of email registration to the
EmailRegistrationPlugin. That lets us register from a script, from the
emailregister account, or (hopefully) from the signup page.
parent 2e93d5e5
......@@ -47,6 +47,8 @@ if (!defined('STATUSNET')) {
*/
class EmailRegistrationPlugin extends Plugin
{
const CONFIRMTYPE = 'register';
function onAutoload($cls)
{
$dir = dirname(__FILE__);
......@@ -98,6 +100,90 @@ class EmailRegistrationPlugin extends Plugin
return true;
}
static function registerEmail($email)
{
$old = User::staticGet('email', $email);
if (!empty($old)) {
// TRANS: Error text when trying to register with an already registered e-mail address.
// TRANS: %s is the URL to recover password at.
throw new ClientException(sprintf(_m('A user with that email address already exists. You can use the '.
'<a href="%s">password recovery</a> tool to recover a missing password.'),
common_local_url('recoverpassword')));
}
$valid = false;
if (Event::handle('StartValidateUserEmail', array(null, $email, &$valid))) {
$valid = Validate::email($email, common_config('email', 'check_domain'));
Event::handle('EndValidateUserEmail', array(null, $email, &$valid));
}
if (!$valid) {
// TRANS: Error text when trying to register with an invalid e-mail address.
throw new ClientException(_m('Not a valid email address.'));
}
$confirm = Confirm_address::getAddress($email, self::CONFIRMTYPE);
if (empty($confirm)) {
$confirm = Confirm_address::saveNew(null, $email, 'register');
}
return $confirm;
}
static function nicknameFromEmail($email)
{
$parts = explode('@', $email);
$nickname = $parts[0];
$nickname = preg_replace('/[^A-Za-z0-9]/', '', $nickname);
$nickname = Nickname::normalize($nickname);
$original = $nickname;
$n = 0;
while (User::staticGet('nickname', $nickname)) {
$n++;
$nickname = $original . $n;
}
return $nickname;
}
static function sendConfirmEmail($confirm)
{
$sitename = common_config('site', 'name');
$recipients = array($confirm->address);
$headers['From'] = mail_notify_from();
$headers['To'] = trim($confirm->address);
// TRANS: Subject for confirmation e-mail.
// TRANS: %s is the StatusNet sitename.
$headers['Subject'] = sprintf(_m('Confirm your registration on %s'), $sitename);
$confirmUrl = common_local_url('register', array('code' => $confirm->code));
// TRANS: Body for confirmation e-mail.
// TRANS: %1$s is the StatusNet sitename, %2$s is the confirmation URL.
$body = sprintf(_m('Someone (probably you) has requested an account on %1$s using this email address.'.
"\n".
'To confirm the address, click the following URL or copy it into the address bar of your browser.'.
"\n".
'%2$s'.
"\n".
'If it was not you, you can safely ignore this message.'),
$sitename,
$confirmUrl);
mail_send($recipients, $headers, $body);
}
function onPluginVersion(&$versions)
{
$versions[] = array('name' => 'EmailRegistration',
......
......@@ -201,53 +201,20 @@ class EmailregisterAction extends Action
function registerUser()
{
$old = User::staticGet('email', $this->email);
if (!empty($old)) {
// TRANS: Error text when trying to register with an already registered e-mail address.
// TRANS: %s is the URL to recover password at.
$this->error = sprintf(_m('A user with that email address already exists. You can use the '.
'<a href="%s">password recovery</a> tool to recover a missing password.'),
common_local_url('recoverpassword'));
$this->showRegistrationForm();
return;
}
$valid = false;
try {
if (Event::handle('StartValidateUserEmail', array(null, $this->email, &$valid))) {
$valid = Validate::email($this->email, common_config('email', 'check_domain'));
Event::handle('EndValidateUserEmail', array(null, $this->email, &$valid));
}
if (!$valid) {
// TRANS: Error text when trying to register with an invalid e-mail address.
$this->error = _m('Not a valid email address.');
$this->showRegistrationForm();
return;
}
} catch (ClientException $e) {
$this->error = $e->getMessage();
$confirm = EmailRegistrationPlugin::registerEmail($this->email);
} catch (ClientException $ce) {
$this->error = $ce->getMessage();
$this->showRegistrationForm();
return;
}
$confirm = Confirm_address::getAddress($this->email, self::CONFIRMTYPE);
if (empty($confirm)) {
$confirm = Confirm_address::saveNew(null, $this->email, 'register');
// TRANS: Confirmation text after initial registration.
// TRANS: %s an e-mail address.
$prompt = sprintf(_m('An email was sent to %s to confirm that address. Check your email inbox for instructions.'),
$this->email);
} else {
// TRANS: Confirmation text after re-requesting an e-mail confirmation code.
// TRANS: %s is an e-mail address.
$prompt = sprintf(_m('The address %s was already registered but not confirmed. The confirmation code was resent.'),
$this->email);
}
EmailRegistrationPlugin::sendConfirmEmail($confirm);
$this->sendConfirmEmail($confirm);
// TRANS: Confirmation text after initial registration.
// TRANS: %s an e-mail address.
$prompt = sprintf(_m('An email was sent to %s to confirm that address. Check your email inbox for instructions.'),
$this->email);
$this->complete = $prompt;
......@@ -411,24 +378,7 @@ class EmailregisterAction extends Action
function nicknameFromEmail($email)
{
$parts = explode('@', $email);
$nickname = $parts[0];
$nickname = preg_replace('/[^A-Za-z0-9]/', '', $nickname);
$nickname = Nickname::normalize($nickname);
$original = $nickname;
$n = 0;
while (User::staticGet('nickname', $nickname)) {
$n++;
$nickname = $original . $n;
}
return $nickname;
return EmailRegistrationPlugin::nicknameFromEmail($email);
}
/**
......
......@@ -21,7 +21,11 @@
define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
$helptext = <<<END_OF_REGISTEREMAILUSER_HELP
registeremailuser.php [options] <email>
registeremailuser.php [options] <email address>
Options:
-e --email Send a confirmation message to the email address
register a new user by email address.
END_OF_REGISTEREMAILUSER_HELP;
......@@ -35,6 +39,11 @@ if (count($args) == 0) {
$email = $args[0];
$confirm = EmailRegistrationPlugin::registerEmail($email);
if (have_option('e', 'email')) {
EmailRegistrationPlugin::sendConfirmEmail($confirm);
}
$confirmUrl = common_local_url('register', array('code' => $confirm->code));
print $confirmUrl."\n";
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment