James Moger
2012-08-24 d97e52ef501a72fcf16aee02d7e79c91d123dfe6
src/com/gitblit/wicket/GitBlitWebSession.java
@@ -1,30 +1,117 @@
/*
 * Copyright 2011 gitblit.com.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.gitblit.wicket;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.TimeZone;
import org.apache.wicket.Page;
import org.apache.wicket.PageParameters;
import org.apache.wicket.RedirectToUrlException;
import org.apache.wicket.Request;
import org.apache.wicket.Session;
import org.apache.wicket.protocol.http.RequestUtils;
import org.apache.wicket.protocol.http.WebRequestCycle;
import org.apache.wicket.protocol.http.WebSession;
import org.apache.wicket.protocol.http.request.WebClientInfo;
import com.gitblit.StoredSettings;
import com.gitblit.models.UserModel;
public final class GitBlitWebSession extends WebSession {
   private static final long serialVersionUID = 1L;
   protected TimeZone timezone = null;
   protected TimeZone timezone;
   private UserModel user;
   private String errorMessage;
   private String requestUrl;
   public GitBlitWebSession(Request request) {
      super(request);
   }
   public void invalidate() {
      super.invalidate();
      user = null;
   }
   /**
    * Cache the requested protected resource pending successful authentication.
    *
    * @param pageClass
    */
   public void cacheRequest(Class<? extends Page> pageClass) {
      // build absolute url with correctly encoded parameters?!
      Request req = WebRequestCycle.get().getRequest();
      Map<String, ?> params = req.getRequestParameters().getParameters();
      PageParameters pageParams = new PageParameters(params);
      String relativeUrl = WebRequestCycle.get().urlFor(pageClass, pageParams).toString();
      requestUrl = RequestUtils.toAbsolutePath(relativeUrl);
      if (isTemporary())
      {
         // we must bind the temporary session into the session store
         // so that we can re-use this session for reporting an error message
         // on the redirected page and continuing the request after
         // authentication.
         bind();
      }
   }
   /**
    * Continue any cached request.  This is used when a request for a protected
    * resource is aborted/redirected pending proper authentication.  Gitblit
    * no longer uses Wicket's built-in mechanism for this because of Wicket's
    * failure to properly handle parameters with forward-slashes.  This is a
    * constant source of headaches with Wicket.
    *
    * @return false if there is no cached request to process
    */
   public boolean continueRequest() {
      if (requestUrl != null) {
         String url = requestUrl;
         requestUrl = null;
         throw new RedirectToUrlException(url);
      }
      return false;
   }
   public boolean isLoggedIn() {
      return user != null;
   }
   public boolean canAdmin() {
      if (user == null) {
         return false;
      }
      return user.canAdmin;
   }
   public String getUsername() {
      return user == null ? "anonymous" : user.username;
   }
   public UserModel getUser() {
      return user;
   }
   public void setUser(UserModel user) {
      this.user = user;
   }
   public TimeZone getTimezone() {
@@ -38,34 +125,14 @@
      return timezone;
   }
   public String formatTime(Date date) {
      DateFormat df = new SimpleDateFormat(StoredSettings.getString("timestampFormat", "h:mm a"));
      df.setTimeZone(getTimezone());
      return df.format(date);
   public void cacheErrorMessage(String message) {
      this.errorMessage = message;
   }
   public String formatDate(Date date) {
      DateFormat df = new SimpleDateFormat(StoredSettings.getString("datestampShortFormat", "MM/dd/yy"));
      df.setTimeZone(getTimezone());
      return df.format(date);
   }
   public String formatDateLong(Date date) {
      DateFormat df = new SimpleDateFormat(StoredSettings.getString("datestampLongFormat", "EEEE, MMMM d, yyyy"));
      df.setTimeZone(getTimezone());
      return df.format(date);
   }
   public String formatDateTime(Date date) {
      DateFormat df = new SimpleDateFormat(StoredSettings.getString("datetimestampShortFormat", "MM/dd/yy h:mm a"));
      df.setTimeZone(getTimezone());
      return df.format(date);
   }
   public String formatDateTimeLong(Date date) {
      DateFormat df = new SimpleDateFormat(StoredSettings.getString("datetimestampLongFormat", "EEEE, MMMM d, yyyy h:mm a"));
      df.setTimeZone(getTimezone());
      return df.format(date);
   public String clearErrorMessage() {
      String msg = errorMessage;
      errorMessage = null;
      return msg;
   }
   public static GitBlitWebSession get() {