James Moger
2013-10-24 b4f946d4c964612d5398fd6450f63618c327b7dd
Remove upload pack ref filtering

Change-Id: I7ffcbf00e70eea68803eb6c046d5ddca55503b8b
2 files modified
44 ■■■■■ changed files
releases.moxie 1 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/git/GitblitUploadPackFactory.java 43 ●●●●● patch | view | raw | blame | history
releases.moxie
@@ -22,6 +22,7 @@
    - Do not log passwords on failed authentication attempts (issue-316)
    - Updated default binary and Lucene ignore extensions
    - Change the WAR baseFolder context parameter to a JNDI env-entry to improve enterprise deployments
    - Removed internal Gitblit ref exclusions in the upload pack
    additions:
    - Added branch graph image servlet based on EGit's branch graph renderer (issue-194)
    - Added option to render Markdown commit messages (issue-203)
src/main/java/com/gitblit/git/GitblitUploadPackFactory.java
@@ -15,21 +15,14 @@
 */
package com.gitblit.git;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.transport.RefFilter;
import org.eclipse.jgit.transport.UploadPack;
import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
import org.eclipse.jgit.transport.resolver.UploadPackFactory;
import com.gitblit.Constants;
import com.gitblit.GitBlit;
import com.gitblit.models.UserModel;
@@ -63,45 +56,9 @@
            timeout = client.getDaemon().getTimeout();
        }
        RefFilter refFilter = new UserRefFilter(user);
        UploadPack up = new UploadPack(db);
        up.setRefFilter(refFilter);
        up.setTimeout(timeout);
        return up;
    }
    /**
     * Restricts advertisement of certain refs based on the permission of the
     * requesting user.
     */
    public static class UserRefFilter implements RefFilter {
        final UserModel user;
        public UserRefFilter(UserModel user) {
            this.user = user;
        }
        @Override
        public Map<String, Ref> filter(Map<String, Ref> refs) {
            if (user.canAdmin()) {
                // admins can see all refs
                return refs;
            }
            // normal users can not clone any gitblit refs
            // JGit's RefMap is custom and does not support iterator removal :(
            List<String> toRemove = new ArrayList<String>();
            for (String ref : refs.keySet()) {
                if (ref.startsWith(Constants.R_GITBLIT)) {
                    toRemove.add(ref);
                }
            }
            for (String ref : toRemove) {
                refs.remove(ref);
            }
            return refs;
        }
    }
}