Commit c72a525f by Juho Juopperi

Merge branch 'master' of dev.intra.insomnia.fi:/data/bortal

Conflicts:
	code/LanBortalBeans/ejbModule/fi/insomnia/bortal/beans/TestDataBean.java
	code/LanBortalBeansClient/ejbModule/fi/insomnia/bortal/beans/TestDataBeanLocal.java
2 parents 239ffb98 48a14a49
Showing with 448 additions and 212 deletions
......@@ -44,7 +44,7 @@ import com.sun.appserv.security.AppservPasswordLoginModule;
import com.sun.enterprise.security.auth.realm.InvalidOperationException;
import com.sun.enterprise.security.auth.realm.NoSuchUserException;
import fi.insomnia.bortal.beans.SessionHandlerBeanRemote;
import fi.insomnia.bortal.beans.JaasBeanRemote;
/**
*
......@@ -57,7 +57,8 @@ import fi.insomnia.bortal.beans.SessionHandlerBeanRemote;
public class BortalLoginModule extends AppservPasswordLoginModule {
// private static final org.slf4j.Logger logger = LoggerFactory.getLogger(BortalLoginModule.class);
// private static final org.slf4j.Logger logger =
// LoggerFactory.getLogger(BortalLoginModule.class);
/**
* Overrides the authenticateUser() method in AppservPasswordLoginModule
......@@ -68,7 +69,7 @@ public class BortalLoginModule extends AppservPasswordLoginModule {
protected void authenticateUser() throws LoginException {
log((new StringBuilder()).append("CustomRealm Auth Info:_username:")
.append(_username).append(";_password:").append(_password)
.append(_username).append(";_password:").append(_passwd)
.append(";_currentrealm:").append(_currentRealm).toString());
// Check if the given realm is SampleRealm
......@@ -76,14 +77,14 @@ public class BortalLoginModule extends AppservPasswordLoginModule {
throw new LoginException("Realm not SampleRealm");
}
SessionHandlerBeanRemote authbean = BortalRealm.getAuthBean();
JaasBeanRemote authbean = BortalRealm.getAuthBean();
if (authbean == null) {
throw new LoginException("Error. Could not get authentication bean!");
}
// Authenticate User
BortalRealm samplerealm = (BortalRealm) _currentRealm;
if (!authbean.authenticate(_username, _password)) {
if (!authbean.authenticate(_username, new String(_passwd))) {
// Login fails
throw new LoginException((new StringBuilder())
.append("customrealm:Login Failed for user ")
......@@ -122,5 +123,4 @@ public class BortalLoginModule extends AppservPasswordLoginModule {
.append("SimpleCustomLoginModule::").append(s).toString());
}
}
......@@ -48,7 +48,7 @@ import com.sun.enterprise.security.auth.realm.InvalidOperationException;
import com.sun.enterprise.security.auth.realm.NoSuchRealmException;
import com.sun.enterprise.security.auth.realm.NoSuchUserException;
import fi.insomnia.bortal.beans.SessionHandlerBeanRemote;
import fi.insomnia.bortal.beans.JaasBeanRemote;
/**
*
......@@ -60,6 +60,8 @@ public class BortalRealm extends AppservRealm {
// private static final Logger logger = LoggerFactory.getLogger(BortalRealm.class);
private static final String JAAS_BEAN_JNDI = "java:global/LanBortal/LanBortalBeans/JaasBean!fi.insomnia.bortal.beans.JaasBeanRemote";
/**
* Initialization - set the jaas-context property, Set UserA to devGroup and
* user B to testGroup
......@@ -107,17 +109,17 @@ public class BortalRealm extends AppservRealm {
append(s).toString());
}
public static SessionHandlerBeanRemote getAuthBean() {
public static JaasBeanRemote getAuthBean() {
Object beanObj = null;
try {
beanObj = new InitialContext().lookup("java:global/LanBortal/LanBortalBeans/SessionHandlerBean!fi.insomnia.bortal.beans.SessionHandlerBeanRemote");
beanObj = new InitialContext().lookup(JAAS_BEAN_JNDI);
} catch (NamingException e) {
log("Error fetching LoginHandlerRemote bean from initial context");
e.printStackTrace();
return null;
}
if (beanObj instanceof SessionHandlerBeanRemote) {
return (SessionHandlerBeanRemote) beanObj;
if (beanObj instanceof JaasBeanRemote) {
return (JaasBeanRemote) beanObj;
}
return null;
......
package fi.insomnia.bortal.beans;
import java.io.ByteArrayOutputStream;
import javax.annotation.security.DeclareRoles;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.servlet.ServletOutputStream;
import fi.insomnia.bortal.beanutil.AuthorisationBean;
import fi.insomnia.bortal.beanutil.AuthorisationBean.Right;
import fi.insomnia.bortal.beanutil.AuthorisationBean.RightType;
import fi.insomnia.bortal.beanutil.PdfPrinter;
import fi.insomnia.bortal.facade.BillFacade;
import fi.insomnia.bortal.model.Bill;
......@@ -24,7 +28,7 @@ public class BillBean implements BillBeanLocal {
private BillFacade billFacade;
@EJB
private SessionHandlerBean sessionbean;
private UserBeanLocal userBean;
@EJB
private SecurityBean secubean;
......@@ -45,7 +49,7 @@ public class BillBean implements BillBeanLocal {
}
Bill bill = billFacade.find(eventId, id);
Event event = bill.getEvent();
User currentuser = sessionbean.getCurrentUser(event);
User currentuser = userBean.getCurrentUser(event);
if (!currentuser.equals(bill.getUser()))
if (!authbean.isAuthorised(currentuser, Right.ADMIN, RightType.READ)) {
......@@ -59,4 +63,15 @@ public class BillBean implements BillBeanLocal {
return bill;
}
@Override
public ByteArrayOutputStream getPdfBillStream(Bill bill) {
if (bill == null) {
return null;
}
return new PdfPrinter(bill).output();
}
}
package fi.insomnia.bortal.beans;
import javax.ejb.Stateless;
/**
* Session Bean implementation class BillLineBean
*/
@Stateless
public class BillLineBean implements BillLineBeanLocal {
/**
* Default constructor.
*/
public BillLineBean() {
// TODO Auto-generated constructor stub
}
}
package fi.insomnia.bortal.beans;
import javax.ejb.Local;
@Local
public interface BillLineBeanLocal {
}
package fi.insomnia.bortal.beans;
import java.util.Enumeration;
import java.util.Vector;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.User;
/**
* Session Bean implementation class SessionHandlerBean
*/
@Stateless
public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
public static final String JAAS_SUPERADMINGROUP = "superadmin";
public static final String JAAS_USERGROUP = "user";
private static final Logger logger = LoggerFactory.getLogger(JaasBean.class);
@EJB
private UserFacade userfacade;
@EJB
private UserBean userbean;
/**
* Default constructor.
*/
public JaasBean() {
// TODO Auto-generated constructor stub
}
public User tryLogin(String username, String password) {
User user = userfacade.findByLogin(username.trim());
if (user != null && user.checkPassword(password)) {
return user;
}
return null;
}
@Override
public boolean authenticate(String username, String password) {
return (tryLogin(username, password) != null);
}
@Override
public Enumeration<String> getGroupNames(String user) {
User usr = userbean.getUser(user);
Vector<String> rights = new Vector<String>();
if (usr != null) {
rights.add(JAAS_USERGROUP);
if (usr.isSuperadmin()) {
rights.add(JAAS_SUPERADMINGROUP);
}
}
return rights.elements();
}
}
package fi.insomnia.bortal.beans;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import java.security.Principal;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Set;
import java.util.Vector;
import javax.annotation.Resource;
import javax.annotation.security.DeclareRoles;
import javax.ejb.EJB;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.facade.RoleFacade;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.AccessRight;
import fi.insomnia.bortal.model.Event;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.RoleRight;
import fi.insomnia.bortal.model.User;
/**
* Session Bean implementation class SessionHandlerBean
*/
@Stateless
@DeclareRoles("admin")
public class SessionHandlerBean implements SessionHandlerBeanLocal, SessionHandlerBeanRemote {
private static final Logger logger = LoggerFactory.getLogger(SessionHandlerBean.class);
@EJB
private UserFacade userfacade;
@EJB
private AccessRightBeanLocal accessRightBeanLocal;
@EJB
private RoleFacade roleFacade;
@Resource
private SessionContext context;
@EJB
private UserBean userbean;
/**
* Default constructor.
*/
public SessionHandlerBean() {
// TODO Auto-generated constructor stub
}
public boolean hasPermission(Permission target, User user, RolePermission permission) {
if (user == null) {
return false;
}
AccessRight expectedRight = accessRightBeanLocal.findOrCreate(target);
User dbusr = userfacade.find(user.getId());
if (dbusr != null) {
Set<Role> checkedRoles = new HashSet<Role>();
for (Role r : dbusr.getRoles()) {
if (getRights(r, expectedRight, permission, checkedRoles)) {
return true;
}
}
}
return false;
}
private static boolean getRights(Role role, AccessRight expectedRight, RolePermission permission, Set<Role> checkedRoles) {
if (checkedRoles.contains(role)) {
return false;
}
for (RoleRight rr : role.getRoleRights()) {
if (rr.getAccessRight().equals(expectedRight)) {
switch (permission) {
case READ:
if (rr.getRead()) {
return true;
}
break;
case WRITE:
if (rr.getWrite()) {
return true;
}
break;
case EXECUTE:
if (rr.isExecute()) {
return true;
}
}
}
}
checkedRoles.add(role);
for (Role r : role.getParents()) {
if (getRights(r, expectedRight, permission, checkedRoles)) {
return true;
}
}
return false;
}
public User tryLogin(String username, String password) {
User user = userfacade.findByLogin(username.trim());
if (user != null && user.checkPassword(password)) {
return user;
}
return null;
}
/**
* Makes sure default user and public role exist and the user is member of
* the role.
*/
public User getDefaultUser(Event event) {
Role publicRole = roleFacade.getOrCreatePublicRole(event);
User defaultUser = userfacade.getOrCreateDefaultUser();
if (!defaultUser.getRoles().contains(publicRole)) {
ArrayList<Role> userRoles = new ArrayList<Role>();
userRoles.add(publicRole);
defaultUser.setRoles(userRoles);
}
return defaultUser;
}
@Override
public boolean authenticate(String username, String password) {
return (tryLogin(username, password) != null);
}
@Override
public Enumeration<String> getGroupNames(String user) {
Vector<String> foo = new Vector<String>();
foo.add("admin");
return foo.elements();
}
@Override
public User getCurrentUser(Event event) {
Principal principal = context.getCallerPrincipal();
User ret = userbean.getUser(principal.getName());
if (ret == null) {
ret = getDefaultUser(event);
}
return ret;
}
}
......@@ -3,12 +3,15 @@ package fi.insomnia.bortal.beans;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.net.URISyntaxException;
import java.util.Calendar;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;
......@@ -16,12 +19,16 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.facade.CompoEntryFacade;
import fi.insomnia.bortal.facade.CompoFacade;
import fi.insomnia.bortal.facade.BillFacade;
import fi.insomnia.bortal.facade.BillLineFacade;
import fi.insomnia.bortal.facade.EventMapFacade;
import fi.insomnia.bortal.facade.EventOrganiserFacade;
import fi.insomnia.bortal.facade.PlaceFacade;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.Compo;
import fi.insomnia.bortal.model.CompoEntry;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.BillLine;
import fi.insomnia.bortal.model.Event;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.Place;
......@@ -31,6 +38,8 @@ import fi.insomnia.bortal.model.User;
* Session Bean implementation class TestDataBean
*/
@Stateless
@DeclareRoles(JaasBean.JAAS_SUPERADMINGROUP)
//@RolesAllowed(JaasBean.JAAS_SUPERADMINGROUP)
public class TestDataBean implements TestDataBeanLocal {
public static final String TEST_MAP_IMAGE_NAME = "testmap.png";
......@@ -51,6 +60,10 @@ public class TestDataBean implements TestDataBeanLocal {
private CompoFacade compoFacade;
@EJB
private CompoEntryFacade compoEntryFacade;
@EJB
private BillFacade billFacade;
@EJB
private BillLineFacade billLineFacade;
/**
* Default constructor.
......@@ -59,6 +72,78 @@ public class TestDataBean implements TestDataBeanLocal {
// TODO Auto-generated constructor stub
}
public User createUser() {
User u = new User();
u.setActive(true);
u.setAddress("Pallokorvankatu 1");
u.setNick("kavija");
Calendar bday = Calendar.getInstance();
bday.set(Calendar.YEAR, 1990);
u.setBirthday(bday);
u.setCreated(Calendar.getInstance());
u.setEmail("kalle.kavija@example.com");
u.setFemale(false);
u.setFirstnames("Kalle Kauko");
u.setLastname("Kävija");
u.setLogin("kavija");
u.setNick("^Kkavija^]9a8/");
u.resetPassword("kavija");
u.setPhone("123-45679854");
u.setTown("Keikyän MLK");
u.setPostalTown("Keykyä");
u.setZip("393929");
userFacade.create(u);
return u;
}
public Bill createBill(Event e, User u) {
Bill b = new Bill(e);
b.setUser(u);
b.setAddr1("Kalle Kävijä");
b.setAddr2("co / Pelivieroitus Ry");
b.setAddr3("Pallokorvankatu 1");
b.setAddr4("696969 Keikyä");
b.setAddr5("FINLAND! \\o/");
b.setBillNumber(123123);
b.setDelayIntrest(11);
b.setDeliveryTerms("Toimitetaan, ehkä...");
Calendar duedate = Calendar.getInstance();
duedate.add(Calendar.DATE, 14);
b.setDueDate(duedate);
b.setNotes("Some notes...");
b.setNoticetime("14 vrk");
b.setOurReference("Meitin viite ( Insomnia XII )");
b.setPaymentTime(14);
b.setSentDate(Calendar.getInstance());
b.setTheirReference("Niitten viite ( tyhjä? )");
billFacade.create(b);
createBillLine(b, "Tuote1", 1239.3, "kpl", 11.0, 0.22);
createBillLine(b, "Tuote2", 0.3, "pss", 11.0, 0.22);
createBillLine(b, "Tuote3", 9.3, "l", 11.0, 0.22);
createBillLine(b, "Tuote4", 9, "kWh", 99931911.0, 0);
createBillLine(b, "Tuote5", 33, "mol", 11.0, 0.22);
createBillLine(b, "Tuote6", 39939.23123123, "rad", 122.0, 0.18);
return b;
}
private BillLine createBillLine(Bill b, String line, double d, String qname, double e, double f) {
return createBillLine(b, line, new BigDecimal(d), qname, new BigDecimal(e), new BigDecimal(f));
}
private BillLine createBillLine(Bill b, String line, BigDecimal q, String qname, BigDecimal price, BigDecimal vat) {
BillLine bl = new BillLine(b);
bl.setName(line);
bl.setQuantity(q);
bl.setUnitName(qname);
bl.setUnitPrice(price);
bl.setVat(vat);
billLineFacade.create(bl);
return bl;
}
public EventMap generateTestMap(Event event) {
try {
logger.info("Generating Test Map for event: " + event);
......
package fi.insomnia.bortal.beans;
import java.security.Principal;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.facade.RoleFacade;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.AccessRight;
import fi.insomnia.bortal.model.Event;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.RoleRight;
import fi.insomnia.bortal.model.User;
/**
......@@ -26,6 +39,12 @@ public class UserBean implements UserBeanLocal {
*/
@EJB
private UserFacade userFacade;
@Resource
private SessionContext context;
@EJB
private RoleFacade roleFacade;
@EJB
private AccessRightBeanLocal accessRightBeanLocal;
/**
* Default constructor.
......@@ -58,4 +77,87 @@ public class UserBean implements UserBeanLocal {
public User getUser(String nick) {
return userFacade.findByLogin(nick);
}
@Override
public User getCurrentUser(Event event) {
Principal principal = context.getCallerPrincipal();
User ret = getUser(principal.getName());
if (ret == null) {
ret = getDefaultUser(event);
}
return ret;
}
/**
* Makes sure default user and public role exist and the user is member of
* the role.
*/
public User getDefaultUser(Event event) {
Role publicRole = roleFacade.getOrCreatePublicRole(event);
User defaultUser = userFacade.getOrCreateDefaultUser();
if (!defaultUser.getRoles().contains(publicRole)) {
ArrayList<Role> userRoles = new ArrayList<Role>();
userRoles.add(publicRole);
defaultUser.setRoles(userRoles);
}
return defaultUser;
}
public boolean hasPermission(Permission target, User user, RolePermission permission) {
if (user == null) {
return false;
}
AccessRight expectedRight = accessRightBeanLocal.findOrCreate(target);
User dbusr = userFacade.find(user.getId());
if (dbusr != null) {
Set<Role> checkedRoles = new HashSet<Role>();
for (Role r : dbusr.getRoles()) {
if (getRights(r, expectedRight, permission, checkedRoles)) {
return true;
}
}
}
return false;
}
private static boolean getRights(Role role, AccessRight expectedRight, RolePermission permission, Set<Role> checkedRoles) {
if (checkedRoles.contains(role)) {
return false;
}
for (RoleRight rr : role.getRoleRights()) {
if (rr.getAccessRight().equals(expectedRight)) {
switch (permission) {
case READ:
if (rr.getRead()) {
return true;
}
break;
case WRITE:
if (rr.getWrite()) {
return true;
}
break;
case EXECUTE:
if (rr.isExecute()) {
return true;
}
}
}
}
checkedRoles.add(role);
for (Role r : role.getParents()) {
if (getRights(r, expectedRight, permission, checkedRoles)) {
return true;
}
}
return false;
}
}
package fi.insomnia.bortal.beanutil;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.math.RoundingMode;
......@@ -46,7 +47,7 @@ public class PdfPrinter {
bill = printable;
}
public boolean output(OutputStream ostream) {
public ByteArrayOutputStream output() {
try {
pdf = new PDF();
......@@ -62,14 +63,13 @@ public class PdfPrinter {
// FileOutputStream fos = new FileOutputStream(fileName);
// pdf.getData().writeTo(fos);
// fos.close();
pdf.getData().writeTo(ostream);
return pdf.getData();
} catch (Exception e) {
logger.warn("Error printing bill " + bill + " to stream", e);
return false;
}
return true;
return null;
}
private void drawProducts(List<BillLine> prods) throws Exception {
......
package fi.insomnia.bortal.beans;
import java.io.ByteArrayOutputStream;
import javax.ejb.Local;
import javax.servlet.ServletOutputStream;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.Event;
@Local
public interface BillBeanLocal {
Bill findById(int eventId, int id);
ByteArrayOutputStream getPdfBillStream(Bill bill);
}
......@@ -8,11 +8,7 @@ import fi.insomnia.bortal.model.Event;
import fi.insomnia.bortal.model.User;
@Local
public interface SessionHandlerBeanLocal {
public interface JaasBeanLocal {
boolean hasPermission(Permission target, User user, RolePermission permission);
User getDefaultUser(Event event);
User getCurrentUser(Event event);
}
......@@ -4,7 +4,7 @@ import java.util.Enumeration;
import javax.ejb.Remote;
@Remote
public interface SessionHandlerBeanRemote {
public interface JaasBeanRemote {
boolean authenticate(String username, String password);
......
......@@ -2,8 +2,10 @@ package fi.insomnia.bortal.beans;
import javax.ejb.Local;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.Event;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.User;
@Local
public interface TestDataBeanLocal {
......@@ -12,6 +14,13 @@ public interface TestDataBeanLocal {
void generateTestPlaces(EventMap map);
Bill createBill(Event e, User u);
User createUser();
public void printPlacesInfo();
void generateTestCompos(Event event);
......
......@@ -4,6 +4,9 @@ import java.util.List;
import javax.ejb.Local;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.Event;
import fi.insomnia.bortal.model.User;
......@@ -18,4 +21,10 @@ public interface UserBeanLocal {
void mergeChanges(User currentUser);
User getCurrentUser(Event event);
User getDefaultUser(Event event);
boolean hasPermission(Permission target, User user, RolePermission permission);
}
package fi.insomnia.bortal.enums;
public enum Role {
}
......@@ -5,6 +5,8 @@
<properties>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
<property name="eclipselink.ddl-generation.output-mode" value="both"/>
<property name="eclipselink.logging.level" value="ALL"/>
<property name="eclipselink.cache.type.default" value="NONE"/>
</properties>
</persistence-unit>
</persistence>
......@@ -107,14 +107,15 @@ public class BillLine implements EventChildInterface {
public BillLine() {
}
public BillLine(Event event, Bill bill) {
this.id = new EventPk(event);
public BillLine(Bill bill) {
this.id = new EventPk(bill.getId().getEventId());
this.bill = bill;
}
public BillLine(Event event, Bill bill, String product, String unitName, BigDecimal units,
public BillLine( Bill bill, String product, String unitName, BigDecimal units,
BigDecimal unitPrice, BigDecimal vat) {
this(event, bill);
this( bill);
this.unitName = unitName;
this.name = product;
this.setQuantity(units);
......
......@@ -7,6 +7,7 @@ package fi.insomnia.bortal.model;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
......@@ -23,6 +24,8 @@ import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Version;
import org.eclipse.persistence.annotations.Cache;
import org.eclipse.persistence.annotations.CacheType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -33,7 +36,8 @@ import org.slf4j.LoggerFactory;
@Table(name = "maps")
@NamedQueries({
@NamedQuery(name = "EventMap.findAll", query = "SELECT e FROM EventMap e"),
@NamedQuery(name = "EventMap.findByName", query = "SELECT e FROM EventMap e WHERE e.name = :name")})
@NamedQuery(name = "EventMap.findByName", query = "SELECT e FROM EventMap e WHERE e.name = :name") })
@Cache(type = CacheType.NONE)
public class EventMap implements EventChildInterface {
private static final Logger logger = LoggerFactory.getLogger(EventMap.class);
......@@ -46,7 +50,7 @@ public class EventMap implements EventChildInterface {
@Column(name = "map_name")
private String name;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "map")
private List<Place> places;
private List<Place> places = new ArrayList<Place>();
@ManyToOne(optional = false)
@JoinColumn(name = "event_id", referencedColumnName = "event_id", insertable = false, updatable = false, nullable = false)
private Event event;
......
......@@ -22,6 +22,9 @@ import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Version;
import org.eclipse.persistence.annotations.Cache;
import org.eclipse.persistence.annotations.CacheType;
/**
*
*/
......@@ -35,6 +38,7 @@ import javax.persistence.Version;
@NamedQuery(name = "Place.findByMapY", query = "SELECT p FROM Place p WHERE p.mapY = :mapY"),
@NamedQuery(name = "Place.findByDetails", query = "SELECT p FROM Place p WHERE p.details = :details"),
@NamedQuery(name = "Place.findByCode", query = "SELECT p FROM Place p WHERE p.code = :code") })
@Cache(type =CacheType.NONE)
public class Place implements EventChildInterface {
private static final long serialVersionUID = 1L;
......@@ -56,12 +60,13 @@ public class Place implements EventChildInterface {
@Column(name = "place_details")
@Lob
private String details;
@Column(name = "place_code")
private String code;
@OneToOne(mappedBy = "placeReservation")
private GroupMembership placeReserver;
/**
* Which group has bought the place
*/
......@@ -71,12 +76,12 @@ public class Place implements EventChildInterface {
@ManyToOne
private PlaceGroup group;
@JoinColumns({
@JoinColumn(name = "map_id", referencedColumnName = "id"),
@JoinColumn(name = "map_id", referencedColumnName = "id", nullable = false, updatable = true, insertable = true),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@ManyToOne(optional = false)
private EventMap map;
/**
* Which ticket type is this place sold as
*/
......
......@@ -46,7 +46,6 @@ import fi.insomnia.bortal.utilities.PasswordFunctions;
@NamedQuery(name = "User.findByEmail", query = "SELECT u FROM User u WHERE u.email = :email"),
@NamedQuery(name = "User.findByAddress", query = "SELECT u FROM User u WHERE u.address = :address"),
@NamedQuery(name = "User.findByZip", query = "SELECT u FROM User u WHERE u.zip = :zip"),
@NamedQuery(name = "User.findByPostalCode", query = "SELECT u FROM User u WHERE u.postalCode = :postalCode"),
@NamedQuery(name = "User.findByTown", query = "SELECT u FROM User u WHERE u.town = :town"),
@NamedQuery(name = "User.findByPhone", query = "SELECT u FROM User u WHERE u.phone = :phone"),
@NamedQuery(name = "User.findByFemale", query = "SELECT u FROM User u WHERE u.female = :female"),
......@@ -92,8 +91,8 @@ public class User implements ModelInterface<Integer> {
@Column(name = "zip")
private String zip;
@Column(name = "postal_code")
private String postalCode;
@Column(name = "postal_town")
private String postalTown;
@Column(name = "town")
private String town;
......@@ -278,14 +277,6 @@ public class User implements ModelInterface<Integer> {
this.zip = zip;
}
public String getPostalCode() {
return postalCode;
}
public void setPostalCode(String postalCode) {
this.postalCode = postalCode;
}
public String getTown() {
return town;
}
......@@ -549,4 +540,12 @@ public class User implements ModelInterface<Integer> {
public boolean isSuperadmin() {
return superadmin;
}
public void setPostalTown(String postalTown) {
this.postalTown = postalTown;
}
public String getPostalTown() {
return postalTown;
}
}
......@@ -14,7 +14,8 @@ import javax.servlet.http.HttpSession;
import fi.insomnia.bortal.HostnameFilter;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.SecurityBeanLocal;
import fi.insomnia.bortal.beans.SessionHandlerBeanLocal;
import fi.insomnia.bortal.beans.JaasBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.Event;
......@@ -29,12 +30,14 @@ import fi.insomnia.bortal.model.User;
public class SessionHandler {
@EJB
private SessionHandlerBeanLocal handlerbean;
private JaasBeanLocal handlerbean;
private User user = null;
@EJB
private SecurityBeanLocal secubean;
@EJB
private EventBeanLocal eventbean;
@EJB
private UserBeanLocal userbean;
/** Creates a new instance of SessionHandler */
public SessionHandler() {
......@@ -78,7 +81,8 @@ public class SessionHandler {
throw new RuntimeException("Empty target");
}
return handlerbean.hasPermission(Permission.getPermission(target), getUser(), permission);
return userbean.hasPermission(Permission.getPermission(target), getUser(), permission);
}
......@@ -99,17 +103,17 @@ public class SessionHandler {
this.user = getUser();
} else if (canExecute("user")) {
secubean.logMessage(handlerbean.getCurrentUser(getCurrentEvent()), "Successfully impersonating user id: " + user.getId() + " and login: " + user.getLogin());
secubean.logMessage(userbean.getCurrentUser(getCurrentEvent()), "Successfully impersonating user id: " + user.getId() + " and login: " + user.getLogin());
this.user = user;
} else {
secubean.logMessage(handlerbean.getCurrentUser(getCurrentEvent()), "User tried to impersonate as id: " + user.getId() + " login: " + user.getLogin() + " but did not have enough rights");
secubean.logMessage(userbean.getCurrentUser(getCurrentEvent()), "User tried to impersonate as id: " + user.getId() + " login: " + user.getLogin() + " but did not have enough rights");
}
}
public User getUser() {
if (user == null) {
user = handlerbean.getCurrentUser(getCurrentEvent());
user = userbean.getCurrentUser(getCurrentEvent());
}
return user;
......
package fi.insomnia.bortal.servlet;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jboss.weld.bean.builtin.EventBean;
import fi.insomnia.bortal.HostnameFilter;
import fi.insomnia.bortal.beans.BillBeanLocal;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.handler.SessionHandler;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.Event;
/**
* Servlet implementation class PrintBill
......@@ -16,8 +25,13 @@ import fi.insomnia.bortal.beans.BillBeanLocal;
public class PrintBill extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String BILL_ID = "billid";
@EJB
private BillBeanLocal billentity;
@EJB
private EventBeanLocal eventbean;
/**
* @see HttpServlet#HttpServlet()
*/
......@@ -34,8 +48,26 @@ public class PrintBill extends HttpServlet {
ouput(request, response);
}
private void ouput(HttpServletRequest request, HttpServletResponse response) {
private void ouput(HttpServletRequest request, HttpServletResponse response) throws IOException {
Event event = eventbean.getEventByHostname(HostnameFilter.getHostname(request.getSession()));
Integer billid = getIntegerParameter(request, BILL_ID);
Bill bill = billentity.findById(event.getId(), billid);
if (bill == null) {
return;
}
ByteArrayOutputStream billstream = billentity.getPdfBillStream(bill);
if (billstream == null) {
return;
}
response.setContentLength(billstream.size());
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "filename=Bill-" + bill.getBillNumber() + ".pdf");
ServletOutputStream ostream = response.getOutputStream();
billstream.writeTo(ostream);
ostream.close();
}
/**
......@@ -46,4 +78,20 @@ public class PrintBill extends HttpServlet {
ouput(request, response);
}
/***
* Convert request parameter into integer
*
* @param request
* @param parameter
* @return
*/
private static Integer getIntegerParameter(HttpServletRequest request, String parameter) {
try {
String valueString = request.getParameter(parameter);
Integer value = Integer.parseInt(valueString);
return value;
} catch (NumberFormatException nfe) {
}
return null;
}
}
......@@ -13,6 +13,7 @@ import fi.insomnia.bortal.beans.TestDataBeanLocal;
import fi.insomnia.bortal.handler.SessionHandler;
import fi.insomnia.bortal.model.Event;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.User;
/**
*
......@@ -29,7 +30,10 @@ public class TestDataView {
private SessionHandler sessionhandler;
public void generateData() {
Event event = getSessionhandler().getCurrentEvent();
User user = testdatabean.createUser();
testdatabean.createBill(event, user);
EventMap map = testdatabean.generateTestMap(event);
testdatabean.generateTestPlaces(map);
......
......@@ -12,7 +12,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.SecurityBeanLocal;
import fi.insomnia.bortal.beans.SessionHandlerBeanLocal;
import fi.insomnia.bortal.beans.JaasBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.exceptions.PermissionDeniedException;
import fi.insomnia.bortal.handler.SessionHandler;
......@@ -26,7 +26,7 @@ public class UserView {
private SessionHandler sessionhandler;
@EJB
private SessionHandlerBeanLocal sessionbean;
private JaasBeanLocal sessionbean;
@EJB
private UserBeanLocal userBean;
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!