+// vim:set ts=4 sts=4 sw=4 noet fenc=utf-8:
/*
Copyright 2009 senju@users.sourceforge.jp
package jp.sourceforge.rabbitBTS.controllers;
+import java.util.Date;
import java.util.logging.Level;
import javax.servlet.http.HttpServletRequest;
import jp.sourceforge.rabbitBTS.Sht;
-import jp.sourceforge.rabbitBTS.exceptions.NotRegisteredException;
+import jp.sourceforge.rabbitBTS.exceptions.HasNotValidIdException;
import jp.sourceforge.rabbitBTS.exceptions.RabbitBTSException;
import jp.sourceforge.rabbitBTS.models.Account;
import jp.sourceforge.rabbitBTS.services.AccountService;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
-public class RegisterController implements IPublicController {
- private static final String REDIRECT_HOME_HTML = "redirect:/home.html";
+public final class RegisterController extends BaseController implements
+ IPublicController {
+ private static final String REDIRECT_HOME_HTML = "redirect:/home/";
@Autowired
private AccountService accountService;
public String index(HttpServletRequest req, ModelMap map) {
String ret = null;
try {
- final Account up = this.accountService.fetchAccount();
- if (up == null) {
- // googleにログインしてない場合
- Sht.log(this).finer("ログインが必要");
- ret = "redirect:" + Sht.loginUrl(req);
+ final Account account = this.accountService.fetchAccount();
+ if (account == null) {
+ // 正常系
+ map.addAttribute(new Account());
+ ret = null;
} else {
// すでに登録済みの場合ホームへリダイレクト
Sht.log(this).finer("既に登録済み");
ret = REDIRECT_HOME_HTML;
}
- } catch (final NotRegisteredException e) {
- // 正常系
- map.addAttribute(new Account());
- ret = null;
+ } catch (final HasNotValidIdException e) {
+ // googleにログインしてない場合
+ Sht.log(this).finer("ログインが必要");
+ ret = "redirect:" + Sht.loginUrl(req);
}
return ret;
}
* 正常系
* <ol>
* <li>バリデート
- * <li>UserProfileを登録
+ * <li>Accountを登録
* <li>ユーザーホームにリダイレクト
* <ol>
* <p>
* 異常系
* <ol>
* <li>バリデートに失敗した場合、エラーメッセージ
- * <li>UserProfile登録に失敗した場合(二重登録等)、ロールバック、エラーメッセージ
+ * <li>Account登録に失敗した場合(二重登録等)、ロールバック、エラーメッセージ
* </ol>
*
- * @param user
+ * @param account
* @param result
* @return
*/
@RequestMapping(method = RequestMethod.POST)
- public String index(Account user, BindingResult result, ModelMap map) {
- this.validator.validate(user, result);
+ public String index(Account account, BindingResult result, ModelMap map) {
+ if (!this.isCsrfSafe(result)) {
+ return null;
+ }
+
+ account.setLastAccess(new Date());
+
+ account.setEmail(Sht.user().getEmail());
+ this.validator.validate(account, result);
if (result.hasErrors()) {
Sht.log(this).finer("ユーザ登録画面にてバリデートに失敗");
return null;
}
try {
- this.accountService.registAccount(user);
+ // nickName重複チェック
+ if (this.accountService.fetchAccountByNickName(account
+ .getNickName()) != null) {
+ result.rejectValue("nickName", "Account.nickName[duplicate]");
+ Sht.log(this).finer("nickName重複チェックエラー");
+ return null;
+ }
+
+ this.accountService.registAccount(account);
} catch (final RabbitBTSException e) {
Sht.log(this).log(Level.WARNING, "ユーザー登録で例外発生", e);
+ // TODO:resultにセット
map.addAttribute("errorMessage", "登録に失敗しました。再度やりなおしてください。");
return null;
}