Пример #1
0
  /**
   * 이메일 추가
   *
   * @return
   */
  @Transactional
  public static Result addEmail() {
    Form<Email> emailForm = form(Email.class).bindFromRequest();
    String newEmail = emailForm.data().get("email");

    if (emailForm.hasErrors()) {
      flash(Constants.WARNING, emailForm.error("email").message());
      return redirect(routes.UserApp.editUserInfoForm());
    }

    User currentUser = currentUser();
    if (currentUser == null || currentUser.isAnonymous()) {
      return forbidden(ErrorViews.NotFound.render());
    }

    if (User.isEmailExist(newEmail) || Email.exists(newEmail, true) || currentUser.has(newEmail)) {
      flash(Constants.WARNING, Messages.get("user.email.duplicate"));
      return redirect(routes.UserApp.editUserInfoForm());
    }

    Email email = new Email();
    User user = currentUser();
    email.user = user;
    email.email = newEmail;
    email.valid = false;

    user.addEmail(email);

    return redirect(routes.UserApp.editUserInfoForm());
  }
Пример #2
0
  /**
   * 로그인 처리 시스템 설정에서 가입승인 기능이 활성화 되어 있고 사용자 상태가 잠금상태(미승인?)라면 계정이 잠겼다는 메시지를 노출하고 로그인 폼으로 돌아감 시스템 설정에서
   * 가입승인 기능이 활성화 되어 있지 않다면, 사용자 상태가 잠금상태라도 로그인이 가능하다 (스펙확인 필요) 요청의 정보로 사용자 인증에 성공하면 로그인쿠키를 생성하고
   * 로그인유지하기가 선택되었다면, 로그인유지를 위한 쿠키를 별도로 생성한다 인증에 실패하면 관련된 메시지를 노출하고 로그인 폼으로 돌아간다
   *
   * @return
   */
  public static Result login() {
    Form<User> userForm = form(User.class).bindFromRequest();
    if (userForm.hasErrors()) {
      return badRequest(login.render("title.login", userForm));
    }
    User sourceUser = form(User.class).bindFromRequest().get();

    if (isUseSignUpConfirm()) {
      if (User.findByLoginId(sourceUser.loginId).state == UserState.LOCKED) {
        flash(Constants.WARNING, "user.locked");
        return redirect(routes.UserApp.loginForm());
      }
    }

    if (User.findByLoginId(sourceUser.loginId).state == UserState.DELETED) {
      flash(Constants.WARNING, "user.deleted");
      return redirect(routes.UserApp.loginForm());
    }

    User authenticate = authenticateWithPlainPassword(sourceUser.loginId, sourceUser.password);

    if (authenticate != null) {
      addUserInfoToSession(authenticate);
      if (sourceUser.rememberMe) {
        setupRememberMe(authenticate);
      }
      return redirect(routes.Application.index());
    }

    flash(Constants.WARNING, "user.login.failed");
    return redirect(routes.UserApp.loginForm());
  }
Пример #3
0
  /**
   * 대표 메일로 설정하기
   *
   * @param id
   * @return
   */
  @Transactional
  public static Result setAsMainEmail(Long id) {
    User currentUser = currentUser();
    Email email = Email.find.byId(id);

    if (currentUser == null || currentUser.isAnonymous() || email == null) {
      return forbidden(ErrorViews.NotFound.render());
    }

    if (!AccessControl.isAllowed(currentUser, email.user.asResource(), Operation.UPDATE)) {
      return forbidden(ErrorViews.Forbidden.render(Messages.get("error.forbidden")));
    }

    String oldMainEmail = currentUser.email;
    currentUser.email = email.email;
    currentUser.removeEmail(email);
    currentUser.update();

    Email newSubEmail = new Email();
    newSubEmail.valid = true;
    newSubEmail.email = oldMainEmail;
    newSubEmail.user = currentUser;
    currentUser.addEmail(newSubEmail);

    return redirect(routes.UserApp.editUserInfoForm());
  }
Пример #4
0
 /**
  * 현재 사용자가 특정 프로젝트에서 탈퇴
  *
  * @param userName 프로젝트 매니저의 로그인ID
  * @param projectName 프로젝트 이름
  * @return
  */
 @Transactional
 public static Result leave(String userName, String projectName) {
   ProjectApp.deleteMember(userName, projectName, UserApp.currentUser().id);
   return redirect(
       routes.UserApp.userInfo(
           UserApp.currentUser().loginId, DEFAULT_GROUP, DAYS_AGO, DEFAULT_SELECTED_TAB));
 }
Пример #5
0
  /**
   * 사용자 비밀번호 변경 비밀번호 변경에 성공하면 로그인 화면으로 이동 비밀번호 변경에 실패하면 수정화면으로 돌아간다
   *
   * @return
   */
  @Transactional
  public static Result resetUserPassword() {
    Form<User> userForm = form(User.class).bindFromRequest();

    if (userForm.hasErrors()) {
      return badRequest(ErrorViews.BadRequest.render("error.badrequest"));
    }

    User currentUser = currentUser();
    User user = userForm.get();

    if (!isValidPassword(currentUser, user.oldPassword)) {
      Form<User> currentUserForm = new Form<>(User.class);
      currentUserForm = currentUserForm.fill(currentUser);

      flash(Constants.WARNING, "user.wrongPassword.alert");
      return badRequest(edit.render(currentUserForm, currentUser));
    }

    resetPassword(currentUser, user.password);

    // go to login page
    processLogout();
    flash(Constants.WARNING, "user.loginWithNewPassword");
    return redirect(routes.UserApp.loginForm());
  }
Пример #6
0
  /**
   * 로그인 처리 시스템 설정에서 가입승인 기능이 활성화 되어 있고 사용자 상태가 잠금상태(미승인?)라면 계정이 잠겼다는 메시지를 노출하고 로그인 폼으로 돌아감 시스템 설정에서
   * 가입승인 기능이 활성화 되어 있지 않다면, 사용자 상태가 잠금상태라도 로그인이 가능하다 (스펙확인 필요) 요청의 정보로 사용자 인증에 성공하면 로그인쿠키를 생성하고
   * 로그인유지하기가 선택되었다면, 로그인유지를 위한 쿠키를 별도로 생성한다 인증에 실패하면 관련된 메시지를 노출하고 로그인 폼으로 돌아간다
   *
   * @return
   */
  public static Result login() {
    Form<User> userForm = form(User.class).bindFromRequest();
    if (userForm.hasErrors()) {
      return badRequest(login.render("title.login", userForm, null));
    }
    User sourceUser = form(User.class).bindFromRequest().get();

    Map<String, String[]> params = request().body().asFormUrlEncoded();
    String redirectUrl = HttpUtil.getFirstValueFromQuery(params, "redirectUrl");

    String loginFormUrl = routes.UserApp.loginForm().absoluteURL(request());
    loginFormUrl += "?redirectUrl=" + redirectUrl;

    if (isUseSignUpConfirm()) {
      if (User.findByLoginId(sourceUser.loginId).state == UserState.LOCKED) {
        flash(Constants.WARNING, "user.locked");
        return redirect(loginFormUrl);
      }
    }

    if (User.findByLoginId(sourceUser.loginId).state == UserState.DELETED) {
      flash(Constants.WARNING, "user.deleted");
      return redirect(loginFormUrl);
    }

    User authenticate = authenticateWithPlainPassword(sourceUser.loginId, sourceUser.password);

    if (authenticate != null) {
      addUserInfoToSession(authenticate);
      if (sourceUser.rememberMe) {
        setupRememberMe(authenticate);
      }

      authenticate.lang = play.mvc.Http.Context.current().lang().code();
      authenticate.update();

      if (StringUtils.isEmpty(redirectUrl)) {
        return redirect(routes.Application.index());
      } else {
        return redirect(redirectUrl);
      }
    }

    flash(Constants.WARNING, "user.login.failed");
    return redirect(routes.UserApp.loginForm());
  }
Пример #7
0
 /**
  * 로그인 폼으로 이동
  *
  * @return
  */
 public static Result loginForm() {
   String redirectUrl = request().getQueryString("redirectUrl");
   String loginFormUrl = routes.UserApp.loginForm().absoluteURL(request());
   String referer = request().getHeader("Referer");
   if (StringUtils.isEmpty(redirectUrl) && !StringUtils.equals(loginFormUrl, referer)) {
     redirectUrl = request().getHeader("Referer");
   }
   return ok(login.render("title.login", form(User.class), redirectUrl));
 }
Пример #8
0
  /**
   * 로그인 폼으로 이동
   *
   * @return
   */
  public static Result loginForm() {
    if (!UserApp.currentUser().isAnonymous()) {
      return redirect(routes.Application.index());
    }

    String redirectUrl = request().getQueryString("redirectUrl");
    String loginFormUrl = routes.UserApp.loginForm().url();
    String referer = request().getHeader("Referer");
    if (StringUtils.isEmpty(redirectUrl) && !StringUtils.equals(loginFormUrl, referer)) {
      redirectUrl = request().getHeader("Referer");
    }
    return ok(login.render("title.login", form(User.class), redirectUrl));
  }
Пример #9
0
  /**
   * 이메일 확인
   *
   * @param id
   * @param token
   * @return
   */
  @Transactional
  public static Result confirmEmail(Long id, String token) {
    Email email = Email.find.byId(id);

    if (email == null) {
      return forbidden(ErrorViews.NotFound.render());
    }

    if (email.validate(token)) {
      addUserInfoToSession(email.user);
      return redirect(routes.UserApp.editUserInfoForm());
    } else {
      return forbidden(ErrorViews.NotFound.render());
    }
  }
Пример #10
0
  /**
   * 이메일 삭제
   *
   * @param id
   * @return
   */
  @Transactional
  public static Result deleteEmail(Long id) {
    User currentUser = currentUser();
    Email email = Email.find.byId(id);

    if (currentUser == null || currentUser.isAnonymous() || email == null) {
      return forbidden(ErrorViews.NotFound.render());
    }

    if (!AccessControl.isAllowed(currentUser, email.user.asResource(), Operation.DELETE)) {
      return forbidden(ErrorViews.Forbidden.render(Messages.get("error.forbidden")));
    }

    email.delete();
    return redirect(routes.UserApp.editUserInfoForm());
  }
Пример #11
0
  /**
   * 사용자 정보 수정
   *
   * @return
   */
  @With(AnonymousCheckAction.class)
  @Transactional
  public static Result editUserInfo() {
    Form<User> userForm = new Form<>(User.class).bindFromRequest("name", "email");
    String newEmail = userForm.data().get("email");
    String newName = userForm.data().get("name");
    User user = UserApp.currentUser();

    if (StringUtils.isEmpty(newEmail)) {
      userForm.reject("email", "user.wrongEmail.alert");
    } else {
      if (!StringUtils.equals(user.email, newEmail) && User.isEmailExist(newEmail)) {
        userForm.reject("email", "user.email.duplicate");
      }
    }

    if (userForm.error("email") != null) {
      flash(Constants.WARNING, userForm.error("email").message());
      return badRequest(edit.render(userForm, user));
    }
    user.email = newEmail;
    user.name = newName;

    try {
      Long avatarId = Long.valueOf(userForm.data().get("avatarId"));
      if (avatarId != null) {
        Attachment attachment = Attachment.find.byId(avatarId);
        String primary = attachment.mimeType.split("/")[0].toLowerCase();

        if (attachment.size > AVATAR_FILE_LIMIT_SIZE) {
          userForm.reject("avatarId", "user.avatar.fileSizeAlert");
        }

        if (primary.equals("image")) {
          Attachment.deleteAll(currentUser().avatarAsResource());
          attachment.moveTo(currentUser().avatarAsResource());
        }
      }
    } catch (NumberFormatException ignored) {
    }

    Email.deleteOtherInvalidEmails(user.email);
    user.update();
    return redirect(
        routes.UserApp.userInfo(user.loginId, DEFAULT_GROUP, DAYS_AGO, DEFAULT_SELECTED_TAB));
  }
Пример #12
0
  /**
   * 보조 이메일 확인 메일 보내기
   *
   * @param id
   * @return
   */
  @Transactional
  public static Result sendValidationEmail(Long id) {
    User currentUser = currentUser();
    Email email = Email.find.byId(id);

    if (currentUser == null || currentUser.isAnonymous() || email == null) {
      return forbidden(ErrorViews.NotFound.render());
    }

    if (!AccessControl.isAllowed(currentUser, email.user.asResource(), Operation.UPDATE)) {
      return forbidden(ErrorViews.Forbidden.render(Messages.get("error.forbidden")));
    }

    email.sendValidationEmail();

    flash(Constants.WARNING, "확인 메일을 전송했습니다.");
    return redirect(routes.UserApp.editUserInfoForm());
  }