if (isPost(e) && uri != null && uri.endsWith("/auth/login")) {
logger.info("isPost /auth/login cookie: " + cookieUuidToken);
String messageContent = getHttpMessageContent(e);
Long expiry = null;
String email = null;
Session session = null;
if (cookieUuidToken != null) {
session = getAccountService().getSession(cookieUuidToken);
}
if (session != null) {
logger.info("logging in via session for: " + session.getEmail());
userList = getAccountService().getUsers(session.getEmail());
logger.info("found session for: " + userList.size() + " accounts");
expiry = session.getExpiry();
email = session.getEmail();
} else {
logger.info("Logging in via Persona.");
String responseContent = loginViaMozillaPersona(messageContent);
logger.info("Mozilla Persona Response: " + responseContent);
MozillaPersonaCredentials credentials = new Gson().fromJson(responseContent, MozillaPersonaCredentials.class);
expiry = credentials.getExpires();
email = credentials.getEmail();
logger.info("credentials email: " + email);
userList = getAccountService().getUsers(email);
}
logger.info("userList: " + userList.size());
if (userList.isEmpty()) {
//No user, request registration
BasicSession newSession = new BasicSession();
newSession.setUuid(UUID.randomUUID().toString());
newSession.setEmail(email);
newSession.setExpiry(expiry);
newSession.setAccountName("__NEW__");
//userHash.put(newUser.getId(), newUser);
logger.info("Persisting new Session: " + new Gson().toJson(newSession));
getAccountService().persistSession(newSession);
jsonResponse = "{ \"uuidToken\": \"" + newSession.getUuid() + "\", \"registered\": " + "false}";
} else if (userList.size() == 1) {
//One user with one account, return correct uuid
User user = userList.get(0);
//userHash.put(user.getId(), new BasicUser(user));
logger.info("One User: " + new Gson().toJson(user));
BasicSession newSession = new BasicSession();
newSession.setUuid(UUID.randomUUID().toString());
newSession.setEmail(email);
newSession.setExpiry(expiry);
newSession.setAccountName(user.getAccountName());
getAccountService().persistSession(newSession);
logger.info("Updating Session: " + new Gson().toJson(newSession));
jsonResponse = "{ \"uuidToken\": \"" + newSession.getUuid() + "\", \"registered\": " + "true}";
} else if (userList.size() > 1) {
//One user with multiple accounts, return list of accounts
jsonResponse = "{\"error\": \"not_yet_implemented\"}";
}
} else if (isPost(e) && uri.endsWith("/auth/register") && cookieUuidToken != null) {
logger.info("isPost /auth/register. Cookie: " + cookieUuidToken);
Session session = null;
if (cookieUuidToken != null) {
session = getAccountService().getSession(cookieUuidToken);
}
if (session != null) {
BasicSession updatedSession = new BasicSession(session);
BasicUser httpUser = ParseJsonObjects.parseUser(jsonObject);
logger.info("HTTP user: " + new Gson().toJson(httpUser));
updatedSession.setAccountName(httpUser.getAccountName());
getAccountService().persistSession(updatedSession);
logger.info("persisted new session: " + new Gson().toJson(updatedSession));
BasicUser newUser = new BasicUser(httpUser);
newUser.setUserRole("admin");
newUser.setUserName(session.getEmail());
getAccountService().persistUser(newUser);
logger.info("persisted user: " + new Gson().toJson(newUser));
BasicAccount newAccount = new BasicAccount();
newAccount.setId(httpUser.getAccountName());
newAccount.setAccountType("new");
getAccountService().persistAccount(newAccount);
jsonResponse = "{ \"registered\": " + "true, \"uuidToken\": \"" + updatedSession.getUuid() + "\"}";
} else {
jsonResponse = "{ \"registered\": " + "false}";
}
logger.info(jsonObject);
} else if (isGet(e) && cookieUuidToken != null) {
logger.info("isGet: " + cookieUuidToken);
Session cookieSession = getAccountService().getSession(cookieUuidToken);
logger.info("cookieSession: " + new Gson().toJson(cookieSession));
if (cookieSession != null && cookieSession.getEmail() != null) {
User sessionUser = getAccountService().getUser(cookieSession.getEmail(), cookieSession.getAccountName());
logger.info("sessionUser: " + new Gson().toJson(sessionUser));
if (getRootUser() != null && sessionUser != null && sessionUser.getUserName().equals(getRootUser())) {
BasicUser rootUser = new BasicUser(sessionUser);
rootUser.setUserRole("root");
jsonResponse = "{\"user\": " + new Gson().toJson(rootUser) + "}";