From 873c2af90fcd674a413825e0363d39098303f4b8 Mon Sep 17 00:00:00 2001
From: Peter Hormanns <peter.hormanns@hostsharing.net>
Date: Thu, 07 Jul 2011 15:55:41 +0200
Subject: [PATCH] pac.create

---
 hsarback/src/de/hsadmin/core/qserv/TemplateProcessor.java   |   26 ++++++
 hsarback/src/de/hsadmin/mods/pac/email_new_pac_account.jtpl |   49 ++++++------
 hsarback/src/de/hsadmin/mods/pac/interfaces.jtpl            |   17 ++++
 hsarback/src/de/hsadmin/mods/pac/PacProcessorFactory.java   |   40 ++++++++--
 hsarback/build.xml                                          |   13 +++
 hsarback/src/de/hsadmin/core/qserv/QueueTask.java           |    7 -
 hsarback/src/de/hsadmin/mods/pac/hosts.jtpl                 |   14 +++
 hsarback/src/de/hsadmin/core/qserv/QueueServer.java         |   32 +++----
 hsarback/src/de/hsadmin/mods/pac/sudoers.jtpl               |   25 ++++++
 9 files changed, 169 insertions(+), 54 deletions(-)

diff --git a/hsarback/build.xml b/hsarback/build.xml
index 9386a6a..c2af7eb 100644
--- a/hsarback/build.xml
+++ b/hsarback/build.xml
@@ -40,6 +40,19 @@
 		<sleep minutes="5"/>
 	</target>
 
+	<target name="jar" depends="enhance">
+		<jar destfile="build/hsar.jar">
+			<fileset dir="build/cls"/>
+			<fileset dir="src">
+    		    <include name="**/*.properties"/>
+    		    <include name="**/*.jtpl"/>
+			</fileset>
+			<fileset dir="conf">
+    		    <include name="**/*.xml"/>
+			</fileset>
+		</jar>
+	</target>
+	
 	<target name="war" depends="enhance">
 		<copy file="conf/WEB-INF/web.xml" todir="webapp/WEB-INF/">
 			<filterset>
diff --git a/hsarback/src/de/hsadmin/core/qserv/QueueServer.java b/hsarback/src/de/hsadmin/core/qserv/QueueServer.java
index c709096..2785523 100644
--- a/hsarback/src/de/hsadmin/core/qserv/QueueServer.java
+++ b/hsarback/src/de/hsadmin/core/qserv/QueueServer.java
@@ -144,29 +144,27 @@
 			// execute processor within the message
 			task.getProcessor().process();
 			System.out.println("done");
-
-			// mark done
-			sendStatus(task);
-		} catch (Exception receiveException) {
-			System.err.println("exception " + receiveException); // TODO:
-																	// logging
-			receiveException.printStackTrace(System.err);
-			if (receiveException.getCause() != null) {
-				System.err.println("caused by exception "
-						+ receiveException.getCause()); // TODO: logging
-				receiveException.getCause().printStackTrace(System.err);
-			} else
-				System.err.println("no further cause available");
-			task.setException(receiveException);
-			sendStatus(task);
-		} catch (Throwable t) {
-			System.err.println("severe exception " + t); // TODO: logging
+		} catch (Throwable throwable) {
+			logException(throwable);
+			task.setException(throwable);
 		} finally {
+			sendStatus(task);
 			setNMessagesProcessed(getNMessagesProcessed() + 1);
 			notifyAll();
 		}
 	}
 
+	private void logException(Throwable t) {
+		System.err.println("exception " + t); 	// TODO: logging
+		t.printStackTrace(System.err);
+		if (t.getCause() != null) {
+			System.err.println("caused by exception "
+					+ t.getCause()); 			// TODO: logging
+			t.getCause().printStackTrace(System.err);
+		} else
+			System.err.println("no further cause available");
+	}
+
 	@Override
 	public void onException(JMSException e) {
 		System.out.println("Exception: " + e.getMessage());
diff --git a/hsarback/src/de/hsadmin/core/qserv/QueueTask.java b/hsarback/src/de/hsadmin/core/qserv/QueueTask.java
index ff46f96..5b0c1aa 100644
--- a/hsarback/src/de/hsadmin/core/qserv/QueueTask.java
+++ b/hsarback/src/de/hsadmin/core/qserv/QueueTask.java
@@ -181,15 +181,14 @@
 
 	public String getException() {
 		return exception;
-	};
+	}
 
 	public void setException(String exception) {
 		this.exception = exception;
 	}
 
-	public void setException(Exception exception) {
-		this.exception = exception.toString();
-		// TODO: stack+cause
+	public void setException(Throwable exception) {
+		this.exception = exception.getMessage();
 	}
 
 	@Override
diff --git a/hsarback/src/de/hsadmin/core/qserv/TemplateProcessor.java b/hsarback/src/de/hsadmin/core/qserv/TemplateProcessor.java
index 08b312b..8a7f2eb 100644
--- a/hsarback/src/de/hsadmin/core/qserv/TemplateProcessor.java
+++ b/hsarback/src/de/hsadmin/core/qserv/TemplateProcessor.java
@@ -6,13 +6,14 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.util.Iterator;
 import java.util.Map;
 
 import net.sf.jtpl.Template;
 
 public class TemplateProcessor extends AbstractProcessor {
 
-	private static final long serialVersionUID = 4520635523274792876L;
+	private static final long serialVersionUID = 2L;
 
 	private String content = null;
 	private String targetPath = null;
@@ -34,6 +35,29 @@
 		}
 	}
 	
+	public TemplateProcessor(String templateName, Map<String, String> mainValues, Iterator<Map<String, String>> iterateValues, String targetPath, boolean overwriteTarget) throws ProcessorException {
+		this.targetPath = targetPath;
+		this.overwriteTarget = overwriteTarget;
+		try {
+			InputStream stream = TemplateProcessor.class.getClassLoader().getResourceAsStream(templateName);
+			Template template = new Template(new InputStreamReader(stream));
+			for (String key : mainValues.keySet()) {
+				template.assign(key, mainValues.get(key));
+			}
+			while (iterateValues.hasNext()) {
+				Map<String, String> iterationValues = iterateValues.next();
+				for (String key : iterationValues.keySet()) {
+					template.assign(key, iterationValues.get(key));
+				}
+				template.parse("main.iterate");
+			}
+			template.parse("main");
+			content = template.out();
+		} catch (IOException e) {
+			throw new ProcessorException(e);
+		}
+	}
+	
 	@Override
 	public Object process() throws ProcessorException {
 		try {
diff --git a/hsarback/src/de/hsadmin/mods/pac/PacProcessorFactory.java b/hsarback/src/de/hsadmin/mods/pac/PacProcessorFactory.java
index ca4018e..efdc995 100644
--- a/hsarback/src/de/hsadmin/mods/pac/PacProcessorFactory.java
+++ b/hsarback/src/de/hsadmin/mods/pac/PacProcessorFactory.java
@@ -3,6 +3,10 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.Random;
 import java.util.Set;
 
@@ -46,16 +50,33 @@
 		if (unixUserSet.size() == 1) {
 			unixUser = unixUserSet.iterator().next();
 		}
-		Processor hostsAppender = new ShellProcessor("echo '" + inetAddr + "  " + pacName +".hostsharing.net  " + pacName + "\n' >>/etc/hosts");
-		Processor interfacesAppender = new ShellProcessor("echo 'auto eth0:" + pacName + "\n" +
-				"iface eth0:" + pacName + " inet static\n" +
-				"\taddress " + inetAddr + "\n" +
-				"\tnetmask 255.255.255.0\n\n' >>/etc/network/interfaces");
-		Processor sudoersAppender = new ShellProcessor("echo '" + pacName + " ALL = (%" + pacName + ") NOPASSWD: ALL\n' >> /etc/sudoers");
+		Hive hive = pac.getHive();
+		Map<String, String> hiveValues = new HashMap<String, String>();
+		hiveValues.put("HIVE", hive.getName());
+		String hiveIP = hive.getInetAddr().getInetAddr();
+		hiveValues.put("HIVE_IP", hiveIP);
+		hiveValues.put("HIVE_GATEWAY", hiveIP.substring(0, hiveIP.lastIndexOf('.')) + ".1");
+		List<Map<String, String>> pacValuesList = new ArrayList<Map<String, String>>();
+		Set<Pac> pacsSet = hive.getPacs();
+		for (Pac p : pacsSet) {
+			HashMap<String, String> pacValues = new HashMap<String, String>();
+			pacValues.put("PAC", p.getName());
+			pacValues.put("PAC_IP", p.getCurINetAddr().getInetAddr());
+			pacValuesList.add(pacValues);
+		}
+
+		// nicht ausprobiert!
+		
+		Processor hostsAppender = new TemplateProcessor("/de/hsadmin/mods/pac/hosts.jtpl", hiveValues, pacValuesList.iterator(), "/etc/hosts", true); 
+		Processor interfacesAppender = new TemplateProcessor("/de/hsadmin/mods/pac/interfaces.jtpl", hiveValues, pacValuesList.iterator(), "/etc/network/interfaces", true); 
+		Processor sudoersAppender = new TemplateProcessor("/de/hsadmin/mods/pac/sudoers.jtpl", hiveValues, pacValuesList.iterator(), "/etc/sudoers", true); 
+
+		// nicht ausprobiert!
+		
 		String password = PwGenerator.generatePassword(7, flagBuilder.build(), 100, random);
 		Processor newUsersProc = new ShellProcessor(
 				"newusers", pacName + ":" + password  + ":"
-						+ unixUser.getUserId() + ":" + unixUser.getPac().getName()
+						+ unixUser.getUserId() + ":" + unixUser.getUserId()
 						+ ":" + unixUser.getComment() + ":" + unixUser.getHomedir()
 						+ ":" + unixUser.getShell() + "\n");
 		try {
@@ -71,7 +92,10 @@
 							"Zugangsdaten des neue Hostsharing Pakets " + pacName, 
 							template.out())
 				);
-			return new CompoundProcessor(hostsAppender, interfacesAppender, sudoersAppender, newUsersProc, emailPasswordProc);
+			Processor priProcessor = new CompoundProcessor(hostsAppender, interfacesAppender, sudoersAppender, newUsersProc);
+			WaitingTasksProcessor secProcessor = new WaitingTasksProcessor(priProcessor);
+			secProcessor.appendProcessor(pac.getHiveName(), emailPasswordProc, "send email to customer");
+			return secProcessor;
 		} catch (IllegalArgumentException e) {
 			throw new ProcessorException(e);
 		} catch (IOException e) {
diff --git a/hsarback/src/de/hsadmin/mods/pac/email_new_pac_account.jtpl b/hsarback/src/de/hsadmin/mods/pac/email_new_pac_account.jtpl
index aca9c11..6c9a273 100644
--- a/hsarback/src/de/hsadmin/mods/pac/email_new_pac_account.jtpl
+++ b/hsarback/src/de/hsadmin/mods/pac/email_new_pac_account.jtpl
@@ -1,17 +1,17 @@
-<!-- BEGIN: main -->Das neue Hostsharing Paket {PAC} ist eingerichtet. Zugangsdaten:
+<!-- BEGIN: main -->Das neue Hostsharing Paket {PAC} ist eingerichtet. 
+Die Zugangsdaten sind:
 
         Hostname (HTTP, FTP, SSH, POP3, IMAP):  {PAC}.hostsharing.net
         Benutzernamen (Paket-Admin-Account):    {PAC}
         Passwort:                               {PASSWORD}
 
-Wir bitten zu ber�cksichtigen, dass man mit diesem Passwort sehr viel
-Macht �ber das Paket hat, so ist damit z.B. die Bestellung von Domains
-m�glich. Bitte daher die u.g. Sicherheitshinweise beachten und den
-Paketadmin-Account {PAC} nicht mit unsicheren (unverschl�sselten)
-Protokollen wie POP3 oder FTP ohne TLS verwenden!
+Wir bitten zu beruecksichtigen, dass man mit diesem Passwort sehr viel
+Macht ueber das Paket hat. Bitte daher die u.g. Sicherheitshinweise 
+beachten und den Paketadmin-Account {PAC} nicht mit unsicheren 
+(unverschluesselten) Protokollen wie POP3 oder FTP ohne TLS verwenden!
 
-E-Mail-Benachrichtigungen f�r den Paket-Admin gehen direkt an den
-o.g. Account. �ber den E-Mail-Alias {PAC} k�nnen diese E-Mails
+E-Mail-Benachrichtigungen fuer den Paket-Admin gehen direkt an den
+o.g. Account. Ueber den E-Mail-Alias {PAC} koennen diese E-Mails
 an externe E-Mail-Adressen weitergeleitet werden. Initial ist
 eine Weiterleitung an {CUST_EMAIL} eingetragen.
 
@@ -20,42 +20,43 @@
 Verwaltung zu trennen. Dies gilt insbesondere, wenn die Domain-Inhalte
 per FTP gepflegt werden sollen.
 
-Weitere Accounts (neben dem Paketadmin-Account {PAC}) k�nnen nach einem
+Weitere Accounts (neben dem Paketadmin-Account {PAC}) koennen nach einem
 Login per SSH mit dem Kommandozeilen-Programm hsadmin eingerichtet
-werden (in K�rze auch per Web-Client). Dokumentation finden Sie unter:
+oder mit dem Web-Client unter http://admin.hostsharing.net 
+Dokumentation finden Sie unter:
 
         <http://www.hostsharing.net/dokumentation.html>
 
 Der Webspace des Paketes ist theoretisch ab sofort unter
 <http://{PAC}.hostsharing.net/> erreichbar, allerdings kann es durch
-DNS-Caches Verz�gerungen geben. Das DocumentRoot ist ~{PAC}/web, wobei
+DNS-Caches Verzoegerungen geben. Das DocumentRoot ist ~{PAC}/web, wobei
 ~{PAC}/cgi als /cgi-bin in den Webspace eingeblendet wird. In SW Paketen
-darf dieses CGI auch nur f�r administrative Zwecke verwendet werden.
+darf dieses CGI nur fuer administrative Zwecke verwendet werden.
 
 Die vorgenannte Paket-Subdomain ist jedoch eher zum Testen und Ausprobieren
 gedacht und hat mit dem folgenden Domain-Webspace nichts zu tun, der wird
 unter ~{PAC}/doms/ angelegt, sobald eine Domain aufgeschaltet wird. Dort gibt
-es dann f�r jede Domain ein separates Verzeichnis.
+es dann fuer jede Domain ein separates Verzeichnis.
 
 Das Verfahren zum Bestellen von Domains ist auf unserer Website unter
 http://www.hostsharing.net/dokumentation/einstieg-bei-hostsharing/domain-bestellen.html
-beschrieben. Ein Web-Interface hierf�r ist in Entwicklung.
+beschrieben.
 
-Bei evtl. auftretenden Problemen mit dem Server bitte zun�chst auf
+Bei evtl. auftretenden Problemen mit dem Server bitte zunaechst auf
 unserer Status-Website <http://status.hostsharing.net/> nachsehen,
 insbesondere auch auf der dortigen Seite "Aktionen", ob die Hostmaster
-bereits aktiv sind. Falls nicht, k�nnen die Hostmaster bei dringenden
-Problemen �ber die Rufnummer +49 40 209331331 erreicht werden.
+bereits aktiv sind. Falls nicht, koennen die Hostmaster bei dringenden
+Problemen ueber die Rufnummer +49 40 209331331 erreicht werden.
 Bitte ggf. lange klingeln lassen, aber nicht mehr anrufen,
 wenn die Hostmaster laut Status-Seite "Aktionen" bereits dabei sind,
-das Problem zu beheben, da dies die Arbeiten dann nur verz�gern w�rde.
+das Problem zu beheben, da dies die Arbeiten dann nur verzoegern wuerde.
 Auch ist diese Rufnummer keine Support-Rufnummer, telefonische
-Support-Anfragen k�nnen grunds�tzlich nicht beantwortet werden.
+Support-Anfragen koennen grundsaetzlich nicht beantwortet werden.
 
 Weitere Fragen beantworten wir gerne per E-Mail, am liebsten auf der
-passenden �ffentlichen Mailingliste (in den meisten F�llen wohl
-support@). Einen �beblick �ber unsere Mailinglisten bietet die Website:
-http://www.hostsharing.net/forum/mailinglisten.html
+passenden oeffentlichen Mailingliste (in den meisten Faellen wohl
+support@). Einen Ueberblick ueber unsere Mailinglisten bietet die Website:
+https://www.hostsharing.net/gemeinschaft
 
 Viel Erfolg mit dem neuen Paket bei Hostsharing!
 
@@ -67,7 +68,7 @@
 -- 
 Hostsharing Service | http://www.hostsharing.net
 Telefon: +49 40 209331311 | Fax: +49 40 209331312
-Hostsharing eG | Glockengie�erwall 17 | D-20095 Hamburg
+Hostsharing eG | Glockengiesserwall 17 | D-20095 Hamburg
 Registergericht Hamburg, GnR 1007 | USt.-ID-Nr.: DE218602793
-vertretungsberechtigter Vorstand: Michael Hierweck, Uwe M�ller
+vertretungsberechtigter Vorstand: Michael Hierweck, Uwe Mueller
 <!-- END: main -->
\ No newline at end of file
diff --git a/hsarback/src/de/hsadmin/mods/pac/hosts.jtpl b/hsarback/src/de/hsadmin/mods/pac/hosts.jtpl
new file mode 100644
index 0000000..3e296da
--- /dev/null
+++ b/hsarback/src/de/hsadmin/mods/pac/hosts.jtpl
@@ -0,0 +1,14 @@
+<!-- BEGIN: main -->127.0.0.1       localhost
+
+::1             ip6-localhost ip6-loopback
+fe00::0         ip6-localnet
+ff00::0         ip6-mcastprefix
+ff02::1         ip6-allnodes
+ff02::2         ip6-allrouters
+ff02::3         ip6-allhosts
+
+{HIVE_IP}	{HIVE}.hostsharing.net	{HIVE}	localhive
+
+<!-- BEGIN: iterate -->{PAC_IP}    {PAC}.hostsharing.net	{PAC}
+<!-- END: iterate -->
+<!-- END: main -->
diff --git a/hsarback/src/de/hsadmin/mods/pac/interfaces.jtpl b/hsarback/src/de/hsadmin/mods/pac/interfaces.jtpl
new file mode 100644
index 0000000..80aafea
--- /dev/null
+++ b/hsarback/src/de/hsadmin/mods/pac/interfaces.jtpl
@@ -0,0 +1,17 @@
+<!-- BEGIN: main -->auto lo
+iface lo inet loopback
+
+auto eth0
+iface eth0 inet static
+        address {HIVE_IP}
+        netmask 255.255.255.0
+        gateway {HIVE_GATEWAY}
+
+<!-- BEGIN: iterate -->auto eth0:{PAC}
+iface eth0:{PAC} inet static
+        address {PAC_IP}
+        netmask 255.255.255.0
+
+<!-- END: iterate -->
+<!-- END: main -->
+        
\ No newline at end of file
diff --git a/hsarback/src/de/hsadmin/mods/pac/sudoers.jtpl b/hsarback/src/de/hsadmin/mods/pac/sudoers.jtpl
new file mode 100644
index 0000000..89bf1a2
--- /dev/null
+++ b/hsarback/src/de/hsadmin/mods/pac/sudoers.jtpl
@@ -0,0 +1,25 @@
+<!-- BEGIN: main -->### Do not edit this file manually
+### Generated by HSAdmin Queue Server
+
+# Host alias specification
+
+# User alias specification
+
+# Cmnd alias specification
+
+# Override built in defaults
+
+Defaults ignore_dot             # "." bzw. "" im PATH ignorieren
+Defaults always_set_home        # HOME entsprechend des Zielusers aendern
+Defaults env_reset              # Environmentvariablen filtern
+Defaults listpw=all             # siehe sudoers(5)
+
+# User privilege specification
+root    ALL=(ALL) ALL
+%adm    ALL=NOPASSWD: ALL
+
+################################################################################
+
+<!-- BEGIN: iterate -->{PAC} ALL = (%{PAC}) NOPASSWD: ALL
+<!-- END: iterate -->
+<!-- END: main -->

--
Gitblit v1.9.1