HSAdmin Backend Domains, E-Mail, Datenbanken
Peter Hormanns
2012-11-13 0f7ee2bf1a6d326d4c849f9e6422dbfd0d3037c3
fix: set default options for compatibility, allow update on pac-domain
1 files modified
38 ■■■■ changed files
hsarback/src/de/hsadmin/mods/dom/DomainModuleImpl.java 38 ●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/mods/dom/DomainModuleImpl.java
@@ -19,6 +19,18 @@
public class DomainModuleImpl extends AbstractModuleImpl {
    
    public static final String DOMOPT_GREYLISTING = "greylisting";
    public static final String DOMOPT_MULTIVIEWS = "multiviews";
    public static final String DOMOPT_INDEXES = "indexes";
    public static final String DOMOPT_HTDOCSFALLBACK = "htdocsfallback";
    public static final String DOMOPT_INCLUDES = "includes";
    public static final String DOMOPT_BACKUPFOREXTERNALMX = "backupmxforexternalmx";
    public static final String[] ALL_DOMOPTS = new String[] { DOMOPT_GREYLISTING, DOMOPT_MULTIVIEWS,
        DOMOPT_INDEXES, DOMOPT_HTDOCSFALLBACK, DOMOPT_INCLUDES, DOMOPT_BACKUPFOREXTERNALMX };
    public static final String[] DEFAULT_DOMOPTS = new String[] { DOMOPT_GREYLISTING, DOMOPT_MULTIVIEWS,
        DOMOPT_INDEXES, DOMOPT_HTDOCSFALLBACK, DOMOPT_INCLUDES };
    @Override
    public AbstractEntity initialize(AbstractEntity newEntity) throws AuthorisationException {
        AbstractEntity newDom = super.initialize(newEntity);
@@ -123,16 +135,18 @@
        dom.setUser((UnixUser) adminQuery.getSingleResult());
        needsWriteAccessOn(newEntity, "add");
        em.persist(dom);
        Query q = em.createQuery("SELECT opt FROM " +
                DomainOption.class.getAnnotation(javax.persistence.Entity.class).name() +
                " opt WHERE opt.name=:optName");
        HashSet<DomainOption> domainOptions = new HashSet<DomainOption>();
        q.setParameter("optName", "greylisting");
        List<?> list = q.getResultList();
        if (list.size() != 1) {
            throw new HSAdminException("invalid domain option: " + "greylisting");
        } else {
            domainOptions.add((DomainOption) list.get(0));
        for (String domOpt : DEFAULT_DOMOPTS) {
            Query q = em.createQuery("SELECT opt FROM " +
                    DomainOption.class.getAnnotation(javax.persistence.Entity.class).name() +
                    " opt WHERE opt.name=:optName");
            q.setParameter("optName", domOpt);
            List<?> list = q.getResultList();
            if (list.size() == 1) {
                domainOptions.add((DomainOption) list.get(0));
            } else {
                throw new HSAdminException("invalid domain option: " + domOpt);
            }
        }
        dom.setDomainoptions(domainOptions);
        if (dom.isPacDomain()) {
@@ -234,8 +248,10 @@
            if (dom.isPacDomain() && !dom.getUser().getName().equals(domPac.getName())) {
                throw new AuthorisationException(loginUser, method, dom);
            }
            if (dom.isPacDomain() && !isHostmaster && !"add".equals(method)) {
                throw new AuthorisationException(loginUser, method, dom);
            if (dom.isPacDomain() && !isHostmaster) {
                if (!"add".equals(method) && !"update".equals(method)) {
                    throw new AuthorisationException(loginUser, method, dom);
                }
            }
        } else {
            throw new AuthorisationException(loginUser, method, entity);