Package com.gitblit.models

Examples of com.gitblit.models.UserModel


    }

    @Test
    public void testChangeHtpasswdFile()
    {
        UserModel user;

        // User default set up.
        user = htpasswd.authenticate("md5", "password".toCharArray());
        assertNotNull(user);
        assertEquals("md5", user.username);
View Full Code Here



    @Test
    public void testChangeHtpasswdFileNotExisting()
    {
        UserModel user;

        // User default set up.
        user = htpasswd.authenticate("md5", "password".toCharArray());
        assertNotNull(user);
        assertEquals("md5", user.username);
View Full Code Here

    RpcRequest reqType = RpcRequest.fromName(request.getParameter("req"));
    String objectName = request.getParameter("name");
    logger.info(MessageFormat.format("Rpc {0} request from {1}", reqType,
        request.getRemoteAddr()));

    UserModel user = (UserModel) request.getUserPrincipal();

    boolean allowManagement = user != null && user.canAdmin()
        && settings.getBoolean(Keys.web.enableRpcManagement, false);

    boolean allowAdmin = user != null && user.canAdmin()
        && settings.getBoolean(Keys.web.enableRpcAdministration, false);

    Object result = null;
    if (RpcRequest.GET_PROTOCOL.equals(reqType)) {
      // Return the protocol version
      result = PROTOCOL_VERSION;
    } else if (RpcRequest.LIST_REPOSITORIES.equals(reqType)) {
      // Determine the Gitblit clone url
      String gitblitUrl = settings.getString(Keys.web.canonicalUrl, null);
      if (StringUtils.isEmpty(gitblitUrl)) {
        gitblitUrl = HttpUtils.getGitblitURL(request);
      }
      StringBuilder sb = new StringBuilder();
      sb.append(gitblitUrl);
      sb.append(Constants.R_PATH);
      sb.append("{0}");
      String cloneUrl = sb.toString();

      // list repositories
      List<RepositoryModel> list = gitblit.getRepositoryModels(user);
      Map<String, RepositoryModel> repositories = new HashMap<String, RepositoryModel>();
      for (RepositoryModel model : list) {
        String url = MessageFormat.format(cloneUrl, model.name);
        repositories.put(url, model);
      }
      result = repositories;
    } else if (RpcRequest.LIST_BRANCHES.equals(reqType)) {
      // list all local branches in all repositories accessible to user
      Map<String, List<String>> localBranches = new HashMap<String, List<String>>();
      List<RepositoryModel> models = gitblit.getRepositoryModels(user);
      for (RepositoryModel model : models) {
        if (!model.hasCommits) {
          // skip empty repository
          continue;
        }
        if (model.isCollectingGarbage) {
          // skip garbage collecting repository
          logger.warn(MessageFormat.format("Temporarily excluding {0} from RPC, busy collecting garbage", model.name));
          continue;
        }
        // get local branches
        Repository repository = gitblit.getRepository(model.name);
        List<RefModel> refs = JGitUtils.getLocalBranches(repository, false, -1);
        if (model.showRemoteBranches) {
          // add remote branches if repository displays them
          refs.addAll(JGitUtils.getRemoteBranches(repository, false, -1));
        }
        if (refs.size() > 0) {
          List<String> branches = new ArrayList<String>();
          for (RefModel ref : refs) {
            branches.add(ref.getName());
          }
          localBranches.put(model.name, branches);
        }
        repository.close();
      }
      result = localBranches;
    } else if (RpcRequest.GET_USER.equals(reqType)) {
      if (StringUtils.isEmpty(objectName)) {
        if (UserModel.ANONYMOUS.equals(user)) {
          response.sendError(forbiddenCode);
        } else {
          // return the current user, reset credentials
          UserModel requestedUser = DeepCopier.copy(user);
          result = requestedUser;
        }
      } else {
        if (user.canAdmin() || objectName.equals(user.username)) {
          // return the specified user
          UserModel requestedUser = gitblit.getUserModel(objectName);
          if (requestedUser == null) {
            response.setStatus(failureCode);
          } else {
            result = requestedUser;
          }
        } else {
          response.sendError(forbiddenCode);
        }
      }
    } else if (RpcRequest.LIST_USERS.equals(reqType)) {
      // list users
      List<String> names = gitblit.getAllUsernames();
      List<UserModel> users = new ArrayList<UserModel>();
      for (String name : names) {
        users.add(gitblit.getUserModel(name));
      }
      result = users;
    } else if (RpcRequest.LIST_TEAMS.equals(reqType)) {
      // list teams
      List<String> names = gitblit.getAllTeamNames();
      List<TeamModel> teams = new ArrayList<TeamModel>();
      for (String name : names) {
        teams.add(gitblit.getTeamModel(name));
      }
      result = teams;
    } else if (RpcRequest.CREATE_REPOSITORY.equals(reqType)) {
      // create repository
      RepositoryModel model = deserialize(request, response, RepositoryModel.class);
      try {
        gitblit.updateRepositoryModel(model.name, model, true);
      } catch (GitBlitException e) {
        response.setStatus(failureCode);
      }
    } else if (RpcRequest.EDIT_REPOSITORY.equals(reqType)) {
      // edit repository
      RepositoryModel model = deserialize(request, response, RepositoryModel.class);
      // name specifies original repository name in event of rename
      String repoName = objectName;
      if (repoName == null) {
        repoName = model.name;
      }
      try {
        gitblit.updateRepositoryModel(repoName, model, false);
      } catch (GitBlitException e) {
        response.setStatus(failureCode);
      }
    } else if (RpcRequest.DELETE_REPOSITORY.equals(reqType)) {
      // delete repository
      RepositoryModel model = deserialize(request, response, RepositoryModel.class);
      gitblit.deleteRepositoryModel(model);
    } else if (RpcRequest.CREATE_USER.equals(reqType)) {
      // create user
      UserModel model = deserialize(request, response, UserModel.class);
      try {
        gitblit.addUser(model);
      } catch (GitBlitException e) {
        response.setStatus(failureCode);
      }
    } else if (RpcRequest.EDIT_USER.equals(reqType)) {
      // edit user
      UserModel model = deserialize(request, response, UserModel.class);
      // name parameter specifies original user name in event of rename
      String username = objectName;
      if (username == null) {
        username = model.username;
      }
      try {
        gitblit.reviseUser(username, model);
      } catch (GitBlitException e) {
        response.setStatus(failureCode);
      }
    } else if (RpcRequest.DELETE_USER.equals(reqType)) {
      // delete user
      UserModel model = deserialize(request, response, UserModel.class);
      if (!gitblit.deleteUser(model.username)) {
        response.setStatus(failureCode);
      }
    } else if (RpcRequest.CREATE_TEAM.equals(reqType)) {
      // create team
View Full Code Here

    // set stateless page preference
    setStatelessHint(true);

    any = new TicketResponsible(getString("gb.any"), "[* TO *]", null);

    UserModel user = GitBlitWebSession.get().getUser();
    boolean isAuthenticated = user != null && user.isAuthenticated;

    final String [] statiiParam = params.getStringArray(Lucene.status.name());
    final String assignedToParam = params.getString(Lucene.responsible.name(), null);
    final String milestoneParam = params.getString(Lucene.milestone.name(), null);
    final String queryParam = params.getString("q", null);
    final String searchParam = params.getString("s", null);
    final String sortBy = Lucene.fromString(params.getString("sort", Lucene.created.name())).name();
    final boolean desc = !"asc".equals(params.getString("direction", "desc"));


    // add search form
    TicketSearchForm searchForm = new TicketSearchForm("ticketSearchForm", repositoryName, searchParam);
    add(searchForm);
    searchForm.setTranslatedAttributes();

    final String activeQuery;
    if (!StringUtils.isEmpty(searchParam)) {
      activeQuery = searchParam;
    } else if (StringUtils.isEmpty(queryParam)) {
      activeQuery = "";
    } else {
      activeQuery = queryParam;
    }

    // build Lucene query from defaults and request parameters
    QueryBuilder qb = new QueryBuilder(queryParam);
    if (!qb.containsField(Lucene.rid.name())) {
      // specify the repository
      qb.and(Lucene.rid.matches(getRepositoryModel().getRID()));
    }
    if (!qb.containsField(Lucene.responsible.name())) {
      // specify the responsible
      qb.and(Lucene.responsible.matches(assignedToParam));
    }
    if (!qb.containsField(Lucene.milestone.name())) {
      // specify the milestone
      qb.and(Lucene.milestone.matches(milestoneParam));
    }
    if (!qb.containsField(Lucene.status.name()) && !ArrayUtils.isEmpty(statiiParam)) {
      // specify the states
      boolean not = false;
      QueryBuilder q = new QueryBuilder();
      for (String state : statiiParam) {
        if (state.charAt(0) == '!') {
          not = true;
          q.and(Lucene.status.doesNotMatch(state.substring(1)));
        } else {
          q.or(Lucene.status.matches(state));
        }
      }
      if (not) {
        qb.and(q.toString());
      } else {
        qb.and(q.toSubquery().toString());
      }
    }
    final String luceneQuery = qb.build();

    // open milestones
    List<TicketMilestone> milestones = app().tickets().getMilestones(getRepositoryModel(), Status.Open);
    TicketMilestone currentMilestone = null;
    if (!StringUtils.isEmpty(milestoneParam)) {
      for (TicketMilestone tm : milestones) {
        if (tm.name.equals(milestoneParam)) {
          // get the milestone (queries the index)
          currentMilestone = app().tickets().getMilestone(getRepositoryModel(), milestoneParam);
          break;
        }
      }

      if (currentMilestone == null) {
        // milestone not found, create a temporary one
        currentMilestone = new TicketMilestone(milestoneParam);
        String q = QueryBuilder.q(Lucene.rid.matches(getRepositoryModel().getRID())).and(Lucene.milestone.matches(milestoneParam)).build();
        currentMilestone.tickets = app().tickets().queryFor(q, 1, 0, Lucene.number.name(), true);
        milestones.add(currentMilestone);
      }
    }

    Fragment milestonePanel;
    if (currentMilestone == null) {
      milestonePanel = new Fragment("milestonePanel", "noMilestoneFragment", this);
      add(milestonePanel);
    } else {
      milestonePanel = new Fragment("milestonePanel", "milestoneProgressFragment", this);
      milestonePanel.add(new Label("currentMilestone", currentMilestone.name));
      if (currentMilestone.due == null) {
        milestonePanel.add(new Label("currentDueDate", getString("gb.notSpecified")));
      } else {
        milestonePanel.add(WicketUtils.createDateLabel("currentDueDate", currentMilestone.due, GitBlitWebSession
            .get().getTimezone(), getTimeUtils(), false));
      }
      Label label = new Label("progress");
      WicketUtils.setCssStyle(label, "width:" + currentMilestone.getProgress() + "%;");
      milestonePanel.add(label);

      milestonePanel.add(new LinkPanel("openTickets", null,
          MessageFormat.format(getString("gb.nOpenTickets"), currentMilestone.getOpenTickets()),
          TicketsPage.class,
          queryParameters(null, currentMilestone.name, openStatii, null, sortBy, desc, 1)));

      milestonePanel.add(new LinkPanel("closedTickets", null,
          MessageFormat.format(getString("gb.nClosedTickets"), currentMilestone.getClosedTickets()),
          TicketsPage.class,
          queryParameters(null, currentMilestone.name, closedStatii, null, sortBy, desc, 1)));

      milestonePanel.add(new Label("totalTickets", MessageFormat.format(getString("gb.nTotalTickets"), currentMilestone.getTotalTickets())));
      add(milestonePanel);
    }

    Fragment milestoneDropdown = new Fragment("milestoneDropdown", "milestoneDropdownFragment", this);
    PageParameters resetMilestone = queryParameters(queryParam, null, statiiParam, assignedToParam, sortBy, desc, 1);
    milestoneDropdown.add(new BookmarkablePageLink<Void>("resetMilestone", TicketsPage.class, resetMilestone));

    ListDataProvider<TicketMilestone> milestonesDp = new ListDataProvider<TicketMilestone>(milestones);
    DataView<TicketMilestone> milestonesMenu = new DataView<TicketMilestone>("milestone", milestonesDp) {
      private static final long serialVersionUID = 1L;

      @Override
      public void populateItem(final Item<TicketMilestone> item) {
        final TicketMilestone tm = item.getModelObject();
        PageParameters params = queryParameters(queryParam, tm.name, statiiParam, assignedToParam, sortBy, desc, 1);
        item.add(new LinkPanel("milestoneLink", null, tm.name, TicketsPage.class, params).setRenderBodyOnly(true));
      }
    };
    milestoneDropdown.add(milestonesMenu);
    milestonePanel.add(milestoneDropdown);

    // search or query tickets
    int page = Math.max(1,  WicketUtils.getPage(params));
    int pageSize = app().settings().getInteger(Keys.tickets.perPage, 25);
    List<QueryResult> results;
    if (StringUtils.isEmpty(searchParam)) {
      results = app().tickets().queryFor(luceneQuery, page, pageSize, sortBy, desc);
    } else {
      results = app().tickets().searchFor(getRepositoryModel(), searchParam, page, pageSize);
    }
    int totalResults = results.size() == 0 ? 0 : results.get(0).totalResults;

    // standard queries
    add(new BookmarkablePageLink<Void>("changesQuery", TicketsPage.class,
        queryParameters(
            Lucene.type.matches(TicketModel.Type.Proposal.name()),
            milestoneParam,
            statiiParam,
            assignedToParam,
            sortBy,
            desc,
            1)));

    add(new BookmarkablePageLink<Void>("bugsQuery", TicketsPage.class,
        queryParameters(
            Lucene.type.matches(TicketModel.Type.Bug.name()),
            milestoneParam,
            statiiParam,
            assignedToParam,
            sortBy,
            desc,
            1)));

    add(new BookmarkablePageLink<Void>("enhancementsQuery", TicketsPage.class,
        queryParameters(
            Lucene.type.matches(TicketModel.Type.Enhancement.name()),
            milestoneParam,
            statiiParam,
            assignedToParam,
            sortBy,
            desc,
            1)));

    add(new BookmarkablePageLink<Void>("tasksQuery", TicketsPage.class,
        queryParameters(
            Lucene.type.matches(TicketModel.Type.Task.name()),
            milestoneParam,
            statiiParam,
            assignedToParam,
            sortBy,
            desc,
            1)));

    add(new BookmarkablePageLink<Void>("questionsQuery", TicketsPage.class,
        queryParameters(
            Lucene.type.matches(TicketModel.Type.Question.name()),
            milestoneParam,
            statiiParam,
            assignedToParam,
            sortBy,
            desc,
            1)));

    add(new BookmarkablePageLink<Void>("resetQuery", TicketsPage.class,
        queryParameters(
            null,
            milestoneParam,
            openStatii,
            null,
            null,
            true,
            1)));

    if (isAuthenticated) {
      add(new Label("userDivider"));
      add(new BookmarkablePageLink<Void>("createdQuery", TicketsPage.class,
          queryParameters(
              Lucene.createdby.matches(user.username),
              milestoneParam,
              statiiParam,
              assignedToParam,
              sortBy,
              desc,
              1)));

      add(new BookmarkablePageLink<Void>("watchedQuery", TicketsPage.class,
          queryParameters(
              Lucene.watchedby.matches(user.username),
              milestoneParam,
              statiiParam,
              assignedToParam,
              sortBy,
              desc,
              1)));
      add(new BookmarkablePageLink<Void>("mentionsQuery", TicketsPage.class,
          queryParameters(
              Lucene.mentions.matches(user.username),
              milestoneParam,
              statiiParam,
              assignedToParam,
              sortBy,
              desc,
              1)));
    } else {
      add(new Label("userDivider").setVisible(false));
      add(new Label("createdQuery").setVisible(false));
      add(new Label("watchedQuery").setVisible(false));
      add(new Label("mentionsQuery").setVisible(false));
    }

    Set<TicketQuery> dynamicQueries = new TreeSet<TicketQuery>();
    for (TicketLabel label : app().tickets().getLabels(getRepositoryModel())) {
      String q = QueryBuilder.q(Lucene.labels.matches(label.name)).build();
      dynamicQueries.add(new TicketQuery(label.name, q).color(label.color));
    }

    for (QueryResult ticket : results) {
      if (!StringUtils.isEmpty(ticket.topic)) {
        String q = QueryBuilder.q(Lucene.topic.matches(ticket.topic)).build();
        dynamicQueries.add(new TicketQuery(ticket.topic, q));
      }

      if (!ArrayUtils.isEmpty(ticket.labels)) {
        for (String label : ticket.labels) {
          String q = QueryBuilder.q(Lucene.labels.matches(label)).build();
          dynamicQueries.add(new TicketQuery(label, q));
        }
      }
    }

    if (dynamicQueries.size() == 0) {
      add(new Label("dynamicQueries").setVisible(false));
    } else {
      Fragment fragment = new Fragment("dynamicQueries", "dynamicQueriesFragment", this);
      ListDataProvider<TicketQuery> dynamicQueriesDp = new ListDataProvider<TicketQuery>(new ArrayList<TicketQuery>(dynamicQueries));
      DataView<TicketQuery> dynamicQueriesList = new DataView<TicketQuery>("dynamicQuery", dynamicQueriesDp) {
        private static final long serialVersionUID = 1L;

        @Override
        public void populateItem(final Item<TicketQuery> item) {
          final TicketQuery tq = item.getModelObject();
          Component swatch = new Label("swatch", "&nbsp;").setEscapeModelStrings(false);
          if (StringUtils.isEmpty(tq.color)) {
            // calculate a color
            tq.color = StringUtils.getColor(tq.name);
          }
          String background = MessageFormat.format("background-color:{0};", tq.color);
          swatch.add(new SimpleAttributeModifier("style", background));
          item.add(swatch);
          if (activeQuery.contains(tq.query)) {
            // selected
            String q = QueryBuilder.q(activeQuery).remove(tq.query).build();
            PageParameters params = queryParameters(q, milestoneParam, statiiParam, assignedToParam, sortBy, desc, 1);
            item.add(new LinkPanel("link", "active", tq.name, TicketsPage.class, params).setRenderBodyOnly(true));
            Label checked = new Label("checked");
            WicketUtils.setCssClass(checked, "iconic-o-x");
            item.add(checked);
            item.add(new SimpleAttributeModifier("style", background));
          } else {
            // unselected
            String q = QueryBuilder.q(queryParam).toSubquery().and(tq.query).build();
            PageParameters params = queryParameters(q, milestoneParam, statiiParam, assignedToParam, sortBy, desc, 1);
            item.add(new LinkPanel("link", null, tq.name, TicketsPage.class, params).setRenderBodyOnly(true));
            item.add(new Label("checked").setVisible(false));
          }
        }
      };
      fragment.add(dynamicQueriesList);
      add(fragment);
    }

    // states
    if (ArrayUtils.isEmpty(statiiParam)) {
      add(new Label("selectedStatii", getString("gb.all")));
    } else {
      add(new Label("selectedStatii", StringUtils.flattenStrings(Arrays.asList(statiiParam), ",")));
    }
    add(new BookmarkablePageLink<Void>("openTickets", TicketsPage.class, queryParameters(queryParam, milestoneParam, openStatii, assignedToParam, sortBy, desc, 1)));
    add(new BookmarkablePageLink<Void>("closedTickets", TicketsPage.class, queryParameters(queryParam, milestoneParam, closedStatii, assignedToParam, sortBy, desc, 1)));
    add(new BookmarkablePageLink<Void>("allTickets", TicketsPage.class, queryParameters(queryParam, milestoneParam, null, assignedToParam, sortBy, desc, 1)));

    // by status
    List<Status> statii = new ArrayList<Status>(Arrays.asList(Status.values()));
    statii.remove(Status.Closed);
    ListDataProvider<Status> resolutionsDp = new ListDataProvider<Status>(statii);
    DataView<Status> statiiLinks = new DataView<Status>("statii", resolutionsDp) {
      private static final long serialVersionUID = 1L;

      @Override
      public void populateItem(final Item<Status> item) {
        final Status status = item.getModelObject();
        PageParameters p = queryParameters(queryParam, milestoneParam, new String [] { status.name().toLowerCase() }, assignedToParam, sortBy, desc, 1);
        String css = getStatusClass(status);
        item.add(new LinkPanel("statusLink", css, status.toString(), TicketsPage.class, p).setRenderBodyOnly(true));
      }
    };
    add(statiiLinks);

    // responsible filter
    List<TicketResponsible> responsibles = new ArrayList<TicketResponsible>();
    for (RegistrantAccessPermission perm : app().repositories().getUserAccessPermissions(getRepositoryModel())) {
      if (perm.permission.atLeast(AccessPermission.PUSH)) {
        UserModel u = app().users().getUserModel(perm.registrant);
        responsibles.add(new TicketResponsible(u));
      }
    }
    Collections.sort(responsibles);
    responsibles.add(0, any);

    TicketResponsible currentResponsible = null;
    for (TicketResponsible u : responsibles) {
      if (u.username.equals(assignedToParam)) {
        currentResponsible = u;
        break;
      }
    }

    add(new Label("currentResponsible", currentResponsible == null ? "" : currentResponsible.displayname));
    ListDataProvider<TicketResponsible> responsibleDp = new ListDataProvider<TicketResponsible>(responsibles);
    DataView<TicketResponsible> responsibleMenu = new DataView<TicketResponsible>("responsible", responsibleDp) {
      private static final long serialVersionUID = 1L;

      @Override
      public void populateItem(final Item<TicketResponsible> item) {
        final TicketResponsible u = item.getModelObject();
        PageParameters params = queryParameters(queryParam, milestoneParam, statiiParam, u.username, sortBy, desc, 1);
        item.add(new LinkPanel("responsibleLink", null, u.displayname, TicketsPage.class, params).setRenderBodyOnly(true));
      }
    };
    add(responsibleMenu);
    PageParameters resetResponsibleParams = queryParameters(queryParam, milestoneParam, statiiParam, null, sortBy, desc, 1);
    add(new BookmarkablePageLink<Void>("resetResponsible", TicketsPage.class, resetResponsibleParams));

    List<TicketSort> sortChoices = new ArrayList<TicketSort>();
    sortChoices.add(new TicketSort(getString("gb.sortNewest"), Lucene.created.name(), true));
    sortChoices.add(new TicketSort(getString("gb.sortOldest"), Lucene.created.name(), false));
    sortChoices.add(new TicketSort(getString("gb.sortMostRecentlyUpdated"), Lucene.updated.name(), true));
    sortChoices.add(new TicketSort(getString("gb.sortLeastRecentlyUpdated"), Lucene.updated.name(), false));
    sortChoices.add(new TicketSort(getString("gb.sortMostComments"), Lucene.comments.name(), true));
    sortChoices.add(new TicketSort(getString("gb.sortLeastComments"), Lucene.comments.name(), false));
    sortChoices.add(new TicketSort(getString("gb.sortMostPatchsetRevisions"), Lucene.patchsets.name(), true));
    sortChoices.add(new TicketSort(getString("gb.sortLeastPatchsetRevisions"), Lucene.patchsets.name(), false));
    sortChoices.add(new TicketSort(getString("gb.sortMostVotes"), Lucene.votes.name(), true));
    sortChoices.add(new TicketSort(getString("gb.sortLeastVotes"), Lucene.votes.name(), false));

    TicketSort currentSort = sortChoices.get(0);
    for (TicketSort ts : sortChoices) {
      if (ts.sortBy.equals(sortBy) && desc == ts.desc) {
        currentSort = ts;
        break;
      }
    }
    add(new Label("currentSort", currentSort.name));

    ListDataProvider<TicketSort> sortChoicesDp = new ListDataProvider<TicketSort>(sortChoices);
    DataView<TicketSort> sortMenu = new DataView<TicketSort>("sort", sortChoicesDp) {
      private static final long serialVersionUID = 1L;

      @Override
      public void populateItem(final Item<TicketSort> item) {
        final TicketSort ts = item.getModelObject();
        PageParameters params = queryParameters(queryParam, milestoneParam, statiiParam, assignedToParam, ts.sortBy, ts.desc, 1);
        item.add(new LinkPanel("sortLink", null, ts.name, TicketsPage.class, params).setRenderBodyOnly(true));
      }
    };
    add(sortMenu);


    // paging links
    buildPager(queryParam, milestoneParam, statiiParam, assignedToParam, sortBy, desc, page, pageSize, results.size(), totalResults);

    ListDataProvider<QueryResult> resultsDataProvider = new ListDataProvider<QueryResult>(results);
    DataView<QueryResult> ticketsView = new DataView<QueryResult>("ticket", resultsDataProvider) {
      private static final long serialVersionUID = 1L;

      @Override
      public void populateItem(final Item<QueryResult> item) {
        final QueryResult ticket = item.getModelObject();
        item.add(getStateIcon("state", ticket.type, ticket.status));
        item.add(new Label("id", "" + ticket.number));
        UserModel creator = app().users().getUserModel(ticket.createdBy);
        if (creator != null) {
          item.add(new LinkPanel("createdBy", null, creator.getDisplayName(),
            UserPage.class, WicketUtils.newUsernameParameter(ticket.createdBy)));
        } else {
          item.add(new Label("createdBy", ticket.createdBy));
        }
        item.add(WicketUtils.createDateLabel("createDate", ticket.createdAt, GitBlitWebSession
            .get().getTimezone(), getTimeUtils(), false));

        if (ticket.updatedAt == null) {
          item.add(new Label("updated").setVisible(false));
        } else {
          Fragment updated = new Fragment("updated", "updatedFragment", this);
          UserModel updater = app().users().getUserModel(ticket.updatedBy);
          if (updater != null) {
            updated.add(new LinkPanel("updatedBy", null, updater.getDisplayName(),
                UserPage.class, WicketUtils.newUsernameParameter(ticket.updatedBy)));
          } else {
            updated.add(new Label("updatedBy", ticket.updatedBy));
          }
          updated.add(WicketUtils.createDateLabel("updateDate", ticket.updatedAt, GitBlitWebSession
              .get().getTimezone(), getTimeUtils(), false));
          item.add(updated);
        }

        item.add(new LinkPanel("title", "list subject", StringUtils.trimString(
            ticket.title, Constants.LEN_SHORTLOG), TicketsPage.class, newTicketParameter(ticket)));

        ListDataProvider<String> labelsProvider = new ListDataProvider<String>(ticket.getLabels());
        DataView<String> labelsView = new DataView<String>("labels", labelsProvider) {
          private static final long serialVersionUID = 1L;

          @Override
          public void populateItem(final Item<String> labelItem) {
            String content = bugtraqProcessor().processPlainCommitMessage(getRepository(), repositoryName, labelItem.getModelObject());
            Label label = new Label("label", content);
            label.setEscapeModelStrings(false);
            TicketLabel tLabel = app().tickets().getLabel(getRepositoryModel(), labelItem.getModelObject());
            String background = MessageFormat.format("background-color:{0};", tLabel.color);
            label.add(new SimpleAttributeModifier("style", background));
            labelItem.add(label);
          }
        };
        item.add(labelsView);

        if (StringUtils.isEmpty(ticket.responsible)) {
          item.add(new Label("responsible").setVisible(false));
        } else {
          UserModel responsible = app().users().getUserModel(ticket.responsible);
          if (responsible == null) {
            responsible = new UserModel(ticket.responsible);
          }
          GravatarImage avatar = new GravatarImage("responsible", responsible.getDisplayName(),
              responsible.emailAddress, null, 16, true);
          avatar.setTooltip(getString("gb.responsible") + ": " + responsible.getDisplayName());
          item.add(avatar);
        }

        // votes indicator
        Label v = new Label("votes", "" + ticket.votesCount);
View Full Code Here

    // Determine if the request URL is restricted
    String fullSuffix = fullUrl.substring(repository.length());
    String urlRequestType = getUrlRequestAction(fullSuffix);

    UserModel user = getUser(httpRequest);

    // Load the repository model
    RepositoryModel model = repositoryManager.getRepositoryModel(repository);
    if (model == null) {
      if (isCreationAllowed()) {
        if (user == null) {
          // challenge client to provide credentials for creation. send 401.
          if (runtimeManager.isDebugMode()) {
            logger.info(MessageFormat.format("ARF: CREATE CHALLENGE {0}", fullUrl));
          }
          httpResponse.setHeader("WWW-Authenticate", CHALLENGE);
          httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED);
          return;
        } else {
          // see if we can create a repository for this request
          model = createRepository(user, repository, urlRequestType);
        }
      }

      if (model == null) {
        // repository not found. send 404.
        logger.info(MessageFormat.format("ARF: {0} ({1})", fullUrl,
            HttpServletResponse.SC_NOT_FOUND));
        httpResponse.sendError(HttpServletResponse.SC_NOT_FOUND);
        return;
      }
    }

    // Confirm that the action may be executed on the repository
    if (!isActionAllowed(model, urlRequestType)) {
      logger.info(MessageFormat.format("ARF: action {0} on {1} forbidden ({2})",
          urlRequestType, model, HttpServletResponse.SC_FORBIDDEN));
      httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN);
      return;
    }

    // Wrap the HttpServletRequest with the AccessRestrictionRequest which
    // overrides the servlet container user principal methods.
    // JGit requires either:
    //
    // 1. servlet container authenticated user
    // 2. http.receivepack = true in each repository's config
    //
    // Gitblit must conditionally authenticate users per-repository so just
    // enabling http.receivepack is insufficient.
    AuthenticatedRequest authenticatedRequest = new AuthenticatedRequest(httpRequest);
    if (user != null) {
      authenticatedRequest.setUser(user);
    }

    // BASIC authentication challenge and response processing
    if (!StringUtils.isEmpty(urlRequestType) && requiresAuthentication(model, urlRequestType)) {
      if (user == null) {
        // challenge client to provide credentials. send 401.
        if (runtimeManager.isDebugMode()) {
          logger.info(MessageFormat.format("ARF: CHALLENGE {0}", fullUrl));
        }
        httpResponse.setHeader("WWW-Authenticate", CHALLENGE);
        httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED);
        return;
      } else {
        // check user access for request
        if (user.canAdmin() || canAccess(model, user, urlRequestType)) {
          // authenticated request permitted.
          // pass processing to the restricted servlet.
          newSession(authenticatedRequest, httpResponse);
          logger.info(MessageFormat.format("ARF: {0} ({1}) authenticated", fullUrl,
              HttpServletResponse.SC_CONTINUE));
View Full Code Here

          return;
        }
        List<String> usernames = userManager.getAllUsernames();
        List<UserModel> users = new ArrayList<UserModel>();
        for (String username : usernames) {
          UserModel user = userManager.getUserModel(username);
          if (!user.excludeFromFederation) {
            users.add(user);
          }
        }
        result = users;
View Full Code Here

    boolean authenticateAdmin = settings.getBoolean(Keys.web.authenticateAdminPages, true);

    // Wrap the HttpServletRequest with the RpcServletRequest which
    // overrides the servlet container user principal methods.
    AuthenticatedRequest authenticatedRequest = new AuthenticatedRequest(httpRequest);
    UserModel user = getUser(httpRequest);
    if (user != null) {
      authenticatedRequest.setUser(user);
    }

    // conditionally reject rpc management/administration requests
    if (adminRequest && !settings.getBoolean(Keys.web.enableRpcManagement, false)) {
      logger.warn(MessageFormat.format("{0} must be set TRUE for {1} rpc requests.",
          Keys.web.enableRpcManagement, requestType.toString()));
      httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN);
      return;
    }

    // BASIC authentication challenge and response processing
    if ((adminRequest && authenticateAdmin) || (!adminRequest && authenticateView)) {
      if (user == null) {
        // challenge client to provide credentials. send 401.
        if (runtimeManager.isDebugMode()) {
          logger.info(MessageFormat.format("RPC: CHALLENGE {0}", fullUrl));

        }
        httpResponse.setHeader("WWW-Authenticate", CHALLENGE);
        httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED);
        return;
      } else {
        // check user access for request
        if (user.canAdmin() || canAccess(user, requestType)) {
          // authenticated request permitted.
          // pass processing to the restricted servlet.
          newSession(authenticatedRequest, httpResponse);
          logger.info(MessageFormat.format("RPC: {0} ({1}) authenticated", fullUrl,
              HttpServletResponse.SC_CONTINUE));
View Full Code Here

  private void login() {
    GitBlitWebSession session = GitBlitWebSession.get();
    if (session.isLoggedIn() && !session.isSessionInvalidated()) {
      // already have a session, refresh usermodel to pick up
      // any changes to permissions or roles (issue-186)
      UserModel user = app().users().getUserModel(session.getUser().username);

      if (user == null || user.disabled) {
        // user was deleted/disabled during session
        HttpServletResponse response = ((WebResponse) getRequestCycle().getResponse())
            .getHttpServletResponse();
        app().authentication().logout(response, user);
        session.setUser(null);
        session.invalidateNow();
        return;
      }

      // validate cookie during session (issue-361)
      if (user != null && app().settings().getBoolean(Keys.web.allowCookieAuthentication, true)) {
        HttpServletRequest request = ((WebRequest) getRequestCycle().getRequest())
            .getHttpServletRequest();
        String requestCookie = app().authentication().getCookie(request);
        if (!StringUtils.isEmpty(requestCookie) && !StringUtils.isEmpty(user.cookie)) {
          if (!requestCookie.equals(user.cookie)) {
            // cookie was changed during our session
            HttpServletResponse response = ((WebResponse) getRequestCycle().getResponse())
                .getHttpServletResponse();
            app().authentication().logout(response, user);
            session.setUser(null);
            session.invalidateNow();
            return;
          }
        }
      }
      session.setUser(user);
      return;
    }

    // try to authenticate by servlet request
    HttpServletRequest httpRequest = ((WebRequest) getRequestCycle().getRequest())
        .getHttpServletRequest();
    UserModel user = app().authentication().authenticate(httpRequest);

    // Login the user
    if (user != null) {
      // issue 62: fix session fixation vulnerability
      session.replaceSession();
View Full Code Here

   *
   * @param httpRequest
   * @return user
   */
  protected UserModel getUser(HttpServletRequest httpRequest) {
    UserModel user = authenticationManager.authenticate(httpRequest, requiresClientCertificate());
    return user;
  }
View Full Code Here

  private void checkPermissions(RepositoryModel model) {
    boolean authenticateAdmin = app().settings().getBoolean(Keys.web.authenticateAdminPages, true);
    boolean allowAdmin = app().settings().getBoolean(Keys.web.allowAdministration, true);

    GitBlitWebSession session = GitBlitWebSession.get();
    UserModel user = session.getUser();

    if (allowAdmin) {
      if (authenticateAdmin) {
        if (user == null) {
          // No Login Available
          error(getString("gb.errorAdminLoginRequired"), true);
        }
        if (isCreate) {
          // Create Repository
          if (!user.canCreate() && !user.canAdmin()) {
            // Only administrators or permitted users may create
            error(getString("gb.errorOnlyAdminMayCreateRepository"), true);
          }
        } else {
          // Edit Repository
          if (user.canAdmin()) {
            // Admins can edit everything
            isAdmin = true;
            return;
          } else {
            if (!model.isOwner(user.username)) {
View Full Code Here

TOP

Related Classes of com.gitblit.models.UserModel

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.