From 7e02e5004739e524a2407f87c7b366599869fa0a Mon Sep 17 00:00:00 2001 From: Nicolas Roman Date: Thu, 21 Mar 2019 10:02:23 +0100 Subject: [PATCH] update ServerName from web interface --- htdocs/index.php | 4 + inc/webadmin-servername.php | 193 ++++++++++++++++++++++++++++++++ tpl/webadmin-servername.tpl.php | 55 +++++++++ 3 files changed, 252 insertions(+) create mode 100644 inc/webadmin-servername.php create mode 100644 tpl/webadmin-servername.tpl.php diff --git a/htdocs/index.php b/htdocs/index.php index 47fe6f4..f1aacd9 100755 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -48,6 +48,10 @@ if (!array_key_exists('auth', $_SESSION) || $_SESSION['auth']!=1) { include_once EVOADMIN_BASE . '../inc/webadmin.php'; +} elseif (preg_match('#^/webadmin/servername/(.*)/?$#', $uri, $params)) { + + include_once EVOADMIN_BASE . '../inc/webadmin-servername.php'; + } elseif (preg_match('#^/webadmin/edit/(.*)/?$#', $uri, $params)) { include_once EVOADMIN_BASE . '../inc/webadmin-edit.php'; diff --git a/inc/webadmin-servername.php b/inc/webadmin-servername.php new file mode 100644 index 0000000..f577b67 --- /dev/null +++ b/inc/webadmin-servername.php @@ -0,0 +1,193 @@ + + * @author Thomas Martin + * @author Sebastien Palma + * @version 1.0 + */ + +require_once EVOADMIN_BASE . '../lib/bdd.php'; +require_once EVOADMIN_BASE . '../lib/domain.php'; + +global $conf; + +if (isset($_GET['edit']) ) { + require_once EVOADMIN_BASE . '../evolibs/Form.php'; + + include_once EVOADMIN_BASE . '../tpl/header.tpl.php'; + include_once EVOADMIN_BASE . '../tpl/menu.tpl.php'; + + $form = new FormPage("Modification du Server Name", FALSE); + $form->addField('domain_servername', new TextInputFormField("Server Name", FALSE), $_GET['edit']); + + if (!empty($_POST)) { + $form->isCurrentPage(TRUE); + $form->initFields(); + + if ($form->verify(TRUE)) { + if ($conf['cluster']) { + if (is_mcluster_mode()) { + // If the user has not yet selected a cluster, redirect-it to home page. + if (empty($_SESSION['cluster'])) { + http_redirect('/'); + } + $cache = str_replace('%cluster_name%', $_SESSION['cluster'], $conf['cache']); + } + else { + $cache = $conf['cache']; + } + $bdd = new bdd(); + $bdd->open($cache); + + $serveralias = array ( + 'domain' => htmlspecialchars(basename($_SERVER['REDIRECT_URL'])), + 'alias' => $form->getField('domain_alias')->getValue(), + ); + + $account_name=$serveralias['domain']; + $account = $bdd->get_account($account_name); + + + if (sizeof($account) == 0) + die("Anomalie... Contactez votre administrateur."); + + $master = $bdd->get_server_from_roleid($account['id_master']); + $slave = $bdd->get_server_from_roleid($account['id_slave']); + + + if ( $bdd->is_serveralias( $account_name, $serveralias['alias'] ) == 0 ) { + + /* web-add-cluster addalias */ + $exec_cmd = 'web-add-cluster.sh add-alias '.$serveralias['domain'].' '.$serveralias['alias'].' '.$master.' '.$slave; + sudoexec($exec_cmd, $exec_output, $exec_return); + + + + if ($exec_return == 0) { + /* Ajout BDD */ + $bdd->add_serveralias($serveralias); + + domain_add($serveralias['alias'], gethostbyname($master) , false); + + # Si le compte en question est en replication temps + # reel, il faut faire un restart manuel de lsyncd + # pour prendre en compte le nouveau domaine. + if ($account['replication'] == "realtime") { + mail('tech@evolix.fr', "[TAF] Redemarrer lsyncd sur $master", wordwrap('killer tous les processus lsyncd lancé par vmail pour le compte '.$account['name'].' et les relancer (cf. la ligne correspondante à ce compte dans la crontab de vmail).\n', 70)); + } + + print "
"; + printf ('

L\'alias %s du domaine %s a bien été créé

', $serveralias['alias'], $serveralias['domain']); + printf ('

Retour à la liste des alias

', $_SERVER['REDIRECT_URL']); + print "
"; + } else { + print "
"; + printf ('

Echec dans la creation de l\'alias %s du domaine %s

', $serveralias['alias'], $serveralias['domain']); + printf ('

Retour à la liste des alias

', $_SERVER['REDIRECT_URL']); + print "
"; + } + } else { + print "
"; + printf ('

Alias %s du domaine %s deja existant !

', $serveralias['alias'], $serveralias['domain']); + printf ('

Retour à la liste des alias

', $_SERVER['REDIRECT_URL']); + print "
"; + + } + } + else { + $servername = array ( + 'domain' => htmlspecialchars(basename($_SERVER['REDIRECT_URL'])), + 'servername' => $form->getField('domain_servername')->getValue(), + ); + + $account_name=$servername['domain']; + + $exec_cmd = 'web-add.sh update-servername ' . $servername['domain'] . ' ' . $servername['servername']; + sudoexec($exec_cmd, $exec_output, $exec_return); + if ($exec_return == 0) { + //domain_add($serveralias['alias'], gethostbyname($master) , false); TODO avec l'IP du load balancer + print "
"; + printf ('

Le Server Name %s du domaine %s a bien été modifié

', $servername['servername'], $servername['domain']); + printf ('

Retour à la liste des Server Names

', $_SERVER['REDIRECT_URL']); + print "
"; + } + else { + print "
"; + printf ('

Echec dans la modification du Server Name %s du domaine %s

', $servername['servername'], $servername['domain']); + printf ('

Retour à la liste des Server Names

', $_SERVER['REDIRECT_URL']); + print "
"; + } + } + } + } else { + print "

Modification du ServerName


"; + print "
"; + print "
"; + print " Modification du Server Name"; + print $form; + print "

"; + print "
"; + print "
"; + + } + + include_once EVOADMIN_BASE . '../tpl/footer.tpl.php'; + + +} else { + + $domain = $params[1]; + $servername_list = array(); + + // TODO: adapt for cluster mode + if ($conf['cluster']) { + if (is_mcluster_mode()) { + // If the user has not yet selected a cluster, redirect-it to home page. + if (empty($_SESSION['cluster'])) { + http_redirect('/'); + } + $cache = str_replace('%cluster_name%', $_SESSION['cluster'], $conf['cache']); + } + else { + $cache = $conf['cache']; + } + + $alias_list = array(); + + /* parcours de la table Serveralias */ + $bdd = new bdd(); + $bdd->open($cache); + + $alias_list = $bdd->list_serveralias($domain); + } + else { + $cmd = 'web-add.sh list-vhost'; + if(!is_superadmin()) { + $cmd = sprintf('%s %s', $cmd, $_SESSION['user']); + } + sudoexec($cmd, $data_output, $exec_return); + + foreach($data_output as $data_line) { + $data_split = explode(':', $data_line); + if ($data_split[0] == $domain && $data_split[2] != '') { + // Fonctionne uniquement pour un seul et même servername par conf + array_push($servername_list, $data_split[2]); + } + } + } + + include_once EVOADMIN_BASE . '../tpl/header.tpl.php'; + include_once EVOADMIN_BASE . '../tpl/menu.tpl.php'; + include_once EVOADMIN_BASE . '../tpl/webadmin-servername.tpl.php'; + include_once EVOADMIN_BASE . '../tpl/footer.tpl.php'; + +} + +?> diff --git a/tpl/webadmin-servername.tpl.php b/tpl/webadmin-servername.tpl.php new file mode 100644 index 0000000..70cdc2f --- /dev/null +++ b/tpl/webadmin-servername.tpl.php @@ -0,0 +1,55 @@ + + * @version 1.0 + */ + +?> + +

Server Name

+ + 0) { ?> + + + + + + Action'; + } ?> + + + + '; + printf('', + $servername_list[$i]); + if (is_superadmin()) + printf('', + $domain, $servername_list[$i]); + print ''; + } ?> + +
Server Name
%sModifier
+Aucun alias existant pour le domaine $domain !

"; + if (is_superadmin()) { + print "
"; + printf('

Ajouter un alias

', $domain); + print "
"; + } + } + + +?>