fix: set default options for compatibility, allow update on pac-domain

This commit is contained in:
Peter Hormanns 2012-11-13 12:20:13 +01:00
parent 378339e99a
commit 0f7ee2bf1a

View File

@ -19,6 +19,18 @@ import de.hsadmin.mods.user.UnixUser;
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 @@ public class DomainModuleImpl extends AbstractModuleImpl {
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 @@ public class DomainModuleImpl extends AbstractModuleImpl {
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);