From 9b94eb64153a7dc6555d6b9a30a35296ce592f82 Mon Sep 17 00:00:00 2001 From: alecpl <alec@alec.pl> Date: Sat, 06 Feb 2010 13:12:49 -0500 Subject: [PATCH] - Fix setting task name according to auth state. So, any action before user is authenticated is assigned to 'login' task instead of 'mail'. Now binding plugins to 'login' task is possible and realy usefull. It's also possible to bind to all tasks excluding 'login'. --- CHANGELOG | 1 + index.php | 10 ++++++---- plugins/http_authentication/http_authentication.php | 3 ++- plugins/archive/archive.php | 3 --- program/include/rcube_plugin_api.php | 2 +- plugins/help/help.php | 6 +++--- plugins/markasjunk/markasjunk.php | 3 --- program/include/rcmail.php | 20 +++++++++++++------- program/steps/mail/func.inc | 2 ++ plugins/squirrelmail_usercopy/squirrelmail_usercopy.php | 2 ++ plugins/new_user_identity/new_user_identity.php | 2 ++ plugins/autologon/autologon.php | 3 ++- 12 files changed, 34 insertions(+), 23 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 6416ca3..8578fdc 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ CHANGELOG RoundCube Webmail =========================== +- Fix setting task name according to auth state - Password: fix vpopmaild driver (#1486478) - Add workaround for MySQL bug [http://bugs.mysql.com/bug.php?id=46293] (#1486474) - Fix quoted text wrapping when replying to an HTML email in plain text (#1484141) diff --git a/index.php b/index.php index e3c542b..7251b53 100644 --- a/index.php +++ b/index.php @@ -80,7 +80,7 @@ $RCMAIL->action = $startup['action']; // try to log in -if ($RCMAIL->action=='login' && $RCMAIL->task=='mail') { +if ($RCMAIL->task == 'login' && $RCMAIL->action == 'login') { // purge the session in case of new login when a session already exists $RCMAIL->kill_session(); @@ -117,6 +117,8 @@ if ($url = get_input_value('_url', RCUBE_INPUT_POST)) parse_str($url, $query); + $RCMAIL->set_task('mail'); + // allow plugins to control the redirect url after login success $redir = $RCMAIL->plugins->exec_hook('login_after', $query + array('task' => $RCMAIL->task)); unset($redir['abort']); @@ -132,7 +134,7 @@ } // end session -else if ($RCMAIL->task=='logout' && isset($_SESSION['user_id'])) { +else if ($RCMAIL->task == 'logout' && isset($_SESSION['user_id'])) { $userdata = array('user' => $_SESSION['username'], 'host' => $_SESSION['imap_host'], 'lang' => $RCMAIL->user->language); $OUTPUT->show_message('loggedout'); $RCMAIL->logout_actions(); @@ -141,7 +143,7 @@ } // check session and auth cookie -else if ($RCMAIL->action != 'login' && $_SESSION['user_id'] && $RCMAIL->action != 'send') { +else if ($RCMAIL->task != 'login' && $_SESSION['user_id'] && $RCMAIL->action != 'send') { if (!$RCMAIL->authenticate_session()) { $OUTPUT->show_message('sessionerror', 'error'); $RCMAIL->kill_session(); @@ -168,7 +170,7 @@ if (empty($RCMAIL->user->ID)) { if ($OUTPUT->ajax_call) $OUTPUT->redirect(array(), 2000); - + if (!empty($_REQUEST['_framed'])) $OUTPUT->command('redirect', '?'); diff --git a/plugins/archive/archive.php b/plugins/archive/archive.php index d2269ba..939faf8 100644 --- a/plugins/archive/archive.php +++ b/plugins/archive/archive.php @@ -17,9 +17,6 @@ { $rcmail = rcmail::get_instance(); - if (!$rcmail->user->ID) - return; - $this->register_action('plugin.archive', array($this, 'request_action')); // There is no "Archived flags" diff --git a/plugins/autologon/autologon.php b/plugins/autologon/autologon.php index c40f2d4..bc3d2ee 100644 --- a/plugins/autologon/autologon.php +++ b/plugins/autologon/autologon.php @@ -6,6 +6,7 @@ */ class autologon extends rcube_plugin { + public $task = 'login'; function init() { @@ -18,7 +19,7 @@ $rcmail = rcmail::get_instance(); // change action to login - if ($args['task'] == 'mail' && empty($args['action']) && empty($_SESSION['user_id']) && !empty($_GET['_autologin']) && $this->is_localhost()) + if (empty($_SESSION['user_id']) && !empty($_GET['_autologin']) && $this->is_localhost()) $args['action'] = 'login'; return $args; diff --git a/plugins/help/help.php b/plugins/help/help.php index 94d0654..a7b3d57 100644 --- a/plugins/help/help.php +++ b/plugins/help/help.php @@ -12,13 +12,13 @@ class help extends rcube_plugin { + // all task excluding 'login' and 'logout' + public $task = '?(?!login|logout).*'; + function init() { $rcmail = rcmail::get_instance(); - if (!$rcmail->user->ID) - return; - $this->add_texts('localization/', false); // register actions diff --git a/plugins/http_authentication/http_authentication.php b/plugins/http_authentication/http_authentication.php index 57422a7..7c22966 100644 --- a/plugins/http_authentication/http_authentication.php +++ b/plugins/http_authentication/http_authentication.php @@ -10,6 +10,7 @@ */ class http_authentication extends rcube_plugin { + public $task = 'login'; function init() { @@ -20,7 +21,7 @@ function startup($args) { // change action to login - if ($args['task'] == 'mail' && empty($args['action']) && empty($_SESSION['user_id']) + if (empty($args['action']) && empty($_SESSION['user_id']) && !empty($_SERVER['PHP_AUTH_USER']) && !empty($_SERVER['PHP_AUTH_PW'])) $args['action'] = 'login'; diff --git a/plugins/markasjunk/markasjunk.php b/plugins/markasjunk/markasjunk.php index 9f75590..0466458 100644 --- a/plugins/markasjunk/markasjunk.php +++ b/plugins/markasjunk/markasjunk.php @@ -17,9 +17,6 @@ { $rcmail = rcmail::get_instance(); - if (!$rcmail->user->ID) - return; - $this->register_action('plugin.markasjunk', array($this, 'request_action')); if ($rcmail->action == '' || $rcmail->action == 'show') { diff --git a/plugins/new_user_identity/new_user_identity.php b/plugins/new_user_identity/new_user_identity.php index 78c9952..43eeae9 100644 --- a/plugins/new_user_identity/new_user_identity.php +++ b/plugins/new_user_identity/new_user_identity.php @@ -22,6 +22,8 @@ */ class new_user_identity extends rcube_plugin { + public $task = 'login'; + function init() { $this->add_hook('create_user', array($this, 'lookup_user_name')); diff --git a/plugins/squirrelmail_usercopy/squirrelmail_usercopy.php b/plugins/squirrelmail_usercopy/squirrelmail_usercopy.php index 4a14ff2..aff2f49 100644 --- a/plugins/squirrelmail_usercopy/squirrelmail_usercopy.php +++ b/plugins/squirrelmail_usercopy/squirrelmail_usercopy.php @@ -10,6 +10,8 @@ */ class squirrelmail_usercopy extends rcube_plugin { + public $task = 'login|settings'; + private $prefs = null; private $abook = array(); diff --git a/program/include/rcmail.php b/program/include/rcmail.php index 3d26065..cd61872 100644 --- a/program/include/rcmail.php +++ b/program/include/rcmail.php @@ -39,7 +39,7 @@ public $imap; public $output; public $plugins; - public $task = 'mail'; + public $task; public $action = ''; public $comm_path = './'; @@ -91,10 +91,6 @@ openlog($syslog_id, LOG_ODELAY, $syslog_facility); } - // set task and action properties - $this->set_task(get_input_value('_task', RCUBE_INPUT_GPC)); - $this->action = asciiwords(get_input_value('_action', RCUBE_INPUT_GPC)); - // connect to database $GLOBALS['DB'] = $this->get_dbh(); @@ -123,6 +119,10 @@ // create user object $this->set_user(new rcube_user($_SESSION['user_id'])); + // set task and action properties + $this->set_task(get_input_value('_task', RCUBE_INPUT_GPC)); + $this->action = asciiwords(get_input_value('_action', RCUBE_INPUT_GPC)); + // reset some session parameters when changing task if ($_SESSION['task'] != $this->task) rcube_sess_unset('page'); @@ -131,7 +131,7 @@ $_SESSION['task'] = $this->task; // create IMAP object - if ($this->task == 'mail') + if ($this->task == 'login') $this->imap_init(); // create plugin API and load plugins @@ -147,7 +147,13 @@ public function set_task($task) { $task = asciiwords($task); - $this->task = $task ? $task : 'mail'; + + if ($this->user && $this->user->ID) + $task = !$task || $task == 'login' ? 'mail' : $task; + else + $task = 'login'; + + $this->task = $task; $this->comm_path = $this->url(array('task' => $this->task)); if ($this->output) diff --git a/program/include/rcube_plugin_api.php b/program/include/rcube_plugin_api.php index 1eeadce..b19c0a3 100644 --- a/program/include/rcube_plugin_api.php +++ b/program/include/rcube_plugin_api.php @@ -90,7 +90,7 @@ if (class_exists($plugin_name, false)) { $plugin = new $plugin_name($this); // check inheritance and task specification - if (is_subclass_of($plugin, 'rcube_plugin') && (!$plugin->task || preg_match('/('.$plugin->task.')/i', $rcmail->task))) { + if (is_subclass_of($plugin, 'rcube_plugin') && (!$plugin->task || preg_match('/^('.$plugin->task.')$/i', $rcmail->task))) { $plugin->init(); $this->plugins[] = $plugin; } diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index e9adc15..dea85c2 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -24,6 +24,8 @@ // actions that do not require imap connection $NOIMAP_ACTIONS = array('spell', 'addcontact', 'autocomplete', 'upload', 'display-attachment', 'remove-attachment'); +// Init IMAP object +$RCMAIL->imap_init(); // log in to imap server if (!in_array($RCMAIL->action, $NOIMAP_ACTIONS) && !$RCMAIL->imap_connect()) { -- Gitblit v1.9.1