| | |
| | | /* |
| | | +-------------------------------------------------------------------------+ |
| | | | Roundcube Webmail IMAP Client | |
| | | | Version 0.4-20100807 | |
| | | | Version 0.6-svn | |
| | | | | |
| | | | Copyright (C) 2005-2010, Roundcube Dev. - Switzerland | |
| | | | Copyright (C) 2005-2011, The Roundcube Dev Team | |
| | | | | |
| | | | This program is free software; you can redistribute it and/or modify | |
| | | | it under the terms of the GNU General Public License version 2 | |
| | |
| | | $RCMAIL->session->regenerate_id(); |
| | | |
| | | // send auth cookie if necessary |
| | | $RCMAIL->authenticate_session(); |
| | | $RCMAIL->session->set_auth_cookie(); |
| | | |
| | | // log successful login |
| | | rcmail_log_login(); |
| | | |
| | | // restore original request parameters |
| | | $query = array(); |
| | | if ($url = get_input_value('_url', RCUBE_INPUT_POST)) |
| | | if ($url = get_input_value('_url', RCUBE_INPUT_POST)) { |
| | | parse_str($url, $query); |
| | | |
| | | // prevent endless looping on login page |
| | | if ($query['_task'] == 'login') |
| | | unset($query['_task']); |
| | | } |
| | | |
| | | // allow plugins to control the redirect url after login success |
| | | $redir = $RCMAIL->plugins->exec_hook('login_after', $query); |
| | | $redir = $RCMAIL->plugins->exec_hook('login_after', $query + array('_task' => 'mail')); |
| | | unset($redir['abort']); |
| | | |
| | | // send redirect |
| | |
| | | |
| | | // check session and auth cookie |
| | | else if ($RCMAIL->task != 'login' && $_SESSION['user_id'] && $RCMAIL->action != 'send') { |
| | | if (!$RCMAIL->authenticate_session()) { |
| | | if (!$RCMAIL->session->check_auth()) { |
| | | $OUTPUT->show_message('sessionerror', 'error'); |
| | | $RCMAIL->kill_session(); |
| | | } |
| | |
| | | } |
| | | |
| | | |
| | | // map task/action to a certain include file |
| | | $action_map = array( |
| | | 'mail' => array( |
| | | 'preview' => 'show.inc', |
| | | 'print' => 'show.inc', |
| | | 'moveto' => 'move_del.inc', |
| | | 'delete' => 'move_del.inc', |
| | | 'send' => 'sendmail.inc', |
| | | 'expunge' => 'folders.inc', |
| | | 'purge' => 'folders.inc', |
| | | 'remove-attachment' => 'attachments.inc', |
| | | 'display-attachment' => 'attachments.inc', |
| | | 'upload' => 'attachments.inc', |
| | | 'group-expand' => 'autocomplete.inc', |
| | | ), |
| | | |
| | | 'addressbook' => array( |
| | | 'add' => 'edit.inc', |
| | | 'group-create' => 'groups.inc', |
| | | 'group-rename' => 'groups.inc', |
| | | 'group-delete' => 'groups.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', |
| | | 'add-identity' => 'edit_identity.inc', |
| | | ) |
| | | ); |
| | | |
| | | // include task specific functions |
| | | if (is_file($incfile = 'program/steps/'.$RCMAIL->task.'/func.inc')) |
| | | include_once($incfile); |
| | |
| | | // allow 5 "redirects" to another action |
| | | $redirects = 0; $incstep = null; |
| | | while ($redirects < 5) { |
| | | $stepfile = !empty($action_map[$RCMAIL->task][$RCMAIL->action]) ? |
| | | $action_map[$RCMAIL->task][$RCMAIL->action] : strtr($RCMAIL->action, '-', '_') . '.inc'; |
| | | |
| | | // execute a plugin action |
| | | if ($RCMAIL->plugins->is_plugin_task($RCMAIL->task)) { |
| | | $RCMAIL->plugins->exec_action($RCMAIL->task.'.'.$RCMAIL->action); |
| | |
| | | break; |
| | | } |
| | | // try to include the step file |
| | | else if (is_file($incfile = 'program/steps/'.$RCMAIL->task.'/'.$stepfile)) { |
| | | else if (($stepfile = $RCMAIL->get_action_file()) |
| | | && is_file($incfile = 'program/steps/'.$RCMAIL->task.'/'.$stepfile) |
| | | ) { |
| | | include($incfile); |
| | | $redirects++; |
| | | } |