Show spam aliases #
This commit is contained in:
24
data/web/rc/plugins/http_authentication/composer.json
Normal file
24
data/web/rc/plugins/http_authentication/composer.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "roundcube/http_authentication",
|
||||
"type": "roundcube-plugin",
|
||||
"description": "HTTP Basic Authentication",
|
||||
"license": "GPLv3+",
|
||||
"version": "1.5",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Thomas Bruederli",
|
||||
"email": "roundcube@gmail.com",
|
||||
"role": "Lead"
|
||||
}
|
||||
],
|
||||
"repositories": [
|
||||
{
|
||||
"type": "composer",
|
||||
"url": "http://plugins.roundcube.net"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=5.3.0",
|
||||
"roundcube/plugin-installer": ">=0.1.3"
|
||||
}
|
||||
}
|
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
// HTTP Basic Authentication Plugin options
|
||||
// ----------------------------------------
|
||||
// Default mail host to log-in using user/password from HTTP Authentication.
|
||||
// This is useful if the users are free to choose arbitrary mail hosts (or
|
||||
// from a list), but have one host they usually want to log into.
|
||||
// Unlike $config['default_host'] this must be a string!
|
||||
$config['http_authentication_host'] = '';
|
106
data/web/rc/plugins/http_authentication/http_authentication.php
Normal file
106
data/web/rc/plugins/http_authentication/http_authentication.php
Normal file
@@ -0,0 +1,106 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* HTTP Basic Authentication
|
||||
*
|
||||
* Make use of an existing HTTP authentication and perform login with the existing user credentials
|
||||
*
|
||||
* Configuration:
|
||||
* // redirect the client to this URL after logout. This page is then responsible to clear HTTP auth
|
||||
* $config['logout_url'] = 'http://server.tld/logout.html';
|
||||
*
|
||||
* See logout.html (in this directory) for an example how HTTP auth can be cleared.
|
||||
*
|
||||
* For other configuration options, see config.inc.php.dist!
|
||||
*
|
||||
* @license GNU GPLv3+
|
||||
* @author Thomas Bruederli
|
||||
*/
|
||||
class http_authentication extends rcube_plugin
|
||||
{
|
||||
private $redirect_query;
|
||||
|
||||
function init()
|
||||
{
|
||||
$this->add_hook('startup', array($this, 'startup'));
|
||||
$this->add_hook('authenticate', array($this, 'authenticate'));
|
||||
$this->add_hook('logout_after', array($this, 'logout'));
|
||||
$this->add_hook('login_after', array($this, 'login'));
|
||||
}
|
||||
|
||||
function startup($args)
|
||||
{
|
||||
if (!empty($_SERVER['PHP_AUTH_USER'])) {
|
||||
$rcmail = rcmail::get_instance();
|
||||
$rcmail->add_shutdown_function(array('http_authentication', 'shutdown'));
|
||||
|
||||
// handle login action
|
||||
if (empty($_SESSION['user_id'])) {
|
||||
$args['action'] = 'login';
|
||||
$this->redirect_query = $_SERVER['QUERY_STRING'];
|
||||
}
|
||||
// Set user password in session (see shutdown() method for more info)
|
||||
else if (!empty($_SESSION['user_id']) && empty($_SESSION['password'])
|
||||
&& !empty($_SERVER['PHP_AUTH_PW'])) {
|
||||
$_SESSION['password'] = $rcmail->encrypt($_SERVER['PHP_AUTH_PW']);
|
||||
}
|
||||
}
|
||||
|
||||
return $args;
|
||||
}
|
||||
|
||||
function authenticate($args)
|
||||
{
|
||||
// Load plugin's config file
|
||||
$this->load_config();
|
||||
|
||||
$host = rcmail::get_instance()->config->get('http_authentication_host');
|
||||
if (is_string($host) && trim($host) !== '' && empty($args['host']))
|
||||
$args['host'] = rcube_utils::idn_to_ascii(rcube_utils::parse_host($host));
|
||||
|
||||
// Allow entering other user data in login form,
|
||||
// e.g. after log out (#1487953)
|
||||
if (!empty($args['user'])) {
|
||||
return $args;
|
||||
}
|
||||
|
||||
if (!empty($_SERVER['PHP_AUTH_USER'])) {
|
||||
$args['user'] = $_SERVER['PHP_AUTH_USER'];
|
||||
if (!empty($_SERVER['PHP_AUTH_PW']))
|
||||
$args['pass'] = $_SERVER['PHP_AUTH_PW'];
|
||||
}
|
||||
|
||||
$args['cookiecheck'] = false;
|
||||
$args['valid'] = true;
|
||||
|
||||
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']) {
|
||||
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');
|
||||
}
|
||||
|
||||
function login($args)
|
||||
{
|
||||
// Redirect to the previous QUERY_STRING
|
||||
if($this->redirect_query){
|
||||
header('Location: ./?' . $this->redirect_query);
|
||||
exit;
|
||||
}
|
||||
return $args;
|
||||
}
|
||||
}
|
||||
|
29
data/web/rc/plugins/http_authentication/logout.html
Normal file
29
data/web/rc/plugins/http_authentication/logout.html
Normal file
@@ -0,0 +1,29 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>Logout</title>
|
||||
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
// as seen on http://stackoverflow.com/questions/31326/is-there-a-browser-equivalent-to-ies-clearauthenticationcache
|
||||
$(document).ready(function(){
|
||||
if (document.all && document.execCommand) {
|
||||
document.execCommand("ClearAuthenticationCache", "false");
|
||||
}
|
||||
else {
|
||||
$.ajax({
|
||||
url: location.href,
|
||||
type: 'POST',
|
||||
username: '__LOGOUT__',
|
||||
password: '***********'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>You've successully been logged out!</h1>
|
||||
|
||||
</body>
|
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
class HttpAuthentication_Plugin extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
|
||||
function setUp()
|
||||
{
|
||||
include_once __DIR__ . '/../http_authentication.php';
|
||||
}
|
||||
|
||||
/**
|
||||
* Plugin object construction test
|
||||
*/
|
||||
function test_constructor()
|
||||
{
|
||||
$rcube = rcube::get_instance();
|
||||
$plugin = new http_authentication($rcube->api);
|
||||
|
||||
$this->assertInstanceOf('http_authentication', $plugin);
|
||||
$this->assertInstanceOf('rcube_plugin', $plugin);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user