@Override
public LoginInfo login(String requestUri) throws IllegalArgumentException
{
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
LoginInfo loginInfo = new LoginInfo();
loginInfo.setLogoutUrl(userService.createLogoutURL(requestUri));
loginInfo.setLoginUrl(userService.createLoginURL(requestUri));
if (user != null)
{
loginInfo.setEmailAddress(user.getEmail());
loginInfo.setNickname(user.getNickname());
if (userService.isUserLoggedIn())
{ // && userService.isUserAdmin()
loginInfo.setUserAdmin(userService.isUserAdmin());
AppUser appUser = ObjectifyService.ofy().load().type(AppUser.class).filter("EMailAddress", user.getEmail()).first().now();
loginInfo.setAppUserShared(appUser == null ? null : appUser);
decodeAuthString(appUser);
if (Configuration.appUserMode == Configuration.UserMode.umSingle)
{
if (userService.isUserAdmin())
{
if (appUser == null)
{
appUser = ObjectifyService.ofy().load().type(AppUser.class).first().now();
if (appUser != null)
{
decodeAuthString(appUser);
if (!appUser.EMailAddress.equals(user.getEmail()))
{
// not the administator.
loginInfo.setLoggedIn(false);
return loginInfo;
}
}
appUser = new AppUser();
appUser.EMailAddress = user.getEmail();
appUser.FirstName = user.getNickname();
appUser.LastName = "UNKNOWN";
appUser.City = "";
appUser.Country = "";
appUser.isSubscriptionPaid = true;
appUser.isSuperDude = true;
appUser.isUser = true;
ObjectifyService.ofy().save().entity(appUser);
loginInfo.setLoggedIn(true);
} else
{
loginInfo.setLoggedIn(true);
}
} else
{
loginInfo.setLoggedIn(false);
return loginInfo;
}
} else if (Configuration.appUserMode == Configuration.UserMode.umMultipleSameApps)
{
if (userService.isUserAdmin())
{
if (appUser == null)
{
appUser = new AppUser();
appUser.EMailAddress = user.getEmail();
appUser.FirstName = user.getNickname();
appUser.LastName = "UNKNOWN";
appUser.City = "";
appUser.Country = "";
appUser.isSubscriptionPaid = true;
appUser.isSuperDude = true;
appUser.isUser = true;
ObjectifyService.ofy().save().entity(appUser);
}
loginInfo.setAppUserShared(appUser);
loginInfo.setLoggedIn(true);
} else
{
loginInfo.setLoggedIn(appUser != null);
return loginInfo;
}
} else
{
loginInfo.setLoggedIn(true);
}
}
} else
{
loginInfo.setLoggedIn(false);
}
if(loginInfo.isLoggedIn() && SettingStore.has(Constants.SETTING_DATABASEVERSION) && Integer.parseInt(SettingStore.get(Constants.SETTING_DATABASEVERSION, "1")) < Constants.databaseVersion)
{
throw new IllegalArgumentException("Data store needs an upgrade! administrator needs to run dbupgrade scriptlet");
}
return loginInfo;