Refactoring of configuration loading

Use one INI file instead of multiple PHP files
This commit is contained in:
Victor LABORIE 2018-01-27 18:11:57 +01:00
parent 8938ed91da
commit d7e7a368b1
15 changed files with 41 additions and 206 deletions

4
.gitignore vendored
View file

@ -1,4 +1,2 @@
*.swp
htdocs/config/conf.php
htdocs/config/connect.php
htdocs/lib/hook.php
config/config.ini

21
config/config-sample.ini Normal file
View file

@ -0,0 +1,21 @@
; The configuration for evoadmin-mail
;
; You need to copy and edit config-sample.ini to config.ini.
; This INI file is loaded by evoadmin-mail and contains the
; following configurations :
;
; * Global settings
; * LDAP settings
;
[global]
name = "Evoadmin Mail XXX";
mail = "evoadmin-mail@example.com"
[ldap]
host = "127.0.0.1"
port = 389
base = "dc=example,dc=com"
admin_dn = "cn=admin,dc=example,dc=com"
admin_pass = "xxxxxxx"
superadmin[] = "evoadmin"

View file

@ -84,9 +84,6 @@ if (!empty($_POST['isactive']) && $server->isSuperAdmin()) {
<a href="compte.php?domain=<?php print $domain->getName() ?>"><button type="button" class="btn btn-primary">Ajouter un nouveau compte</button></a>&nbsp;&nbsp;&nbsp;
<?php
// only for mail mode
if (($conf['admin']['what'] == 1) || ($conf['admin']['what'] == 3)) {
$viewonly1= ( (isset($_GET['viewonly'])) && ($_GET['viewonly']==2) ) ? "" : "selected='selected'";
$viewonly2= ( (isset($_GET['viewonly'])) && ($_GET['viewonly']==2) ) ? "selected='selected'" : "";
?>
@ -105,7 +102,6 @@ if (!empty($_POST['isactive']) && $server->isSuperAdmin()) {
</div>
</form>
<?php
}
if ( (!isset($_GET['viewonly'])) || ($_GET['viewonly']==1) ) {

View file

@ -68,9 +68,7 @@ if (isset($_GET['alias'])) {
foreach($alias->getAliases() as $mailaccept) {
print "<tr><td align='right'>Mail accept&eacute; en entr&eacute;e :</td>
<td align='left'><input type='text' name='mailaccept[]' size='30' value='".$mailaccept."' />";
if (!$conf['domaines']['onlyone']) {
print "@" .$domain->getName();
}
print "</td></tr>";
}
@ -78,25 +76,19 @@ if (isset($_GET['alias'])) {
print "<tr><td align='right'>Cr&eacute;ation d'un nouveau mail accept&eacute; en entr&eacute;e :</td>
<td align='left'><input type='text' name='mailaccept[]'
size='30'/>";
if (!$conf['domaines']['onlyone']) {
print "@" .$domain->getName();
}
print "</td></tr>";
print "<tr><td align='right'>Cr&eacute;ation d'un nouveau mail accept&eacute; en entr&eacute;e :</td>
<td align='left'><input type='text' name='mailaccept[]'
size='30'/>";
if (!$conf['domaines']['onlyone']) {
print "@" .$domain->getName();
}
print "</td></tr>";
print "<tr><td align='right'>Cr&eacute;ation d'un nouveau mail accept&eacute; en entr&eacute;e :</td>
<td align='left'><input type='text' name='mailaccept[]'
size='30'/>";
if (!$conf['domaines']['onlyone']) {
print "@" .$domain->getName();
}
print "</td></tr>";
foreach($alias->getRedirections() as $red) {
@ -152,45 +144,35 @@ if (isset($_GET['alias'])) {
<tr><td align="right">Alias :</td>
<td align="left"><input type='text' name='mailaccept[]'/>
<?php
if (!$conf['domaines']['onlyone']) {
print "@" .$domain->getName();
}
?>
</td></tr>
<tr><td align="right">Alias :</td>
<td align="left"><input type='text' name='mailaccept[]'/>
<?php
if (!$conf['domaines']['onlyone']) {
print "@" .$domain->getName();
}
?>
</td></tr>
<tr><td align="right">Alias :</td>
<td align="left"><input type='text' name='mailaccept[]'/>
<?php
if (!$conf['domaines']['onlyone']) {
print "@" .$domain->getName();
}
?>
</td></tr>
<tr><td align="right">Alias :</td>
<td align="left"><input type='text' name='mailaccept[]'/>
<?php
if (!$conf['domaines']['onlyone']) {
print "@" .$domain->getName();
}
?>
</td></tr>
<tr><td align="right">Alias :</td>
<td align="left"><input type='text' name='mailaccept[]'/>
<?php
if (!$conf['domaines']['onlyone']) {
print "@" .$domain->getName();
}
?>
</td></tr>

View file

@ -19,7 +19,7 @@ if (!empty($_POST['login'])) {
try {
$login = htmlentities(strip_tags($_POST['login']),ENT_NOQUOTES);
$password = htmlentities(strip_tags($_POST['password']),ENT_NOQUOTES);
$server = new LdapServer($login, LDAP_BASE, LDAP_ADMIN_DN, LDAP_ADMIN_PASS, LDAP_URI);
$server = new LdapServer($login, $config['ldap']);
$server->login($password);
$_SESSION['login'] = $server->getLogin();
header("location: superadmin.php\n\n");

View file

@ -76,9 +76,7 @@ if (isset($_GET['account'])) {
print "<label for='mailaccept[]' class='col-sm-3 control-label'>Mail accept&eacute; en entr&eacute;e : </label>";
print "<div class='col-sm-7'><input type='text' name='mailaccept[]' value='".$aliase."' class='form-control' /></div>";
print "<div class='col-sm-2 control-label'>";
if (!$conf['domaines']['onlyone']) {
print "@" .$domain->getName();
}
print "</div>";
print "</div>";
@ -88,9 +86,7 @@ if (isset($_GET['account'])) {
print "<label for='mailaccept[]' class='col-sm-3 control-label'>Cr&eacute;ation d'un nouveau mail accept&eacute; en entr&eacute;e : </label>";
print "<div class='col-sm-7'><input type='text' name='mailaccept[]' value='' class='form-control' /></div>";
print "<div class='col-sm-2 control-label'>";
if (!$conf['domaines']['onlyone']) {
print "@" .$domain->getName();
}
print "</div>";
print "</div>";
@ -165,7 +161,7 @@ if (isset($_GET['account'])) {
<div class="form-group">
<label for="uid" class="col-sm-3 control-label">Login [*] :</label>
<div class="col-sm-7"><input type="text" name="uid" class="form-control" /></div>
<div class="col-sm-2 control-label"><?php if (!$conf['domaines']['onlyone']) { print "@" .$domain->getName(); } ?></div>
<div class="col-sm-2 control-label"><?php print "@" .$domain->getName(); ?></div>
</div>
<div class="form-group">
@ -190,19 +186,19 @@ if (isset($_GET['account'])) {
<div class="form-group">
<label for="alias" class="col-sm-3 control-label">Alias :</label>
<div class="col-sm-7"><input type="text" name="alias[0]" class="form-control" /></div>
<div class="col-sm-2 control-label"><?php if (!$conf['domaines']['onlyone']) { print "@" .$domain->getName(); } ?></div>
<div class="col-sm-2 control-label"><?php print "@" .$domain->getName(); ?></div>
</div>
<div class="form-group">
<label for="alias[1]" class="col-sm-3 control-label">Alias :</label>
<div class="col-sm-7"><input type="text" name="alias[1]" class="form-control" /></div>
<div class="col-sm-2 control-label"><?php if (!$conf['domaines']['onlyone']) { print "@" .$domain->getName(); } ?></div>
<div class="col-sm-2 control-label"><?php print "@" .$domain->getName(); ?></div>
</div>
<div class="form-group">
<label for="alias[2]" class="col-sm-3 control-label">Alias :</label>
<div class="col-sm-7"><input type="text" name="alias[2]" class="form-control" /></div>
<div class="col-sm-2 control-label"><?php if (!$conf['domaines']['onlyone']) { print "@" .$domain->getName(); } ?></div>
<div class="col-sm-2 control-label"><?php print "@" .$domain->getName(); ?></div>
</div>
<hr><h5>Cochez les cases pour choisir les autorisations du compte.</h5>
@ -227,7 +223,7 @@ if (isset($_GET['account'])) {
<div class="form-group">
<label for="authsmtpactive" class="col-sm-3 control-label">Authentification SMTP :</label>
<div class="col-sm-7"><input type='checkbox' name='authsmtpactive' <?php if ($conf['evoadmin']['useauthsmtp']) print "checked" ?> class="form-control move-left" /></div>
<div class="col-sm-7"><input type='checkbox' name='authsmtpactive' class="form-control move-left" /></div>
<div class="col-sm-3 control-label"></div>
</div>
@ -235,7 +231,7 @@ if (isset($_GET['account'])) {
<!--
<div class="form-group">
<label for="amavisBypassSpamChecks" class="col-sm-3 control-label">Désactivation Antispam :</label>
<div class="col-sm-7"><input type='checkbox' name='amavisBypassSpamChecks' <?php //if ($conf['evoadmin']['amavisBypassSpamChecks']) print "checked" ?> class="form-control move-left" /></div>
<div class="col-sm-7"><input type='checkbox' name='amavisBypassSpamChecks' class="form-control move-left" /></div>
<div class="col-sm-2 control-label"></div>
</div>
-->

View file

@ -1,56 +0,0 @@
<?php
// Email pour les notifications
$conf['admin']['mail'] = 'admin@example.com';
// login des superadmins
// Note: utile uniquement si domaines/driver=ldap, laisser vide sinon...
$conf['admin']['logins'] = array('foo');
// What do you want?
// 0 = nothing...
// 1 = only mail accounts
// 2 = only samba accounts
// 3 = mail and samba accounts
$conf['admin']['what'] = 3;
// use hook.php instead of hook-dist.php
$conf['admin']['use_hook'] = false;
// enable quota
$conf['admin']['quota'] = true;
// compatibilite LDAP
$conf['evoadmin']['version'] = 3;
$conf['url']['webroot'] = '/evoadmin';
$conf['domaines']['onlyone'] = true;
$conf['domaines']['driver'] = 'file';
$conf['domaines']['file']['all'] = array('example.com');
$conf['domaines']['file']['gid'] = 1000;
// Pack Mail "virtuel"... attention
// uniquement possible si $conf['admin']['what']=1 !!
//$conf['domaines']['ldap']['virtual'] = false;
// Mode cluster
// Uniquement en mode mail seul et des utilisateurs virtuels
$conf['evoadmin']['cluster'] = true;
// auth SMTP by default ?
$conf['evoadmin']['useauthsmtp'] = false;
// Si comptes virtuels
$conf['unix']['uid'] = 2022;
// Si pas virtuel
$conf['unix']['minuid'] = 1000;
$conf['unix']['mingid'] = 1000;
$conf['html']['title'] = "Interface d'administration XXX";
// gestion des logs
$conf['log']['priority'] = PEAR_LOG_DEBUG;
$conf['log']['name'] = '/var/log/evoXXX.log';
$conf['log']['software'] = 'evoXXX';
$conf['log']['enabled'] = true;
// samba
$conf['samba']['dn'] = 'DOMAINNAME';
$conf['samba']['sid'] = 'S-1-5-21-XXX-XXX-XXX';
$conf['samba']['admin_default'] = false;

View file

@ -1,30 +0,0 @@
<?php
/**
* Secrete parameters
*
* $Id: connect-dist.php,v 1.3 2007-05-22 21:12:23 reg Exp $
*
* @author Gregory Colpart <reg@evolix.fr>
* @version 1.0
*/
#define("LDAP_URI","ldap://127.0.0.1");
$ldap_servers = array('ldap://127.0.0.1', 'ldap://12');
define("LDAP_BASE","dc=example,dc=com");
define("LDAP_ADMIN_DN","cn=admin,dc=example,dc=com");
define("LDAP_ADMIN_PASS","xxxxx");
define("SUDOBIN","/usr/bin/sudo");
define("SUDOSCRIPT","/usr/share/scripts/evoadmin.sh");
define("SUDOPASS","xxxxxx");
define ('SERVEUR', "localhost");
define('SERVEUR','localhost');
define('SERVEURPORT',3306);
define('BASE','horde');
define('NOM', 'horde');
define('PASSE', 'xxxx');
?>

View file

@ -30,7 +30,7 @@ include('inc/debut.php');
<hr><h2>FAQ</h2>
Cette Foire-Aux-Questions (FAQ) devrait r&eacute;pondre &agrave; vos questions. Au fil du temps, de nouvelles questions/r&eacute;ponses seront ajout&eacute;es. Posez vos questions &agrave; <a href="mailto:<?php print $conf['admin']['mail'];?>"><?php print $conf['admin']['mail'];?></a>.
Cette Foire-Aux-Questions (FAQ) devrait r&eacute;pondre &agrave; vos questions. Au fil du temps, de nouvelles questions/r&eacute;ponses seront ajout&eacute;es. Posez vos questions &agrave; <a href="mailto:<?php print $config['global']['mail'];?>"><?php print $config['global']['mail'];?></a>.
<p>Qu'est-ce qu'une syntaxe valide pour un compte mail ?</p>

View file

@ -4,7 +4,7 @@
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<meta name="robots" content="noindex,nofollow"/>
<meta name="referrer" content="same-origin"/>
<title><?php print $conf['html']['title']; ?></title>
<title><?php print $config['global']['name']; ?></title>
<link rel="stylesheet" href="css/main.css" type="text/css"/>
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha256-916EbMg70RQy9LHiGkXzG8hSg9EdNy97GazNG/aiY1w=" crossorigin="anonymous"/>

View file

@ -8,7 +8,7 @@ if (empty($_SESSION['login'])) {
exit(0);
} else {
try {
$server = new LdapServer($_SESSION['login'], LDAP_BASE, LDAP_ADMIN_DN, LDAP_ADMIN_PASS, LDAP_URI);
$server = new LdapServer($_SESSION['login'], $config['ldap']);
if (!empty($_GET['domain'])) {
$domain = htmlentities(strip_tags($_GET['domain']),ENT_NOQUOTES);
$domain = new LdapDomain($server, $domain);

View file

@ -70,7 +70,6 @@ class LdapDomain extends LdapServer {
}
public function addAccount($uid,$name,$password,$active=false,$admin=false,$accountactive=false,$courieractive=false,$webmailactive=false,$authsmtpactive=false,$amavisBypassSpamChecks=false) {
global $conf;
if (!preg_match('/^([a-z0-9][a-z0-9\-\.\_]{0,28}[a-z0-9])$/', $uid)) {
throw new Exception("Erreur, <u>$name</u> est un nom invalide.");
}
@ -78,7 +77,7 @@ class LdapDomain extends LdapServer {
$info[LdapAccount::$dn] = $mail;
$info["cn"] = $name;
$info["homeDirectory"] = "/home/vmail/" .$this->getName(). "/" .$uid. "/";
$info["uidNumber"] = $conf['unix']['uid'];
$info["uidNumber"] = 2022;
$info["gidNumber"] = $this->getGid();
$info["isActive"] = ($active) ? 'TRUE' : 'FALSE';
$info["isAdmin"] = ($admin) ? 'TRUE' : 'FALSE';

View file

@ -54,24 +54,24 @@ class LdapServer {
return '{SSHA}'.base64_encode(mhash(MHASH_SHA1, $pass.$salt).$salt);
}
public function __construct($login, $base, $adminDN, $adminPass, $uri='ldap://127.0.0.1') {
global $conf;
public function __construct($login, $config) {
$uri = 'ldap://'.$config['host'].':'.$config['port'];
$this->login = $login;
if (!$this->conn = ldap_connect($uri)) {
throw new Exception("Impossible de se connecter au serveur LDAP $uri");
throw new Exception("Impossible de se connecter au serveur LDAP ".$config['host']);
}
if (!ldap_set_option($this->conn, LDAP_OPT_PROTOCOL_VERSION, 3)) {
throw new Exception("Impossible de modifier la version du protocole LDAP à 3");
}
if (!ldap_bind($this->conn, $adminDN, $adminPass)) {
if (!ldap_bind($this->conn, $config['admin_dn'], $config['admin_pass'])) {
throw new Exception("Authentification LDAP échoué !");
}
if (in_array($this->login, $conf['admin']['logins'])) {
if (in_array($this->login, $config['superadmin'])) {
$this->superadmin = true;
$this->base = $base;
$this->base = $config['base'];
} else {
$mydomain = preg_replace('/.*@/', '', $login);
$this->base = LdapDomain::$dn.'='.$mydomain.','.$base;
$this->base = LdapDomain::$dn.'='.$mydomain.','.$config['base'];
}
}

View file

@ -1,25 +1,8 @@
<?php
const CONFIG_FILE = './config/conf.php';
const CONNECT_FILE = './config/connect.php';
spl_autoload_register(function ($class) {
$class = strtolower($class);
include_once("lib/class.$class.php");
});
if (file_exists(CONFIG_FILE)) {
require_once(CONFIG_FILE);
global $conf;
if ($conf['domaines']['driver'] == 'ldap') {
if (file_exists(CONNECT_FILE)) {
require_once(CONNECT_FILE);
} else {
# EvoLog::log('You must create '.CONNECT_FILE);
return false;
}
}
} else {
# EvoLog::log('You must create '.CONFIG_FILE);
return false;
}
$config = parse_ini_file('../config/config.ini', true);

View file

@ -1,54 +0,0 @@
<?php
// classic mail notification
// (you can customize it in hook.php)
function mailnotify($info,$domain,$pass) {
global $conf;
$gecos = $info["cn"];
$unixlogin = $info["uid"];
//mail de notification
$sujet = "Creation du compte $unixlogin" ;
$to = $conf['admin']['mail'];
$entete = "From: ".$conf['admin']['mail']."\n";
$entete .= "MIME-Version: 1.0\n";
$entete .= "Content-type: text/plain; charset=utf-8\n";
$entete .= "Content-Transfer-Encoding: quoted-printable\n";
$contenu = "Bonjour $gecos,\n\n";
$contenu .= "Un nouveau compte vient d'être créé pour vous.\n";
$contenu .= "Votre identifiant est : $unixlogin\n";
$contenu .= "Votre mot de passe : " .$pass. "\n\n";
$contenu .= "Cordialement,\n";
$contenu .= "--\nL'équipe informatique";
mail($to,$sujet,$contenu,$entete);
}
// classic domain notification
// (you can customize it in hook.php)
function domainnotify($domain) {
global $conf;
//mail de notification
$sujet = "Creation du domaine $domain" ;
$to = $conf['admin']['mail'];
$entete = "From: ".$conf['admin']['mail']."\n";
$entete .= "MIME-Version: 1.0\n";
$entete .= "Content-type: text/plain; charset=utf-8\n";
$entete .= "Content-Transfer-Encoding: quoted-printable\n";
$contenu = "Bonjour,\n\n";
$contenu .= "Un nouveau domaine vient d'être créé : $domain\n";
$contenu .= "Assurez vous bien que la configuration DNS et MX\n";
$contenu .= "soit bien en place.\n\n";
$contenu .= "Cordialement,\n";
$contenu .= "--\nL'équipe informatique";
mail($to,$sujet,$contenu,$entete);
}