diff --git a/hsarback/conf/META-INF/persistence.xml b/hsarback/conf/META-INF/persistence.xml
index 3174504..7f231f0 100644
--- a/hsarback/conf/META-INF/persistence.xml
+++ b/hsarback/conf/META-INF/persistence.xml
@@ -24,9 +24,30 @@
de.hsadmin.mods.db.Database
de.hsadmin.mods.db.MySqlDatabase
de.hsadmin.mods.db.PgSqlDatabase
-
-
-
-
+
+
+ HsarDataSource
+ de.hsadmin.core.qserv.QueueTask
+ de.hsadmin.mods.cust.Customer
+ de.hsadmin.mods.cust.Contact
+ de.hsadmin.mods.cust.BankAccount
+ de.hsadmin.mods.pac.Pac
+ de.hsadmin.mods.pac.BasePac
+ de.hsadmin.mods.pac.BaseComponent
+ de.hsadmin.mods.pac.Component
+ de.hsadmin.mods.pac.PacComponent
+ de.hsadmin.mods.pac.Hive
+ de.hsadmin.mods.pac.INetAddress
+ de.hsadmin.mods.user.UnixUser
+ de.hsadmin.mods.dom.Domain
+ de.hsadmin.mods.dom.DomainOption
+ de.hsadmin.mods.email.EMailAddress
+ de.hsadmin.mods.email.EMailAlias
+ de.hsadmin.mods.db.DatabaseUser
+ de.hsadmin.mods.db.MySqlUser
+ de.hsadmin.mods.db.PgSqlUser
+ de.hsadmin.mods.db.Database
+ de.hsadmin.mods.db.MySqlDatabase
+ de.hsadmin.mods.db.PgSqlDatabase
diff --git a/hsarback/lib/enhance/asm-3.2.jar b/hsarback/lib/enhance/asm-3.2.jar
new file mode 100644
index 0000000..ca9f8d2
Binary files /dev/null and b/hsarback/lib/enhance/asm-3.2.jar differ
diff --git a/hsarback/lib/enhance/openjpa-2.1.1.jar b/hsarback/lib/enhance/openjpa-2.2.1.jar
similarity index 57%
rename from hsarback/lib/enhance/openjpa-2.1.1.jar
rename to hsarback/lib/enhance/openjpa-2.2.1.jar
index ba14cba..8a7b663 100644
Binary files a/hsarback/lib/enhance/openjpa-2.1.1.jar and b/hsarback/lib/enhance/openjpa-2.2.1.jar differ
diff --git a/hsarback/src/de/hsadmin/core/model/LoginBean.java b/hsarback/src/de/hsadmin/core/model/LoginBean.java
new file mode 100644
index 0000000..130591b
--- /dev/null
+++ b/hsarback/src/de/hsadmin/core/model/LoginBean.java
@@ -0,0 +1,82 @@
+package de.hsadmin.core.model;
+
+import java.util.Set;
+
+import javax.ejb.LocalBean;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+import de.hsadmin.core.util.Config;
+import de.hsadmin.mods.cust.Customer;
+import de.hsadmin.mods.pac.Pac;
+import de.hsadmin.mods.user.UnixUser;
+
+@Stateless(name="LoginBean")
+@LocalBean
+public class LoginBean implements LoginBeanLocal {
+
+ @PersistenceContext(unitName="hsar")
+ private EntityManager entityManager;
+
+ @Override
+ public UnixUser login(String user, String ticket) throws AuthenticationException {
+ String ticketUser = TicketValidator.getInstance().validateTicket(ticket);
+ if (user != null && user.equals(ticketUser)) {
+ return readLoginUser(ticketUser); // user himself
+ }
+ if (ticketUser != null && ticketUser.length() == 2) {
+ return readLoginUser(ticketUser); // 2-letter hostmaster
+ }
+ String hostmasterAccountPrefix = Config.getInstance().getProperty("accountprefix.hostmaster", "hsh01") + "-";
+ if (ticketUser != null && ticketUser.startsWith(hostmasterAccountPrefix) && ticketUser.length() == 8) {
+ return readLoginUser(ticketUser); // hsh01 hostmaster
+ }
+ if (ticketUser != null && ticketUser.length() == 5) {
+ Query userQuery = entityManager.createQuery("SELECT u FROM UnixUsers u WHERE u.name = :username");
+ userQuery.setParameter("username", user);
+ UnixUser unixUser = (UnixUser) userQuery.getSingleResult();
+ String pacName = unixUser.getPac().getName();
+ boolean loginOk = ticketUser.equals(pacName);
+ if (loginOk) {
+ return readLoginUser(ticketUser);
+ }
+ throw new AuthenticationException("User " + ticketUser + " is not allowed to run as " + user);
+ }
+ String memberAccountPrefix = Config.getInstance().getProperty("accountprefix.customer", "hsh00") + "-";
+ if (ticketUser != null && (ticketUser.length() == 3 || (ticketUser.length() >= 9 && ticketUser.startsWith(memberAccountPrefix)))) {
+ Query memberQuery = entityManager.createQuery("SELECT c FROM Customers c WHERE c.name = :membername");
+ memberQuery.setParameter("membername", ticketUser.length() == 3 ? (memberAccountPrefix + ticketUser) : ticketUser);
+ Customer member = (Customer) memberQuery.getSingleResult();
+ Set pacs = member.getPacs();
+ for (Pac p : pacs) {
+ if (p.getName().equals(user)) {
+ return readLoginUser(ticketUser); // member as pac-admin
+ }
+ Set users = p.getUnixUser();
+ for (UnixUser u : users) {
+ if (u.getName().equals(user)) {
+ return readLoginUser(ticketUser); // member as pac-user
+ }
+ }
+ }
+ }
+ throw new AuthenticationException("User " + ticketUser + " is not allowed to run as " + user);
+ }
+
+ private UnixUser readLoginUser(String loginName) {
+ if (loginName != null && loginName.length() == 2) {
+ loginName = Config.getInstance().getProperty("accountprefix.hostmaster", "hsh01") + "-" + loginName;
+ }
+ if (loginName != null && loginName.length() == 3) {
+ loginName = Config.getInstance().getProperty("accountprefix.customer", "hsh00") + "-" + loginName;
+ }
+ Query userQuery = entityManager.createQuery("SELECT u FROM UnixUsers u WHERE u.name = :username");
+ userQuery.setParameter("username", loginName);
+ UnixUser user = (UnixUser) userQuery.getSingleResult();
+ user.getPac().getCustomer();
+ return user;
+ }
+
+}
diff --git a/hsarback/src/de/hsadmin/core/model/LoginBeanLocal.java b/hsarback/src/de/hsadmin/core/model/LoginBeanLocal.java
new file mode 100644
index 0000000..5d6100c
--- /dev/null
+++ b/hsarback/src/de/hsadmin/core/model/LoginBeanLocal.java
@@ -0,0 +1,12 @@
+package de.hsadmin.core.model;
+
+import javax.ejb.Local;
+
+import de.hsadmin.mods.user.UnixUser;
+
+@Local
+public interface LoginBeanLocal {
+
+ public abstract UnixUser login(String user, String ticket) throws AuthenticationException;
+
+}
\ No newline at end of file
diff --git a/hsarback/src/de/hsadmin/core/model/LoginSession.java b/hsarback/src/de/hsadmin/core/model/LoginSession.java
index 8285d18..7f5fd37 100644
--- a/hsarback/src/de/hsadmin/core/model/LoginSession.java
+++ b/hsarback/src/de/hsadmin/core/model/LoginSession.java
@@ -1,99 +1,29 @@
package de.hsadmin.core.model;
-import java.util.Set;
-
import javax.ejb.LocalBean;
import javax.ejb.Stateful;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.persistence.PersistenceContextType;
-import javax.persistence.Query;
-import de.hsadmin.core.util.Config;
-import de.hsadmin.mods.cust.Customer;
-import de.hsadmin.mods.pac.Pac;
import de.hsadmin.mods.user.UnixUser;
@Stateful(name="LoginSession")
@LocalBean
public class LoginSession implements LoginSessionLocal {
- @PersistenceContext(unitName="hsadmin",type=PersistenceContextType.TRANSACTION)
- private EntityManager entityManager;
-
- private String loginName;
+ private UnixUser loginUser;
@Override
public UnixUser getLoginUser() {
- String loginName = getLoginName();
- if (loginName != null && loginName.length() == 2) {
- loginName = Config.getInstance().getProperty("accountprefix.hostmaster", "hsh01") + "-" + loginName;
- }
- if (loginName != null && loginName.length() == 3) {
- loginName = Config.getInstance().getProperty("accountprefix.customer", "hsh00") + "-" + loginName;
- }
- Query userQuery = entityManager.createQuery("SELECT u FROM UnixUsers u WHERE u.name = :username");
- userQuery.setParameter("username", loginName);
- UnixUser unixUser = (UnixUser) userQuery.getSingleResult();
- return unixUser;
+ return loginUser;
}
@Override
public String getLoginName() {
- if (loginName != null) {
- return loginName;
- }
- throw new TechnicalException("no login");
+ return loginUser.getName();
}
@Override
- public boolean login(String user, String ticket) throws AuthenticationException {
- String ticketUser = TicketValidator.getInstance().validateTicket(ticket);
- if (user != null && user.equals(ticketUser)) {
- loginName = ticketUser;
- return true; // user himself
- }
- if (ticketUser != null && ticketUser.length() == 2) {
- loginName = ticketUser;
- return true; // 2-letter hostmaster
- }
- String hostmasterAccountPrefix = Config.getInstance().getProperty("accountprefix.hostmaster", "hsh01") + "-";
- if (ticketUser != null && ticketUser.startsWith(hostmasterAccountPrefix) && ticketUser.length() == 8) {
- loginName = ticketUser;
- return true; // hsh01 hostmaster
- }
- if (ticketUser != null && ticketUser.length() == 5) {
- Query userQuery = entityManager.createQuery("SELECT u FROM UnixUsers u WHERE u.name = :username");
- userQuery.setParameter("username", user);
- UnixUser unixUser = (UnixUser) userQuery.getSingleResult();
- String pacName = unixUser.getPac().getName();
- boolean loginOk = ticketUser.equals(pacName);
- if (loginOk) {
- loginName = ticketUser;
- }
- return loginOk; // pac-admin
- }
- String memberAccountPrefix = Config.getInstance().getProperty("accountprefix.customer", "hsh00") + "-";
- if (ticketUser != null && (ticketUser.length() == 3 || (ticketUser.length() >= 9 && ticketUser.startsWith(memberAccountPrefix)))) {
- Query memberQuery = entityManager.createQuery("SELECT c FROM Customers c WHERE c.name = :membername");
- memberQuery.setParameter("membername", ticketUser.length() == 3 ? (memberAccountPrefix + ticketUser) : ticketUser);
- Customer member = (Customer) memberQuery.getSingleResult();
- Set pacs = member.getPacs();
- for (Pac p : pacs) {
- if (p.getName().equals(user)) {
- loginName = ticketUser;
- return true; // member as pac-admin
- }
- Set users = p.getUnixUser();
- for (UnixUser u : users) {
- if (u.getName().equals(user)) {
- loginName = ticketUser;
- return true; // member as pac-user
- }
- }
- }
- }
- throw new AuthenticationException("User " + ticketUser + " is not allowed to run as " + user);
+ public void setLoginUser(UnixUser user) {
+ loginUser = user;
}
}
diff --git a/hsarback/src/de/hsadmin/core/model/LoginSessionLocal.java b/hsarback/src/de/hsadmin/core/model/LoginSessionLocal.java
index 196bcce..160cac1 100644
--- a/hsarback/src/de/hsadmin/core/model/LoginSessionLocal.java
+++ b/hsarback/src/de/hsadmin/core/model/LoginSessionLocal.java
@@ -7,11 +7,10 @@ import de.hsadmin.mods.user.UnixUser;
@Local
public interface LoginSessionLocal {
+ public abstract void setLoginUser(UnixUser user);
+
public abstract UnixUser getLoginUser();
public abstract String getLoginName();
- public abstract boolean login(String user, String ticket)
- throws AuthenticationException;
-
}
\ No newline at end of file
diff --git a/hsarback/src/de/hsadmin/core/model/Module.java b/hsarback/src/de/hsadmin/core/model/Module.java
index e519f6e..fbcde9e 100644
--- a/hsarback/src/de/hsadmin/core/model/Module.java
+++ b/hsarback/src/de/hsadmin/core/model/Module.java
@@ -20,4 +20,6 @@ public interface Module {
public AbstractEntity update(LoginSessionLocal session, AbstractEntity existingEntity) throws HSAdminException;
public void delete(LoginSessionLocal session, AbstractEntity existingEntity) throws HSAdminException;
+
+ public void detach(AbstractEntity update);
}
diff --git a/hsarback/src/de/hsadmin/mods/email/EMailAliasModuleImpl.java b/hsarback/src/de/hsadmin/mods/email/EMailAliasModuleImpl.java
index ac31e00..61649a4 100644
--- a/hsarback/src/de/hsadmin/mods/email/EMailAliasModuleImpl.java
+++ b/hsarback/src/de/hsadmin/mods/email/EMailAliasModuleImpl.java
@@ -5,6 +5,7 @@ import java.util.LinkedList;
import java.util.List;
import javax.ejb.EJB;
+import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
@@ -27,10 +28,11 @@ import de.hsadmin.hostsharing.MultiOption;
import de.hsadmin.mods.pac.Pac;
import de.hsadmin.mods.user.UnixUser;
-@Stateless
+@Stateless(name="EMailAliasModule")
+@LocalBean
public class EMailAliasModuleImpl implements Module {
- @PersistenceContext(name="hsadmin")
+ @PersistenceContext(name="hsar")
private EntityManager entityManager;
@EJB
diff --git a/hsarback/src/de/hsadmin/mods/user/UnixUser.java b/hsarback/src/de/hsadmin/mods/user/UnixUser.java
index d71daf1..70e6408 100644
--- a/hsarback/src/de/hsadmin/mods/user/UnixUser.java
+++ b/hsarback/src/de/hsadmin/mods/user/UnixUser.java
@@ -26,7 +26,7 @@ import de.hsadmin.mods.pac.Pac;
@Entity(name = "UnixUsers")
@Table(name = "unixuser")
@SequenceGenerator(name = "UnixUsersSeqGen", sequenceName = "unixuser_unixuser_id_seq")
-@AnnModuleImpl(de.hsadmin.mods.user.UnixUserModuleImpl.class)
+@AnnModuleImpl(UnixUserModuleImpl.class)
public class UnixUser extends AbstractEntity implements Serializable {
private static final long serialVersionUID = 7823071611805642906L;
diff --git a/hsarback/src/de/hsadmin/remote/EMailAliasRemote.java b/hsarback/src/de/hsadmin/remote/EMailAliasRemote.java
index 698f848..d0f3771 100644
--- a/hsarback/src/de/hsadmin/remote/EMailAliasRemote.java
+++ b/hsarback/src/de/hsadmin/remote/EMailAliasRemote.java
@@ -10,27 +10,24 @@ import java.util.Map;
import java.util.Properties;
import java.util.StringTokenizer;
-import javax.ejb.EJB;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import de.hsadmin.core.model.AbstractEntity;
-import de.hsadmin.core.model.AuthenticationException;
import de.hsadmin.core.model.AuthorisationException;
import de.hsadmin.core.model.HSAdminException;
+import de.hsadmin.core.model.LoginBeanLocal;
import de.hsadmin.core.model.LoginSessionLocal;
+import de.hsadmin.core.model.Module;
import de.hsadmin.mods.email.EMailAlias;
-import de.hsadmin.mods.email.EMailAliasModuleImpl;
import de.hsadmin.mods.user.UnixUser;
public class EMailAliasRemote {
- @EJB
+ private LoginBeanLocal login;
private LoginSessionLocal session;
-
- @EJB
- private EMailAliasModuleImpl module;
+ private Module module;
public EMailAliasRemote() {
Properties props = new Properties();
@@ -39,7 +36,8 @@ public class EMailAliasRemote {
try {
ctx = new InitialContext(props);
session = (LoginSessionLocal) ctx.lookup("LoginSessionLocal");
- module = (EMailAliasModuleImpl) ctx.lookup("EMailAliasModuleLocal");
+ login = (LoginBeanLocal) ctx.lookup("LoginBeanLocal");
+ module = (Module) ctx.lookup("EMailAliasModuleLocal");
} catch (NamingException e) {
e.printStackTrace();
}
@@ -49,25 +47,22 @@ public class EMailAliasRemote {
Map whereParams) throws HSAdminException {
String user = runAsUser;
try {
- if (session.login(user, ticket)) {
- UnixUser unixUser = session.getLoginUser();
- List list = module.search(session, getEntityClass(),
- buildQueryCondition(whereParams), null);
- if (list == null) {
- throw new HSAdminException("result list is null, runtime-error?");
- }
- ArrayList