| | |
| | | */ |
| | | class http_authentication extends rcube_plugin |
| | | { |
| | | public $task = 'login|logout'; |
| | | |
| | | function init() |
| | | { |
| | |
| | | |
| | | function startup($args) |
| | | { |
| | | // change action to login |
| | | if (empty($args['action']) && empty($_SESSION['user_id']) |
| | | && !empty($_SERVER['PHP_AUTH_USER']) && !empty($_SERVER['PHP_AUTH_PW'])) |
| | | if (!empty($_SERVER['PHP_AUTH_USER']) && !empty($_SERVER['PHP_AUTH_PW'])) { |
| | | $rcmail = rcmail::get_instance(); |
| | | $rcmail->add_shutdown_function(array('http_authentication', 'shutdown')); |
| | | |
| | | // handle login action |
| | | if (empty($args['action']) && empty($_SESSION['user_id'])) { |
| | | $args['action'] = 'login'; |
| | | } |
| | | // Set user password in session (see shutdown() method for more info) |
| | | else if (!empty($_SESSION['user_id']) && empty($_SESION['password'])) { |
| | | $_SESSION['password'] = $rcmail->encrypt($_SERVER['PHP_AUTH_PW']); |
| | | } |
| | | } |
| | | |
| | | return $args; |
| | | } |
| | |
| | | function logout($args) |
| | | { |
| | | // redirect to configured URL in order to clear HTTP auth credentials |
| | | if (!empty($_SERVER['PHP_AUTH_USER']) && $args['user'] == $_SERVER['PHP_AUTH_USER'] && ($url = rcmail::get_instance()->config->get('logout_url'))) { |
| | | if (!empty($_SERVER['PHP_AUTH_USER']) && $args['user'] == $_SERVER['PHP_AUTH_USER']) { |
| | | if ($url = rcmail::get_instance()->config->get('logout_url')) { |
| | | header("Location: $url", true, 307); |
| | | } |
| | | } |
| | | } |
| | | |
| | | function shutdown() |
| | | { |
| | | // There's no need to store password (even if encrypted) in session |
| | | // We'll set it back on startup (#1486553) |
| | | rcmail::get_instance()->session->remove('password'); |
| | | } |
| | | } |
| | | |