67 lines
2.7 KiB
Java
67 lines
2.7 KiB
Java
package de.hsadmin.mods.email;
|
|
|
|
import java.util.List;
|
|
|
|
import javax.persistence.EntityManager;
|
|
import javax.persistence.Query;
|
|
|
|
import de.hsadmin.core.model.AbstractEntity;
|
|
import de.hsadmin.core.model.AbstractModuleImpl;
|
|
import de.hsadmin.core.model.AuthorisationException;
|
|
import de.hsadmin.core.model.HSAdminException;
|
|
import de.hsadmin.core.model.Transaction;
|
|
import de.hsadmin.hostsharing.BasePacType;
|
|
import de.hsadmin.hostsharing.MultiOption;
|
|
import de.hsadmin.mods.pac.Pac;
|
|
import de.hsadmin.mods.user.UnixUser;
|
|
|
|
public class EMailAliasModuleImpl extends AbstractModuleImpl {
|
|
|
|
@Override
|
|
public List<AbstractEntity> search(Class<? extends AbstractEntity> entityClass,
|
|
String condition, String orderBy) throws HSAdminException {
|
|
if (orderBy == null || orderBy.length() == 0) {
|
|
orderBy = "ORDER BY obj.name ASC";
|
|
}
|
|
return super.search(entityClass, condition, orderBy);
|
|
}
|
|
|
|
@Override
|
|
public AbstractEntity add(AbstractEntity newEntity) throws HSAdminException {
|
|
Transaction transaction = getTransaction();
|
|
UnixUser loginUser = transaction.getLoginUser();
|
|
EMailAlias alias = (EMailAlias) newEntity;
|
|
String name = alias.getName();
|
|
if (name.length() > 5 && (name.charAt(5) != '-') || name.length() == 6) {
|
|
throw new AuthorisationException(loginUser, "add", newEntity);
|
|
}
|
|
EntityManager em = getTransaction().getEntityManager();
|
|
Query qPac = em.createQuery("SELECT obj FROM Pacs obj WHERE obj.name = :pacName");
|
|
qPac.setParameter("pacName", name.substring(0, 5));
|
|
Object singleResult = qPac.getSingleResult();
|
|
Pac pac = (Pac) singleResult;
|
|
if (pac == null || !pac.isReadAllowedFor(loginUser)) {
|
|
throw new AuthorisationException(loginUser, "add", newEntity);
|
|
}
|
|
if (!name.startsWith(pac.getName())) {
|
|
throw new AuthorisationException(loginUser, "add", newEntity);
|
|
}
|
|
//TODO: Needs better implementation
|
|
String pacType = pac.getBasepac().getName();
|
|
if (!pacType.equals(BasePacType.PAC_WEB) && !pacType.equals(BasePacType.PAC_DW) && !pacType.equals(BasePacType.PAC_SW)) {
|
|
throw new HSAdminException("not allowed for this packet type");
|
|
}
|
|
//TODO: Needs better implementation
|
|
Query qEmailAliases = em.createQuery("SELECT obj FROM EMailAliases obj WHERE obj.pac.id = :pacId");
|
|
qEmailAliases.setParameter("pacId", pac.getId());
|
|
Query qEmailAddresses = em.createQuery("SELECT obj FROM EMailAddresses obj WHERE obj.domain.user.pac.id = :pacId");
|
|
qEmailAddresses.setParameter("pacId", pac.getId());
|
|
if (qEmailAliases.getResultList().size() + qEmailAddresses.getResultList().size() >= MultiOption.EMAIL_ITEMS_PER_OPTION * pac.getQuantityByComponentName("MULTI")) {
|
|
throw new HSAdminException("included email addresses/aliases exceeded");
|
|
}
|
|
alias.setPac(pac);
|
|
return super.add(newEntity);
|
|
}
|
|
|
|
}
|