@Override public UserData checkLoggedIn() throws ServerError { HttpSession session = this.getThreadLocalRequest().getSession(false); if (session == null) return null; User user = (User) session.getAttribute("user"); try { return new UserData(user, itemDao.getAllItems(), false); } catch (DBException e) { throw new ServerError(); } }
@Override public UserData login(String login, String password) throws InvalidCredentialsException, IllegalArgumentException, ServerError { if (!FieldVerifier.isValidLogin(login)) throw new IllegalArgumentException("Invalid login"); if (!FieldVerifier.isValidPassword(login)) throw new IllegalArgumentException("Invalid login"); boolean newUser = false; User user = null; try { user = userDao.authenticateUser(login, password); } catch (DBException e1) { throw new ServerError("Error while accessing DB"); } if (user == null) { newUser = true; try { user = userDao.createUser(login, password); } catch (DBException dbe) { throw new ServerError(); } catch (ExistingUserException e) { // race-condition: user with the same login was created in between throw new InvalidCredentialsException(); } } HttpSession session = this.getThreadLocalRequest().getSession(true); session.setAttribute("user", user); logger.info( String.format("User %s has logged in session %s.", user.getLogin(), session.getId())); try { return new UserData(user, itemDao.getAllItems(), newUser); } catch (DBException e) { throw new ServerError(); } }