Esempio n. 1
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());
  }
Esempio n. 2
0
 /**
  * loginId 와 plain password 를 이용해서 사용자 인증 인증에 성공하면 DB 에서 조회된 사용자 정보를 리턴 인증에 실패하면 null 리턴
  *
  * @param loginId 로그인ID
  * @param password 입력받은 비밀번호
  * @return
  */
 public static User authenticateWithPlainPassword(String loginId, String password) {
   User user = User.findByLoginId(loginId);
   if (user == User.anonymous) {
     return null;
   }
   return authenticate(user, hashedPassword(password, user.passwordSalt));
 }
Esempio n. 3
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());
  }
Esempio n. 4
0
 /**
  * 프로젝트를 삭제한다.
  *
  * <p>when 관리자 페이지의 프로젝트 설정에서 프로젝트 삭제시
  *
  * <p>세션 {@code loginId} 가 사이트 관리자인지 확인하고 관리자이면 해당 프로젝트를 삭제한다. 관리자가 아니면 경고메세지와 함께 프로젝트 설정 페이지로
  * 리다이렉트 한다.
  *
  * @param projectId the project id
  * @return the result
  */
 @Transactional
 public static Result deleteProject(Long projectId) {
   if (User.findByLoginId(session().get("loginId")).isSiteManager()) {
     Project.find.byId(projectId).delete();
   } else {
     flash(Constants.WARNING, "error.auth.unauthorized.waringMessage");
   }
   return redirect(routes.SiteApp.projectList(StringUtils.EMPTY, 0));
 }
Esempio n. 5
0
 /*
  * 사용자 인증
  *
  * 사용자 객체와 hash 값을 이용
  */
 private static User authenticate(String loginId, String password, boolean hashed) {
   User user = User.findByLoginId(loginId);
   if (user.isAnonymous()) {
     return user;
   }
   String hashedPassword = hashed ? password : hashedPassword(password, user.passwordSalt);
   if (StringUtils.equals(user.password, hashedPassword)) {
     return user;
   }
   return User.anonymous;
 }
Esempio n. 6
0
  /**
   * 계정을 장금 / 해제한다.
   *
   * <p>when 사용자 관리 페이지의 계정 장금/해제
   *
   * <p>세션 {@code loginId} 가 사이트 관리자이고 삭제할 {@code loginId}가 {@code anonymous}가 아니면 계정 장금 또는 해제한후 사용자
   * 관리페이지로 리다이렉트한다. 세션 {@code loginId} 가 사이트 관리자이고 삭제할 {@code loginId}가 익명사용자이면 경고메세지와 함께사용자 관리페이지로
   * 리다이렉트한다. 세션 {@code loginId} 가 사이트 관리자가 아니면 경고메세지와 함께 Yobi 첫페이지로 리다이렉트한다.
   *
   * @param loginId the login id
   * @return the result
   */
  public static Result toggleAccountLock(String loginId, String state, String query) {
    String stateParam = StringUtils.defaultIfBlank(state, UserState.ACTIVE.name());
    UserState userState = UserState.valueOf(stateParam);

    if (User.findByLoginId(session().get("loginId")).isSiteManager()) {
      User targetUser = User.findByLoginId(loginId);
      if (targetUser.isAnonymous()) {
        flash(Constants.WARNING, "user.notExists.name");
        return redirect(routes.SiteApp.userList(0, null));
      }
      if (targetUser.state == UserState.ACTIVE) {
        targetUser.changeState(UserState.LOCKED);
      } else {
        targetUser.changeState(UserState.ACTIVE);
      }
      return ok(
          userList.render(
              "title.siteSetting", User.findUsers(0, query, userState), userState, query));
    }
    flash(Constants.WARNING, "error.auth.unauthorized.waringMessage");
    return redirect(routes.Application.index());
  }
Esempio n. 7
0
 private static void buildIssueHistory(
     String userName, Project project, List<Issue> issues, List<History> histories) {
   for (Issue issue : issues) {
     History issueHistory = new History();
     String authorName = issue.authorName;
     issueHistory.setWho(authorName);
     setUserPageUrl(issueHistory, User.findByLoginId(issue.authorLoginId));
     issueHistory.setWhen(issue.createdDate);
     issueHistory.setWhere(project.name);
     issueHistory.setWhat("issue");
     issueHistory.setShortTitle("#" + issue.number);
     issueHistory.setHow(issue.title);
     issueHistory.setUrl("/" + userName + "/" + project.name + "/issue/" + issue.number);
     histories.add(issueHistory);
   }
 }
Esempio n. 8
0
 private static void buildPostingHistory(
     String userName, Project project, List<Posting> postings, List<History> histories) {
   for (Posting posting : postings) {
     History postingHistory = new History();
     String authorName = posting.authorName;
     postingHistory.setWho(authorName);
     setUserPageUrl(postingHistory, User.findByLoginId(posting.authorLoginId));
     postingHistory.setWhen(posting.createdDate);
     postingHistory.setWhere(project.name);
     postingHistory.setWhat("post");
     postingHistory.setShortTitle("#" + posting.number);
     postingHistory.setHow(posting.title);
     postingHistory.setUrl("/" + userName + "/" + project.name + "/post/" + posting.number);
     histories.add(postingHistory);
   }
 }
Esempio n. 9
0
 private static void buildPullRequestsHistory(
     String userName, Project project, List<PullRequest> pullRequests, List<History> histories) {
   for (PullRequest pull : pullRequests) {
     History pullHistory = new History();
     User contributor = pull.contributor;
     pullHistory.setWho(contributor.loginId);
     setUserPageUrl(pullHistory, User.findByLoginId(contributor.loginId));
     pullHistory.setWhen(pull.created);
     pullHistory.setWhere(project.name);
     pullHistory.setWhat("pullrequest");
     pullHistory.setShortTitle("#" + pull.number);
     pullHistory.setHow(pull.title);
     pullHistory.setUrl("/" + userName + "/" + project.name + "/pullRequest/" + pull.number);
     histories.add(pullHistory);
   }
 }
Esempio n. 10
0
  /**
   * 사용자 또는 그룹 정보 조회
   *
   * <p>{@code loginId}에 해당하는 그룹이 있을 때는 그룹을 보여주고 해당하는 그룹이 없을 경우에는 {@code loginId}에 해당하는 사용자 페이지를
   * 보여준다.
   *
   * <p>when: 사용자 로그인 아이디나 아바타를 클릭할 때 사용한다.
   *
   * <p>{@code groups}에는 여러 그룹 이름이 콤마(,)를 기준으로 들어올 수 있으며, 각그룹에 해당하는 프로젝트 목록을 간추리고, 그 프로젝트 목록에 포함되는
   * 이슈, 게시물, 풀리퀘, 마일스톤 데이터를 종합하고 최근 등록일 순으로 정렬하여 보여준다.
   *
   * @param loginId 로그인ID
   * @return
   */
  public static Result userInfo(String loginId, String groups, int daysAgo, String selected) {
    Organization org = Organization.findByName(loginId);
    if (org != null) {
      return redirect(routes.OrganizationApp.organization(org.name));
    }

    if (daysAgo == UNDEFINED) {
      Cookie cookie = request().cookie(DAYS_AGO_COOKIE);
      if (cookie != null) {
        daysAgo = Integer.parseInt(cookie.value());
      } else {
        daysAgo = DAYS_AGO;
        response().setCookie(DAYS_AGO_COOKIE, daysAgo + "");
      }
    } else {
      if (daysAgo < 0) {
        daysAgo = 1;
      }
      response().setCookie(DAYS_AGO_COOKIE, daysAgo + "");
    }

    User user = User.findByLoginId(loginId);
    String[] groupNames = groups.trim().split(",");

    List<Posting> postings = new ArrayList<>();
    List<Issue> issues = new ArrayList<>();
    List<PullRequest> pullRequests = new ArrayList<>();
    List<Milestone> milestones = new ArrayList<>();

    List<Project> projects = collectProjects(loginId, user, groupNames);
    collectDatum(projects, postings, issues, pullRequests, milestones, daysAgo);
    sortDatum(postings, issues, pullRequests, milestones);

    sortByLastPushedDateAndName(projects);
    return ok(
        view.render(
            user,
            groupNames,
            projects,
            postings,
            issues,
            pullRequests,
            milestones,
            daysAgo,
            selected));
  }
Esempio n. 11
0
  /**
   * 사용자를 삭제한다.
   *
   * <p>when 관리자 페이지 사용자 삭제시
   *
   * @param userId the user id
   * @return the result
   * @see {@link Project#isOnlyManager(Long)}
   */
  @Transactional
  public static Result deleteUser(Long userId) {
    if (User.findByLoginId(session().get("loginId")).isSiteManager()) {
      if (Project.isOnlyManager(userId)) {
        flash(Constants.WARNING, "site.userList.deleteAlert");
      } else {
        User user = User.find.byId(userId);
        for (ProjectUser projectUser : user.projectUser) {
          projectUser.delete();
        }
        user.changeState(UserState.DELETED);
      }
    } else {
      flash(Constants.WARNING, "error.auth.unauthorized.waringMessage");
    }

    return redirect(routes.SiteApp.userList(1, null));
  }
Esempio n. 12
0
 /**
  * loginId 와 hash 값을 이용해서 사용자 인증. 인증에 성공하면 DB 에서 조회된 사용자 정보를 리턴 인증에 실패하면 null 리턴
  *
  * @param loginId 로그인ID
  * @param password hash된 비밀번호
  * @return
  */
 public static User authenticateWithHashedPassword(String loginId, String password) {
   User user = User.findByLoginId(loginId);
   return authenticate(user, password);
 }