@RequestMapping(value = "/register", method = RequestMethod.POST)
 public String register(
     @ModelAttribute("UserForm") UserForm userForm,
     BindingResult result,
     HttpServletRequest request,
     Model model,
     @RequestParam("recaptcha_challenge_field") String challangeField,
     @RequestParam("recaptcha_response_field") String responseField,
     RedirectAttributes attributes,
     HttpServletResponse response)
     throws IOException {
   // check captcha
   String remoteAddress = request.getRemoteAddr();
   ReCaptchaResponse reCaptchaResponse =
       this.reCaptcha.checkAnswer(remoteAddress, challangeField, responseField);
   if (!reCaptchaResponse.isValid()) {
     model.addAttribute(PathHolder.ATTRIBUTE_NAME__MESSAGE, PathHolder.MESSAGE__WRONG_CAPTCHA);
     model.addAttribute(PathHolder.ATTRIBUTE_NAME__USERFORM, userForm);
     LOG.info(PathHolder.MESSAGE__WRONG_CAPTCHA);
     return PathHolder.PATH__REGISTRATION_PAGE;
   }
   // validate form
   new UserFormValidator().validate(userForm, result);
   if (result.hasErrors()) {
     model.addAttribute(PathHolder.ATTRIBUTE_NAME__MESSAGE, PathHolder.MESSAGE__WRONG_USER_DATA);
     model.addAttribute(PathHolder.ATTRIBUTE_NAME__USERFORM, userForm);
     LOG.warn(PathHolder.MESSAGE__WRONG_USER_DATA);
     return PathHolder.PATH__REGISTRATION_PAGE;
   }
   // check login
   String login = userForm.getLogin();
   try {
     if (!userService.checkLogin(userForm.getLogin())) {
       model.addAttribute(PathHolder.ATTRIBUTE_NAME__MESSAGE, PathHolder.MESSAGE__LOGIN_BUSY);
       model.addAttribute(PathHolder.ATTRIBUTE_NAME__USERFORM, userForm);
       LOG.warn("Can't check login " + login);
       return PathHolder.PATH__REGISTRATION_PAGE;
     }
     // if OK
     userService.createUser(createUser(userForm));
   } catch (Exception e) {
     model.addAttribute(
         PathHolder.ATTRIBUTE_NAME__MESSAGE, PathHolder.MESSAGE__INTERNAL_SERVICE_ERROR);
     model.addAttribute(PathHolder.ATTRIBUTE_NAME__USERFORM, userForm);
     response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
     LOG.error("Can't save new user " + userForm.getLogin(), e);
     return PathHolder.PATH__REGISTRATION_PAGE;
   }
   attributes.addFlashAttribute(
       PathHolder.ATTRIBUTE_NAME__MESSAGE, PathHolder.MESSAGE__REGISTRATION_COMPLETE);
   return PathHolder.PATH__REDIRECT + PathHolder.PATH__LOGIN_PAGE;
 }
 @RequestMapping(value = PathHolder.PATH__REQUEST_CHECK_LOGIN, method = RequestMethod.GET)
 public boolean checkLogin(@RequestParam(PathHolder.REQUEST_PARAM__LOGIN) String login)
     throws Exception {
   return userService.checkLogin(login);
 }