From 9bdb91ea80119121791271819f2c1fbf07bf5591 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Thu, 03 Nov 2011 17:09:35 -0400 Subject: [PATCH] RSS search parameters. Include refs as categories in RSS entries. --- src/com/gitblit/RpcServlet.java | 54 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 49 insertions(+), 5 deletions(-) diff --git a/src/com/gitblit/RpcServlet.java b/src/com/gitblit/RpcServlet.java index 53628a0..068562e 100644 --- a/src/com/gitblit/RpcServlet.java +++ b/src/com/gitblit/RpcServlet.java @@ -27,11 +27,15 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.eclipse.jgit.lib.Repository; + import com.gitblit.Constants.RpcRequest; +import com.gitblit.models.RefModel; import com.gitblit.models.RepositoryModel; import com.gitblit.models.ServerSettings; import com.gitblit.models.UserModel; import com.gitblit.utils.HttpUtils; +import com.gitblit.utils.JGitUtils; import com.gitblit.utils.RpcUtils; /** @@ -64,9 +68,13 @@ logger.info(MessageFormat.format("Rpc {0} request from {1}", reqType, request.getRemoteAddr())); - boolean allowAdmin = GitBlit.getBoolean(Keys.web.enableRpcAdministration, false); - UserModel user = (UserModel) request.getUserPrincipal(); + + boolean allowManagement = user != null && user.canAdmin + && GitBlit.getBoolean(Keys.web.enableRpcManagement, false); + + boolean allowAdmin = user != null && user.canAdmin + && GitBlit.getBoolean(Keys.web.enableRpcAdministration, false); Object result = null; if (RpcRequest.LIST_REPOSITORIES.equals(reqType)) { @@ -86,6 +94,32 @@ repositories.put(url, model); } result = repositories; + } else if (RpcRequest.LIST_BRANCHES.equals(reqType)) { + // list all local branches in all repositories accessible to user + Map<String, List<String>> localBranches = new HashMap<String, List<String>>(); + List<RepositoryModel> models = GitBlit.self().getRepositoryModels(user); + for (RepositoryModel model : models) { + if (!model.hasCommits) { + // skip empty repository + continue; + } + // get local branches + Repository repository = GitBlit.self().getRepository(model.name); + List<RefModel> refs = JGitUtils.getLocalBranches(repository, false, -1); + if (model.showRemoteBranches) { + // add remote branches if repository displays them + refs.addAll(JGitUtils.getRemoteBranches(repository, false, -1)); + } + if (refs.size() > 0) { + List<String> branches = new ArrayList<String>(); + for (RefModel ref : refs) { + branches.add(ref.getName()); + } + localBranches.put(model.name, branches); + } + repository.close(); + } + result = localBranches; } else if (RpcRequest.LIST_USERS.equals(reqType)) { // list users List<String> names = GitBlit.self().getAllUsernames(); @@ -194,9 +228,19 @@ // return all settings result = settings; } else { - // return management settings only - String[] keys = { Keys.realm.minPasswordLength, Keys.realm.passwordStorage, - Keys.federation.sets }; + // anonymous users get a few settings to allow browser launching + List<String> keys = new ArrayList<String>(); + keys.add(Keys.web.siteName); + keys.add(Keys.web.mountParameters); + keys.add(Keys.web.syndicationEntries); + + if (allowManagement) { + // keys necessary for repository and/or user management + keys.add(Keys.realm.minPasswordLength); + keys.add(Keys.realm.passwordStorage); + keys.add(Keys.federation.sets); + } + // build the settings ServerSettings managementSettings = new ServerSettings(); for (String key : keys) { managementSettings.add(settings.get(key)); -- Gitblit v1.9.1