package org.wahlzeit.handlers; import com.google.appengine.api.users.UserService; import com.google.appengine.api.users.UserServiceFactory; import org.wahlzeit.model.AccessRights; import org.wahlzeit.model.Administrator; import org.wahlzeit.model.Client; import org.wahlzeit.model.User; import org.wahlzeit.model.UserManager; import org.wahlzeit.model.UserSession; import org.wahlzeit.services.LogBuilder; import org.wahlzeit.webparts.WebPart; import java.util.Map; import java.util.logging.Logger; /** * When a user signs in with its Google account, this handler assures that a Wahlzeit user exists for the Google user. * If not {@link LoginFormHandler} creates one. */ public class LoginFormHandler extends AbstractWebFormHandler { private static final Logger log = Logger.getLogger(LoginFormHandler.class.getName()); public LoginFormHandler() { initialize(PartUtil.LOGIN_FORM_FILE, AccessRights.GUEST); } @Override protected void doMakeWebPart(UserSession us, WebPart part) { // do nothing as there is no page that should be displayed log.info("doMakeWebPart"); } /** * Called when a new user logged in. Make sure that a Wahlzeit user exist. */ @Override protected String doHandleGet(UserSession us, String link, Map args) { log.info("Link: " + link); UserService userService = UserServiceFactory.getUserService(); com.google.appengine.api.users.User googleUser = userService.getCurrentUser(); if (googleUser != null) { // googleUser logged in log.config(LogBuilder.createSystemMessage(). addMessage("Google user exists"). addParameter("E-Mail", googleUser.getEmail()).toString()); String userId = googleUser.getUserId(); UserManager userManager = UserManager.getInstance(); User user = userManager.getUserById(userId); if (user != null) { // Wahlzeit user already exists us.setClient(user); log.config(LogBuilder.createSystemMessage(). addMessage("Wahlzeit user exists"). addParameter("id", user.getId()).toString()); } else { // create new Wahlzeit user String emailAddress = googleUser.getEmail(); String nickName = googleUser.getNickname(); Client previousClient = us.getClient(); if (userService.isUserAdmin()) { user = new Administrator(userId, nickName, emailAddress, previousClient); } else { user = new User(userId, nickName, emailAddress, previousClient); } userManager.emailWelcomeMessage(us, user); us.setClient(user); log.info(LogBuilder.createUserMessage().addAction("Signup").toString()); } // TODO // if (user.getStatus().isDisabled()) { // us.setMessage(us.getConfiguration().getUserIsDisabled()); // return PartUtil.LOGIN_PAGE_NAME; // } return PartUtil.SHOW_USER_HOME_PAGE_NAME; } else { // googleUser not logged in return PartUtil.SHOW_NOTE_PAGE_NAME; } } }