Commit 49b8d99e by Tuomas Riihimäki

Access permission rewrite on beans!

1 parent f4074e4d
Showing with 1410 additions and 1381 deletions
......@@ -13,5 +13,6 @@
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry kind="src" path="/LanBortalUtilities"/>
<classpathentry kind="src" path="/UtilClasses"/>
<classpathentry kind="output" path="build/classes"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 EJB 3.0//EN" "http://www.sun.com/software/appserver/dtds/sun-ejb-jar_3_0-0.dtd">
<sun-ejb-jar>
<security-role-mapping>
<role-name>ANONYMOUS</role-name>
<group-name>ANONYMOUS</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>ORGANIZATION_ROOT</role-name>
<group-name>ORGANIZATION_ROOT</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>SUPERADMIN</role-name>
<group-name>SUPERADMIN</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>ADMIN_BASE</role-name>
<group-name>ADMIN_BASE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>USER_BASE</role-name>
<group-name>USER_BASE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>LOGIN/READ</role-name>
<group-name>LOGIN/READ</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>LOGIN/WRITE</role-name>
<group-name>LOGIN/WRITE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>LOGIN/EXECUTE</role-name>
<group-name>LOGIN/EXECUTE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>USER_MANAGEMENT/READ</role-name>
<group-name>USER_MANAGEMENT/READ</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>USER_MANAGEMENT/WRITE</role-name>
<group-name>USER_MANAGEMENT/WRITE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>USER_MANAGEMENT/EXECUTE</role-name>
<group-name>USER_MANAGEMENT/EXECUTE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>ACCOUNT_MANAGEMENT/READ</role-name>
<group-name>ACCOUNT_MANAGEMENT/READ</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>ACCOUNT_MANAGEMENT/WRITE</role-name>
<group-name>ACCOUNT_MANAGEMENT/WRITE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>ACCOUNT_MANAGEMENT/EXECUTE</role-name>
<group-name>ACCOUNT_MANAGEMENT/EXECUTE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>BILL/READ</role-name>
<group-name>BILL/READ</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>BILL/WRITE</role-name>
<group-name>BILL/WRITE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>BILL/EXECUTE</role-name>
<group-name>BILL/EXECUTE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>MAP/READ</role-name>
<group-name>MAP/READ</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>MAP/WRITE</role-name>
<group-name>MAP/WRITE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>MAP/EXECUTE</role-name>
<group-name>MAP/EXECUTE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>ROLE_MANAGEMENT/READ</role-name>
<group-name>ROLE_MANAGEMENT/READ</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>ROLE_MANAGEMENT/WRITE</role-name>
<group-name>ROLE_MANAGEMENT/WRITE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>ROLE_MANAGEMENT/EXECUTE</role-name>
<group-name>ROLE_MANAGEMENT/EXECUTE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>PRODUCT/READ</role-name>
<group-name>PRODUCT/READ</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>PRODUCT/WRITE</role-name>
<group-name>PRODUCT/WRITE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>PRODUCT/EXECUTE</role-name>
<group-name>PRODUCT/EXECUTE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>SHOP/READ</role-name>
<group-name>SHOP/READ</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>SHOP/WRITE</role-name>
<group-name>SHOP/WRITE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>SHOP/EXECUTE</role-name>
<group-name>SHOP/EXECUTE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>GAME/READ</role-name>
<group-name>GAME/READ</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>GAME/WRITE</role-name>
<group-name>GAME/WRITE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>GAME/EXECUTE</role-name>
<group-name>GAME/EXECUTE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>POLL/READ</role-name>
<group-name>POLL/READ</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>POLL/WRITE</role-name>
<group-name>POLL/WRITE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>POLL/EXECUTE</role-name>
<group-name>POLL/EXECUTE</group-name>
</security-role-mapping>
<enterprise-beans/>
</sun-ejb-jar>
......@@ -7,19 +7,18 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
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.AccountEventFacade;
import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.EventPk;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User;
......@@ -28,95 +27,98 @@ import fi.insomnia.bortal.model.User;
* Session Bean implementation class AccountEventBean
*/
@Stateless
@DeclareRoles({ "ACCOUNT_MANAGEMENT/READ", "ACCOUNT_MANAGEMENT/WRITE", "SHOP/EXECUTE" })
public class AccountEventBean implements AccountEventBeanLocal {
@EJB
private AccountEventFacade accountfacade;
@EJB
private UserBeanLocal userbean;
@EJB
private SecurityBeanLocal sessionbean;
@EJB
private EventBeanLocal eventBean;
@EJB
private ProductBeanLocal prodbean;
@EJB
private PlaceBeanLocal placebean;
private static final Logger logger = LoggerFactory.getLogger(AccountEventBean.class);
public AccountEventBean() {
super();
}
@Override
public AccountEvent merge(AccountEvent account) {
userbean.fatalPermission(Permission.ACCOUNT_MANAGEMENT, RolePermission.WRITE, "Error mergin account event", account);
return accountfacade.merge(account);
}
@Override
public void delete(AccountEvent account) {
userbean.fatalPermission(Permission.ACCOUNT_MANAGEMENT, RolePermission.WRITE, "Error deleting account event: ", account);
AccountEvent acco = accountfacade.find(account.getId());
sessionbean.logMessage(SecurityLogType.accountEvent, userbean.getCurrentUser(), "Deleting AccountEvent '", acco.getProduct().getName(), "' count: '", acco.getQuantity().toString(), "' unitprice: '", acco.getUnitPrice().toString(), "' accouser: '", acco.getUser().getLogin(), "'");
acco.getProduct().getAccountEvents().remove(acco);
if (acco.getBill() != null) {
acco.getBill().setAccountEvent(null);
}
acco.getUser().getAccountEvents().remove(acco);
accountfacade.remove(acco);
}
@Override
public AccountEvent find(EventPk id) {
return accountfacade.find(id);
}
@Override
public List<Role> getRolesFromAccountEvents(User u) {
return accountfacade.findProvidedRoles(eventBean.getCurrentEvent(), u);
}
@Override
public List<AccountEvent> shopCash(User shoppingUser, Map<Product, BigDecimal> shopMap, boolean buyInstant) {
logger.debug("Shoping cash. buyinstant {}", buyInstant);
userbean.fatalPermission(Permission.SHOP, RolePermission.EXECUTE, "User tried to create accountEvents via shop without SHOP:EXECUTE");
ArrayList<AccountEvent> ret = new ArrayList<AccountEvent>();
LanEvent ev = eventBean.getCurrentEvent();
User seller = userbean.getCurrentUser();
BigDecimal tot = BigDecimal.ZERO;
for (Entry<Product, BigDecimal> prodentry : shopMap.entrySet()) {
AccountEvent ac = new AccountEvent(ev, shoppingUser, prodentry.getKey(), prodentry.getKey().getPrice(), prodentry.getValue(), Calendar.getInstance());
if (buyInstant && prodentry.getKey().getPrice().compareTo(BigDecimal.ZERO) > 0) {
tot = tot.add(prodentry.getValue().multiply(prodentry.getKey().getPrice()));
}
if (prodentry.getKey().isPrepaidInstant() && prodentry.getKey().getPlaces() != null && prodentry.getKey().getPlaces().size() > 0) {
logger.debug("Prepaidplace");
placebean.lockPlaceProduct(shoppingUser, prodentry.getKey(), BigDecimal.ONE);
}
ac.setSeller(seller);
shoppingUser.getAccountEvents().add(ac);
}
logger.debug("ShopCash price {}", tot);
if (buyInstant && tot.compareTo(BigDecimal.ZERO) > 0) {
logger.debug("Creating buy instant product!");
Product creditProd = prodbean.findCreditProduct();
AccountEvent ac = new AccountEvent(ev, shoppingUser, creditProd, creditProd.getPrice(), tot, Calendar.getInstance());
shoppingUser.getAccountEvents().add(ac);
}
userbean.mergeChanges(shoppingUser);
return ret;
}
@EJB
private AccountEventFacade accountfacade;
@EJB
private UserBeanLocal userbean;
@EJB
private LoggingBeanLocal loggingbean;
@EJB
private EventBeanLocal eventBean;
@EJB
private ProductBeanLocal prodbean;
@EJB
private PlaceBeanLocal placebean;
@EJB
private PermissionBeanLocal permbean;
private static final Logger logger = LoggerFactory.getLogger(AccountEventBean.class);
public AccountEventBean() {
super();
}
@Override
@RolesAllowed("ACCOUNT_MANAGEMENT/WRITE")
public AccountEvent merge(AccountEvent account) {
return accountfacade.merge(account);
}
@Override
@RolesAllowed("ACCOUNT_MANAGEMENT/WRITE")
public void delete(AccountEvent account) {
AccountEvent acco = accountfacade.find(account.getId());
loggingbean.logMessage(SecurityLogType.accountEvent, permbean.getCurrentUser(), "Deleting AccountEvent '", acco.getProduct().getName(), "' count: '", acco.getQuantity().toString(), "' unitprice: '", acco.getUnitPrice().toString(), "' accouser: '", acco.getUser().getLogin(), "'");
acco.getProduct().getAccountEvents().remove(acco);
if (acco.getBill() != null) {
acco.getBill().setAccountEvent(null);
}
acco.getUser().getAccountEvents().remove(acco);
accountfacade.remove(acco);
}
@Override
public AccountEvent find(EventPk id) {
return accountfacade.find(id);
}
@Override
public List<Role> getRolesFromAccountEvents(User u) {
return accountfacade.findProvidedRoles(eventBean.getCurrentEvent(), u);
}
@Override
@RolesAllowed("SHOP/EXECUTE")
public List<AccountEvent> shopCash(User shoppingUser, Map<Product, BigDecimal> shopMap, boolean buyInstant) throws PermissionDeniedException {
logger.debug("Shoping cash. buyinstant {}", buyInstant);
ArrayList<AccountEvent> ret = new ArrayList<AccountEvent>();
LanEvent ev = eventBean.getCurrentEvent();
User seller = permbean.getCurrentUser();
BigDecimal tot = BigDecimal.ZERO;
for (Entry<Product, BigDecimal> prodentry : shopMap.entrySet()) {
AccountEvent ac = new AccountEvent(ev, shoppingUser, prodentry.getKey(), prodentry.getKey().getPrice(), prodentry.getValue(), Calendar.getInstance());
if (buyInstant && prodentry.getKey().getPrice().compareTo(BigDecimal.ZERO) > 0) {
tot = tot.add(prodentry.getValue().multiply(prodentry.getKey().getPrice()));
}
if (prodentry.getKey().isPrepaidInstant() && prodentry.getKey().getPlaces() != null && prodentry.getKey().getPlaces().size() > 0) {
logger.debug("Prepaidplace");
placebean.lockPlaceProduct(shoppingUser, prodentry.getKey(), BigDecimal.ONE);
}
ac.setSeller(seller);
shoppingUser.getAccountEvents().add(ac);
}
logger.debug("ShopCash price {}", tot);
if (buyInstant && tot.compareTo(BigDecimal.ZERO) > 0) {
logger.debug("Creating buy instant product!");
Product creditProd = prodbean.findCreditProduct();
AccountEvent ac = new AccountEvent(ev, shoppingUser, creditProd, creditProd.getPrice(), tot, Calendar.getInstance());
shoppingUser.getAccountEvents().add(ac);
}
userbean.mergeChanges(shoppingUser);
return ret;
}
}
......@@ -2,14 +2,14 @@ package fi.insomnia.bortal.beans;
import java.util.List;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
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.CardTemplateFacade;
import fi.insomnia.bortal.facade.PrintedCardFacade;
import fi.insomnia.bortal.model.CardTemplate;
......@@ -23,150 +23,154 @@ import fi.insomnia.bortal.util.MailMessage;
* Session Bean implementation class CardTemplateBean
*/
@Stateless
@DeclareRoles({ "USER_MANAGEMENT/WRITE", "USER_MANAGEMENT/READ" })
public class CardTemplateBean implements CardTemplateBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(CardTemplateBean.class);
/**
* Default constructor.
*/
public CardTemplateBean() {
// TODO Auto-generated constructor stub
}
@EJB
private CardTemplateFacade cdFacade;
@EJB
private EventBeanLocal eventBean;
@EJB
private UserBeanLocal userbean;
@EJB
private PrintedCardFacade printedcardfacade;
@EJB
private UtilBeanLocal mailbean;
@EJB
private PlaceGroupBeanLocal pgbean;
public List<CardTemplate> findAll() {
userbean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.WRITE);
return cdFacade.findAll(eventBean.getCurrentEvent());
}
@Override
public void create(CardTemplate card) {
userbean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.WRITE);
cdFacade.create(card);
}
@Override
public CardTemplate findById(Integer id) {
userbean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.READ);
LanEvent ev = eventBean.getCurrentEvent();
return cdFacade.find(ev.getId(), id);
}
public void checkAllUsersCardRights() {
for (User u : userbean.getUsers()) {
checkPrintedCard(u);
}
}
/**
* Checks users printed card roles and return the biggestCard
*/
public PrintedCard checkPrintedCard(User user) {
LanEvent currEvent = eventBean.getCurrentEvent();
List<PrintedCard> myCards = printedcardfacade.findForUser(currEvent, user);
PrintedCard biggestCard = null;
PrintedCard smallestCard = null;
for (PrintedCard card : myCards) {
if (card.getEnabled()) {
if (biggestCard == null || biggestCard.getTemplate().getPower() < card.getTemplate().getPower()) {
biggestCard = card;
}
if (smallestCard == null || smallestCard.getTemplate().getPower() > card.getTemplate().getPower()) {
smallestCard = card;
}
}
}
CardTemplate roleCard = getUsersCardtype(user);
int existingPower = -999;
int newPower = -999;
if (roleCard != null) {
newPower = roleCard.getPower();
}
if (biggestCard != null) {
existingPower = biggestCard.getTemplate().getPower();
}
if (existingPower < newPower) {
if (biggestCard != null) {
biggestCard.setEnabled(false);
printedcardfacade.merge(biggestCard);
}
PrintedCard pc = new PrintedCard(currEvent);
pc.setTemplate(roleCard);
pc.setUser(user);
// user.getPrintedCards().add(pc);
printedcardfacade.create(pc);
biggestCard = pc;
logger.debug("User {} has too little power old role {} New role {}", new Object[] { user.getLogin(), existingPower, newPower });
} else if (existingPower > newPower) {
MailMessage msg = new MailMessage();
User admin = eventBean.getCurrentEvent().getOrganiser().getAdmin();
String adminmail = admin.getEmail();
msg.setFromAddress(adminmail);
msg.setFromName("Lippukauppa");
msg.setTo(admin);
msg.setSubject("User " + user.getLogin() + " has too powerful card!");
msg.setMessage("User ", user.getLogin(), "has too powerful card!\nCurrent power ", existingPower, ". Should be ", newPower, "\n\n-- \nLippukauppa");
mailbean.sendMail(msg);
logger.debug("User {} has too much power old role {} New role {}", new Object[] { user.getLogin(), existingPower, newPower });
} else {
logger.debug("User {} has power {} and roles has power {}", new Object[] { user.getLogin(), existingPower, newPower });
}
return biggestCard;
}
public CardTemplate getUsersCardtype(User user) {
List<Role> roles = userbean.findUsersRoles(user);
CardTemplate greatestTemplate = null;
for (Role listrole : roles) {
if (greatestTemplate == null || (listrole.getCardTemplate() != null && greatestTemplate.getPower() < listrole.getCardTemplate().getPower())) {
greatestTemplate = listrole.getCardTemplate();
}
}
return greatestTemplate;
}
@Override
public PrintedCard setRfidUid(String tag, User user) {
PrintedCard ct = checkPrintedCard(user);
return setRfidUid(tag, ct);
}
@Override
public PrintedCard setRfidUid(String tag, PrintedCard card) {
card.setRfidUid(tag);
return printedcardfacade.merge(card);
}
@Override
public List<PrintedCard> findActiveCards() {
return this.printedcardfacade.findAllEnabled(eventBean.getCurrentEvent());
}
private static final Logger logger = LoggerFactory.getLogger(CardTemplateBean.class);
/**
* Default constructor.
*/
public CardTemplateBean() {
// TODO Auto-generated constructor stub
}
@EJB
private CardTemplateFacade cdFacade;
@EJB
private EventBeanLocal eventBean;
@EJB
private UserBeanLocal userbean;
@EJB
private PrintedCardFacade printedcardfacade;
@EJB
private UtilBeanLocal mailbean;
@Override
@RolesAllowed("USER_MANAGEMENT/WRITE")
public List<CardTemplate> findAll() {
return cdFacade.findAll(eventBean.getCurrentEvent());
}
@Override
@RolesAllowed("USER_MANAGEMENT/WRITE")
public void create(CardTemplate card) {
cdFacade.create(card);
}
@Override
@RolesAllowed("USER_MANAGEMENT/READ")
public CardTemplate findById(Integer id) {
LanEvent ev = eventBean.getCurrentEvent();
return cdFacade.find(ev.getId(), id);
}
@Override
public void checkAllUsersCardRights() throws PermissionDeniedException {
for (User u : userbean.getUsers()) {
checkPrintedCard(u);
}
}
/**
* Checks users printed card roles and return the biggestCard
*
* @throws PermissionDeniedException
*/
@Override
public PrintedCard checkPrintedCard(User user) throws PermissionDeniedException {
LanEvent currEvent = eventBean.getCurrentEvent();
List<PrintedCard> myCards = printedcardfacade.findForUser(currEvent, user);
PrintedCard biggestCard = null;
PrintedCard smallestCard = null;
for (PrintedCard card : myCards) {
if (card.getEnabled()) {
if (biggestCard == null || biggestCard.getTemplate().getPower() < card.getTemplate().getPower()) {
biggestCard = card;
}
if (smallestCard == null || smallestCard.getTemplate().getPower() > card.getTemplate().getPower()) {
smallestCard = card;
}
}
}
CardTemplate roleCard = getUsersCardtype(user);
int existingPower = -999;
int newPower = -999;
if (roleCard != null) {
newPower = roleCard.getPower();
}
if (biggestCard != null) {
existingPower = biggestCard.getTemplate().getPower();
}
if (existingPower < newPower) {
if (biggestCard != null) {
biggestCard.setEnabled(false);
printedcardfacade.merge(biggestCard);
}
PrintedCard pc = new PrintedCard(currEvent);
pc.setTemplate(roleCard);
pc.setUser(user);
// user.getPrintedCards().add(pc);
printedcardfacade.create(pc);
biggestCard = pc;
logger.debug("User {} has too little power old role {} New role {}", new Object[] { user.getLogin(), existingPower, newPower });
} else if (existingPower > newPower) {
MailMessage msg = new MailMessage();
User admin = eventBean.getCurrentEvent().getOrganiser().getAdmin();
String adminmail = admin.getEmail();
msg.setFromAddress(adminmail);
msg.setFromName("Lippukauppa");
msg.setTo(admin);
msg.setSubject("User " + user.getLogin() + " has too powerful card!");
msg.setMessage("User ", user.getLogin(), "has too powerful card!\nCurrent power ", existingPower, ". Should be ", newPower, "\n\n-- \nLippukauppa");
mailbean.sendMail(msg);
logger.debug("User {} has too much power old role {} New role {}", new Object[] { user.getLogin(), existingPower, newPower });
} else {
logger.debug("User {} has power {} and roles has power {}", new Object[] { user.getLogin(), existingPower, newPower });
}
return biggestCard;
}
public CardTemplate getUsersCardtype(User user) throws PermissionDeniedException {
List<Role> roles = userbean.findUsersRoles(user);
CardTemplate greatestTemplate = null;
for (Role listrole : roles) {
if (greatestTemplate == null || (listrole.getCardTemplate() != null && greatestTemplate.getPower() < listrole.getCardTemplate().getPower())) {
greatestTemplate = listrole.getCardTemplate();
}
}
return greatestTemplate;
}
@Override
public PrintedCard setRfidUid(String tag, User user) throws PermissionDeniedException {
PrintedCard ct = checkPrintedCard(user);
return setRfidUid(tag, ct);
}
@Override
public PrintedCard setRfidUid(String tag, PrintedCard card) {
card.setRfidUid(tag);
return printedcardfacade.merge(card);
}
@Override
public List<PrintedCard> findActiveCards() {
return this.printedcardfacade.findAllEnabled(eventBean.getCurrentEvent());
}
}
......@@ -8,9 +8,7 @@ import javax.persistence.PersistenceContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.clientutils.BortalLocalContextHolder;
import fi.insomnia.bortal.exceptions.PermissionDeniedException;
import fi.insomnia.bortal.facade.EventFacade;
import fi.insomnia.bortal.facade.EventOrganiserFacade;
import fi.insomnia.bortal.model.EventOrganiser;
......@@ -23,96 +21,95 @@ import fi.insomnia.bortal.model.User;
@Stateless
public class EventBean implements EventBeanLocal {
private static final String DEFAULT_EVENT_NAME = "Default event";
private static final String DEFAULT_ORGANISATION_NAME = "Default organisation";
private static final Logger logger = LoggerFactory.getLogger(EventBean.class);
@EJB
private EventFacade eventFacade;
@EJB
private EventOrganiserFacade eventOrganiserFacade;
@EJB
private UserBeanLocal userBean;
@EJB
private EventStatusBeanLocal eventStatusBean;
@PersistenceContext
private EntityManager em;
@EJB
private SecurityBeanLocal secubean;
@Override
public LanEvent getEventByHostname(String hostname) {
LanEvent ret = eventFacade.findByHostname(hostname);
if (ret == null) {
ret = findOrCreateDefaultEvent();
}
return ret;
}
public LanEvent findOrCreateDefaultEvent() {
LanEvent ret = eventFacade.findByName(DEFAULT_EVENT_NAME);
if (ret == null) {
logger.info("Default Event does not exist! creating new.");
ret = new LanEvent();
ret.setName(DEFAULT_EVENT_NAME);
ret.setOrganiser(findOrCreateDefaultEventOrganisation());
ret.setStatus(eventStatusBean.findOrCreateDefaultEventStatus());
eventFacade.create(ret);
em.flush();
}
return ret;
}
public EventOrganiser findOrCreateDefaultEventOrganisation() {
EventOrganiser settings = eventOrganiserFacade.findByOrganisation(DEFAULT_ORGANISATION_NAME);
if (settings == null) {
settings = new EventOrganiser();
settings.setOrganisation(DEFAULT_ORGANISATION_NAME);
User defaultUser = userBean.getAnonUser();
settings.setAdmin(defaultUser);
eventOrganiserFacade.create(settings);
}
return settings;
}
@Override
public LanEvent getCurrentEvent() {
LanEvent ret = getEventByHostname(BortalLocalContextHolder.getHostname());
return ret;
}
@Override
public LanEvent mergeChanges(LanEvent event) {
// TODO: Hmm..
if (!userBean.isCurrentUser(event.getOrganiser().getAdmin()) && !userBean.getCurrentUser().isSuperadmin()) {
throw new PermissionDeniedException(secubean, userBean.getCurrentUser(), "User tried to merge event: " + event + " without being admin of that group");
}
return eventFacade.merge(event);
}
@Override
public void create(LanEvent event) {
// TODO: Hmm..
if (!userBean.isCurrentUser(event.getOrganiser().getAdmin()) && !userBean.getCurrentUser().isSuperadmin()) {
throw new PermissionDeniedException(secubean, userBean.getCurrentUser(), "User tried to create a new event for organiser " + event.getOrganiser() + " without being admin of that group");
}
eventFacade.create(event);
}
@Override
public String flushCache() {
return eventFacade.flushCache();
}
private static final String DEFAULT_EVENT_NAME = "Default event";
private static final String DEFAULT_ORGANISATION_NAME = "Default organisation";
private static final Logger logger = LoggerFactory.getLogger(EventBean.class);
@EJB
private EventFacade eventFacade;
@EJB
private EventOrganiserFacade eventOrganiserFacade;
@EJB
private EventStatusBeanLocal eventStatusBean;
@PersistenceContext
private EntityManager em;
@EJB
private LoggingBeanLocal loggingbean;
@EJB
private PermissionBeanLocal permbean;
@Override
public LanEvent getEventByHostname(String hostname) {
LanEvent ret = eventFacade.findByHostname(hostname);
if (ret == null) {
ret = findOrCreateDefaultEvent();
}
return ret;
}
public LanEvent findOrCreateDefaultEvent() {
LanEvent ret = eventFacade.findByName(DEFAULT_EVENT_NAME);
if (ret == null) {
logger.info("Default Event does not exist! creating new.");
ret = new LanEvent();
ret.setName(DEFAULT_EVENT_NAME);
ret.setOrganiser(findOrCreateDefaultEventOrganisation());
ret.setStatus(eventStatusBean.findOrCreateDefaultEventStatus());
eventFacade.create(ret);
em.flush();
}
return ret;
}
public EventOrganiser findOrCreateDefaultEventOrganisation() {
EventOrganiser settings = eventOrganiserFacade.findByOrganisation(DEFAULT_ORGANISATION_NAME);
if (settings == null) {
settings = new EventOrganiser();
settings.setOrganisation(DEFAULT_ORGANISATION_NAME);
User defaultUser = permbean.getAnonUser();
settings.setAdmin(defaultUser);
eventOrganiserFacade.create(settings);
}
return settings;
}
@Override
public LanEvent getCurrentEvent() {
LanEvent ret = getEventByHostname(BortalLocalContextHolder.getHostname());
return ret;
}
@Override
public LanEvent mergeChanges(LanEvent event) throws PermissionDeniedException {
// TODO: Hmm..
if (!permbean.isCurrentUser(event.getOrganiser().getAdmin()) && !permbean.getCurrentUser().isSuperadmin()) {
throw new PermissionDeniedException(loggingbean, permbean.getCurrentUser(), "User tried to merge event: " + event + " without being admin of that group");
}
return eventFacade.merge(event);
}
@Override
public void create(LanEvent event) throws PermissionDeniedException {
// TODO: Hmm..
if (!permbean.isCurrentUser(event.getOrganiser().getAdmin()) && !permbean.getCurrentUser().isSuperadmin()) {
throw new PermissionDeniedException(loggingbean, permbean.getCurrentUser(), "User tried to create a new event for organiser " + event.getOrganiser() + " without being admin of that group");
}
eventFacade.create(event);
}
@Override
public String flushCache() {
return eventFacade.flushCache();
}
}
package fi.insomnia.bortal.beans;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.facade.EventMapFacade;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.LanEvent;
......@@ -13,45 +13,42 @@ import fi.insomnia.bortal.model.LanEvent;
* Session Bean implementation class EventMapBean
*/
@Stateless
@DeclareRoles({ "MAP/WRITE" })
public class EventMapBean implements EventMapBeanLocal {
@EJB
private EventMapFacade eventmapfacade;
@EJB
private EventBeanLocal eventbean;
@EJB
private UserBeanLocal userbean;
@Override
public EventMap saveMap(EventMap eventmap) {
userbean.fatalPermission(Permission.MAP, RolePermission.WRITE);
return eventmapfacade.merge(eventmap);
}
@Override
public EventMap create(String mapname) {
userbean.fatalPermission(Permission.MAP, RolePermission.WRITE);
EventMap ret = new EventMap(eventbean.getCurrentEvent());
ret.setName(mapname);
LanEvent event = eventbean.getCurrentEvent();
event.getEventMaps().add(ret);
eventbean.mergeChanges(event);
return ret;
}
@Override
public void sendImage(int destId, byte[] imagedata) {
userbean.fatalPermission(Permission.MAP, RolePermission.WRITE);
LanEvent event = eventbean.getCurrentEvent();
EventMap map = eventmapfacade.find(event.getId(), destId);
if (map != null) {
map.setMapData(imagedata);
}
}
@EJB
private EventMapFacade eventmapfacade;
@EJB
private EventBeanLocal eventbean;
@Override
@RolesAllowed("MAP/WRITE")
public EventMap saveMap(EventMap eventmap) {
return eventmapfacade.merge(eventmap);
}
@Override
@RolesAllowed("MAP/WRITE")
public EventMap create(String mapname) throws PermissionDeniedException {
EventMap ret = new EventMap(eventbean.getCurrentEvent());
ret.setName(mapname);
LanEvent event = eventbean.getCurrentEvent();
event.getEventMaps().add(ret);
eventbean.mergeChanges(event);
return ret;
}
@Override
@RolesAllowed("MAP/WRITE")
public void sendImage(int destId, byte[] imagedata) {
LanEvent event = eventbean.getCurrentEvent();
EventMap map = eventmapfacade.find(event.getId(), destId);
if (map != null) {
map.setMapData(imagedata);
}
}
}
......@@ -5,7 +5,6 @@ import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import fi.insomnia.bortal.exceptions.PermissionDeniedException;
import fi.insomnia.bortal.facade.EventOrganiserFacade;
import fi.insomnia.bortal.model.EventOrganiser;
......@@ -15,48 +14,48 @@ import fi.insomnia.bortal.model.EventOrganiser;
@Stateless
public class EventOrganiserBean implements EventOrganiserBeanLocal {
@EJB
private EventOrganiserFacade eventorgfacade;
@EJB
private UserBeanLocal userbean;
@EJB
private SecurityBeanLocal securitybean;
/**
* Default constructor.
*/
public EventOrganiserBean() {
// TODO Auto-generated constructor stub
}
@Override
public void save(EventOrganiser eventorg) {
fatalPermission(eventorg);
eventorgfacade.merge(eventorg);
}
public void fatalPermission(EventOrganiser eventorg) {
if (!userbean.isCurrentUser(eventorg.getAdmin()) && !userbean.getCurrentUser().isSuperadmin()) {
throw new PermissionDeniedException(securitybean, userbean.getCurrentUser(), "Someone other than admin tried to access EventOrganiser: " + eventorg.toString());
}
}
@Override
public List<EventOrganiser> getEventOrganisers() {
if(!userbean.getCurrentUser().isSuperadmin())
{
throw new PermissionDeniedException(securitybean, userbean.getCurrentUser(), "Non-superadmin tried to list all EventOrganisers");
}
return eventorgfacade.findAll();
}
@Override
public EventOrganiser create(String name) {
EventOrganiser ret = new EventOrganiser();
ret.setAdmin(userbean.getCurrentUser());
ret.setOrganisation(name);
eventorgfacade.create(ret);
return ret;
}
@EJB
private EventOrganiserFacade eventorgfacade;
@EJB
private LoggingBeanLocal loggingbean;
@EJB
private PermissionBeanLocal permbean;
/**
* Default constructor.
*/
public EventOrganiserBean() {
// TODO Auto-generated constructor stub
}
@Override
public void save(EventOrganiser eventorg) throws PermissionDeniedException {
fatalPermission(eventorg);
eventorgfacade.merge(eventorg);
}
@Override
public void fatalPermission(EventOrganiser eventorg) throws PermissionDeniedException {
if (!permbean.isCurrentUser(eventorg.getAdmin()) && !permbean.getCurrentUser().isSuperadmin()) {
throw new PermissionDeniedException(loggingbean, permbean.getCurrentUser(), "Someone other than admin tried to access EventOrganiser: " + eventorg.toString());
}
}
@Override
public List<EventOrganiser> getEventOrganisers() throws PermissionDeniedException {
if (!permbean.getCurrentUser().isSuperadmin()) {
throw new PermissionDeniedException(loggingbean, permbean.getCurrentUser(), "Non-superadmin tried to list all EventOrganisers");
}
return eventorgfacade.findAll();
}
@Override
public EventOrganiser create(String name) {
EventOrganiser ret = new EventOrganiser();
ret.setAdmin(permbean.getCurrentUser());
ret.setOrganisation(name);
eventorgfacade.create(ret);
return ret;
}
}
package fi.insomnia.bortal.beans;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.facade.FoodWaveTemplateFacade;
import fi.insomnia.bortal.model.FoodWaveTemplate;
......@@ -12,31 +12,29 @@ import fi.insomnia.bortal.model.FoodWaveTemplate;
* Session Bean implementation class FoodWaveBean
*/
@Stateless
@DeclareRoles("SHOP/WRITE")
public class FoodWaveBean implements FoodWaveBeanLocal {
@EJB
private UserBeanLocal userbean;
@EJB
private FoodWaveTemplateFacade fwtFacade;
/**
* Default constructor.
*/
public FoodWaveBean() {
// TODO Auto-generated constructor stub
}
@Override
public void createTemplate(FoodWaveTemplate waveTemplate) {
userbean.fatalPermission(Permission.SHOP, RolePermission.WRITE, "Need SHOP:WRITE to create foodwave templates");
fwtFacade.create(waveTemplate);
}
@Override
public FoodWaveTemplate saveTemplate(FoodWaveTemplate waveTemplate) {
userbean.fatalPermission(Permission.SHOP, RolePermission.WRITE, "Need SHOP:WRITE to create foodwave templates");
return fwtFacade.merge(waveTemplate);
}
@EJB
private FoodWaveTemplateFacade fwtFacade;
/**
* Default constructor.
*/
public FoodWaveBean() {
// TODO Auto-generated constructor stub
}
@Override
@RolesAllowed("SHOP/WRITE")
public void createTemplate(FoodWaveTemplate waveTemplate) {
fwtFacade.create(waveTemplate);
}
@Override
@RolesAllowed("SHOP/WRITE")
public FoodWaveTemplate saveTemplate(FoodWaveTemplate waveTemplate) {
return fwtFacade.merge(waveTemplate);
}
}
......@@ -7,10 +7,7 @@ import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.facade.NewsGroupFacade;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.News;
import fi.insomnia.bortal.model.NewsGroup;
......@@ -20,31 +17,31 @@ import fi.insomnia.bortal.model.NewsGroup;
@Stateless
public class GameBean implements GameBeanLocal {
@EJB
private EventBeanLocal eventbean;
@EJB
private EventBeanLocal eventbean;
@EJB
private NewsGroupFacade ngfacade;
@EJB
private NewsGroupFacade ngfacade;
/**
* Default constructor.
*/
public GameBean() {
// TODO Auto-generated constructor stub
}
/**
* Default constructor.
*/
public GameBean() {
// TODO Auto-generated constructor stub
}
@Override
public List<News> getNews() {
@Override
public List<News> getNews() {
ArrayList<News> retlist = new ArrayList<News>();
NewsGroup ng = ngfacade.findByName(eventbean.getCurrentEvent(), "game");
for (News n : ng.getNews()) {
if ((n.getPublish() == null || n.getPublish().after(Calendar.getInstance())) && (n.getExpire() == null || n.getExpire().before(Calendar.getInstance()))) {
retlist.add(n);
}
}
ArrayList<News> retlist = new ArrayList<News>();
NewsGroup ng = ngfacade.findByName(eventbean.getCurrentEvent(), "game");
for (News n : ng.getNews()) {
if ((n.getPublish() == null || n.getPublish().after(Calendar.getInstance())) && (n.getExpire() == null || n.getExpire().before(Calendar.getInstance()))) {
retlist.add(n);
}
}
return retlist;
}
return retlist;
}
}
package fi.insomnia.bortal.beans;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.List;
import java.util.Vector;
import javax.ejb.EJB;
......@@ -10,8 +12,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.BeanRole;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.RoleRight;
import fi.insomnia.bortal.model.User;
/**
......@@ -20,66 +25,90 @@ import fi.insomnia.bortal.model.User;
@Stateless
public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
private static final Logger logger = LoggerFactory.getLogger(JaasBean.class);
@EJB
private UserFacade userfacade;
@EJB
private SecurityBeanLocal secubean;
@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());
logger.debug("Trying to login as {}", username);
User ret = null;
if (user != null) {
if (user.checkPassword(password)) {
ret = user;
} else {
secubean.logMessage(SecurityLogType.permissionDenied, user, "Login failed: wrong password for username ", username);
}
} else {
secubean.logMessage(SecurityLogType.permissionDenied, null, "Login failed: Username not found: ", username);
}
return ret;
}
@Override
public boolean authenticate(String username, String password) {
boolean ret = (tryLogin(username, password) != null);
return ret;
}
@Override
public Enumeration<String> getGroupNames(String user) {
User usr = userbean.getUser(user);
Vector<String> roles = new Vector<String>();
if (usr != null) {
for (Role r : usr.getRoles()) {
roles.add(r.getName());
}
if (usr.isSuperadmin()) {
roles.add(BeanRole.SUPERADMIN.name());
}
}
logger.debug("group names for user {}: {}", user, roles);
return roles.elements();
}
private static final Logger logger = LoggerFactory.getLogger(JaasBean.class);
@EJB
private UserFacade userfacade;
@EJB
private LoggingBeanLocal secubean;
@EJB
private UserBean userbean;
@EJB
private PermissionBeanLocal permbean;
public User tryLogin(String username, String password) {
User user = userfacade.findByLogin(username.trim());
logger.debug("Trying to login as {}", username);
User ret = null;
if (user != null) {
if (user.checkPassword(password)) {
ret = user;
} else {
secubean.logMessage(SecurityLogType.permissionDenied, user, "Login failed: wrong password for username ", username);
}
} else {
secubean.logMessage(SecurityLogType.permissionDenied, null, "Login failed: Username not found: ", username);
}
return ret;
}
@Override
public boolean authenticate(String username, String password) {
boolean ret = (tryLogin(username, password) != null);
return ret;
}
@Override
public Enumeration<String> getGroupNames(String user) {
User usr = userbean.getUser(user);
HashSet<String> roleset = new HashSet<String>();
if (usr != null) {
HashSet<RoleRight> mappedRoles = new HashSet<RoleRight>();
List<Role> usrroles = userbean.localFindUsersRoles(usr);
for (Role r : usrroles) {
for (RoleRight rr : r.getRoleRights()) {
if (!mappedRoles.contains(rr)) {
mappedRoles.add(rr);
if (rr.isExecute()) {
roleset.add(rr.getPermission().getName());
roleset.add(rr.getPermission().append(RolePermission.EXECUTE));
}
if (rr.isRead()) {
roleset.add(rr.getPermission().getName());
roleset.add(rr.getPermission().append(RolePermission.READ));
}
if (rr.isWrite()) {
roleset.add(rr.getPermission().getName());
roleset.add(rr.getPermission().append(RolePermission.WRITE));
}
}
}
}
if (permbean.isLoggedIn()) {
roleset.add("USER");
}
if (usr.isSuperadmin()) {
for (Permission p : Permission.values()) {
roleset.add(p.getName());
roleset.add(p.append(RolePermission.EXECUTE));
roleset.add(p.append(RolePermission.READ));
roleset.add(p.append(RolePermission.WRITE));
}
roleset.add(BeanRole.SUPERADMIN.name());
}
}
Vector<String> retvect = new Vector<String>();
retvect.addAll(roleset);
logger.debug("group names for user {}: {}", user, retvect);
return retvect.elements();
}
}
......@@ -3,6 +3,8 @@ package fi.insomnia.bortal.beans;
import java.io.OutputStream;
import java.util.List;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;
......@@ -20,9 +22,7 @@ import com.pdfjet.TextLine;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.exceptions.PermissionDeniedException;
import fi.insomnia.bortal.facade.GroupMembershipFacade;
import fi.insomnia.bortal.facade.PlaceGroupFacade;
import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.User;
......@@ -30,139 +30,139 @@ import fi.insomnia.bortal.model.User;
* Session Bean implementation class PlaceGroupBean
*/
@Stateless
@DeclareRoles("USER")
public class PlaceGroupBean implements PlaceGroupBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(PlaceGroupBean.class);
private static final int YSTART = 30;
@EJB
private EventBeanLocal eventbean;
@EJB
private PlaceGroupFacade pgfacade;
@EJB
private GroupMembershipFacade gmemfacade;
@EJB
private UserBeanLocal userbean;
@EJB
private SecurityBeanLocal secubean;
/**
* Default constructor.
*/
public PlaceGroupBean() {
// TODO Auto-generated constructor stub
}
// @Override
// public PlaceGroup createPlaceGroup(User creator) {
// }
// @Override
// public GroupMembership createGroupMembership(PlaceGroup pg, Place p) {
//
// GroupMembership membership = new
// GroupMembership(eventbean.getCurrentEvent(), pg, p,
// gmemfacade.createInviteToken());
// gmemfacade.create(membership);
// return membership;
// }
@Override
public List<GroupMembership> getMembershipsAndCreations(User user) {
userbean.fatalNotLoggedIn();
List<GroupMembership> ret = gmemfacade.findMemberOrCreator(eventbean.getCurrentEvent(), user);
return ret;
}
@Override
public List<GroupMembership> getMemberships(User user) {
userbean.fatalNotLoggedIn();
List<GroupMembership> ret = gmemfacade.findMemberships(eventbean.getCurrentEvent(), user);
return ret;
}
@Override
public boolean associateToToken(User user, String token) {
token = token.trim();
userbean.fatalNotLoggedIn();
GroupMembership mem = gmemfacade.findByToken(token);
boolean ret = false;
if (mem != null && mem.getUser() == null) {
mem.setUser(user);
user.getGroupMemberships().add(mem);
gmemfacade.merge(mem);
ret = true;
}
return ret;
}
@Override
public void getGroupMembershipPdf(List<GroupMembership> memberships, OutputStream ostream) {
try {
PDF pdf = new PDF(ostream);
Font font = new Font(pdf, CoreFont.TIMES_ROMAN);
Font bigfont = new Font(pdf, CoreFont.TIMES_ROMAN);
bigfont.setSize(15);
Page page = new Page(pdf, A4.PORTRAIT);
int y = YSTART;
for (GroupMembership membership : memberships) {
if (y > 750) {
page = new Page(pdf, A4.PORTRAIT);
y = YSTART;
}
//
// PNGImage jpeg = new
// PNGImage(BarcodeBean.getBarcode(membership.getInviteToken()));
// logger.debug("Jpeg: " + jpeg.getWidth() + " h. " +
// jpeg.getHeight());
Image image = new Image(pdf, BarcodeBean.getBarcode(membership.getInviteToken()), ImageType.PNG);
image.scaleBy(0.8);
image.setPosition(50, y);
image.drawOn(page);
TextLine name = new TextLine(bigfont, membership.getPlaceReservation().getName());
name.setPosition(300, y + 10);
name.drawOn(page);
TextLine reserverLabel = new TextLine(font, "Varaaja: ");
reserverLabel.setPosition(300, y + 30);
reserverLabel.drawOn(page);
TextLine reserver = new TextLine(font, new StringBuilder(membership.getPlaceGroup().getCreator().getWholeName()).append(" (").append(membership.getPlaceGroup().getCreator().getNick()).append(")").toString());
reserver.setPosition(310, y + 45);
reserver.drawOn(page);
TextLine assoclabel = new TextLine(font, "Yhdistetty käyttäjään: ");
assoclabel.setPosition(300, y + 65);
assoclabel.drawOn(page);
TextLine assoc = new TextLine(font, ((membership.getUser() == null) ? "-----" : new StringBuilder(membership.getUser().getWholeName()).append(" (").append(membership.getUser().getNick()).append(")").toString()));
assoc.setPosition(310, y + 80);
assoc.drawOn(page);
y += 130;
}
pdf.flush();
} catch (Exception e) {
logger.info("Error getting printing group memberships", e);
}
}
@Override
public void releaseAndGenerateToken(GroupMembership gmem) {
if (!userbean.getCurrentUser().getId().equals(gmem.getPlaceGroup().getCreator().getId()) ||
!userbean.hasPermission(Permission.MAP, RolePermission.WRITE)) {
throw new PermissionDeniedException(secubean, userbean.getCurrentUser(), "User tried to release and generate group membership: " + gmem);
}
gmem.setUser(null);
gmem.setInviteToken(gmemfacade.createInviteToken(eventbean.getCurrentEvent()));
gmemfacade.merge(gmem);
}
private static final Logger logger = LoggerFactory.getLogger(PlaceGroupBean.class);
private static final int YSTART = 30;
@EJB
private EventBeanLocal eventbean;
@EJB
private GroupMembershipFacade gmemfacade;
@EJB
private LoggingBeanLocal loggingbean;
@EJB
private PermissionBeanLocal permbean;
/**
* Default constructor.
*/
public PlaceGroupBean() {
// TODO Auto-generated constructor stub
}
// @Override
// public PlaceGroup createPlaceGroup(User creator) {
// }
// @Override
// public GroupMembership createGroupMembership(PlaceGroup pg, Place p) {
//
// GroupMembership membership = new
// GroupMembership(eventbean.getCurrentEvent(), pg, p,
// gmemfacade.createInviteToken());
// gmemfacade.create(membership);
// return membership;
// }
@Override
@RolesAllowed("USER")
public List<GroupMembership> getMembershipsAndCreations(User user) {
List<GroupMembership> ret = gmemfacade.findMemberOrCreator(eventbean.getCurrentEvent(), user);
return ret;
}
@Override
@RolesAllowed("USER")
public List<GroupMembership> getMemberships(User user) {
List<GroupMembership> ret = gmemfacade.findMemberships(eventbean.getCurrentEvent(), user);
return ret;
}
@Override
@RolesAllowed("USER")
public boolean associateToToken(User user, String token) {
token = token.trim();
GroupMembership mem = gmemfacade.findByToken(token);
boolean ret = false;
if (mem != null && mem.getUser() == null) {
mem.setUser(user);
user.getGroupMemberships().add(mem);
gmemfacade.merge(mem);
ret = true;
}
return ret;
}
@Override
public void getGroupMembershipPdf(List<GroupMembership> memberships, OutputStream ostream) {
try {
PDF pdf = new PDF(ostream);
Font font = new Font(pdf, CoreFont.TIMES_ROMAN);
Font bigfont = new Font(pdf, CoreFont.TIMES_ROMAN);
bigfont.setSize(15);
Page page = new Page(pdf, A4.PORTRAIT);
int y = YSTART;
for (GroupMembership membership : memberships) {
if (y > 750) {
page = new Page(pdf, A4.PORTRAIT);
y = YSTART;
}
//
// PNGImage jpeg = new
// PNGImage(BarcodeBean.getBarcode(membership.getInviteToken()));
// logger.debug("Jpeg: " + jpeg.getWidth() + " h. " +
// jpeg.getHeight());
Image image = new Image(pdf, BarcodeBean.getBarcode(membership.getInviteToken()), ImageType.PNG);
image.scaleBy(0.8);
image.setPosition(50, y);
image.drawOn(page);
TextLine name = new TextLine(bigfont, membership.getPlaceReservation().getName());
name.setPosition(300, y + 10);
name.drawOn(page);
TextLine reserverLabel = new TextLine(font, "Varaaja: ");
reserverLabel.setPosition(300, y + 30);
reserverLabel.drawOn(page);
TextLine reserver = new TextLine(font, new StringBuilder(membership.getPlaceGroup().getCreator().getWholeName()).append(" (").append(membership.getPlaceGroup().getCreator().getNick()).append(")").toString());
reserver.setPosition(310, y + 45);
reserver.drawOn(page);
TextLine assoclabel = new TextLine(font, "Yhdistetty käyttäjään: ");
assoclabel.setPosition(300, y + 65);
assoclabel.drawOn(page);
TextLine assoc = new TextLine(font, ((membership.getUser() == null) ? "-----" : new StringBuilder(membership.getUser().getWholeName()).append(" (").append(membership.getUser().getNick()).append(")").toString()));
assoc.setPosition(310, y + 80);
assoc.drawOn(page);
y += 130;
}
pdf.flush();
} catch (Exception e) {
logger.info("Error getting printing group memberships", e);
}
}
@Override
public void releaseAndGenerateToken(GroupMembership gmem) throws PermissionDeniedException {
if (!permbean.getCurrentUser().getId().equals(gmem.getPlaceGroup().getCreator().getId()) ||
!permbean.hasPermission(Permission.MAP, RolePermission.WRITE)) {
throw new PermissionDeniedException(loggingbean, permbean.getCurrentUser(), "User tried to release and generate group membership: " + gmem);
}
gmem.setUser(null);
gmem.setInviteToken(gmemfacade.createInviteToken(eventbean.getCurrentEvent()));
gmemfacade.merge(gmem);
}
}
package fi.insomnia.bortal.beans;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.imageio.ImageIO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.exceptions.PermissionDeniedException;
import fi.insomnia.bortal.facade.EventMapFacade;
import fi.insomnia.bortal.facade.PlaceFacade;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.PlaceGroup;
import fi.insomnia.bortal.model.User;
/**
* Session Bean implementation class PlaceMapBean
......@@ -30,34 +13,29 @@ import fi.insomnia.bortal.model.User;
@Stateless
public class PlaceMapBean implements PlaceMapBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(PlaceMapBean.class);
/**
* Default constructor.
*/
public PlaceMapBean() {
// TODO Auto-generated constructor stub
}
@EJB
private PlaceFacade placeFacade;
@EJB
// private EventMapBean eventmapBean;
private EventMapFacade eventMapFacade;
@EJB
private SecurityBeanLocal secubean;
@EJB
private UserBeanLocal userbean;
@EJB
private EventBeanLocal eventbean;
public Long selectablePlaceCount(EventMap map) {
return placeFacade.countSelectable(map);
}
@Override
public EventMap findMap(Integer mapId) {
return eventMapFacade.find(eventbean.getCurrentEvent().getId(), mapId);
}
/**
* Default constructor.
*/
public PlaceMapBean() {
// TODO Auto-generated constructor stub
}
@EJB
private PlaceFacade placeFacade;
@EJB
// private EventMapBean eventmapBean;
private EventMapFacade eventMapFacade;
@EJB
private EventBeanLocal eventbean;
@Override
public Long selectablePlaceCount(EventMap map) {
return placeFacade.countSelectable(map);
}
@Override
public EventMap findMap(Integer mapId) {
return eventMapFacade.find(eventbean.getCurrentEvent().getId(), mapId);
}
}
......@@ -4,13 +4,14 @@ import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.facade.EventChildGenericFacade;
import fi.insomnia.bortal.facade.PollAnswerFacade;
import fi.insomnia.bortal.facade.PollFacade;
import fi.insomnia.bortal.facade.PollQuestionFacade;
......@@ -25,109 +26,110 @@ import fi.insomnia.bortal.model.PossibleAnswer;
*/
@Stateless
@DeclareRoles("USER")
public class PollBean implements PollBeanLocal {
@EJB
private PollFacade pollFacade;
@EJB
private PollAnswerFacade pollAnswerFacade;
@EJB
private EventBeanLocal eventBean;
@EJB
private UserBeanLocal userBean;
@EJB
private PossibleAnswerFacade possibleAnswerFacade;
@EJB
private PollQuestionFacade pqfacade;
private static final Logger logger = LoggerFactory.getLogger(PollBean.class);
/**
* Default constructor.
*/
public PollBean() {
// TODO Auto-generated constructor stub
}
@Override
public List<Poll> findPolls() {
List<Poll> list = new ArrayList<Poll>();
userBean.fatalNotLoggedIn();
for (Poll p : pollFacade.findAll(eventBean.getCurrentEvent())) {
if (pollIsUsable(p)) {
list.add(p);
}
logger.debug("Checked poll {}. listsize {}", p, list.size());
}
logger.debug("Returning poll");
return list;
}
private boolean pollIsUsable(Poll poll) {
Calendar now = Calendar.getInstance();
// Already valid
if (poll.getBegin().after(now)) {
logger.debug("Poll {} not opened yet", poll);
return false;
}
// Still valid
if (poll.getEnd().before(now)) {
logger.debug("Poll {} already closed", poll);
return false;
}
logger.debug("Poll has {} questions", poll.getQuestions());
// At least one question that is on a page
for (PollQuestion q : poll.getQuestions()) {
logger.debug("Check question {} page {}", q, q.getPage());
if (q.getPage() > 0) {
return true;
}
}
// No usable questions
return false;
}
@Override
public boolean createAnswers(List<PollAnswer> answers) {
userBean.fatalNotLoggedIn();
for (PollAnswer answer : answers) {
answer.setUser(userBean.getCurrentUser());
if (answer.getId().getId() == null)
pollAnswerFacade.create(answer);
}
return false;
}
@Override
public PossibleAnswer findPossibleAnwerById(int id) {
PossibleAnswer ans = possibleAnswerFacade.find(eventBean.getCurrentEvent().getId(), new Integer(id));
logger.debug("Searching from facade {} found {}", id, ans.getId().getId());
return ans;
}
@Override
public void createPoll(Poll poll) {
pollFacade.create(poll);
}
@Override
public void createAnswers(PollQuestion q) {
pqfacade.create(q);
}
@EJB
private PollFacade pollFacade;
@EJB
private PollAnswerFacade pollAnswerFacade;
@EJB
private EventBeanLocal eventBean;
@EJB
private PermissionBeanLocal permbean;
@EJB
private PossibleAnswerFacade possibleAnswerFacade;
@EJB
private PollQuestionFacade pqfacade;
private static final Logger logger = LoggerFactory.getLogger(PollBean.class);
/**
* Default constructor.
*/
public PollBean() {
// TODO Auto-generated constructor stub
}
@Override
@RolesAllowed("USER")
public List<Poll> findPolls() {
List<Poll> list = new ArrayList<Poll>();
for (Poll p : pollFacade.findAll(eventBean.getCurrentEvent())) {
if (pollIsUsable(p)) {
list.add(p);
}
logger.debug("Checked poll {}. listsize {}", p, list.size());
}
logger.debug("Returning poll");
return list;
}
private boolean pollIsUsable(Poll poll) {
Calendar now = Calendar.getInstance();
// Already valid
if (poll.getBegin().after(now)) {
logger.debug("Poll {} not opened yet", poll);
return false;
}
// Still valid
if (poll.getEnd().before(now)) {
logger.debug("Poll {} already closed", poll);
return false;
}
logger.debug("Poll has {} questions", poll.getQuestions());
// At least one question that is on a page
for (PollQuestion q : poll.getQuestions()) {
logger.debug("Check question {} page {}", q, q.getPage());
if (q.getPage() > 0) {
return true;
}
}
// No usable questions
return false;
}
@Override
@RolesAllowed("USER")
public boolean createAnswers(List<PollAnswer> answers) {
for (PollAnswer answer : answers) {
answer.setUser(permbean.getCurrentUser());
if (answer.getId().getId() == null) {
pollAnswerFacade.create(answer);
}
}
return false;
}
@Override
public PossibleAnswer findPossibleAnwerById(int id) {
PossibleAnswer ans = possibleAnswerFacade.find(eventBean.getCurrentEvent().getId(), new Integer(id));
logger.debug("Searching from facade {} found {}", id, ans.getId().getId());
return ans;
}
@Override
public void createPoll(Poll poll) {
pollFacade.create(poll);
}
@Override
public void createAnswers(PollQuestion q) {
pqfacade.create(q);
}
}
......@@ -6,11 +6,11 @@ import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.facade.AccountEventFacade;
import fi.insomnia.bortal.facade.DiscountInstanceFacade;
import fi.insomnia.bortal.facade.ProductFacade;
......@@ -26,133 +26,136 @@ import fi.insomnia.bortal.model.User;
* Session Bean implementation class ProductBean
*/
@Stateless
@DeclareRoles({ "PRODUCT/WRITE", "PRODUCT/READ", "SHOP/EXECUTE" })
public class ProductBean implements ProductBeanLocal {
private static final String DEFAULT_CREDIT_PRODCT = "Automagic Credit product";
@EJB
private ProductFacade productFacade;
@EJB
private EventBeanLocal eventBean;
@EJB
private UserBeanLocal userbean;
@EJB
private AccountEventFacade accounteventfacade;
@EJB
private DiscountInstanceFacade discountinstancefacade;
@EJB
private UserFacade userFacade;
/**
* Default constructor.
*/
public ProductBean() {
// TODO Auto-generated constructor stub
}
@Override
public List<Product> listUserShoppableProducts() {
return productFacade.findPrepaidProducts(eventBean.getCurrentEvent());
}
@Override
public Product createProduct(String name, BigDecimal price) {
userbean.fatalPermission(Permission.PRODUCT, RolePermission.WRITE, "User tried to create product: ", name);
Product entity = new Product(eventBean.getCurrentEvent(), name, price);
productFacade.create(entity);
return entity;
}
@Override
public List<Product> getProducts() {
userbean.fatalPermission(Permission.PRODUCT, RolePermission.READ, "User tried to fetch all products");
return productFacade.findAll(eventBean.getCurrentEvent());
}
@Override
public Product mergeChanges(Product product) {
userbean.fatalPermission(Permission.PRODUCT, RolePermission.WRITE, "User tried to save changes for product: ", product);
return productFacade.merge(product);
}
@Override
public Product findCreditProduct() {
Product ret = productFacade.findProductByPrice(eventBean.getCurrentEvent(), BigDecimal.ONE.negate());
if (ret == null) {
ret = new Product(eventBean.getCurrentEvent(), DEFAULT_CREDIT_PRODCT, BigDecimal.ONE.negate());
productFacade.create(ret);
}
return ret;
}
@Override
public BigDecimal calculateTotal(Product product, BigDecimal quantity) {
if (product == null || quantity == null) {
throw new RuntimeException("Some parameter is null!");
}
BigDecimal total = product.getPrice();
for (Discount d : getActiveDiscounts(product, quantity)) {
total = total.multiply(d.getPercentage());
}
return total.setScale(2, RoundingMode.HALF_UP).multiply(quantity);
}
// TODO: alennukset lasketaan täällä. HUOMHUOM!!
@Override
public List<Discount> getActiveDiscounts(Product product, BigDecimal quantity) {
ArrayList<Discount> ret = new ArrayList<Discount>();
for (Discount d : product.getDiscounts()) {
if (d.isActive() && quantity.compareTo(d.getAmountMax()) <= 0 && quantity.compareTo(d.getAmountMin()) >= 0) {
ret.add(d);
}
}
return ret;
}
@Override
public AccountEvent createAccountEvent(Product product, BigDecimal quantity, User user) {
BigDecimal unitPrice = product.getPrice().negate();
List<Discount> discounts = getActiveDiscounts(product, quantity);
for (Discount d : discounts) {
unitPrice = unitPrice.multiply(d.getPercentage());
}
AccountEvent ret = new AccountEvent(eventBean.getCurrentEvent(), user, product, unitPrice, quantity, Calendar.getInstance());
ret.setDelivered(Calendar.getInstance());
ret.setSeller(userbean.getCurrentUser());
// user.getAccountEvents().add(ret);
accounteventfacade.create(ret);
LanEvent event = eventBean.getCurrentEvent();
// List<DiscountInstance> discountsArray = ret.getDiscountInstances();
for (Discount d : discounts) {
DiscountInstance discInst = new DiscountInstance(event, ret, d);
// discountsArray.add(discInst);
discountinstancefacade.create(discInst);
}
// userbean.mergeChanges(user);
accounteventfacade.evict(ret);
userFacade.evict(user);
product.getUnitName();
return ret;
}
@Override
public Product findById(int id) {
return productFacade.find(eventBean.getCurrentEvent().getId(), id);
}
@Override
public List<Product> findForStaffshop() {
userbean.fatalPermission(Permission.SHOP, RolePermission.EXECUTE, "user tried to get adminshoppable products from productbean without SHOP:EXECUTE");
return productFacade.findAll(eventBean.getCurrentEvent());
}
private static final String DEFAULT_CREDIT_PRODCT = "Automagic Credit product";
@EJB
private ProductFacade productFacade;
@EJB
private EventBeanLocal eventBean;
@EJB
private AccountEventFacade accounteventfacade;
@EJB
private DiscountInstanceFacade discountinstancefacade;
@EJB
private UserFacade userFacade;
@EJB
private PermissionBeanLocal permbean;
/**
* Default constructor.
*/
public ProductBean() {
// TODO Auto-generated constructor stub
}
@Override
@RolesAllowed("SHOP/EXECUTE")
public List<Product> listUserShoppableProducts() {
return productFacade.findPrepaidProducts(eventBean.getCurrentEvent());
}
@Override
@RolesAllowed("PRODUCT/WRITE")
public Product createProduct(String name, BigDecimal price) {
Product entity = new Product(eventBean.getCurrentEvent(), name, price);
productFacade.create(entity);
return entity;
}
@Override
@RolesAllowed("PRODUCT/READ")
public List<Product> getProducts() {
return productFacade.findAll(eventBean.getCurrentEvent());
}
@Override
@RolesAllowed("PRODUCT/WRITE")
public Product mergeChanges(Product product) {
return productFacade.merge(product);
}
@Override
public Product findCreditProduct() {
Product ret = productFacade.findProductByPrice(eventBean.getCurrentEvent(), BigDecimal.ONE.negate());
if (ret == null) {
ret = new Product(eventBean.getCurrentEvent(), DEFAULT_CREDIT_PRODCT, BigDecimal.ONE.negate());
productFacade.create(ret);
}
return ret;
}
@Override
public BigDecimal calculateTotal(Product product, BigDecimal quantity) {
if (product == null || quantity == null) {
throw new RuntimeException("Some parameter is null!");
}
BigDecimal total = product.getPrice();
for (Discount d : getActiveDiscounts(product, quantity)) {
total = total.multiply(d.getPercentage());
}
return total.setScale(2, RoundingMode.HALF_UP).multiply(quantity);
}
// TODO: alennukset lasketaan täällä. HUOMHUOM!!
@Override
public List<Discount> getActiveDiscounts(Product product, BigDecimal quantity) {
ArrayList<Discount> ret = new ArrayList<Discount>();
for (Discount d : product.getDiscounts()) {
if (d.isActive() && quantity.compareTo(d.getAmountMax()) <= 0 && quantity.compareTo(d.getAmountMin()) >= 0) {
ret.add(d);
}
}
return ret;
}
@Override
public AccountEvent createAccountEvent(Product product, BigDecimal quantity, User user) {
BigDecimal unitPrice = product.getPrice().negate();
List<Discount> discounts = getActiveDiscounts(product, quantity);
for (Discount d : discounts) {
unitPrice = unitPrice.multiply(d.getPercentage());
}
AccountEvent ret = new AccountEvent(eventBean.getCurrentEvent(), user, product, unitPrice, quantity, Calendar.getInstance());
ret.setDelivered(Calendar.getInstance());
ret.setSeller(permbean.getCurrentUser());
// user.getAccountEvents().add(ret);
accounteventfacade.create(ret);
LanEvent event = eventBean.getCurrentEvent();
// List<DiscountInstance> discountsArray = ret.getDiscountInstances();
for (Discount d : discounts) {
DiscountInstance discInst = new DiscountInstance(event, ret, d);
// discountsArray.add(discInst);
discountinstancefacade.create(discInst);
}
// userbean.mergeChanges(user);
accounteventfacade.evict(ret);
userFacade.evict(user);
product.getUnitName();
return ret;
}
@Override
public Product findById(int id) {
return productFacade.find(eventBean.getCurrentEvent().getId(), id);
}
@Override
@RolesAllowed("SHOP/EXECUTE")
public List<Product> findForStaffshop() {
return productFacade.findAll(eventBean.getCurrentEvent());
}
}
......@@ -2,14 +2,14 @@ package fi.insomnia.bortal.beans;
import java.util.Calendar;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
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.exceptions.BortalCatchableException;
import fi.insomnia.bortal.facade.GroupMembershipFacade;
import fi.insomnia.bortal.facade.PrintedCardFacade;
......@@ -25,99 +25,98 @@ import fi.insomnia.bortal.model.ReaderEvent;
* Session Bean implementation class ReaderBean
*/
@Stateless
@DeclareRoles("GAME/EXECUTE")
public class ReaderBean implements ReaderBeanLocal {
@EJB
private ReaderFacade readerfacade;
@EJB
private EventBeanLocal eventbean;
@EJB
private PrintedCardFacade cardfacade;
@EJB
private ReaderEventFacade readerEventFacade;
@EJB
private GroupMembershipFacade gmfacade;
@EJB
private CardTemplateBeanLocal cardtemplatebean;
@EJB
private UserBeanLocal userbean;
private static final Logger logger = LoggerFactory.getLogger(ReaderBean.class);
@Override
public ReaderEvent checkTag(String ident, String tag, String hash) {
LanEvent ev = eventbean.getCurrentEvent();
PrintedCard card = cardfacade.findByRfid(ev, tag);
ReaderEvent ret = null;
logger.debug("Found card by rfid: {}", card);
if (card != null) {
ret = createReaderEvent(ident, card);
}
return ret;
}
@Override
public ReaderEvent assocTagToPlacecode(String tag, String readerIdent, String placecode) throws BortalCatchableException {
GroupMembership gm = gmfacade.findByToken(placecode);
if (gm == null) {
throw new BortalCatchableException("Token" + placecode + " not found!", "readerbean.tokenNotFound");
}
if (gm.getUser() == null) {
throw new BortalCatchableException("Token " + placecode + "found but not assoc to user!", "readerbean.userNotAssociateToMembership");
}
PrintedCard card = cardtemplatebean.setRfidUid(tag, gm.getUser());
return createReaderEvent(readerIdent, card);
}
private ReaderEvent createReaderEvent(String readerIdent, PrintedCard card) {
LanEvent ev = eventbean.getCurrentEvent();
Reader reader = readerfacade.findOrCreateByIdent(ev, readerIdent);
logger.debug("Creating new readerevent for reader {} and events {}", reader, reader.getMaxEvents());
logger.debug("maxevents for reder {}. readerevents at the moment {}", reader.getMaxEvents(), reader.getEvents().size());
if (reader.getMaxEvents() > 0 && reader.getMaxEvents() <= reader.getEvents().size()) {
logger.debug("Max events {} found. returning null");
return null;
}
if (reader.getGamepoints() > 0 && card.getUser() != null) {
logger.debug("Checking if user has been here");
for (ReaderEvent oldRe : card.getReaderEvents()) {
if (oldRe.getReader().getId().equals(reader.getId())) {
logger.debug("Found already an event for user! returning null");
return null;
}
}
}
ReaderEvent ret = new ReaderEvent(ev, Calendar.getInstance(), card, reader);
ret.setGamePoint(reader.getGamepoints());
ret.setReader(reader);
reader.getEvents().add(ret);
card.getReaderEvents().add(ret);
cardfacade.merge(card);
return ret;
}
@Override
public ReaderEvent assocTagToCard(String tag, String readerIdent, PrintedCard card) {
card = cardtemplatebean.setRfidUid(tag, card);
return createReaderEvent(readerIdent, card);
}
@Override
public ReaderEvent merge(ReaderEvent e) {
userbean.fatalPermission(Permission.GAME, RolePermission.EXECUTE, "Tried to change readerevent");
return readerEventFacade.merge(e);
}
@EJB
private ReaderFacade readerfacade;
@EJB
private EventBeanLocal eventbean;
@EJB
private PrintedCardFacade cardfacade;
@EJB
private ReaderEventFacade readerEventFacade;
@EJB
private GroupMembershipFacade gmfacade;
@EJB
private CardTemplateBeanLocal cardtemplatebean;
private static final Logger logger = LoggerFactory.getLogger(ReaderBean.class);
@Override
public ReaderEvent checkTag(String ident, String tag, String hash) {
LanEvent ev = eventbean.getCurrentEvent();
PrintedCard card = cardfacade.findByRfid(ev, tag);
ReaderEvent ret = null;
logger.debug("Found card by rfid: {}", card);
if (card != null) {
ret = createReaderEvent(ident, card);
}
return ret;
}
@Override
public ReaderEvent assocTagToPlacecode(String tag, String readerIdent, String placecode) throws BortalCatchableException, PermissionDeniedException {
GroupMembership gm = gmfacade.findByToken(placecode);
if (gm == null) {
throw new BortalCatchableException("Token" + placecode + " not found!", "readerbean.tokenNotFound");
}
if (gm.getUser() == null) {
throw new BortalCatchableException("Token " + placecode + "found but not assoc to user!", "readerbean.userNotAssociateToMembership");
}
PrintedCard card = cardtemplatebean.setRfidUid(tag, gm.getUser());
return createReaderEvent(readerIdent, card);
}
private ReaderEvent createReaderEvent(String readerIdent, PrintedCard card) {
LanEvent ev = eventbean.getCurrentEvent();
Reader reader = readerfacade.findOrCreateByIdent(ev, readerIdent);
logger.debug("Creating new readerevent for reader {} and events {}", reader, reader.getMaxEvents());
logger.debug("maxevents for reder {}. readerevents at the moment {}", reader.getMaxEvents(), reader.getEvents().size());
if (reader.getMaxEvents() > 0 && reader.getMaxEvents() <= reader.getEvents().size()) {
logger.debug("Max events {} found. returning null");
return null;
}
if (reader.getGamepoints() > 0 && card.getUser() != null) {
logger.debug("Checking if user has been here");
for (ReaderEvent oldRe : card.getReaderEvents()) {
if (oldRe.getReader().getId().equals(reader.getId())) {
logger.debug("Found already an event for user! returning null");
return null;
}
}
}
ReaderEvent ret = new ReaderEvent(ev, Calendar.getInstance(), card, reader);
ret.setGamePoint(reader.getGamepoints());
ret.setReader(reader);
reader.getEvents().add(ret);
card.getReaderEvents().add(ret);
cardfacade.merge(card);
return ret;
}
@Override
public ReaderEvent assocTagToCard(String tag, String readerIdent, PrintedCard card) {
card = cardtemplatebean.setRfidUid(tag, card);
return createReaderEvent(readerIdent, card);
}
@Override
@RolesAllowed("GAME/EXECUTE")
public ReaderEvent merge(ReaderEvent e) {
return readerEventFacade.merge(e);
}
}
......@@ -9,14 +9,17 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.annotation.Resource;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
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.RoleRightFacade;
import fi.insomnia.bortal.model.LanEvent;
......@@ -28,124 +31,116 @@ import fi.insomnia.bortal.model.RoleRight;
* @author tuukka
*/
@Stateless
@DeclareRoles({ "ROLE_MANAGEMENT/READ", "ROLE_MANAGEMENT/WRITE" })
public class RoleBean implements RoleBeanLocal {
// private static final String PUBLIC_ROLE_NAME = BeanRole.ANONYMOUS.toString();
@EJB
private EventBeanLocal eventBean;
@EJB
private RoleFacade roleFacade;
@EJB
private RoleRightFacade rrfacade;
@EJB
private UserBeanLocal userbean;
private static final Logger logger = LoggerFactory.getLogger(RoleBean.class);
public List<Role> listRoles() {
userbean.fatalPermission(Permission.ROLE_MANAGEMENT, RolePermission.READ, "User tried to listRoles");
return listRoles(eventBean.getCurrentEvent());
}
@Override
public List<Role> listRoles(LanEvent event) {
return roleFacade.findAll(event);
}
public Role mergeChanges(Role role) {
userbean.fatalPermission(Permission.ROLE_MANAGEMENT, RolePermission.WRITE, "User tried merge role changes for ", role);
return roleFacade.merge(role);
}
public Role create(Role role) {
userbean.fatalPermission(Permission.ROLE_MANAGEMENT, RolePermission.WRITE, "User tried to create role", role.getName());
roleFacade.create(role);
return role;
}
public List<Role> getPossibleParents(Role role) {
userbean.fatalPermission(Permission.ROLE_MANAGEMENT, RolePermission.READ, "User tried to get possible parents for role ", role);
List<Role> roleList = listRoles();
if (role == null)
return roleList;
List<Role> children = getAllChilds(role, new HashSet<Role>());
for (Role unit : children) {
if (roleList.contains(unit)) {
roleList.remove(unit);
}
}
roleList.remove(role);
return roleList;
}
private static List<Role> getAllChilds(Role role, Set<Role> checkedRoles) {
List<Role> returnList = new ArrayList<Role>();
if (checkedRoles.contains(role) || role == null) {
return returnList;
}
for (Role unit : role.getChildren()) {
List<Role> someList = getAllChilds(unit, checkedRoles);
returnList.addAll(someList);
}
checkedRoles.add(role);
return returnList;
}
public List<RoleRight> getRoleRights(Role r) {
List<RoleRight> ret = new ArrayList<RoleRight>();
for (Permission perm : Permission.values()) {
ret.add(findRoleRight(r, perm));
}
return ret;
}
@Override
public RoleRight mergeChanges(RoleRight row) {
userbean.fatalPermission(Permission.ROLE_MANAGEMENT, RolePermission.WRITE, "User tried merge changes for RoleRight", row);
return rrfacade.merge(row);
}
// public Role getOrCreatePublicRole() {
//
// Role ret = roleFacade.findByName(PUBLIC_ROLE_NAME);
// if (ret == null) {
//
// ret = roleFacade.createRole(eventBean.getCurrentEvent(), PUBLIC_ROLE_NAME);
// AccessRight perm = accessRightFacade.findByPermission(Permission.LOGIN);
// RoleRight rr = rrfacade.createRoleRight(ret, perm);
// rr.setRead(true);
// }
// return ret;
//
// }
public RoleRight findRoleRight(Role role, Permission perm) {
RoleRight rr = rrfacade.find(perm, role);
if (rr == null) {
rr = new RoleRight(role, perm, false, false, false);
rrfacade.create(rr);
}
return rr;
}
@Override
public Role find(int id, LanEvent event) {
return roleFacade.find(event.getId(), id);
}
// private static final String PUBLIC_ROLE_NAME =
// BeanRole.ANONYMOUS.toString();
private static final Logger logger = LoggerFactory.getLogger(RoleBean.class);
@Resource
private SessionContext sc;
@EJB
private EventBeanLocal eventBean;
@EJB
private RoleFacade roleFacade;
@EJB
private RoleRightFacade rrfacade;
@Override
@RolesAllowed("ROLE_MANAGEMENT/READ")
public List<Role> listRoles() {
return listRoles(eventBean.getCurrentEvent());
}
@Override
@RolesAllowed("ROLE_MANAGEMENT/READ")
public List<Role> listRoles(LanEvent event) {
return roleFacade.findAll(event);
}
@Override
@RolesAllowed("ROLE_MANAGEMENT/WRITE")
public Role mergeChanges(Role role) {
return roleFacade.merge(role);
}
@Override
@RolesAllowed("ROLE_MANAGEMENT/WRITE")
public Role create(Role role) {
roleFacade.create(role);
return role;
}
@Override
@RolesAllowed("ROLE_MANAGEMENT/READ")
public List<Role> getPossibleParents(Role role) {
List<Role> roleList = listRoles();
if (role == null) {
return roleList;
}
List<Role> children = getAllChilds(role, new HashSet<Role>());
for (Role unit : children) {
if (roleList.contains(unit)) {
roleList.remove(unit);
}
}
roleList.remove(role);
return roleList;
}
private static List<Role> getAllChilds(Role role, Set<Role> checkedRoles) {
List<Role> returnList = new ArrayList<Role>();
if (checkedRoles.contains(role) || role == null) {
return returnList;
}
for (Role unit : role.getChildren()) {
List<Role> someList = getAllChilds(unit, checkedRoles);
returnList.addAll(someList);
}
checkedRoles.add(role);
return returnList;
}
@Override
@RolesAllowed("ROLE_MANAGEMENT/READ")
public List<RoleRight> getRoleRights(Role r) {
List<RoleRight> ret = new ArrayList<RoleRight>();
for (Permission perm : Permission.values()) {
ret.add(findRoleRight(r, perm));
}
return ret;
}
@Override
@RolesAllowed("ROLE_MANAGEMENT/WRITE")
public RoleRight mergeChanges(RoleRight row) {
return rrfacade.merge(row);
}
@RolesAllowed("ROLE_MANAGEMENT/READ")
public RoleRight findRoleRight(Role role, Permission perm) {
RoleRight rr = rrfacade.find(perm, role);
if (rr == null) {
rr = new RoleRight(role, perm, false, false, false);
rrfacade.create(rr);
}
return rr;
}
@Override
@RolesAllowed("ROLE_MANAGEMENT/READ")
public Role find(int id, LanEvent event) {
return roleFacade.find(event.getId(), id);
}
}
package fi.insomnia.bortal.beans;
import java.util.Calendar;
import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.transaction.UserTransaction;
import org.slf4j.Logger;
import fi.insomnia.bortal.facade.LogEntryFacade;
import fi.insomnia.bortal.facade.LogEntryTypeFacade;
import fi.insomnia.bortal.model.LogEntry;
import fi.insomnia.bortal.model.LogEntryType;
import fi.insomnia.bortal.model.User;
/**
* Session Bean implementation class SercurityBean
*/
@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class SecurityBean implements SecurityBeanLocal {
private static final boolean DEBUG = true;
private final Logger logger = org.slf4j.LoggerFactory.getLogger(SecurityBean.class);
@EJB
private LogEntryTypeFacade typeFacade;
@EJB
private LogEntryFacade entryFacade;
@Resource
UserTransaction utx;
// @Override
// public LogEntry logPermissionDenied(User user, Exception exception) {
// LogEntry entry = null;
//
// entry = logMessage(SecurityLogType.permissionDenied, user,
// exception.getMessage());
// logger.debug(entry.toString(), exception);
//
// return entry;
//
// }
//
// public LogEntry logException(User user, Exception exception) {
//
// LogEntry entry = logMessage(SecurityLogType.unknownException, user,
// exception.getMessage());
// logger.debug(entry.toString(), exception);
// return entry;
// }
//
// public LogEntry logMessage(User user, String... description) {
//
// LogEntry entry = logMessage(SecurityLogType.genericMessage, user,
// toString(description));
//
// return entry;
// }
//
// private static final String toString(String... desc) {
// StringBuilder msg = new StringBuilder();
// for (String msgpart : desc) {
// msg.append(msgpart);
// }
// return msg.toString();
// }
//
// public LogEntry logMessage(String... description) {
// LogEntry entry = logMessage(SecurityLogType.genericMessage,
// toString(description));
// return entry;
//
// }
// public LogEntry logPermissionDenied(User currentuser, String... message)
// {
// return logMessage(SecurityLogType.permissionDenied, currentuser,
// toString(message));
// }
public LogEntry logMessage(SecurityLogType paramType, User user, String... description) {
LogEntry entry = null;
try {
String desc = toString(description);
utx.begin();
LogEntryType type = typeFacade.findOrCreate(paramType);
entry = new LogEntry(Calendar.getInstance());
entry.setType(type);
entry.setDescription(desc);
entry.setUser(user);
entryFacade.create(entry);
if (DEBUG) {
logger.debug("SECURITY DEBUG: Type: \"{}\" user \"{}\", description \"{}\"", new String[] { paramType.name(), (user == null) ? "null" : user.getLogin(), desc });
}
utx.commit();
} catch (Exception e) {
logger.warn("Exception at SecurityBean", e);
}
return entry;
}
private static final String toString(String... desc) {
StringBuilder msg = new StringBuilder();
for (String msgpart : desc) {
msg.append(msgpart);
}
return msg.toString();
}
}
......@@ -2,7 +2,6 @@ package fi.insomnia.bortal.beans;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
......@@ -22,10 +21,6 @@ import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.Session;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -41,109 +36,105 @@ import fi.insomnia.bortal.util.MailMessage;
@Local
public class UtilBean implements UtilBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(UtilBean.class);
private static final int SCALEWIDTH = 640;
@PersistenceContext
private EntityManager em;
@PersistenceUnit
private EntityManagerFactory emf;
@EJB
private UserBean userbean;
/**
* Default constructor.
*/
public UtilBean() {
// TODO Auto-generated constructor stub
}
@Resource(name = "jmsQueue", mappedName = "jms/mailque")
private Queue mailQueue;
@Resource(name = "connFactory", mappedName = "jms/mailconnectionfactory")
private QueueConnectionFactory mailQuefactory;
@Override
public boolean sendMail(MailMessage message) {
Date d = new Date();
try {
QueueConnection conn = mailQuefactory.createQueueConnection();
Session session = conn.createSession(false, 1);
ObjectMessage objmessage = session.createObjectMessage(message);
session.createProducer(mailQueue).send(objmessage);
conn.close();
} catch (JMSException e) {
logger.debug("Got exception sending mail", e);
}
logger.debug("Message time {}", new Date().getTime() - d.getTime());
return true;
}
public void checkAllUsersImages() {
for (User usr : userbean.getUsers()) {
convertImage(usr);
}
}
public boolean convertImage(User user) {
UserImage oldpic = user.getCurrentImage();
if (oldpic == null || oldpic.getMimeType() == null || oldpic.getMimeType().isEmpty()) {
return false;
}
for (String imgtype : ImageIO.getReaderFormatNames()) {
logger.debug("found imgtype {}", imgtype);
}
logger.debug("converting users image id {}, type {} to jpeg", oldpic.getId(), oldpic.getMimeType());
ByteArrayInputStream naamastream = new ByteArrayInputStream(oldpic.getImageData());
try {
BufferedImage face = ImageIO.read(naamastream);
boolean isJpeg = oldpic.getMimeType().contains("jpeg");
if (face == null) {
return false;
}
if (face.getWidth() > 700) {
logger.debug("Scaling from {} {} ", face.getWidth(), face.getHeight());
BigDecimal scale = new BigDecimal(SCALEWIDTH).divide(new BigDecimal(face.getWidth()), 5, RoundingMode.HALF_UP);
int height = scale.multiply(new BigDecimal(face.getHeight())).intValue();
BufferedImage scaledImage = new BufferedImage(
SCALEWIDTH, height, face.getType());
Graphics2D graphics2D = scaledImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(face, 0, 0, SCALEWIDTH, height, null);
face = scaledImage;
} else if (isJpeg) {
return false;
}
ByteArrayOutputStream naamaout = new ByteArrayOutputStream();
ImageIO.write(face, "jpeg", naamaout);
UserImage img = new UserImage(user);
img.setDescription("changed imagetype from image id: " + oldpic.getId());
img.setImageData(naamaout.toByteArray());
img.setMimeType("image/jpeg");
img.setName("regenerated.jpg");
user.setCurrentImage(img);
user.getUserImageList().add(img);
userbean.mergeChanges(user);
} catch (IOException e) {
logger.warn("error converting image ", e);
}
return true;
}
private static final Logger logger = LoggerFactory.getLogger(UtilBean.class);
private static final int SCALEWIDTH = 640;
@EJB
private UserBean userbean;
/**
* Default constructor.
*/
public UtilBean() {
// TODO Auto-generated constructor stub
}
@Resource(name = "jmsQueue", mappedName = "jms/mailque")
private Queue mailQueue;
@Resource(name = "connFactory", mappedName = "jms/mailconnectionfactory")
private QueueConnectionFactory mailQuefactory;
@Override
public boolean sendMail(MailMessage message) {
Date d = new Date();
try {
QueueConnection conn = mailQuefactory.createQueueConnection();
Session session = conn.createSession(false, 1);
ObjectMessage objmessage = session.createObjectMessage(message);
session.createProducer(mailQueue).send(objmessage);
conn.close();
} catch (JMSException e) {
logger.debug("Got exception sending mail", e);
}
logger.debug("Message time {}", new Date().getTime() - d.getTime());
return true;
}
@Override
public void checkAllUsersImages() throws PermissionDeniedException {
for (User usr : userbean.getUsers()) {
convertImage(usr);
}
}
@Override
public boolean convertImage(User user) throws PermissionDeniedException {
UserImage oldpic = user.getCurrentImage();
if (oldpic == null || oldpic.getMimeType() == null || oldpic.getMimeType().isEmpty()) {
return false;
}
for (String imgtype : ImageIO.getReaderFormatNames()) {
logger.debug("found imgtype {}", imgtype);
}
logger.debug("converting users image id {}, type {} to jpeg", oldpic.getId(), oldpic.getMimeType());
ByteArrayInputStream naamastream = new ByteArrayInputStream(oldpic.getImageData());
try {
BufferedImage face = ImageIO.read(naamastream);
boolean isJpeg = oldpic.getMimeType().contains("jpeg");
if (face == null) {
return false;
}
if (face.getWidth() > 700) {
logger.debug("Scaling from {} {} ", face.getWidth(), face.getHeight());
BigDecimal scale = new BigDecimal(SCALEWIDTH).divide(new BigDecimal(face.getWidth()), 5, RoundingMode.HALF_UP);
int height = scale.multiply(new BigDecimal(face.getHeight())).intValue();
BufferedImage scaledImage = new BufferedImage(
SCALEWIDTH, height, face.getType());
Graphics2D graphics2D = scaledImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(face, 0, 0, SCALEWIDTH, height, null);
face = scaledImage;
} else if (isJpeg) {
return false;
}
ByteArrayOutputStream naamaout = new ByteArrayOutputStream();
ImageIO.write(face, "jpeg", naamaout);
UserImage img = new UserImage(user);
img.setDescription("changed imagetype from image id: " + oldpic.getId());
img.setImageData(naamaout.toByteArray());
img.setMimeType("image/jpeg");
img.setName("regenerated.jpg");
user.setCurrentImage(img);
user.getUserImageList().add(img);
userbean.mergeChanges(user);
} catch (IOException e) {
logger.warn("error converting image ", e);
}
return true;
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!