James Moger
2013-01-05 9e186eedf1a09ca7ac4fbdea32b00e7e5331f7eb
src/com/gitblit/wicket/pages/BasePage.java
@@ -15,10 +15,10 @@
 */
package com.gitblit.wicket.pages;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashSet;
import java.util.LinkedHashMap;
@@ -29,13 +29,13 @@
import java.util.TimeZone;
import java.util.regex.Pattern;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import org.apache.wicket.Application;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.PageParameters;
import org.apache.wicket.RedirectToUrlException;
import org.apache.wicket.RequestCycle;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.markup.html.CSSPackageResource;
import org.apache.wicket.markup.html.WebPage;
@@ -52,7 +52,9 @@
import org.slf4j.LoggerFactory;
import com.gitblit.Constants;
import com.gitblit.Constants.AccessPermission;
import com.gitblit.Constants.AccessRestrictionType;
import com.gitblit.Constants.AuthorizationControl;
import com.gitblit.Constants.FederationStrategy;
import com.gitblit.GitBlit;
import com.gitblit.Keys;
@@ -63,7 +65,6 @@
import com.gitblit.utils.StringUtils;
import com.gitblit.utils.TimeUtils;
import com.gitblit.wicket.GitBlitWebSession;
import com.gitblit.wicket.PageRegistration.DropDownMenuItem;
import com.gitblit.wicket.WicketUtils;
import com.gitblit.wicket.panels.LinkPanel;
@@ -77,14 +78,14 @@
      super();
      logger = LoggerFactory.getLogger(getClass());
      customizeHeader();
      loginByCookie();
      login();
   }
   public BasePage(PageParameters params) {
      super(params);
      logger = LoggerFactory.getLogger(getClass());
      customizeHeader();
      loginByCookie();
      login();
   }
   
   private void customizeHeader() {
@@ -95,6 +96,10 @@
   
   protected String getLanguageCode() {
      return GitBlitWebSession.get().getLocale().getLanguage();
   }
   protected String getCountryCode() {
      return GitBlitWebSession.get().getLocale().getCountry().toLowerCase();
   }
   
   protected TimeUtils getTimeUtils() {
@@ -128,22 +133,19 @@
      super.onAfterRender();
   }   
   private void loginByCookie() {
      if (!GitBlit.getBoolean(Keys.web.allowCookieAuthentication, false)) {
   private void login() {
      GitBlitWebSession session = GitBlitWebSession.get();
      if (session.isLoggedIn() && !session.isSessionInvalidated()) {
         // already have a session
         return;
      }
      UserModel user = null;
      // Grab cookie from Browser Session
      Cookie[] cookies = ((WebRequest) getRequestCycle().getRequest()).getCookies();
      if (cookies != null && cookies.length > 0) {
         user = GitBlit.self().authenticate(cookies);
      }
      // try to authenticate by servlet request
      HttpServletRequest httpRequest = ((WebRequest) getRequestCycle().getRequest()).getHttpServletRequest();
      UserModel user = GitBlit.self().authenticate(httpRequest);
      // Login the user
      if (user != null) {
         // Set the user into the session
         GitBlitWebSession session = GitBlitWebSession.get();
         // issue 62: fix session fixation vulnerability
         session.replaceSession();
         session.setUser(user);
@@ -206,6 +208,39 @@
      return map;
   }
   
   protected Map<AccessPermission, String> getAccessPermissions() {
      Map<AccessPermission, String> map = new LinkedHashMap<AccessPermission, String>();
      for (AccessPermission type : AccessPermission.values()) {
         switch (type) {
         case NONE:
            map.put(type, MessageFormat.format(getString("gb.noPermission"), type.code));
            break;
         case EXCLUDE:
            map.put(type, MessageFormat.format(getString("gb.excludePermission"), type.code));
            break;
         case VIEW:
            map.put(type, MessageFormat.format(getString("gb.viewPermission"), type.code));
            break;
         case CLONE:
            map.put(type, MessageFormat.format(getString("gb.clonePermission"), type.code));
            break;
         case PUSH:
            map.put(type, MessageFormat.format(getString("gb.pushPermission"), type.code));
            break;
         case CREATE:
            map.put(type, MessageFormat.format(getString("gb.createPermission"), type.code));
            break;
         case DELETE:
            map.put(type, MessageFormat.format(getString("gb.deletePermission"), type.code));
            break;
         case REWIND:
            map.put(type, MessageFormat.format(getString("gb.rewindPermission"), type.code));
            break;
         }
      }
      return map;
   }
   protected Map<FederationStrategy, String> getFederationTypes() {
      Map<FederationStrategy, String> map = new LinkedHashMap<FederationStrategy, String>();
      for (FederationStrategy type : FederationStrategy.values()) {
@@ -223,6 +258,21 @@
      }
      return map;
   }
   protected Map<AuthorizationControl, String> getAuthorizationControls() {
      Map<AuthorizationControl, String> map = new LinkedHashMap<AuthorizationControl, String>();
      for (AuthorizationControl type : AuthorizationControl.values()) {
         switch (type) {
         case AUTHENTICATED:
            map.put(type, getString("gb.allowAuthenticatedDescription"));
            break;
         case NAMED:
            map.put(type, getString("gb.allowNamedDescription"));
            break;
         }
      }
      return map;
   }
   protected TimeZone getTimeZone() {
      return GitBlit.getBoolean(Keys.web.useClientTimezone, false) ? GitBlitWebSession.get()
@@ -235,9 +285,9 @@
      return req.getServerName();
   }
   
   protected String getRepositoryUrl(RepositoryModel repository) {
   public static String getRepositoryUrl(RepositoryModel repository) {
      StringBuilder sb = new StringBuilder();
      sb.append(WicketUtils.getGitblitURL(getRequestCycle().getRequest()));
      sb.append(WicketUtils.getGitblitURL(RequestCycle.get().getRequest()));
      sb.append(Constants.GIT_PATH);
      sb.append(repository.name);
      
@@ -252,7 +302,7 @@
   
   protected List<ProjectModel> getProjectModels() {
      final UserModel user = GitBlitWebSession.get().getUser();
      List<ProjectModel> projects = GitBlit.self().getProjectModels(user);
      List<ProjectModel> projects = GitBlit.self().getProjectModels(user, true);
      return projects;
   }
   
@@ -298,7 +348,7 @@
         for (ProjectModel projectModel : availableModels) {
            for (String repositoryName : projectModel.repositories) {
               for (TeamModel teamModel : teamModels) {
                  if (teamModel.hasRepository(repositoryName)) {
                  if (teamModel.hasRepositoryPermission(repositoryName)) {
                     models.add(projectModel);
                  }
               }
@@ -380,14 +430,19 @@
      public UserFragment(String id, String markupId, MarkupContainer markupProvider) {
         super(id, markupId, markupProvider);
         if (GitBlitWebSession.get().isLoggedIn()) {
         GitBlitWebSession session = GitBlitWebSession.get();
         if (session.isLoggedIn()) {
            UserModel user = session.getUser();
            boolean editCredentials = GitBlit.self().supportsCredentialChanges(user);
            boolean standardLogin = session.authenticationType.isStandard();
            // username, logout, and change password
            add(new Label("username", GitBlitWebSession.get().getUser().getDisplayName() + ":"));
            add(new Label("username", user.getDisplayName() + ":"));
            add(new LinkPanel("loginLink", null, markupProvider.getString("gb.logout"),
                  LogoutPage.class));
            boolean editCredentials = GitBlit.self().supportsCredentialChanges();
                  LogoutPage.class).setVisible(standardLogin));
            // quick and dirty hack for showing a separator
            add(new Label("separator", "|").setVisible(editCredentials));
            add(new Label("separator", "|").setVisible(standardLogin && editCredentials));
            add(new BookmarkablePageLink<Void>("changePasswordLink", 
                  ChangePasswordPage.class).setVisible(editCredentials));
         } else {