James Moger
2013-06-26 17725677285470ca7dbf5da93e4235415545a7cf
Support custom header logo images of 120x45 (issue-208)
2 files added
6 files modified
122 ■■■■■ changed files
build.xml 2 ●●●●● patch | view | raw | blame | history
releases.moxie 1 ●●●● patch | view | raw | blame | history
src/main/distrib/data/gitblit.properties 7 ●●●●● patch | view | raw | blame | history
src/main/java/WEB-INF/web.xml 15 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/LogoServlet.java 93 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/RootPage.html 2 ●●● patch | view | raw | blame | history
src/main/java/logo.png patch | view | raw | blame | history
src/main/resources/gitblit.css 2 ●●● patch | view | raw | blame | history
build.xml
@@ -286,6 +286,7 @@
            <class name="com.gitblit.FederationServlet" />
            <class name="com.gitblit.GitFilter" />
            <class name="com.gitblit.git.GitServlet" />
            <class name="com.gitblit.LogoServlet" />
            <class name="com.gitblit.PagesFilter" />
            <class name="com.gitblit.PagesServlet" />
            <class name="com.gitblit.RobotsTxtServlet" />
@@ -402,6 +403,7 @@
            <class name="com.gitblit.FederationServlet" />
            <class name="com.gitblit.GitFilter" />
            <class name="com.gitblit.git.GitServlet" />
            <class name="com.gitblit.LogoServlet" />
            <class name="com.gitblit.PagesFilter" />
            <class name="com.gitblit.PagesServlet" />
            <class name="com.gitblit.RobotsTxtServlet" />
releases.moxie
@@ -52,6 +52,7 @@
    additions: 
     - Added a ui for the ref log introduced in 1.2.1 (issue-177)
     - Added weblogic.xml to WAR for deployment on WebLogic (issue 199)
     - Support setting a custom header logo (issue 208)
     - Support username substitution in web.otherUrls (issue 213)
     - Option to force client-side basic authentication instead of form-based authentication if web.authenticateViewPages=true (issue 222)
     - Setting to automatically create an user account based on an authenticated user principal from the servlet container (issue-246)
src/main/distrib/data/gitblit.properties
@@ -531,6 +531,13 @@
# SINCE 0.5.0
web.siteName =
# You may specify a different logo image for the header but it must be 120x45px.
# If the specified file does not exist, the default Gitblit logo will be used.
#
# SINCE 1.3.0
# BASEFOLDER
web.headerLogo = ${baseFolder}/logo.png
# If *web.authenticateAdminPages*=true, users with "admin" role can create
# repositories, create users, and edit repository metadata.
#
src/main/java/WEB-INF/web.xml
@@ -140,7 +140,20 @@
        <servlet-name>PagesServlet</servlet-name>        
        <url-pattern>/pages/*</url-pattern>
    </servlet-mapping>    
    
    <!-- Logo Servlet
         <url-pattern> MUST match:
            * Wicket Filter ignorePaths parameter -->
    <servlet>
        <servlet-name>LogoServlet</servlet-name>
        <servlet-class>com.gitblit.LogoServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LogoServlet</servlet-name>
        <url-pattern>/logo.png</url-pattern>
    </servlet-mapping>
    <!-- Robots.txt Servlet
         <url-pattern> MUST match: 
@@ -269,7 +282,7 @@
                 * PagesFilter <url-pattern>
                 * PagesServlet <url-pattern>
                 * com.gitblit.Constants.PAGES_PATH -->
            <param-value>git/,feed/,zip/,federation/,rpc/,pages/,robots.txt,sparkleshare/</param-value>
            <param-value>git/,feed/,zip/,federation/,rpc/,pages/,robots.txt,logo.png,sparkleshare/</param-value>
        </init-param>
    </filter>
    <filter-mapping>
src/main/java/com/gitblit/LogoServlet.java
New file
@@ -0,0 +1,93 @@
/*
 * Copyright 2013 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;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * Handles requests for logo.png
 *
 * @author James Moger
 *
 */
public class LogoServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private static final long lastModified = System.currentTimeMillis();
    public LogoServlet() {
        super();
    }
    @Override
    protected long getLastModified(HttpServletRequest req) {
        File file = GitBlit.getFileOrFolder(Keys.web.headerLogo, "${baseFolder}/logo.png");
        if (file.exists()) {
            return file.lastModified();
        } else {
            return lastModified;
        }
    }
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        InputStream is = null;
        try {
            String contentType = null;
            File file = GitBlit.getFileOrFolder(Keys.web.headerLogo, "${baseFolder}/logo.png");
            if (file.exists()) {
                // custom logo
                ServletContext context = request.getSession().getServletContext();
                contentType = context.getMimeType(file.getName());
                response.setContentLength((int) file.length());
                response.setDateHeader("Last-Modified", file.lastModified());
                is = new FileInputStream(file);
            } else {
                // default logo
                response.setDateHeader("Last-Modified", lastModified);
                is = getClass().getResourceAsStream("/logo.png");
            }
            if (contentType == null) {
                contentType = "image/png";
            }
            response.setContentType(contentType);
            OutputStream os = response.getOutputStream();
            byte[] buf = new byte[4096];
            int bytesRead = is.read(buf);
            while (bytesRead != -1) {
                os.write(buf, 0, bytesRead);
                bytesRead = is.read(buf);
            }
            os.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            is.close();
        }
    }
}
src/main/java/com/gitblit/wicket/pages/RootPage.html
@@ -14,7 +14,7 @@
                        <span class="icon-bar"></span>
                  </a>
                <a class="brand" wicket:id="rootLink">
                    <img src="gitblt_25_white.png" width="79" height="25" alt="gitblit" class="logo"/>
                    <img src="logo.png" height="45" width="120" class="logo"/>
                </a>
                
                <div class="nav-collapse">
src/main/java/logo.png
src/main/resources/gitblit.css
@@ -59,7 +59,7 @@
}
.navbar .brand {
    padding: 10px 20px;
    padding: 0px 10px 0px 20px;
}
.navbar .pull-right {