Morten Bøgeskov
2015-06-04 18231200d33b62d2d96286b9bbd84476df5d9189
Added git.sshDisplay{Port|Host} to hide port forward.

Running gitblit in a container it's easy to expose the ssh on the default port.
Using git.sshDisplayPort/git.sshDisplayHost you can expose the forwarded address
as the official location.
5 files modified
61 ■■■■ changed files
src/main/distrib/data/defaults.properties 12 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/SparkleShareInviteServlet.java 8 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/transport/ssh/SshDaemon.java 14 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/transport/ssh/WelcomeShell.java 11 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/transport/ssh/commands/SshCommand.java 16 ●●●●● patch | view | raw | blame | history
src/main/distrib/data/defaults.properties
@@ -112,6 +112,18 @@
# RESTART REQUIRED
git.sshBindInterface = 
# Manually specify the hostname to use in advertised SSH repository urls.
# This may be useful in complex forwarding setups.
#
# SINCE 1.7.0
git.sshDisplayHost =
# Manually specify the port to use in advertised SSH repository urls.
# This may be useful in complex forwarding setups.
#
# SINCE 1.7.0
git.sshDisplayPort =
# Specify the SSH key manager to use for retrieving, storing, and removing
# SSH keys.
#
src/main/java/com/gitblit/servlet/SparkleShareInviteServlet.java
@@ -89,6 +89,8 @@
            response.getWriter().append("SSH is not active on this server!");
            return;
        }
        int sshDisplayPort = settings.getInteger(Keys.git.sshDisplayPort, sshPort);
        // extract repo name from request
        String repoUrl = request.getPathInfo().substring(1);
@@ -111,6 +113,10 @@
        String url = settings.getString(Keys.web.canonicalUrl, "https://localhost:8443");
        if (!StringUtils.isEmpty(url) && url.indexOf("localhost") == -1) {
            host = new URL(url).getHost();
        }
        String sshDisplayHost = settings.getString(Keys.git.sshDisplayHost, "");
        if(sshDisplayHost.isEmpty()) {
            sshDisplayHost = host;
        }
        UserModel user;
@@ -141,7 +147,7 @@
        StringBuilder sb = new StringBuilder();
        sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
        sb.append("<sparkleshare><invite>\n");
        sb.append(MessageFormat.format("<address>ssh://{0}@{1}:{2,number,0}/</address>\n", user.username, host, sshPort));
        sb.append(MessageFormat.format("<address>ssh://{0}@{1}:{2,number,0}/</address>\n", user.username, sshDisplayHost, sshDisplayPort));
        sb.append(MessageFormat.format("<remote_path>/{0}</remote_path>\n", model.name));
        int fanoutPort = settings.getInteger(Keys.fanout.port, 0);
        if (fanoutPort > 0) {
src/main/java/com/gitblit/transport/ssh/SshDaemon.java
@@ -200,14 +200,22 @@
    }
    public String formatUrl(String gituser, String servername, String repository) {
        if (sshd.getPort() == DEFAULT_PORT) {
        IStoredSettings settings = gitblit.getSettings();
        int port = sshd.getPort();
        int displayPort = settings.getInteger(Keys.git.sshDisplayPort, port);
        String displayServername = settings.getString(Keys.git.sshDisplayHost, "");
        if(displayServername.isEmpty()) {
            displayServername = servername;
        }
        if (displayPort == DEFAULT_PORT) {
            // standard port
            return MessageFormat.format("ssh://{0}@{1}/{2}", gituser, servername,
            return MessageFormat.format("ssh://{0}@{1}/{2}", gituser, displayServername,
                    repository);
        } else {
            // non-standard port
            return MessageFormat.format("ssh://{0}@{1}:{2,number,0}/{3}",
                    gituser, servername, sshd.getPort(), repository);
                    gituser, displayServername, displayPort, repository);
        }
    }
src/main/java/com/gitblit/transport/ssh/WelcomeShell.java
@@ -200,13 +200,18 @@
        }
        private String formatUrl(String hostname, int port, String username) {
            if (port == 22) {
            int displayPort = settings.getInteger(Keys.git.sshDisplayPort, port);
            String displayHostname = settings.getString(Keys.git.sshDisplayHost, "");
            if(displayHostname.isEmpty()) {
                displayHostname = hostname;
            }
            if (displayPort == 22) {
                // standard port
                return MessageFormat.format("{0}@{1}/REPOSITORY.git", username, hostname);
                return MessageFormat.format("{0}@{1}/REPOSITORY.git", username, displayHostname);
            } else {
                // non-standard port
                return MessageFormat.format("ssh://{0}@{1}:{2,number,0}/REPOSITORY.git",
                        username, hostname, port);
                        username, displayHostname, displayPort);
            }
        }
    }
src/main/java/com/gitblit/transport/ssh/commands/SshCommand.java
@@ -16,6 +16,7 @@
 */
package com.gitblit.transport.ssh.commands;
import com.gitblit.IStoredSettings;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.MalformedURLException;
@@ -73,15 +74,20 @@
    protected String getRepositoryUrl(String repository) {
        String username = getContext().getClient().getUsername();
        String hostname = getHostname();
        int port = getContext().getGitblit().getSettings().getInteger(Keys.git.sshPort, 0);
        if (port == 22) {
        IStoredSettings settings = getContext().getGitblit().getSettings();
        String displayHostname = settings.getString(Keys.git.sshDisplayHost, "");
        if(displayHostname.isEmpty()) {
            displayHostname = getHostname();
        }
        int port = settings.getInteger(Keys.git.sshPort, 0);
        int displayPort = settings.getInteger(Keys.git.sshDisplayPort, port);
        if (displayPort == 22) {
            // standard port
            return MessageFormat.format("{0}@{1}/{2}.git", username, hostname, repository);
            return MessageFormat.format("{0}@{1}/{2}.git", username, displayHostname, repository);
        } else {
            // non-standard port
            return MessageFormat.format("ssh://{0}@{1}:{2,number,0}/{3}",
                    username, hostname, port, repository);
                    username, displayHostname, displayPort, repository);
        }
    }