| | |
| | | /* |
| | | +-------------------------------------------------------------------------+ |
| | | | Roundcube Webmail IMAP Client | |
| | | | Version 0.4-20100807 | |
| | | | Version 0.5-rc | |
| | | | | |
| | | | Copyright (C) 2005-2010, Roundcube Dev. - Switzerland | |
| | | | | |
| | |
| | | if ($RCMAIL->task == 'login' && $RCMAIL->action == 'login') { |
| | | // purge the session in case of new login when a session already exists |
| | | $RCMAIL->kill_session(); |
| | | |
| | | |
| | | $auth = $RCMAIL->plugins->exec_hook('authenticate', array( |
| | | 'host' => $RCMAIL->autoselect_host(), |
| | | 'user' => trim(get_input_value('_user', RCUBE_INPUT_POST)), |
| | | 'pass' => get_input_value('_pass', RCUBE_INPUT_POST, true, |
| | | $RCMAIL->config->get('password_charset', 'ISO-8859-1')), |
| | | 'cookiecheck' => true, |
| | | )); |
| | | |
| | | if (!isset($auth['pass'])) |
| | | $auth['pass'] = get_input_value('_pass', RCUBE_INPUT_POST, true, |
| | | $RCMAIL->config->get('password_charset', 'ISO-8859-1')); |
| | | |
| | | // check if client supports cookies |
| | | if ($auth['cookiecheck'] && empty($_COOKIE)) { |
| | |
| | | $OUTPUT->redirect($redir); |
| | | } |
| | | else { |
| | | $OUTPUT->show_message($IMAP->error_code < -1 ? 'imaperror' : 'loginfailed', 'warning'); |
| | | $RCMAIL->plugins->exec_hook('login_failed', array('code' => $IMAP->error_code, 'host' => $auth['host'], 'user' => $auth['user'])); |
| | | $error_code = is_object($IMAP) ? $IMAP->get_error_code() : -1; |
| | | |
| | | $OUTPUT->show_message($error_code < -1 ? 'imaperror' : 'loginfailed', 'warning'); |
| | | $RCMAIL->plugins->exec_hook('login_failed', array( |
| | | 'code' => $error_code, 'host' => $auth['host'], 'user' => $auth['user'])); |
| | | $RCMAIL->kill_session(); |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | // don't check for valid request tokens in these actions |
| | | $request_check_whitelist = array('login'=>1, 'spell'=>1); |
| | | |
| | | // check client X-header to verify request origin |
| | | if ($OUTPUT->ajax_call) { |
| | | if (!$RCMAIL->config->get('devel_mode') && rc_request_header('X-Roundcube-Request') != $RCMAIL->get_request_token() && !empty($RCMAIL->user->ID)) { |
| | | header('HTTP/1.1 404 Not Found'); |
| | | die("Invalid Request"); |
| | | } |
| | | } |
| | | // check request token in POST form submissions |
| | | else if (!empty($_POST) && !$request_check_whitelist[$RCMAIL->action] && !$RCMAIL->check_request()) { |
| | | $OUTPUT->show_message('invalidrequest', 'error'); |
| | | $OUTPUT->send($RCMAIL->task); |
| | | } |
| | | |
| | | // not logged in -> show login page |
| | | if (empty($RCMAIL->user->ID)) { |
| | | if ($OUTPUT->ajax_call) |
| | |
| | | ) |
| | | ); |
| | | } |
| | | |
| | | |
| | | $OUTPUT->set_env('task', 'login'); |
| | | $OUTPUT->send('login'); |
| | | } |
| | | // CSRF prevention |
| | | else { |
| | | // don't check for valid request tokens in these actions |
| | | $request_check_whitelist = array('login'=>1, 'spell'=>1); |
| | | |
| | | // check client X-header to verify request origin |
| | | if ($OUTPUT->ajax_call) { |
| | | if (rc_request_header('X-Roundcube-Request') != $RCMAIL->get_request_token()) { |
| | | header('HTTP/1.1 404 Not Found'); |
| | | die("Invalid Request"); |
| | | } |
| | | } |
| | | // check request token in POST form submissions |
| | | else if (!empty($_POST) && !$request_check_whitelist[$RCMAIL->action] && !$RCMAIL->check_request()) { |
| | | $OUTPUT->show_message('invalidrequest', 'error'); |
| | | $OUTPUT->send($RCMAIL->task); |
| | | } |
| | | } |
| | | |
| | | // handle keep-alive signal |
| | | // handle special actions |
| | | if ($RCMAIL->action == 'keep-alive') { |
| | | $OUTPUT->reset(); |
| | | $OUTPUT->send(); |
| | | } |
| | | else if ($RCMAIL->action == 'save-pref') { |
| | | include 'steps/utils/save_pref.inc'; |
| | | } |
| | | |
| | | |
| | |
| | | 'group-addmembers' => 'groups.inc', |
| | | 'group-delmembers' => 'groups.inc', |
| | | ), |
| | | |
| | | |
| | | 'settings' => array( |
| | | 'folders' => 'manage_folders.inc', |
| | | 'create-folder' => 'manage_folders.inc', |
| | | 'rename-folder' => 'manage_folders.inc', |
| | | 'delete-folder' => 'manage_folders.inc', |
| | | 'subscribe' => 'manage_folders.inc', |
| | | 'unsubscribe' => 'manage_folders.inc', |
| | | 'enable-threading' => 'manage_folders.inc', |
| | | 'disable-threading' => 'manage_folders.inc', |
| | | 'folders' => 'folders.inc', |
| | | 'rename-folder' => 'folders.inc', |
| | | 'delete-folder' => 'folders.inc', |
| | | 'subscribe' => 'folders.inc', |
| | | 'unsubscribe' => 'folders.inc', |
| | | 'purge' => 'folders.inc', |
| | | 'folder-size' => 'folders.inc', |
| | | 'add-identity' => 'edit_identity.inc', |
| | | ) |
| | | ); |