- 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 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) |
| | |
| | | $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(); |
| | | |
| | |
| | | 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']); |
| | |
| | | } |
| | | |
| | | // 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(); |
| | |
| | | } |
| | | |
| | | // 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(); |
| | |
| | | if (empty($RCMAIL->user->ID)) { |
| | | if ($OUTPUT->ajax_call) |
| | | $OUTPUT->redirect(array(), 2000); |
| | | |
| | | |
| | | if (!empty($_REQUEST['_framed'])) |
| | | $OUTPUT->command('redirect', '?'); |
| | | |
| | |
| | | { |
| | | $rcmail = rcmail::get_instance(); |
| | | |
| | | if (!$rcmail->user->ID) |
| | | return; |
| | | |
| | | $this->register_action('plugin.archive', array($this, 'request_action')); |
| | | |
| | | // There is no "Archived flags" |
| | |
| | | */ |
| | | class autologon extends rcube_plugin |
| | | { |
| | | public $task = 'login'; |
| | | |
| | | function init() |
| | | { |
| | |
| | | $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; |
| | |
| | | |
| | | 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 |
| | |
| | | */ |
| | | class http_authentication extends rcube_plugin |
| | | { |
| | | public $task = 'login'; |
| | | |
| | | 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'; |
| | | |
| | |
| | | { |
| | | $rcmail = rcmail::get_instance(); |
| | | |
| | | if (!$rcmail->user->ID) |
| | | return; |
| | | |
| | | $this->register_action('plugin.markasjunk', array($this, 'request_action')); |
| | | |
| | | if ($rcmail->action == '' || $rcmail->action == 'show') { |
| | |
| | | */ |
| | | class new_user_identity extends rcube_plugin |
| | | { |
| | | public $task = 'login'; |
| | | |
| | | function init() |
| | | { |
| | | $this->add_hook('create_user', array($this, 'lookup_user_name')); |
| | |
| | | */ |
| | | class squirrelmail_usercopy extends rcube_plugin |
| | | { |
| | | public $task = 'login|settings'; |
| | | |
| | | private $prefs = null; |
| | | private $abook = array(); |
| | | |
| | |
| | | public $imap; |
| | | public $output; |
| | | public $plugins; |
| | | public $task = 'mail'; |
| | | public $task; |
| | | public $action = ''; |
| | | public $comm_path = './'; |
| | | |
| | |
| | | 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(); |
| | | |
| | |
| | | // 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'); |
| | |
| | | $_SESSION['task'] = $this->task; |
| | | |
| | | // create IMAP object |
| | | if ($this->task == 'mail') |
| | | if ($this->task == 'login') |
| | | $this->imap_init(); |
| | | |
| | | // create plugin API and load plugins |
| | |
| | | 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) |
| | |
| | | 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; |
| | | } |
| | |
| | | // 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()) { |