HSAdmin Backend Domains, E-Mail, Datenbanken
Purodha Blissenbach
2012-12-18 5767f4ff1ea5c77d85c05a8e19aee839f03a0133
Adding branch with trial stuff for domain options to hsarweb
+ possibly applying recent changes of Peter Hormanns to
DomainProcessorfactory.
1 files modified
4 files added
246 ■■■■ changed files
hsarback/src/de/hsadmin/mods/dom/DomainProcessorFactory.java 100 ●●●●● patch | view | raw | blame | history
hsarweb/src/de/hsadmin/web/AbstractProperty.java 5 ●●●●● patch | view | raw | blame | history
hsarweb/src/de/hsadmin/web/ListOfStringsProperty.java 15 ●●●●● patch | view | raw | blame | history
hsarweb/src/de/hsadmin/web/StringProperty.java 10 ●●●●● patch | view | raw | blame | history
hsarweb/src/de/hsadmin/web/vaadin/DomainOptionsPropertyFieldFactory.java 116 ●●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/mods/dom/DomainProcessorFactory.java
@@ -53,13 +53,13 @@
        templateVars.put("DOM_IPNUMBEREX", getOldIPAddress(pac));
        WaitingTasksProcessor mainProcessor = new WaitingTasksProcessor(createHiveDNSSetupProcessor(domName, templateVars));
        mainProcessor.appendProcessor(hiveName, createHiveEMailSetupProcessor(em, domName), "Setup EMail");
        String pacInetAddr = pac.getCurINetAddr().getInetAddr();
        String hiveInetAddr = pac.getHive().getInetAddr().getInetAddr();
        Config config = Config.getInstance();
        for (String queueName : config.getProperty("queues.dns").split(",")) {
            mainProcessor.appendProcessor(queueName, createDNSServerSetupProcessor(domName, pacInetAddr), queueName + ".hostsharing.net");
            mainProcessor.appendProcessor(queueName, createDNSServerSetupProcessor(domName, hiveInetAddr), queueName + ".hostsharing.net");
        }
        for (String queueName : config.getProperty("queues.mail").split(",")) {
            mainProcessor.appendProcessor(queueName, createMailinSetupProcessor(em, domName, pac), queueName + ".hostsharing.net");
            mainProcessor.appendProcessor(queueName, createMailinSetupProcessor(em, dom, pac), queueName + ".hostsharing.net");
        }
        templateVars = new HashMap<String, String>();
        templateVars.put("PAC", pacName);
@@ -71,10 +71,8 @@
        templateVars.put("DOM_IPNUMBEREX", getOldIPAddress(pac));
        templateVars.put("DOMAIN", domName);
        templateVars.put("USER_NAME", domUser.getComment());
        mainProcessor.appendProcessor(hiveName, createDomainDirectoriesProcessor(dom, templateVars), "Setup Domain Directories");
        mainProcessor.appendProcessor(hiveName, createApacheVHostSetupProcessor(em, dom, templateVars), "Setup Apache VHost");
        if (dom.isPacDomain()) {
            mainProcessor.appendProcessor(hiveName, createMovePacDomainContent(em, dom), "Move pac domain content");
        }
        return mainProcessor;
    }
@@ -97,7 +95,7 @@
        WaitingTasksProcessor processor = new WaitingTasksProcessor(createApacheVHostSetupProcessor(em, dom, templateVars));
        Config config = Config.getInstance();
        for (String queueName : config.getProperty("queues.mail").split(",")) {
            processor.appendProcessor(queueName, createPostgreyConfiguration(em), queueName + ".hostsharing.net");
            processor.appendProcessor(queueName, createMailinSetupProcessor(em, dom, pac), queueName + ".hostsharing.net");
        }
        return processor;
    }
@@ -113,8 +111,7 @@
            mainProcessor.appendProcessor(queueName, createDNSServerRemoveProcessor(domName), queueName + ".hostsharing.net");
        }
        for (String queueName : config.getProperty("queues.mail").split(",")) {
            mainProcessor.appendProcessor(queueName, createMailinDeleteProcessor(domName), queueName + ".hostsharing.net");
            mainProcessor.appendProcessor(queueName, createPostgreyConfiguration(em), queueName + ".hostsharing.net");
            mainProcessor.appendProcessor(queueName, createMailinUnsetupProcessor(em, dom), queueName + ".hostsharing.net");
        }
        mainProcessor.appendProcessor(dom.getHiveName(), createApacheVHostDeleteProcessor(dom), "remove apache vhost");
        return mainProcessor;
@@ -160,10 +157,10 @@
        return emailAdrProcessor;
    }
    private Processor createDNSServerSetupProcessor(String domName, String pacInetAddr) {
    private Processor createDNSServerSetupProcessor(String domName, String hiveInetAddr) {
        Processor seczonesFileProcessor;
        seczonesFileProcessor = 
            new ShellProcessor("echo 'zone \"" + domName + "\" { type slave; file \"sec." + domName + "\"; masters { " + pacInetAddr + "; }; };' >>/etc/bind/named-hsh.conf" +
            new ShellProcessor("echo 'zone \"" + domName + "\" { type slave; file \"sec." + domName + "\"; masters { " + hiveInetAddr + "; }; };' >>/etc/bind/named-hsh.conf" +
                " && sort /etc/bind/named-hsh.conf | uniq >/etc/bind/named-hsh.conf.tmp" +
                " && mv /etc/bind/named-hsh.conf.tmp /etc/bind/named-hsh.conf" +
                " && invoke-rc.d bind9 reload");
@@ -178,17 +175,30 @@
                " && invoke-rc.d bind9 reload");
    }
    private Processor createMailinSetupProcessor(EntityManager em, String domName, Pac pac) throws ProcessorException {
    private Processor createMailinSetupProcessor(EntityManager em, Domain dom, Pac pac) throws ProcessorException {
        String inetAddr = pac.getCurINetAddr().getInetAddr();
        return new CompoundProcessor(
        CompoundProcessor cp = new CompoundProcessor(
            createPostgreyConfiguration(em),
            new ShellProcessor("postmap -r -i /etc/postfix-mailin/relaydomains", 
                        domName + " anything\n" +
                        "." + domName + " anything\n"),
            new ShellProcessor("postmap -r -i /etc/postfix-mailin/transport",
                        domName + " smtp:" + inetAddr + ":225\n" +
                        "." + domName + " smtp:" + inetAddr + ":225\n")
        );
                        dom.getName() + " anything\n" +
                        "." + dom.getName() + " anything\n"));
        Query query = em.createQuery("SELECT d FROM Domains d WHERE d.domainoptions.name = :option AND d.name = :domname");
        query.setParameter("domname", dom.getName());
        query.setParameter("option", "backupmxforexternalmx");
        if (query.getResultList().isEmpty()) {
            cp.appendProcessor(
                    new ShellProcessor("postmap -r -i /etc/postfix-mailin/transport",
                            dom.getName() + " smtp:" + inetAddr + ":225\n" +
                            "." + dom.getName() + " smtp:" + inetAddr + ":225\n")
                    );
        } else {
            cp.appendProcessor(
                    new ShellProcessor(
                            "postmap -d '" + dom.getName() + "' /etc/postfix-mailin/transport && " +
                            "postmap -d '." + dom.getName() + "' /etc/postfix-mailin/transport")
                    );
        }
        return cp;
    }
    
    private Processor createPostgreyConfiguration(EntityManager em) throws ProcessorException {
@@ -215,12 +225,14 @@
        );
    }
    private Processor createMailinDeleteProcessor(String domName) {
        Processor mailQueueProcessor = new ShellProcessor(
                "postmap -d '" + domName + "' /etc/postfix-mailin/relaydomains && " +
                "postmap -d '" + domName + "' /etc/postfix-mailin/transport && " +
                "postmap -d '." + domName + "' /etc/postfix-mailin/relaydomains && " +
                "postmap -d '." + domName + "' /etc/postfix-mailin/transport");
    private Processor createMailinUnsetupProcessor(EntityManager em, Domain dom) throws ProcessorException {
        Processor mailQueueProcessor = new CompoundProcessor(
                createPostgreyConfiguration(em),
                new ShellProcessor(
                        "postmap -d '" + dom.getName() + "' /etc/postfix-mailin/relaydomains && " +
                        "postmap -d '" + dom.getName() + "' /etc/postfix-mailin/transport && " +
                        "postmap -d '." + dom.getName() + "' /etc/postfix-mailin/relaydomains && " +
                        "postmap -d '." + dom.getName() + "' /etc/postfix-mailin/transport"));
        return mailQueueProcessor;
    }
@@ -343,7 +355,6 @@
        }
                
        Processor domSetupProcessor = new CompoundProcessor(
            createDomainDirectoriesProcessor(dom, templateVars),
            new CreateFileProcessor(selectVHostTemplate(dom), templateVars, "/etc/apache2/sites-available/" + domName + ".tmp", "root", "root", "644", true),
            new ShellProcessor("ls /etc/apache2/pems/" + pac + ".pem >/dev/null 2>&1" +
                    " && sed -i '/SSLCertificate.*default/d' " + "/etc/apache2/sites-available/" + domName + ".tmp" + 
@@ -370,43 +381,6 @@
                " && rm -rf " + dom.getUser().getHomedir() + "/doms/" + domName +
                " && invoke-rc.d apache2 reload >/dev/null 2>&1");
        return vhostDelProcessor;
    }
    private Processor createMovePacDomainContent(EntityManager em, Domain dom) {
        Pac pac = dom.getUser().getPac();
        String pacName = pac.getName();
        String pacDir = "/home/pacs/" + pacName;
        String domDir = pacDir + "/doms/" + pacName + ".hostsharing.net";
        String[] sourceDirs = new String[] { "web", "web-ssl", "cgi", "cgi-ssl", "fastcgi", "fastcgi-ssl" } ;
        String[] targetDirs = new String[] { "htdocs", "htdocs-ssl", "cgi", "cgi-ssl", "fastcgi", "fastcgi-ssl" } ;
        CompoundProcessor processor = new CompoundProcessor();
        for (int idx = 0; idx < targetDirs.length; idx++) {
            processor.appendProcessor(
                    new ShellProcessor("rm -rf " + domDir + "/" + targetDirs[idx]));
        }
        for (int idx = 0; idx < sourceDirs.length; idx++) {
            processor.appendProcessor(
                new ShellProcessor("shopt -s dotglob && ls " + pacDir + "/" + sourceDirs[idx] + " >/dev/null 2>&1" +
                        " && mv " + pacDir + "/" + sourceDirs[idx] + " " + domDir + "/" + targetDirs[idx] +
                        " || echo 'directory " + pacDir + "/" + sourceDirs[idx] + " not found'"));
        }
        processor.appendProcessor(
                new ShellProcessor("test -L " + domDir + "/htdocs" +
                        " && test $( stat -c '%N' " + domDir + "/htdocs |sed -e\"s/[\\`']//g\" |cut -d ' ' -f 3 ) = web-ssl " +
                        " && cd " + domDir +
                        " && rm " + domDir + "/htdocs" +
                        " && ln -sf htdocs-ssl htdocs" +
                        " && chown -h " + pacName + ":" + pacName + " " + domDir + "/htdocs" +
                        " || echo 'link htdocs not found'"));
        processor.appendProcessor(
                new ShellProcessor("test -L " + domDir + "/htdocs-ssl" +
                        " && test $( stat -c '%N' " + domDir + "/htdocs-ssl |sed -e\"s/[\\`']//g\" |cut -d ' ' -f 3 ) = web " +
                        " && cd " + domDir +
                        " && rm " + domDir + "/htdocs-ssl" +
                        " && ln -sf htdocs htdocs-ssl" +
                        " && chown -h " + pacName + ":" + pacName + " " + domDir + "/htdocs-ssl" +
                        " || echo 'link htdocs-ssl not found'"));
        return processor;
    }
    private String selectVHostTemplate(Domain dom) {
hsarweb/src/de/hsadmin/web/AbstractProperty.java
New file
@@ -0,0 +1,5 @@
package de.hsadmin.web;
public class AbstractProperty {
}
hsarweb/src/de/hsadmin/web/ListOfStringsProperty.java
New file
@@ -0,0 +1,15 @@
package de.hsadmin.web;
import java.util.List;
public class ListOfStringsProperty extends AbstractProperty {
    public List<String> properties;
    public ListOfStringsProperty(){
// ??        this.properties = new List<String>();
    }
    public boolean Add(String string){
         return properties.add(string);
    }
}
hsarweb/src/de/hsadmin/web/StringProperty.java
New file
@@ -0,0 +1,10 @@
package de.hsadmin.web;
public class StringProperty extends AbstractProperty {
    public String property ;
    public StringProperty(String property) {
        this.property = property;
    }
}
hsarweb/src/de/hsadmin/web/vaadin/DomainOptionsPropertyFieldFactory.java
New file
@@ -0,0 +1,116 @@
/**
 *
 */
package de.hsadmin.web.vaadin;
import java.util.HashMap;
import java.util.Map;
import com.vaadin.data.Property;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.terminal.Sizeable;
import com.vaadin.ui.AbstractField;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Select;
import com.vaadin.ui.VerticalLayout;
import de.hsadmin.web.AbstractProperty;
import de.hsadmin.web.HsarwebException;
import de.hsadmin.web.ListOfStringsProperty;
import de.hsadmin.web.config.PropertyConfig;
import de.hsadmin.web.config.PropertyFieldFactory;
/**
 * @author pblissenbach
 *
 */
public class DomainOptionsPropertyFieldFactory implements PropertyFieldFactory {
    private Map<String,AbstractProperty> optionTypes ; // TODO: auf Vorrat hier
    private ListOfStringsProperty setOptions ;
    private boolean readOnly = false;
    private boolean writeOnce = false;
    private VerticalLayout layout;
    public DomainOptionsPropertyFieldFactory() {
        // TODO: besorge Options und ihre Typen aus der DB
        optionTypes = new HashMap<String,AbstractProperty>() ;
        optionTypes.put("backupmxforexternalmx", null);
        optionTypes.put("greylisting", null);
        optionTypes.put("htdocsfallback", null);
        optionTypes.put("includes", null);
        optionTypes.put("indexes", null);
        optionTypes.put("multiviews", null);
        optionTypes.put("nonexistiondomainoptionfortesting", null); // TESTCASE
        optionTypes.put("php", null);
        // TODO: besorge Options  .... Ende
//        setOptions = null ;
        setOptions = new ListOfStringsProperty() ;
        // TODO Auto-generated constructor stub
    }
    @Override
    public Object createFieldComponent(PropertyConfig prop, Object value) {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public AbstractProperty getValue(PropertyConfig prop, Object component)
            throws HsarwebException {
        return setOptions;
    }
    @Override
    public void setReadOnly(boolean readOnly) {
        this.readOnly = readOnly;
    }
    @Override
    public boolean isReadOnly() {
        return readOnly;
    }
    @Override
    public void setWriteOnce(boolean writeOnce) {
        this.writeOnce = writeOnce;
    }
    @Override
    public boolean isWriteOnce() {
        return writeOnce;
    }
    class SingleDomainOption {
        private HorizontalLayout targetLine;
        private HorizontalLayout leftPart;
        private HorizontalLayout rightPart;
        private int index;
        private String optionName;
        private DomainOptionsPropertyFieldFactory owner;
        protected SingleDomainOption(DomainOptionsPropertyFieldFactory owner, int key, String optionName, Object optionValue) {
            this.owner = owner;
            this.index = key;
            this.optionName = optionName;
            targetLine = new HorizontalLayout();
            targetLine.setWidth(480.0f, Sizeable.UNITS_PIXELS);
            leftPart = new HorizontalLayout();
            leftPart.setWidth(100.0f, Sizeable.UNITS_PIXELS);
            leftPart.setCaption(optionName);
            rightPart = new HorizontalLayout();
            rightPart.setWidth(380.0f, Sizeable.UNITS_PIXELS);
            // ToDO: Fallunterscheidungen nach Optionsart. Z.Z. nur Boolean.
        }
        public String getValue() {
            String value = null;
            if (rightPart.getComponentCount() > 0) {
                Object object = ((AbstractField) rightPart.getComponent(0)).getValue();
                if (object != null && object instanceof String) {
                    value = ((String) object).trim();
                }
            }
            return value;
        }
    }
}