HSAdmin Backend Domains, E-Mail, Datenbanken
Peter Hormanns
2011-07-07 873c2af90fcd674a413825e0363d39098303f4b8
pac.create
3 files added
6 files modified
223 ■■■■ changed files
hsarback/build.xml 13 ●●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/core/qserv/QueueServer.java 32 ●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/core/qserv/QueueTask.java 7 ●●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/core/qserv/TemplateProcessor.java 26 ●●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/mods/pac/PacProcessorFactory.java 40 ●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/mods/pac/email_new_pac_account.jtpl 49 ●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/mods/pac/hosts.jtpl 14 ●●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/mods/pac/interfaces.jtpl 17 ●●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/mods/pac/sudoers.jtpl 25 ●●●●● patch | view | raw | blame | history
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>
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());
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
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 {
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) {
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 -->
hsarback/src/de/hsadmin/mods/pac/hosts.jtpl
New file
@@ -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 -->
hsarback/src/de/hsadmin/mods/pac/interfaces.jtpl
New file
@@ -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 -->
hsarback/src/de/hsadmin/mods/pac/sudoers.jtpl
New file
@@ -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 -->