- 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'.
release-0.6
alecpl 15 years ago
parent a65bf3a14b
commit 9b94eb6415

@ -1,6 +1,7 @@
CHANGELOG RoundCube Webmail CHANGELOG RoundCube Webmail
=========================== ===========================
- Fix setting task name according to auth state
- Password: fix vpopmaild driver (#1486478) - Password: fix vpopmaild driver (#1486478)
- Add workaround for MySQL bug [http://bugs.mysql.com/bug.php?id=46293] (#1486474) - 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) - Fix quoted text wrapping when replying to an HTML email in plain text (#1484141)

@ -80,7 +80,7 @@ $RCMAIL->set_task($startup['task']);
$RCMAIL->action = $startup['action']; $RCMAIL->action = $startup['action'];
// try to log in // 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 // purge the session in case of new login when a session already exists
$RCMAIL->kill_session(); $RCMAIL->kill_session();
@ -117,6 +117,8 @@ if ($RCMAIL->action=='login' && $RCMAIL->task=='mail') {
if ($url = get_input_value('_url', RCUBE_INPUT_POST)) if ($url = get_input_value('_url', RCUBE_INPUT_POST))
parse_str($url, $query); parse_str($url, $query);
$RCMAIL->set_task('mail');
// allow plugins to control the redirect url after login success // allow plugins to control the redirect url after login success
$redir = $RCMAIL->plugins->exec_hook('login_after', $query + array('task' => $RCMAIL->task)); $redir = $RCMAIL->plugins->exec_hook('login_after', $query + array('task' => $RCMAIL->task));
unset($redir['abort']); unset($redir['abort']);
@ -132,7 +134,7 @@ if ($RCMAIL->action=='login' && $RCMAIL->task=='mail') {
} }
// end session // 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); $userdata = array('user' => $_SESSION['username'], 'host' => $_SESSION['imap_host'], 'lang' => $RCMAIL->user->language);
$OUTPUT->show_message('loggedout'); $OUTPUT->show_message('loggedout');
$RCMAIL->logout_actions(); $RCMAIL->logout_actions();
@ -141,7 +143,7 @@ else if ($RCMAIL->task=='logout' && isset($_SESSION['user_id'])) {
} }
// check session and auth cookie // 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()) { if (!$RCMAIL->authenticate_session()) {
$OUTPUT->show_message('sessionerror', 'error'); $OUTPUT->show_message('sessionerror', 'error');
$RCMAIL->kill_session(); $RCMAIL->kill_session();
@ -168,7 +170,7 @@ else if (!empty($_POST) && !$request_check_whitelist[$RCMAIL->action] && !$RCMAI
if (empty($RCMAIL->user->ID)) { if (empty($RCMAIL->user->ID)) {
if ($OUTPUT->ajax_call) if ($OUTPUT->ajax_call)
$OUTPUT->redirect(array(), 2000); $OUTPUT->redirect(array(), 2000);
if (!empty($_REQUEST['_framed'])) if (!empty($_REQUEST['_framed']))
$OUTPUT->command('redirect', '?'); $OUTPUT->command('redirect', '?');

@ -17,9 +17,6 @@ class archive extends rcube_plugin
{ {
$rcmail = rcmail::get_instance(); $rcmail = rcmail::get_instance();
if (!$rcmail->user->ID)
return;
$this->register_action('plugin.archive', array($this, 'request_action')); $this->register_action('plugin.archive', array($this, 'request_action'));
// There is no "Archived flags" // There is no "Archived flags"

@ -6,6 +6,7 @@
*/ */
class autologon extends rcube_plugin class autologon extends rcube_plugin
{ {
public $task = 'login';
function init() function init()
{ {
@ -18,7 +19,7 @@ class autologon extends rcube_plugin
$rcmail = rcmail::get_instance(); $rcmail = rcmail::get_instance();
// change action to login // 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'; $args['action'] = 'login';
return $args; return $args;

@ -12,13 +12,13 @@
class help extends rcube_plugin class help extends rcube_plugin
{ {
// all task excluding 'login' and 'logout'
public $task = '?(?!login|logout).*';
function init() function init()
{ {
$rcmail = rcmail::get_instance(); $rcmail = rcmail::get_instance();
if (!$rcmail->user->ID)
return;
$this->add_texts('localization/', false); $this->add_texts('localization/', false);
// register actions // register actions

@ -10,6 +10,7 @@
*/ */
class http_authentication extends rcube_plugin class http_authentication extends rcube_plugin
{ {
public $task = 'login';
function init() function init()
{ {
@ -20,7 +21,7 @@ class http_authentication extends rcube_plugin
function startup($args) function startup($args)
{ {
// change action to login // 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'])) && !empty($_SERVER['PHP_AUTH_USER']) && !empty($_SERVER['PHP_AUTH_PW']))
$args['action'] = 'login'; $args['action'] = 'login';

@ -17,9 +17,6 @@ class markasjunk extends rcube_plugin
{ {
$rcmail = rcmail::get_instance(); $rcmail = rcmail::get_instance();
if (!$rcmail->user->ID)
return;
$this->register_action('plugin.markasjunk', array($this, 'request_action')); $this->register_action('plugin.markasjunk', array($this, 'request_action'));
if ($rcmail->action == '' || $rcmail->action == 'show') { if ($rcmail->action == '' || $rcmail->action == 'show') {

@ -22,6 +22,8 @@
*/ */
class new_user_identity extends rcube_plugin class new_user_identity extends rcube_plugin
{ {
public $task = 'login';
function init() function init()
{ {
$this->add_hook('create_user', array($this, 'lookup_user_name')); $this->add_hook('create_user', array($this, 'lookup_user_name'));

@ -10,6 +10,8 @@
*/ */
class squirrelmail_usercopy extends rcube_plugin class squirrelmail_usercopy extends rcube_plugin
{ {
public $task = 'login|settings';
private $prefs = null; private $prefs = null;
private $abook = array(); private $abook = array();

@ -39,7 +39,7 @@ class rcmail
public $imap; public $imap;
public $output; public $output;
public $plugins; public $plugins;
public $task = 'mail'; public $task;
public $action = ''; public $action = '';
public $comm_path = './'; public $comm_path = './';
@ -91,10 +91,6 @@ class rcmail
openlog($syslog_id, LOG_ODELAY, $syslog_facility); 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 // connect to database
$GLOBALS['DB'] = $this->get_dbh(); $GLOBALS['DB'] = $this->get_dbh();
@ -123,6 +119,10 @@ class rcmail
// create user object // create user object
$this->set_user(new rcube_user($_SESSION['user_id'])); $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 // reset some session parameters when changing task
if ($_SESSION['task'] != $this->task) if ($_SESSION['task'] != $this->task)
rcube_sess_unset('page'); rcube_sess_unset('page');
@ -131,7 +131,7 @@ class rcmail
$_SESSION['task'] = $this->task; $_SESSION['task'] = $this->task;
// create IMAP object // create IMAP object
if ($this->task == 'mail') if ($this->task == 'login')
$this->imap_init(); $this->imap_init();
// create plugin API and load plugins // create plugin API and load plugins
@ -147,7 +147,13 @@ class rcmail
public function set_task($task) public function set_task($task)
{ {
$task = asciiwords($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)); $this->comm_path = $this->url(array('task' => $this->task));
if ($this->output) if ($this->output)

@ -90,7 +90,7 @@ class rcube_plugin_api
if (class_exists($plugin_name, false)) { if (class_exists($plugin_name, false)) {
$plugin = new $plugin_name($this); $plugin = new $plugin_name($this);
// check inheritance and task specification // 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(); $plugin->init();
$this->plugins[] = $plugin; $this->plugins[] = $plugin;
} }

@ -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 // actions that do not require imap connection
$NOIMAP_ACTIONS = array('spell', 'addcontact', 'autocomplete', 'upload', 'display-attachment', 'remove-attachment'); $NOIMAP_ACTIONS = array('spell', 'addcontact', 'autocomplete', 'upload', 'display-attachment', 'remove-attachment');
// Init IMAP object
$RCMAIL->imap_init();
// log in to imap server // log in to imap server
if (!in_array($RCMAIL->action, $NOIMAP_ACTIONS) && !$RCMAIL->imap_connect()) { if (!in_array($RCMAIL->action, $NOIMAP_ACTIONS) && !$RCMAIL->imap_connect()) {

Loading…
Cancel
Save