Java tutorial
/* * Copyright 2008 Jeff Dwyer * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.apress.progwt.server.web.domain.validation; import org.apache.log4j.Logger; import org.springframework.validation.Errors; import org.springframework.validation.ValidationUtils; import org.springframework.validation.Validator; import com.apress.progwt.client.exception.SiteException; import com.apress.progwt.server.domain.MailingListEntry; import com.apress.progwt.server.service.InvitationService; import com.apress.progwt.server.service.UserService; import com.apress.progwt.server.service.impl.UserServiceImpl; import com.apress.progwt.server.web.domain.CreateUserRequestCommand; public class CreateUserRequestValidator implements Validator { private static final Logger log = Logger.getLogger(CreateUserRequestValidator.class); private static final int MIN_LENGTH = 3; private InvitationService invitationService; private UserService userService; private void doOpenIDValidation(CreateUserRequestCommand comm, Errors errors) { // Normalization happens in this getter if (!userService.couldBeOpenID(comm.getOpenIDusername())) { errors.rejectValue("openIDusername", "invalid.openIDusername.nodots"); } try { if (userService.exists(comm.getOpenIDusernameDoNormalization())) { errors.rejectValue("openIDusername", "invalid.opennIDusername.exists"); } } catch (SiteException e) { errors.rejectValue("openIDusername", "invalid.opennIDusername"); } if (comm.getOpenIDusername().contains("=")) { errors.rejectValue("openIDusername", "invalid.openIDusername.noinames"); } if (userService.existsNickname(comm.getOpenIDnickname())) { errors.rejectValue("openIDnickname", "invalid.openIDnickname.exists"); } } private void doStandardValidation(CreateUserRequestCommand comm, Errors errors) { ValidationUtils.rejectIfEmptyOrWhitespace(errors, "username", "required"); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "required"); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password2", "required"); // username must have no '.' || '=' for openid compatibility if (userService.couldBeOpenID(comm.getUsername())) { errors.rejectValue("username", "invalid.username"); } // spaces would break email functionality if (comm.getUsername().contains(" ")) { errors.rejectValue("username", "invalid.username.nospaces"); } // generalemail compatibility if (!comm.getUsername().matches("([a-zA-Z0-9_\\-])+")) { errors.rejectValue("username", "invalid.username"); } if (comm.getUsername().length() < MIN_LENGTH) { errors.rejectValue("username", "invalid.username.length"); } if (comm.getPassword().length() < MIN_LENGTH) { errors.rejectValue("password", "invalid.password.length"); } if (comm.getUsername().equals("anonymousUser")) { errors.rejectValue("username", "invalid.username"); } // username != password if (comm.getPassword().equals(comm.getUsername())) { errors.rejectValue("username", "invalid.password.equalsuser"); } // must have the same password if (!comm.getPassword().equals(comm.getPassword2())) { errors.rejectValue("password2", "invalid.password2"); } if (userService.exists(comm.getUsername())) { errors.rejectValue("username", "invalid.username.exists"); } if (UserServiceImpl.ANONYMOUS.equals(comm.getUsername())) { errors.rejectValue("username", "invalid.username.exists"); } } public void setInvitationService(InvitationService invitationService) { this.invitationService = invitationService; } public void setUserService(UserService userService) { this.userService = userService; } public boolean supports(Class clazz) { return clazz.equals(CreateUserRequestCommand.class); } /** * lookup messages from resource bundle * * NOTE: topicService.createUser() .lowerCases() the username */ public void validate(Object command, Errors errors) { ValidationUtils.rejectIfEmptyOrWhitespace(errors, "randomkey", "required"); CreateUserRequestCommand comm = (CreateUserRequestCommand) command; log.info(comm.getOpenIDusername() + " " + comm.getUsername() + " " + comm.getRandomkey()); boolean standard = comm.isStandard(); boolean openID = comm.isOpenID(); if (standard && openID) { errors.rejectValue("username", "invalid.username.both"); errors.rejectValue("openIDusername", "invalid.username.both"); } if (!standard && !openID) { errors.rejectValue("username", "invalid.username.oneorother"); errors.rejectValue("openIDusername", "invalid.username.oneorother"); } if (standard) { doStandardValidation(comm, errors); } else if (openID) { doOpenIDValidation(comm, errors); } if (!invitationService.isKeyValid(comm.getRandomkey())) { errors.rejectValue("randomkey", "invalid"); } MailingListEntry entry = invitationService.getEntryForKey(comm.getRandomkey()); if (entry != null && entry.getSignedUpUser() != null) { errors.rejectValue("randomkey", "invalid.randomkey.exists"); } } }