Commit 46b17589 by Tuomas Riihimäki

foobar

1 parent a362cd15
Showing with 212 additions and 126 deletions
......@@ -8,6 +8,7 @@
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/Users/tuomari/bin/glassfishv3_b10-07_12_2010/glassfish/lib/appserv-rt.jar"/>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish Server Open Source Edition 3 (Java EE 6)"/>
<classpathentry kind="lib" path="/Users/tuomari/bin/glassfishv31_b21_2010_09_18/glassfish/lib/appserv-rt.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
......@@ -2,7 +2,7 @@
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/JVM 1.6">
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
......
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<runtime name="GlassFish v3 Java EE 6"/>
<fixed facet="java"/>
<fixed facet="jst.utility"/>
<installed facet="jst.utility" version="1.0"/>
......
......@@ -4,15 +4,11 @@
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry combineaccessrules="false" kind="src" path="/LanBortalBeansClient"/>
<classpathentry combineaccessrules="false" kind="src" path="/LanBortalAuthModuleClient"/>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish Server Open Source Edition 3 (Java EE 6)">
<attributes>
<attribute name="owner.project.facets" value="jst.ejb"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/JVM 1.6">
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish Server Open Source Edition 3 (Java EE 6)"/>
<classpathentry kind="output" path="build/classes"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<runtime name="GlassFish Server Open Source Edition 3 (Java EE 6)"/>
<fixed facet="jst.ejb"/>
<fixed facet="jst.java"/>
<installed facet="jst.java" version="6.0"/>
......
package fi.insomnia.bortal.beans;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.math.RoundingMode;
......
......@@ -46,7 +46,7 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
if (user.checkPassword(password)) {
ret = user;
} else {
secubean.logMessage(SecurityLogType.permissionDenied, user, "Login failed: wrong password!");
secubean.logMessage(SecurityLogType.permissionDenied, user, "Login failed: wrong password! ");
}
} else {
secubean.logMessage(SecurityLogType.permissionDenied, "Login failed: Username not found: " + username);
......
......@@ -19,8 +19,12 @@ import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.exceptions.BortalCatchableException;
import fi.insomnia.bortal.exceptions.PermissionDeniedException;
import fi.insomnia.bortal.facade.GroupMembershipFacade;
import fi.insomnia.bortal.facade.PlaceFacade;
import fi.insomnia.bortal.facade.PlaceGroupFacade;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.PlaceGroup;
import fi.insomnia.bortal.model.Product;
......@@ -45,7 +49,8 @@ import org.slf4j.LoggerFactory;
public class PlaceBean implements PlaceBeanLocal {
private static final String PLACE_RESERVE_TIMEOUTER = "Map reserve timeouter";
private static final Logger logger = LoggerFactory.getLogger(PlaceBean.class);
@EJB
private GroupMembershipFacade gmemfacade;
@Resource
private TimerService ts;
......@@ -53,6 +58,8 @@ public class PlaceBean implements PlaceBeanLocal {
private PlaceFacade placeFacade;
@EJB
private PlaceGroupFacade pgfacade;
@EJB
private UserBeanLocal userbean;
@EJB
......@@ -167,13 +174,18 @@ public class PlaceBean implements PlaceBeanLocal {
@Override
public boolean buySelectedPlaces(EventMap e) throws BortalCatchableException {
userbean.fatalPermission(Permission.MAP, RolePermission.EXECUTE, "User does not have rights to reserve ( and buy) a place");
LanEvent event = eventBean.getCurrentEvent();
User user = userbean.getCurrentUser();
List<Place> places = placeFacade.findUsersReservations(e, user);
if (places.size() <= 0) {
return false;
}
PlaceGroup pg = pgbean.createPlaceGroup(user);
PlaceGroup pg = new PlaceGroup(event, Calendar.getInstance(), Calendar.getInstance(), true);
pg.setCreator(user);
pgfacade.create(pg);
// PlaceGroup pg = pgbean.createPlaceGroup(user);
BigDecimal totalprice = totalReservationPrice(e, null);
BigDecimal balance = userbean.getCurrentUser().getAccountBalance();
if (balance.compareTo(totalprice) < 0) {
......@@ -186,7 +198,8 @@ public class PlaceBean implements PlaceBeanLocal {
throw new BortalCatchableException("Error while buying places");
}
placeFacade.merge(p);
pgbean.createGroupMembership(pg, p);
GroupMembership membership = new GroupMembership(event, pg, p, gmemfacade.createInviteToken(event));
pg.getMembers().add(membership);
}
for (Entry<Product, Integer> line : getPlaceProductcount(places).entrySet()) {
......@@ -198,14 +211,19 @@ public class PlaceBean implements PlaceBeanLocal {
@Override
public void lockPlaces(User user, Product prod, BigDecimal quantity) {
BigDecimal loop = BigDecimal.ZERO;
PlaceGroup pg = pgbean.createPlaceGroup(user);
LanEvent event = eventBean.getCurrentEvent();
PlaceGroup pg = new PlaceGroup(event, Calendar.getInstance(), Calendar.getInstance(), true);
pg.setCreator(user);
pgfacade.create(pg);
for (Place p : prod.getPlaces()) {
if (!p.isTaken()) {
p.reserve(user);
p.buy(pg);
pg.getMembers().add(new GroupMembership(event, pg, p, gmemfacade.createInviteToken(event)));
placeFacade.merge(p);
pgbean.createGroupMembership(pg, p);
// pgbean.createGroupMembership(pg, p);
loop = loop.add(BigDecimal.ONE);
if (loop.compareTo(quantity) >= 0) {
break;
......@@ -217,7 +235,7 @@ public class PlaceBean implements PlaceBeanLocal {
@Override
public int setBuyable(EventMap map, String like, boolean b) {
userbean.fatalPermission(Permission.MAP, RolePermission.WRITE, "User tried to change place buyable: " + like + " to " + b);
return placeFacade.setBuyable(map, like, b);
return placeFacade.setBuyable(map, like, b);
}
......
package fi.insomnia.bortal.beans;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
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.PermissionDeniedException;
import fi.insomnia.bortal.facade.GroupMembershipFacade;
import fi.insomnia.bortal.facade.PlaceGroupFacade;
import fi.insomnia.bortal.model.GroupMembership;
......@@ -18,6 +26,7 @@ import fi.insomnia.bortal.model.User;
@Stateless
public class PlaceGroupBean implements PlaceGroupBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(PlaceGroupBean.class);
@EJB
private EventBeanLocal eventbean;
......@@ -25,6 +34,10 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
private PlaceGroupFacade pgfacade;
@EJB
private GroupMembershipFacade gmemfacade;
@EJB
private UserBeanLocal userbean;
@EJB
private SecurityBeanLocal secubean;
/**
* Default constructor.
......@@ -33,19 +46,51 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
// 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 PlaceGroup createPlaceGroup(User creator) {
PlaceGroup pg = new PlaceGroup(eventbean.getCurrentEvent(), Calendar.getInstance(), Calendar.getInstance(), true);
pg.setCreator(creator);
pgfacade.create(pg);
return pg;
public List<GroupMembership> getMemberships(User user) {
userbean.fatalNotLoggedIn();
List<GroupMembership> ret = gmemfacade.find(eventbean.getCurrentEvent(), user);
return ret;
}
@Override
public GroupMembership createGroupMembership(PlaceGroup pg, Place p) {
public boolean associateToToken(User user, String token) {
userbean.fatalNotLoggedIn();
GroupMembership mem = gmemfacade.findByToken(token);
boolean ret = false;
GroupMembership membership = new GroupMembership(eventbean.getCurrentEvent(), pg, p, gmemfacade.createInviteToken());
gmemfacade.create(membership);
return membership;
if (mem != null && mem.getUser() == null) {
mem.setUser(user);
gmemfacade.merge(mem);
ret = true;
}
return ret;
}
@Override
public void releaseAndGenerateToken(GroupMembership gmem) {
if (!userbean.getCurrentUser().equals(gmem.getPlaceGroup().getCreator()) ||
!userbean.hasCurrentUserPermission(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);
}
}
......@@ -130,7 +130,6 @@ public class UserBean implements UserBeanLocal {
return defaultUser;
}
// TODO: Voisi olla hyvä idea cachettaa... Tätä kutsutaan aika paljon..
public boolean hasPermission(Permission target, RolePermission permission) {
User user = getCurrentUser();
......
package fi.insomnia.bortal.facade;
import java.util.List;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
......@@ -10,6 +12,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.utilities.PasswordFunctions;
@Stateless
......@@ -28,14 +32,15 @@ public class GroupMembershipFacade extends EventChildGenericFacade<GroupMembersh
return em;
}
public String createInviteToken() {
public String createInviteToken(LanEvent event) {
String token = null;
GroupMembership gm = null;
do {
if (token != null) {
logger.info("Generated token {} found from GoupMembership: {} Generating new!", token, gm);
}
token = PasswordFunctions.generateRandomString(15);
token = event.getId().toString();
token += PasswordFunctions.generateRandomString(15);
gm = findByToken(token);
} while (gm != null);
return token;
......@@ -46,4 +51,11 @@ public class GroupMembershipFacade extends EventChildGenericFacade<GroupMembersh
q.setParameter("token", token);
return getSingleNullableResult(q);
}
public List<GroupMembership> find(LanEvent event, User user) {
TypedQuery<GroupMembership> p = em.createQuery("select gm from GroupMembership gm where gm.id.eventId = :eventid and (gm.placeGroup.creator = :user or gm.user = :user) order by gm.placeReservation.name",GroupMembership.class);
p.setParameter("eventid", event.getId());
p.setParameter("user", user);
return p.getResultList();
}
}
......@@ -3,15 +3,11 @@
<classpathentry kind="src" path="ejbModule"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry combineaccessrules="false" kind="src" path="/LanBortalAuthModuleClient"/>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish Server Open Source Edition 3 (Java EE 6)">
<attributes>
<attribute name="owner.project.facets" value="jst.utility"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/JVM 1.6">
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish Server Open Source Edition 3 (Java EE 6)"/>
<classpathentry kind="output" path="ejbModule"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<runtime name="GlassFish Server Open Source Edition 3 (Java EE 6)"/>
<fixed facet="jst.utility"/>
<fixed facet="jst.java"/>
<installed facet="jst.utility" version="1.0"/>
......
package fi.insomnia.bortal.beans;
import java.util.List;
import javax.ejb.Local;
import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.PlaceGroup;
import fi.insomnia.bortal.model.User;
@Local
public interface PlaceGroupBeanLocal {
PlaceGroup createPlaceGroup(User currentUser);
// PlaceGroup createPlaceGroup(User currentUser);
// GroupMembership createGroupMembership(PlaceGroup pg, Place p);
List<GroupMembership> getMemberships(User user);
boolean associateToToken(User user, String token);
GroupMembership createGroupMembership(PlaceGroup pg, Place p);
void releaseAndGenerateToken(GroupMembership gmem);
}
......@@ -3,20 +3,11 @@
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry combineaccessrules="false" kind="src" path="/LanBortalUtilities"/>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish Server Open Source Edition 3 (Java EE 6)">
<attributes>
<attribute name="owner.project.facets" value="jst.utility"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/JVM 1.6">
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/Users/tuomari/bin/glassfishv31_0507_2/glassfish/modules/org.eclipse.persistence.core.jar" sourcepath="/Users/tuomari/bin/glassfishv31_b16_2010_08_16/glassfish/modules/org.eclipse.persistence.core.jar">
<attributes>
<attribute name="javadoc_location" value="jar:file:/Applications/eclipse_Helios_m6/plugins/com.sun.enterprise.jst.server.sunappsrv_1.0.53.jar!/javaee6doc"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish Server Open Source Edition 3 (Java EE 6)"/>
<classpathentry kind="output" path="build/classes"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<runtime name="GlassFish Server Open Source Edition 3 (Java EE 6)"/>
<fixed facet="jst.utility"/>
<fixed facet="jst.java"/>
<fixed facet="jpt.jpa"/>
......
......@@ -2,16 +2,12 @@
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish Server Open Source Edition 3 (Java EE 6)">
<attributes>
<attribute name="owner.project.facets" value="jst.utility"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/JVM 1.6">
<classpathentry kind="src" path="/LanBortalBeansClient"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="src" path="/LanBortalBeansClient"/>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish Server Open Source Edition 3 (Java EE 6)"/>
<classpathentry kind="output" path="build/classes"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<runtime name="GlassFish Server Open Source Edition 3 (Java EE 6)"/>
<fixed facet="jst.java"/>
<fixed facet="jst.utility"/>
<installed facet="jst.java" version="6.0"/>
......
......@@ -11,17 +11,23 @@ import fi.insomnia.bortal.utilities.apachecodec.binary.Base64;
public class PasswordFunctions {
private static final Logger logger = LoggerFactory
.getLogger(PasswordFunctions.class);
private static final boolean UGLY_FIX = true;
public static String getEncryptedPassword(String password) {
String salt = generateSalt();
byte[] salt = new byte[SALT_LENGTH];
Random random = new Random();
random.nextBytes(salt);
String base64Str = shaWithSaltToBase64(password, salt);
String ssha = "{SSHA}" + base64Str;
return ssha;
}
private static String shaWithSaltToBase64(String password, String salt) {
private static String shaWithSaltToBase64(String password, byte[] salt) {
MessageDigest algo = null;
try {
algo = MessageDigest.getInstance("SHA");
......@@ -29,29 +35,54 @@ public class PasswordFunctions {
logger.error("WTF!! digest function not found!!", e);
return null;
}
byte[] prehash = concatBytearrays(password.getBytes(), salt);
byte[] hashed = algo.digest(prehash);
String hashed = new String(algo.digest((password + salt).getBytes()));
String both = hashed + salt;
String base64Str = new String(Base64.encodeBase64(both.getBytes()));
byte[] both = concatBytearrays(hashed, salt);
String base64Str = new String(Base64.encodeBase64(both));
logger.debug("Encoded {} to {}", both, base64Str);
return base64Str;
}
public static byte[] concatBytearrays(byte[]... arrays) {
int length = 0;
for (byte[] arr : arrays) {
length += arr.length;
}
byte[] ret = new byte[length];
int addpoint = 0;
for (byte[] arr : arrays) {
System.arraycopy(arr, 0, ret, addpoint, arr.length);
addpoint += arr.length;
}
return ret;
}
public static boolean checkPlainPassword(String plainPassword,
String saltedPassword) {
String oldBase64 = saltedPassword.substring("{SSHA}".length());
String decodedHashedAndSalt;
decodedHashedAndSalt = new String(Base64.decodeBase64(oldBase64.getBytes()));
byte[] decodedHashedAndSalt = Base64.decodeBase64(oldBase64);
logger.debug("Decoded Str {} to {}", oldBase64, decodedHashedAndSalt);
logger.debug("HashAndSalt: {}", decodedHashedAndSalt);
String salt = decodedHashedAndSalt.substring(decodedHashedAndSalt.length()
- SALT_LENGTH, decodedHashedAndSalt.length());
byte[] salt = new byte[SALT_LENGTH];
System.arraycopy(decodedHashedAndSalt, decodedHashedAndSalt.length - SALT_LENGTH, salt, 0, SALT_LENGTH);
String newBase64 = shaWithSaltToBase64(plainPassword, salt);
// String salt =
// decodedHashedAndSalt.substring(decodedHashedAndSalt.length()
// - SALT_LENGTH, decodedHashedAndSalt.length());
logger.debug("Hash : {} salt: {}", decodedHashedAndSalt, salt);
String newBase64 = shaWithSaltToBase64(plainPassword, salt);
logger.debug("comparing old {} to new {}", oldBase64, newBase64);
boolean theSame = oldBase64.equals(newBase64);
if (!theSame && UGLY_FIX) {
theSame = new UglyFix(newBase64, oldBase64).check();
}
return theSame;
}
......@@ -59,10 +90,6 @@ public class PasswordFunctions {
private static final String ALLOWED_RANDOM_CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
private static String generateSalt() {
return generateRandomString(SALT_LENGTH);
}
public static String generateRandomString(int length) {
Random random = new Random();
StringBuilder sb = new StringBuilder();
......
......@@ -3,7 +3,7 @@
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish v3 Java EE 6"/>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish Server Open Source Edition 3 (Java EE 6)"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
<attributes>
<attribute name="owner.project.facets" value="java"/>
......
......@@ -16,6 +16,8 @@
<li><h:link outcome="/user/sendPicture" value="#{i18n['user.sendPicture']}"/></li>
<li><h:link outcome="/user/changePassword" value="#{i18n['user.changePassword']}"/></li>
<li><h:link outcome="/user/accountEvents" value="#{i18n['user.accountEvents']}"/></li>
<li><h:link outcome="/place/myGroups" value="#{i18n['user.myGroups']}"/></li>
<li><h:link outcome="/place/insertToken" value="#{i18n['user.insertToken']}"/></li>
</ul>
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:users="http://java.sun.com/jsf/composite/tools/user"
xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.user.mygroups" />
<ui:define name="content">
#{placeGroupView.editSelf()}
<h:dataTable value="#{placeGroupView.user.placeGroups}" var="group">
<h:column>
<p>Id: #{group.id.id} name #{group.name}
<h:dataTable border="1" id="user" value="#{group.members}" var="member">
<h:column>
<f:facet name="header">
<h:outputText value="Id" />
</f:facet>
<h:outputText value="#{member.id.id}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="product" />
</f:facet>
<h:outputText value="#{member.placeReservation.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="token" />
</f:facet>
<h:outputText value="#{member.inviteToken}" />
</h:column>
</h:dataTable></p>
</h:column>
</h:dataTable>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -3,23 +3,32 @@ package fi.insomnia.bortal.view;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.ListDataModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.PlaceGroupBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.User;
@ManagedBean(name = "placeGroupView")
@SessionScoped
public class PlaceGroupView {
public class PlaceGroupView extends GenericView{
private static final Logger logger = LoggerFactory.getLogger(PlaceGroupView.class);
private User user;
@EJB
private UserBeanLocal userBean;
@EJB
private PlaceGroupBeanLocal placegroupBean;
private ListDataModel<GroupMembership> memberlist;
private String token;
public void editSelf() {
userBean.fatalNotLoggedIn();
setUser(userBean.getCurrentUser());
}
......@@ -28,11 +37,36 @@ public class PlaceGroupView {
}
public User getUser() {
if (user != null)
{
userBean.fatalNotLoggedIn();
if (user != null) {
logger.debug("User {}", user.getPlaceGroups().size());
}
return user;
}
public ListDataModel<GroupMembership> getGroupMemberships() {
userBean.fatalNotLoggedIn();
memberlist = new ListDataModel<GroupMembership>(placegroupBean.getMemberships(user));
return memberlist;
}
public String saveToken() {
userBean.fatalNotLoggedIn();
User thisuser = userBean.getCurrentUser();
String ret = "myGroups";
if (!placegroupBean.associateToToken(thisuser, getToken())) {
this.addFaceMessage("placetoken.tokenNotFound");
ret = null;
}
return ret;
}
public void setToken(String token) {
this.token = token;
}
public String getToken() {
return token;
}
}
......@@ -42,6 +42,12 @@ page.role.list.pagegroup=admin
page.place.placemap.pagegroup=placemap
page.place.placemap.header=Varaa paikka
page.place.mygroups.pagegroup=user
page.place.mygroups.header=Omat paikat
page.place.insertToken.pagegroup=user
page.place.insertToken.header=Syt konepaikkakoodi
page.user.create.pagegroup=user
page.user.create.header=Uusi kyttj
page.user.edit.pagegroup=user
......
......@@ -77,6 +77,15 @@ user.sendPicture=Kuvan lhetys
user.changePassword=Vaihda salasana
user.accountBalance=Tilin saldo
userview.passwordsDontMatch=Salasanat eivt ole samat! Ole hyv ja syt salasanat uudelleen.
user.myGroups=Omat paikkavaraukset
user.insertToken=Syt paikkakoodi
placetoken.token=Paikkakoodi
placetoken.commit=Liit
placetoken.pageHeader=Lis konepaikkakoodi
placetoken.topText=Voit yhdist ryhmnjohtajasi ostaman paikan omaan kyttjtunnukseesi syttmll paikkakoodin allaolevaan kenttn.
placetoken.tokenNotFound=Paikkakoodia ei lytynyt! Tarkista koodi.
bill.billNumber=Laskun numero
bill.sentDate=Pivys
bill.totalPrice=Laskun summa
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!