James Moger
2014-10-31 67ba8f57e15ddf8d8dece57a276e37a4b3ef7f01
Allow finer-grained determination of available transport preferences
3 files modified
49 ■■■■ changed files
src/main/java/com/gitblit/manager/IServicesManager.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/manager/ServicesManager.java 26 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/UserPage.java 4 ●●● patch | view | raw | blame | history
src/main/java/com/gitblit/manager/IServicesManager.java
@@ -19,6 +19,7 @@
import javax.servlet.http.HttpServletRequest;
import com.gitblit.Constants.Transport;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.RepositoryUrl;
import com.gitblit.models.UserModel;
@@ -42,6 +43,15 @@
      * @since 1.7.0
     */
    boolean isServingHTTP();
    /**
     * Determine if this Gitblit instance is actively serving git repositories
     * over HTTP.
     *
     * @return true if Gitblit is serving repositories over HTTPS
      * @since 1.7.0
     */
    boolean isServingHTTPS();
    /**
     * Determine if this Gitblit instance is actively serving git repositories
@@ -72,4 +82,13 @@
     */
    List<RepositoryUrl> getRepositoryUrls(HttpServletRequest request, UserModel user, RepositoryModel repository);
    /**
     * Returns true if the transport may be used for pushing.
     *
     * @param byTransport
     * @return true if the transport can be used for pushes.
     * @since 1.7.0
     */
    boolean acceptsPush(Transport byTransport);
}
src/main/java/com/gitblit/manager/ServicesManager.java
@@ -166,7 +166,7 @@
            AccessPermission permission = user.getRepositoryPermission(repository).permission;
            if (permission.exceeds(AccessPermission.NONE)) {
                Transport transport = Transport.fromString(request.getScheme());
                if (permission.atLeast(AccessPermission.PUSH) && !acceptPush(transport)) {
                if (permission.atLeast(AccessPermission.PUSH) && !acceptsPush(transport)) {
                    // downgrade the repo permission for this transport
                    // because it is not an acceptable PUSH transport
                    permission = AccessPermission.CLONE;
@@ -180,7 +180,7 @@
        if (!StringUtils.isEmpty(sshDaemonUrl)) {
            AccessPermission permission = user.getRepositoryPermission(repository).permission;
            if (permission.exceeds(AccessPermission.NONE)) {
                if (permission.atLeast(AccessPermission.PUSH) && !acceptPush(Transport.SSH)) {
                if (permission.atLeast(AccessPermission.PUSH) && !acceptsPush(Transport.SSH)) {
                    // downgrade the repo permission for this transport
                    // because it is not an acceptable PUSH transport
                    permission = AccessPermission.CLONE;
@@ -195,7 +195,7 @@
        if (!StringUtils.isEmpty(gitDaemonUrl)) {
            AccessPermission permission = getGitDaemonAccessPermission(user, repository);
            if (permission.exceeds(AccessPermission.NONE)) {
                if (permission.atLeast(AccessPermission.PUSH) && !acceptPush(Transport.GIT)) {
                if (permission.atLeast(AccessPermission.PUSH) && !acceptsPush(Transport.GIT)) {
                    // downgrade the repo permission for this transport
                    // because it is not an acceptable PUSH transport
                    permission = AccessPermission.CLONE;
@@ -272,7 +272,8 @@
     */
    @Override
    public boolean isServingRepositories() {
        return isServingHTTP()
        return isServingHTTPS()
                || isServingHTTP()
                || isServingGIT()
                || isServingSSH();
    }
@@ -282,7 +283,19 @@
     */
    @Override
    public boolean isServingHTTP() {
        return settings.getBoolean(Keys.git.enableGitServlet, true);
        return settings.getBoolean(Keys.git.enableGitServlet, true)
                && ((gitblit.getStatus().isGO && settings.getInteger(Keys.server.httpPort, 0) > 0)
                        || !gitblit.getStatus().isGO);
    }
    /* (non-Javadoc)
     * @see com.gitblit.manager.IServicesManager#isServingHTTPS()
     */
    @Override
    public boolean isServingHTTPS() {
        return settings.getBoolean(Keys.git.enableGitServlet, true)
                && ((gitblit.getStatus().isGO && settings.getInteger(Keys.server.httpsPort, 0) > 0)
                        || !gitblit.getStatus().isGO);
    }
    /* (non-Javadoc)
@@ -330,7 +343,8 @@
        }
    }
    protected boolean acceptPush(Transport byTransport) {
    @Override
    public boolean acceptsPush(Transport byTransport) {
        if (byTransport == null) {
            logger.info("Unknown transport, push rejected!");
            return false;
src/main/java/com/gitblit/wicket/pages/UserPage.java
@@ -252,9 +252,11 @@
            availableTransports.add(Transport.SSH);
        }
        if (app().services().isServingHTTP()) {
            availableTransports.add(Transport.HTTPS);
            availableTransports.add(Transport.HTTP);
        }
        if (app().services().isServingHTTPS()) {
            availableTransports.add(Transport.HTTPS);
        }
        if (app().services().isServingGIT()) {
            availableTransports.add(Transport.GIT);
        }