HSAdmin Backend Domains, E-Mail, Datenbanken
Michael Hierweck
2012-09-21 be606b0e1fb9989bee7fa65e28d5984da6ab4d7f
Merge remote-tracking branch 'origin/master'
8 files modified
191 ■■■■ changed files
hsarback/build.xml 2 ●●● patch | view | raw | blame | history
hsarback/database/database_update.sql 80 ●●●●● patch | view | raw | blame | history
hsarback/database/schema.sql 4 ●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/mods/dom/DomainProcessorFactory.java 9 ●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/mods/pac/Pac.java 2 ●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/mods/pac/PacModuleImpl.java 26 ●●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/mods/user/UnixUser.java 2 ●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/remote/PacRemote.java 66 ●●●●● patch | view | raw | blame | history
hsarback/build.xml
@@ -39,7 +39,7 @@
    <target name="deploy" depends="war">
        <delete dir="${hsar.deploy.dir}/hsar" />
        <copy file="build/hsar.war" todir="${hsar.deploy.dir}" />
        <sleep minutes="2"/>
        <!-- <sleep minutes="2"/> -->
    </target>
    <target name="jar" depends="enhance">
hsarback/database/database_update.sql
@@ -0,0 +1,80 @@
-- Migrate database from version 2.1 to version 2.2
--
-- domain options
--
CREATE SEQUENCE domain_option_id_seq
    INCREMENT BY 1
    NO MAXVALUE
    NO MINVALUE
    CACHE 1;
CREATE TABLE domain_option (
    domain_option_id integer DEFAULT nextval(('"domain_option_id_seq"'::text)::regclass) NOT NULL,
    domain_option_name character varying(50) NOT NULL
);
ALTER TABLE ONLY domain_option
    ADD CONSTRAINT pk_domain_option PRIMARY KEY (domain_option_id);
CREATE UNIQUE INDEX domain_option_name_idx ON domain_option USING btree ( domain_option_name );
CREATE TABLE domain__domain_option (
    domain_option_id integer NOT NULL,
    domain_id integer NOT NULL
);
ALTER TABLE ONLY domain__domain_option
    ADD CONSTRAINT pk_domain__domain_option PRIMARY KEY (domain_option_id, domain_id);
ALTER TABLE ONLY domain__domain_option
    ADD CONSTRAINT domain_option_id_fkey FOREIGN KEY (domain_option_id)
        REFERENCES domain_option(domain_option_id) DEFERRABLE;
ALTER TABLE ONLY domain__domain_option
    ADD CONSTRAINT domain_id_fkey FOREIGN KEY (domain_id)
        REFERENCES domain(domain_id) DEFERRABLE;
--
-- table: domain_option
--
INSERT INTO domain_option (domain_option_name)
    VALUES ('backupmxforexternalmx');
INSERT INTO domain_option (domain_option_name)
    VALUES ('greylisting');
INSERT INTO domain_option (domain_option_name)
    VALUES ('htdocsfallback');
INSERT INTO domain_option (domain_option_name)
    VALUES ('includes');
INSERT INTO domain_option (domain_option_name)
    VALUES ('indexes');
INSERT INTO domain_option (domain_option_name)
    VALUES ('multiviews');
--
-- new domain options settings
--
-- existing default = ON
--
INSERT INTO domain__domain_option     SELECT domain_option_id, domain_id
    FROM domain, domain_option
    WHERE domain_option.domain_option_name = 'greylisting' ;
INSERT INTO domain__domain_option SELECT domain_option_id, domain_id
    FROM domain, domain_option
    WHERE domain_option.domain_option_name = 'htdocsfalback' ;
INSERT INTO domain__domain_option SELECT domain_option_id, domain_id
    FROM domain, domain_option
    WHERE domain_option.domain_option_name = 'includes' ;
INSERT INTO domain__domain_option SELECT domain_option_id, domain_id
    FROM domain, domain_option
    WHERE domain_option.domain_option_name = 'indexes' ;
INSERT INTO domain__domain_option SELECT domain_option_id, domain_id
    FROM domain, domain_option
    WHERE domain_option.domain_option_name = 'multiviews' ;
--
-- existing default = OFF
--
DELETE FROM domain__domain_option USING domain_option
    WHERE domain__domain_option.domain_option_id = domain_option.domain_option_id
        AND domain_option.domain_option_name = 'backupmxforexternalmx' ;
--
-- End of migratino to version 2.2
--
hsarback/database/schema.sql
@@ -900,6 +900,10 @@
ALTER TABLE ONLY queue_task
    ADD CONSTRAINT queue_task_user_id_fkey FOREIGN KEY (user_id) REFERENCES unixuser(unixuser_id) ON DELETE SET NULL;
--
-- domain options
--
CREATE SEQUENCE domain_option_id_seq
    INCREMENT BY 1
    NO MAXVALUE
hsarback/src/de/hsadmin/mods/dom/DomainProcessorFactory.java
@@ -27,8 +27,13 @@
public class DomainProcessorFactory implements EntityProcessorFactory {
    private static final String[] DW_STRUCTURE = new String[] { "htdocs", "htdocs-ssl", "subs", "subs/www", "subs-ssl", "subs-ssl/www", "cgi", "fastcgi", "cgi-ssl", "fastcgi-ssl", "etc", "var" };
    private static final String[] SW_STRUCTURE = new String[] { "htdocs", "htdocs-ssl", "subs", "subs/www", "subs-ssl", "subs-ssl/www", "etc", "var" };
    private static final String[] DW_STRUCTURE = new String[] {
        "htdocs", "htdocs-ssl", "subs", "subs/www", "subs-ssl", "subs-ssl/www", "cgi", "fastcgi", "cgi-ssl", "fastcgi-ssl", "etc", "var"
    };
    private static final String[] SW_STRUCTURE = new String[] {
        "htdocs", "htdocs-ssl", "subs", "subs/www", "subs-ssl", "subs-ssl/www", "etc", "var"
    };
    public <T extends AbstractEntity> Processor createCreateProcessor(EntityManager em, T entity) throws ProcessorException {
        String hiveName = entity.getHiveName();
hsarback/src/de/hsadmin/mods/pac/Pac.java
@@ -75,7 +75,7 @@
    @ManyToOne(fetch = EAGER)
    private INetAddress oldINetAddr;
    @OneToMany(fetch = LAZY, cascade = ALL, mappedBy="pac")
    @OneToMany(fetch = EAGER, cascade = ALL, mappedBy="pac")
    private Set<PacComponent> pacComponents;
    @OneToMany(fetch = LAZY, cascade = ALL, mappedBy="pac")
hsarback/src/de/hsadmin/mods/pac/PacModuleImpl.java
@@ -110,9 +110,16 @@
    }
    @Override
    public AbstractEntity update(AbstractEntity existingEntity)
    public AbstractEntity update(AbstractEntity entity)
            throws HSAdminException {
        throw new AuthorisationException(getTransaction().getLoginUser(), "update", existingEntity);
        UnixUser loginUser = getTransaction().getLoginUser();
        if (entity instanceof Pac) {
            Pac pac = (Pac) entity;
        } else {
            throw new AuthorisationException(loginUser, "update", entity);
        }
        needsWriteAccessOn(entity, "update");
        return super.update(entity);
    }
    @Override
@@ -154,4 +161,19 @@
        super.delete(existingEntity);
    }
    
    private void needsWriteAccessOn(AbstractEntity entity, String method) throws AuthorisationException {
        UnixUser loginUser = getTransaction().getLoginUser();
        if (entity instanceof Pac) {
            Pac pac = (Pac) entity;
            String aLoginUserName = loginUser.getName();
            boolean isPacAdmin = loginUser.hasPacAdminRoleFor(pac);
            boolean isCustomer = aLoginUserName.equals(pac.getCustomer().getName());
            boolean isHostmaster = loginUser.hasHostmasterRole();
            if (!isPacAdmin && !isCustomer && !isHostmaster) {
                throw new AuthorisationException(loginUser, method, pac);
            }
        } else {
            throw new AuthorisationException(loginUser, method, entity);
        }
    }
}
hsarback/src/de/hsadmin/mods/user/UnixUser.java
@@ -275,7 +275,7 @@
        return getName().equals(cust.getName()) || hasHostmasterRole();
    }
    public boolean hasPacAdminRoleFor(de.hsadmin.mods.pac.Pac pac) {
    public boolean hasPacAdminRoleFor(Pac pac) {
        return pac != null && 
            (pac.getName().equals(getName())
                || hasCustomerRoleFor(pac.getCustomer()) );
hsarback/src/de/hsadmin/remote/PacRemote.java
@@ -1,10 +1,9 @@
package de.hsadmin.remote;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.Set;
import de.hsadmin.core.model.AbstractEntity;
import de.hsadmin.core.util.TextUtil;
@@ -27,27 +26,38 @@
        resultMap.put("curinetaddr", pac.getCurINetAddr().getInetAddr());
        resultMap.put("created", TextUtil.format(pac.getCreated()));
        resultMap.put("basepac", pac.getBasepac().getName());
        SortedSet<PacComponent> sortedComponents = new TreeSet<PacComponent>(new Comparator<PacComponent>() {
            @Override
            public int compare(PacComponent o1, PacComponent o2) {
                return o2.getBaseComponent().getSorting() - o1.getBaseComponent().getSorting();
            }
        });
        sortedComponents.addAll(pac.getPacComponents());
        StringBuffer bf = new StringBuffer();
        boolean empty = true;
        for (PacComponent comp : sortedComponents) {
            if (comp.getQuantity() > 0) {
                if (!empty) {
                    bf.append("; ");
                }
                bf.append(comp.getBaseComponent().getFeature());
                bf.append("=");
                bf.append(comp.getQuantity());
                empty = false;
        Map<String, Object> components = new HashMap<String, Object>();
        Set<PacComponent> pacComponents = pac.getPacComponents();
        for (PacComponent comp : pacComponents) {
            int quantity = comp.getQuantity();
            if (quantity > 0) {
                components.put(comp.getBaseComponent().getFeature(), Integer.toString(quantity));
            }
        }
        resultMap.put("components", bf.toString());
        resultMap.put("components", components);
//        SortedSet<PacComponent> sortedComponents = new TreeSet<PacComponent>(new Comparator<PacComponent>() {
//            @Override
//            public int compare(PacComponent o1, PacComponent o2) {
//                return o2.getBaseComponent().getSorting() - o1.getBaseComponent().getSorting();
//            }
//        });
//        sortedComponents.addAll(pac.getPacComponents());
//        StringBuffer bf = new StringBuffer();
//        boolean empty = true;
//        for (PacComponent comp : sortedComponents) {
//            if (comp.getQuantity() > 0) {
//                if (!empty) {
//                    bf.append("; ");
//                }
//                bf.append(comp.getBaseComponent().getFeature());
//                bf.append("=");
//                bf.append(comp.getQuantity());
//                empty = false;
//            }
//        }
//        resultMap.put("components", bf.toString());
    }
    @Override
@@ -86,7 +96,17 @@
            hive.setName(hiveName);
            pac.setHive(hive);
        }
        pac.setName((String) setParams.get("name"));
        Object componentsObj = setParams.get("components");
        if (componentsObj != null && componentsObj instanceof Map) {
            Map<?, ?> componentsMap = (Map<?, ?>) componentsObj;
            for (Object key : componentsMap.keySet()) {
                pac.getPacComponent(key.toString()).setQuantity(Integer.parseInt(componentsMap.get(key).toString()));
            }
        }
        Object nameParamObj = setParams.get("name");
        if (nameParamObj != null && nameParamObj instanceof String) {
            pac.setName((String) nameParamObj);
        }
    }
    @Override