/* * Copyright (c) 2010 StockPlay development team * All rights reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package com.kapti.backend.api; import com.kapti.backend.helpers.DateHelper; import com.kapti.backend.security.SessionsHandler; import com.kapti.data.User; import com.kapti.data.persistence.GenericDAO; import com.kapti.exceptions.InvocationException; import com.kapti.exceptions.ServiceException; import com.kapti.exceptions.StockPlayException; import com.kapti.filter.Filter; import com.kapti.filter.parsing.Parser; import java.math.BigInteger; import java.security.SecureRandom; import java.util.Calendar; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.TimeZone; import java.util.Vector; /** * \brief Handler van de User klasse. * * Deze klasse is de handler van de User klasse. Ze staat in * voor de verwerking van aanroepen van functies die zich in deze klasse * bevinden, lokaal de correcte aanvragen uit te voeren, en het resultaat * op conforme wijze terug te sturen. */ public class UserHandler extends MethodClass { // // Methodes // public int Hello(String iClient, int iProtocolVersion) throws StockPlayException { getLogger().info("Client connected: " + iClient); if (iProtocolVersion != PROTOCOL_VERSION) { throw new InvocationException(InvocationException.Type.VERSION_NOT_SUPPORTED); } return 1; } public int Create(HashMap<String, Object> iDetails) throws StockPlayException { // Get DAO reference GenericDAO<com.kapti.data.User, Integer> tUserDAO = getDAO().getUserDAO(); // Instantiate a new user User tUser = User.fromStruct(iDetails); tUser.applyStruct(iDetails); tUser.setStartamount(100000); //TODO hier berekenen van het startamount tUser.setCash(100000); tUser.setRegdate(DateHelper.convertCalendar(Calendar.getInstance(), TimeZone.getTimeZone("GMT")).getTime()); return tUserDAO.create(tUser); } public Vector<HashMap<String, Object>> Details() throws StockPlayException { return Details("id == '" + getUser().getId() + "" + "'s"); } public Vector<HashMap<String, Object>> Details(String iFilter) throws StockPlayException { // Get DAO reference GenericDAO<com.kapti.data.User, Integer> userDAO = getDAO().getUserDAO(); Parser parser = Parser.getInstance(); Filter filter = parser.parse(iFilter); // Fetch and convert all Indexs Collection<com.kapti.data.User> tUsers = userDAO.findByFilter(filter); Vector<HashMap<String, Object>> oVector = new Vector<HashMap<String, Object>>(); for (com.kapti.data.User tUser : tUsers) { oVector.add(tUser.toStruct( com.kapti.data.User.Fields.ID, com.kapti.data.User.Fields.NICKNAME, com.kapti.data.User.Fields.EMAIL, com.kapti.data.User.Fields.LASTNAME, com.kapti.data.User.Fields.FIRSTNAME, com.kapti.data.User.Fields.CASH, com.kapti.data.User.Fields.ROLE, com.kapti.data.User.Fields.RRN, com.kapti.data.User.Fields.STARTAMOUNT, com.kapti.data.User.Fields.REGDATE, com.kapti.data.User.Fields.POINTS)); } return oVector; } public Vector<HashMap<String, Object>> List(String iFilter) throws StockPlayException { // Get DAO reference GenericDAO<com.kapti.data.User, Integer> userDAO = getDAO().getUserDAO(); Parser parser = Parser.getInstance(); Filter filter = parser.parse(iFilter); // Fetch and convert all Indexs Collection<com.kapti.data.User> tUsers = userDAO.findByFilter(filter); Vector<HashMap<String, Object>> oVector = new Vector<HashMap<String, Object>>(); for (com.kapti.data.User tUser : tUsers) { oVector.add(tUser.toStruct( com.kapti.data.User.Fields.ID, com.kapti.data.User.Fields.NICKNAME, com.kapti.data.User.Fields.CASH, com.kapti.data.User.Fields.ROLE, com.kapti.data.User.Fields.STARTAMOUNT, com.kapti.data.User.Fields.REGDATE, com.kapti.data.User.Fields.POINTS)); } return oVector; } public int Modify(HashMap<String, Object> iDetails) throws StockPlayException { return Modify(("id == '" + getUser().getId() + "" + "'s"), iDetails); } public int Modify(String iFilter, HashMap<String, Object> iDetails) throws StockPlayException { // Get DAO reference GenericDAO<com.kapti.data.User, Integer> tUserDAO = getDAO().getUserDAO(); Parser parser = Parser.getInstance(); Filter filter = parser.parse(iFilter); // Now apply the new properties // TODO: controleren of de struct geen ID field bevat, deze kan _enkel_ // gebruikt worden om een initiƫle Exchange aa nte maken (Create) for (com.kapti.data.User tUser : tUserDAO.findByFilter(filter)) { tUser.applyStruct(iDetails); tUserDAO.update(tUser); } return 1; } public int Remove(String iFilter) throws StockPlayException { // Get DAO reference GenericDAO<com.kapti.data.User, Integer> tUserDAO = getDAO().getUserDAO(); Parser parser = Parser.getInstance(); Filter filter = parser.parse(iFilter); for (com.kapti.data.User tUser : tUserDAO.findByFilter(filter)) { tUserDAO.delete(tUser); } return 1; } // Authenticatiemethode public String Validate(String nickname, String password) throws StockPlayException { GenericDAO<com.kapti.data.User, Integer> tUserDAO = getDAO().getUserDAO(); Parser parser = Parser.getInstance(); Filter filter = parser.parse("nickname == '" + nickname + "'"); Collection<com.kapti.data.User> tUsers = tUserDAO.findByFilter(filter); if (tUsers.size() == 0) { throw new ServiceException(ServiceException.Type.INVALID_CREDENTIALS); } Iterator<User> uIterator = tUsers.iterator(); User user = uIterator.next(); if (user.checkPassword(password)) { return createAndRegisterSession(user); } else { throw new ServiceException(ServiceException.Type.INVALID_CREDENTIALS); } } public String CreateSessionForUser(int id) throws StockPlayException { GenericDAO<com.kapti.data.User, Integer> tUserDAO = getDAO().getUserDAO(); User u = tUserDAO.findById(id); return createAndRegisterSession(u); } private String createAndRegisterSession(User user) { //we generereren nu een sessie-id voor de gebruiker java.security.SecureRandom random = new SecureRandom(); String sessionid = new BigInteger(130, random).toString(32); SessionsHandler.getInstance().registerSession(sessionid, user); return sessionid; } public boolean ResetPassword(String nickname, String newpassword) throws StockPlayException { GenericDAO<com.kapti.data.User, Integer> tUserDAO = getDAO().getUserDAO(); Filter f = Parser.getInstance().parse("nickname == '" + nickname + "'"); Collection<User> users = tUserDAO.findByFilter(f); if (!users.isEmpty()) { User u = users.iterator().next(); u.setPassword(newpassword); return tUserDAO.update(u); } else { throw new StockPlayException(98,"No user found with nickname " + nickname); } } }