{
if (null != cookie) {
cookieLookup = RESTTools.cookieLookup(cookie);
}
if (null != cookieLookup) {
AuthenticationPojo query = new AuthenticationPojo();
query.setProfileId(new ObjectId(cookieLookup));
AuthenticationPojo authUser = AuthenticationPojo.fromDb(DbManager.getSocial().getAuthentication().findOne(query.toDb()), AuthenticationPojo.class);
if ((authUser.getAccountType() != null) && authUser.getAccountType().equalsIgnoreCase("admin")) {
rp = new LoginHandler().keepAlive(cookieLookup, true);
}
else if ((authUser.getAccountType() != null) && authUser.getAccountType().equalsIgnoreCase("admin-enabled")) { // keepalive - only updates auth pojo if needed
boolean bUpdateCookie = false;
if (null == authUser.getLastSudo()) {
bUpdateCookie = true;
}
else if ((authUser.getLastSudo().getTime() + 10*60*1000) < new Date().getTime()) {
// (ie admin rights last 10 minutes)
bUpdateCookie = true;
}
if (bUpdateCookie && override) {
authUser.setLastSudo(new Date());
MongoDbManager.getSocial().getAuthentication().save(authUser.toDb());
}
rp = new LoginHandler().keepAlive(cookieLookup, override || !bUpdateCookie);
// (ie if we're overriding we must be ... also if we're not override but are within the last sudo range then we are)
}
else {
rp.setResponse(new ResponseObject("Keepalive", false, "Logged in but not admin."));
}
}//TESTED
else {
rp.setResponse(new ResponseObject("Keepalive", false, "Not logged in."));
}
}
else if ( action.equals("keepalive"))
{
if (null != cookie) {
cookieLookup = RESTTools.cookieLookup(cookie);
}
if (null != cookieLookup) {
rp = new LoginHandler().keepAlive(cookieLookup);
}
else {
rp.setResponse(new ResponseObject("Keepalive", false, "Not logged in."));
}
}
else if ( action.equals("admin-logout"))
{
cookieLookup = RESTTools.cookieLookup(cookie);
if (null != cookieLookup) {
AuthenticationPojo query = new AuthenticationPojo();
query.setProfileId(new ObjectId(cookieLookup));
AuthenticationPojo authUser = AuthenticationPojo.fromDb(DbManager.getSocial().getAuthentication().findOne(query.toDb()), AuthenticationPojo.class);
if ((null != authUser) && (null != authUser.getLastSudo())) {
authUser.setLastSudo(null);
MongoDbManager.getSocial().getAuthentication().save(authUser.toDb());
}
}
rp.setResponse(new ResponseObject("Logout", true, "No longer admin."));
}
else if ( action.equals("logout"))
{
cookieLookup = RESTTools.cookieLookup(cookie);
if (null != cookieLookup) {
rp = new LoginHandler().removeCookies(cookieLookup);
}
else {
rp.setResponse(new ResponseObject("Logout", false, "Not logged in."));
}
}
else if (this.mustComeFromAuthority)
{
boolean bCanProceed = RESTTools.mustComeFromAuthority(new PropertiesManager(), ipAddress, cookie, admuser, admpass);
if (bCanProceed)
{
if (action.equals("forgot"))
{
rp = new LoginHandler().resetPassword(user, true);
}
else if (action.equals("deactivate"))
{
rp = new LoginHandler().deactivateAccount(user);
}
}
else if (action.equals("forgot"))
{
// This has come from the user, part of 2 stage process
// No password specified
if (null == pass)
{
rp = new LoginHandler().resetPassword(user, false);
}
else { // Validate password, allow reset if valid
AuthenticationPojo authuser = PasswordEncryption.validateUser(user,pass);
if (null != authuser) {
rp = new LoginHandler().resetPassword(user, true);
}
}
}