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 "";
+
+ }
+
+ 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) { ?>
+
+
+
+
+ Server Name |
+ Action';
+ } ?>
+
+
+
+ ';
+ printf('%s | ',
+ $servername_list[$i]);
+ if (is_superadmin())
+ printf('Modifier | ',
+ $domain, $servername_list[$i]);
+ print '';
+ } ?>
+
+
+Aucun alias existant pour le domaine $domain !
";
+ if (is_superadmin()) {
+ print "";
+ printf('Ajouter un alias
', $domain);
+ print "";
+ }
+ }
+
+
+?>