Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

- Fix setting task name according to auth state. So, any action befor…

…e 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'.
  • Loading branch information...
commit 9b94eb64153a7dc6555d6b9a30a35296ce592f82 1 parent a65bf3a
@alecpl alecpl authored
View
1  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)
View
10 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', '?');
View
3  plugins/archive/archive.php
@@ -17,9 +17,6 @@ function init()
{
$rcmail = rcmail::get_instance();
- if (!$rcmail->user->ID)
- return;
-
$this->register_action('plugin.archive', array($this, 'request_action'));
// There is no "Archived flags"
View
3  plugins/autologon/autologon.php
@@ -6,6 +6,7 @@
*/
class autologon extends rcube_plugin
{
+ public $task = 'login';
function init()
{
@@ -18,7 +19,7 @@ function startup($args)
$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;
View
6 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
View
3  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 init()
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';
View
3  plugins/markasjunk/markasjunk.php
@@ -17,9 +17,6 @@ function init()
{
$rcmail = rcmail::get_instance();
- if (!$rcmail->user->ID)
- return;
-
$this->register_action('plugin.markasjunk', array($this, 'request_action'));
if ($rcmail->action == '' || $rcmail->action == 'show') {
View
2  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'));
View
2  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();
View
20 program/include/rcmail.php
@@ -39,7 +39,7 @@ class rcmail
public $imap;
public $output;
public $plugins;
- public $task = 'mail';
+ public $task;
public $action = '';
public $comm_path = './';
@@ -91,10 +91,6 @@ private function startup()
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 @@ private function startup()
// 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 @@ private function startup()
$_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 @@ private function startup()
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)
View
2  program/include/rcube_plugin_api.php
@@ -90,7 +90,7 @@ public function init()
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;
}
View
2  program/steps/mail/func.inc
@@ -24,6 +24,8 @@ $EMAIL_ADDRESS_PATTERN = '([a-z0-9][a-z0-9\-\.\+\_]*@[a-z0-9][a-z0-9\-\.]*\\.[a-
// 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()) {
Please sign in to comment.
Something went wrong with that request. Please try again.