X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=actions%2Fregister.php;h=a22ffca28e8b53b8cecba0419deb3f5722e20a77;hb=2c7518873eddafcd041fe73a509756155f35ac9a;hp=c539108420095f81da74412f26df49c2fccaf628;hpb=4c8dfadf2d11373d9518fea94a05d4a04f74589e;p=quix0rs-gnu-social.git diff --git a/actions/register.php b/actions/register.php index c539108420..a22ffca28e 100644 --- a/actions/register.php +++ b/actions/register.php @@ -36,6 +36,13 @@ class RegisterAction extends Action { } function try_register() { + + $token = $this->trimmed('token'); + if (!$token || $token != common_session_token()) { + $this->show_form(_('There was a problem with your session token. Try again, please.')); + return; + } + $nickname = $this->trimmed('nickname'); $email = $this->trimmed('email'); $fullname = $this->trimmed('fullname'); @@ -48,6 +55,19 @@ class RegisterAction extends Action { $password = $this->arg('password'); $confirm = $this->arg('confirm'); + # invitation code, if any + + $code = $this->trimmed('code'); + + if ($code) { + $invite = Invitation::staticGet($code); + } + + if (common_config('site', 'inviteonly') && !($code && $invite)) { + $this->client_error(_('Sorry, only invited people can register.')); + return; + } + # Input scrubbing $nickname = common_canonical_nickname($nickname); @@ -80,9 +100,14 @@ class RegisterAction extends Action { } else if (!is_null($location) && strlen($location) > 255) { $this->show_form(_('Location is too long (max 255 chars).')); return; + } else if (strlen($password) < 6) { + $this->show_form(_('Password must be 6 or more characters.')); + return; } else if ($password != $confirm) { $this->show_form(_('Passwords don\'t match.')); - } else if ($user = $this->register_user($nickname, $password, $email, $fullname, $homepage, $bio, $location)) { + } else if ($user = User::register(array('nickname' => $nickname, 'password' => $password, 'email' => $email, + 'fullname' => $fullname, 'homepage' => $homepage, 'bio' => $bio, + 'location' => $location, 'code' => $code))) { if (!$user) { $this->show_form(_('Invalid username or password.')); return; @@ -117,116 +142,66 @@ class RegisterAction extends Action { function email_exists($email) { $email = common_canonical_email($email); + if (!$email || strlen($email) == 0) { + return false; + } $user = User::staticGet('email', $email); return ($user !== false); } - function register_user($nickname, $password, $email, $fullname, $homepage, $bio, $location) { - - $profile = new Profile(); - - $profile->query('BEGIN'); - - $profile->nickname = $nickname; - $profile->profileurl = common_profile_url($nickname); - if ($fullname) { - $profile->fullname = $fullname; - } - if ($homepage) { - $profile->homepage = $homepage; - } - if ($bio) { - $profile->bio = $bio; - } - if ($location) { - $profile->location = $location; - } - $profile->created = DB_DataObject_Cast::dateTime(); # current time - - $id = $profile->insert(); - - if (!$id) { - common_log_db_error($profile, 'INSERT', __FILE__); - return FALSE; - } - $user = new User(); - $user->id = $id; - $user->nickname = $nickname; - $user->password = common_munge_password($password, $id); - $user->created = DB_DataObject_Cast::dateTime(); # current time - $user->uri = common_user_uri($user); - - $result = $user->insert(); - - if (!$result) { - common_log_db_error($user, 'INSERT', __FILE__); - return FALSE; - } - - # Everyone is subscribed to themself - - $subscription = new Subscription(); - $subscription->subscriber = $user->id; - $subscription->subscribed = $user->id; - $subscription->created = $user->created; - - $result = $subscription->insert(); - - if (!$result) { - common_log_db_error($subscription, 'INSERT', __FILE__); - return FALSE; - } - - if ($email) { - - $confirm = new Confirm_address(); - $confirm->code = common_confirmation_code(128); - $confirm->user_id = $user->id; - $confirm->address = $email; - $confirm->address_type = 'email'; - - $result = $confirm->insert(); - if (!$result) { - common_log_db_error($confirm, 'INSERT', __FILE__); - return FALSE; - } - } - - $profile->query('COMMIT'); - - if ($email) { - mail_confirm_address($confirm->code, - $profile->nickname, - $email); - } - - return $user; - } - function show_top($error=NULL) { if ($error) { common_element('p', 'error', $error); } else { - common_element('div', 'instructions', - _('You can create a new account to start posting notices.')); + $instr = common_markup_to_html(_('With this form you can create a new account. ' . + 'You can then post notices and link up to friends and colleagues. '. + '(Have an [OpenID](http://openid.net/)? ' . + 'Try our [OpenID registration](%%action.openidlogin%%)!)')); + + common_element_start('div', 'instructions'); + common_raw($instr); + common_element_end('div'); } } function show_form($error=NULL) { global $config; + $code = $this->trimmed('code'); + + if ($code) { + $invite = Invitation::staticGet($code); + } + + if (common_config('site', 'inviteonly') && !($code && $invite)) { + $this->client_error(_('Sorry, only invited people can register.')); + return; + } + common_show_header(_('Register'), NULL, $error, array($this, 'show_top')); common_element_start('form', array('method' => 'post', 'id' => 'login', 'action' => common_local_url('register'))); + + common_hidden('token', common_session_token()); + + if ($code) { + common_hidden('code', $code); + } + common_input('nickname', _('Nickname'), $this->trimmed('nickname'), _('1-64 lowercase letters or numbers, no punctuation or spaces. Required.')); common_password('password', _('Password'), _('6 or more characters. Required.')); common_password('confirm', _('Confirm'), _('Same as password above. Required.')); - common_input('email', _('Email'), $this->trimmed('email'), + if ($invite && $invite->address_type == 'email') { + common_input('email', _('Email'), $invite->address, _('Used only for updates, announcements, and password recovery')); + } else { + common_input('email', _('Email'), $this->trimmed('email'), + _('Used only for updates, announcements, and password recovery')); + } common_input('fullname', _('Full name'), $this->trimmed('fullname'), _('Longer name, preferably your "real" name')); @@ -239,7 +214,7 @@ class RegisterAction extends Action { common_input('location', _('Location'), $this->trimmed('location'), _('Where you are, like "City, State (or Region), Country"')); - common_checkbox('rememberme', _('Remember me'), + common_checkbox('rememberme', _('Remember me'), $this->boolean('rememberme'), _('Automatically login in the future; not for shared computers!')); common_element_start('p'); @@ -252,7 +227,7 @@ class RegisterAction extends Action { } common_element('input', $attrs); common_text(_('My text and files are available under ')); - common_element('a', array(href => $config['license']['url']), + common_element('a', array('href' => $config['license']['url']), $config['license']['title']); common_text(_(' except this private data: password, email address, IM address, phone number.')); common_element_end('p'); @@ -260,7 +235,7 @@ class RegisterAction extends Action { common_element_end('form'); common_show_footer(); } - + function show_success() { $nickname = $this->arg('nickname'); common_show_header(_('Registration successful')); @@ -283,5 +258,5 @@ class RegisterAction extends Action { common_element_end('div'); common_show_footer(); } - + }