. */ if (!defined('LACONICA')) { exit(1); } require_once(INSTALLDIR.'/lib/settingsaction.php'); class PasswordAction extends SettingsAction { function get_instructions() { return _('You can change your password here. Choose a good one!'); } function show_form($msg=NULL, $success=false) { $user = common_current_user(); $this->form_header(_('Change password'), $msg, $success); $token = common_session_token(); common_element_start('form', array('method' => 'post', 'id' => 'password', 'action' => common_local_url('password'))); common_hidden('token', $token); # Users who logged in with OpenID won't have a pwd if ($user->password) { common_password('oldpassword', _('Old password')); } common_password('newpassword', _('New password'), _('6 or more characters')); common_password('confirm', _('Confirm'), _('same as password above')); common_submit('submit', _('Change')); common_element_end('form'); common_show_footer(); } function handle_post() { $user = common_current_user(); assert(!is_null($user)); # should already be checked # FIXME: scrub input $newpassword = $this->arg('newpassword'); $confirm = $this->arg('confirm'); $token = $this->arg('token'); if (!$token || $token != common_session_token()) { $this->show_form(_('There was a problem with your session token. Try again, please.')); return; } else if (0 != strcmp($newpassword, $confirm)) { $this->show_form(_('Passwords don\'t match.')); return; } if ($user->password) { $oldpassword = $this->arg('oldpassword'); if (!common_check_user($user->nickname, $oldpassword)) { $this->show_form(_('Incorrect old password')); return; } } $original = clone($user); $user->password = common_munge_password($newpassword, $user->id); $val = $user->validate(); if ($val !== TRUE) { $this->show_form(_('Error saving user; invalid.')); return; } if (!$user->update($original)) { common_server_error(_('Can\'t save new password.')); return; } $this->show_form(_('Password saved.'), true); } }