diff -r a044870a9d3d -r 2212b2ded8bf packages/ssoinabox-webui/root/usr/local/share/ssoinabox/htdocs/index.php --- a/packages/ssoinabox-webui/root/usr/local/share/ssoinabox/htdocs/index.php Fri Jan 11 00:32:54 2013 -0500 +++ b/packages/ssoinabox-webui/root/usr/local/share/ssoinabox/htdocs/index.php Fri Jan 11 05:41:41 2013 -0500 @@ -2,4 +2,62 @@ require('includes/starthere.php'); +if ( isset($_POST['action']) ) +{ + switch($_POST['action']) + { + case 'change-password': + try + { + // verify old password + $result = @ldap_bind($_ldapconn, ldap_make_user_dn($_SERVER['REMOTE_USER']), $_POST['old_password']); + if ( !$result ) + throw new Exception("Your old password was incorrect."); + + if ( ($result = test_password($_POST['password'])) !== true ) + throw new Exception("Your new password $result."); + + if ( $_POST['password'] !== $_POST['password_confirm'] ) + throw new Exception("The passwords you entered did not match."); + + if ( reset_password($_SERVER['REMOTE_USER'], $_POST['password']) ) + { + // rebind to LDAP as manager, since we did a bind to verify the old password + ldap_bind($_ldapconn, $ldap_manager['dn'], $ldap_manager['password']); + queue_message(E_NOTICE, "Your password has been changed."); + break; + } + else + { + throw new Exception("Internal error when performing password reset."); + } + } + catch ( Exception $e ) + { + queue_message(E_ERROR, $e->getMessage()); + + // rebind to LDAP as manager, since we did a bind to verify the old password + ldap_bind($_ldapconn, $ldap_manager['dn'], $ldap_manager['password']); + } + break; + case 'profile-update': + // header('Content-type: text/plain'); print_r(!empty($_POST['sshPublicKey']) ? $_POST['sshPublicKey'] : array()); exit; + $result = ldap_mod_replace($_ldapconn, ldap_make_user_dn($_SERVER['REMOTE_USER']), array( + 'mail' => array($_POST['mail']) + , 'sshPublicKey' => !empty($_POST['sshPublicKey']) ? array_unique($_POST['sshPublicKey']) : array() + )); + + if ( $result || ldap_error($_ldapconn) === 'Success' ) + { + queue_message(E_NOTICE, "Your information has been updated."); + redirect('/'); + } + else + { + queue_message(E_ERROR, ldap_error($_ldapconn)); + } + break; + } +} + display_template('index');