From df75fa3a0961fc6a539209d5f13788d64b109a34 Mon Sep 17 00:00:00 2001
From: Florian Zschocke <florian.zschocke@cycos.com>
Date: Mon, 26 Aug 2013 06:30:53 -0400
Subject: [PATCH] Add new configuration setting 'git.userRepositoryPrefix'.

---
 src/main/java/com/gitblit/RpcServlet.java |   28 ++++++++++++++++++++++++++--
 1 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/gitblit/RpcServlet.java b/src/main/java/com/gitblit/RpcServlet.java
index f6368dd..89df473 100644
--- a/src/main/java/com/gitblit/RpcServlet.java
+++ b/src/main/java/com/gitblit/RpcServlet.java
@@ -30,15 +30,17 @@
 import org.eclipse.jgit.lib.Repository;
 
 import com.gitblit.Constants.RpcRequest;
-import com.gitblit.models.RegistrantAccessPermission;
 import com.gitblit.models.RefModel;
+import com.gitblit.models.RegistrantAccessPermission;
 import com.gitblit.models.RepositoryModel;
 import com.gitblit.models.ServerSettings;
 import com.gitblit.models.TeamModel;
 import com.gitblit.models.UserModel;
+import com.gitblit.utils.DeepCopier;
 import com.gitblit.utils.HttpUtils;
 import com.gitblit.utils.JGitUtils;
 import com.gitblit.utils.RpcUtils;
+import com.gitblit.utils.StringUtils;
 
 /**
  * Handles remote procedure calls.
@@ -50,7 +52,7 @@
 
 	private static final long serialVersionUID = 1L;
 
-	public static final int PROTOCOL_VERSION = 5;
+	public static final int PROTOCOL_VERSION = 6;
 
 	public RpcServlet() {
 		super();
@@ -132,6 +134,28 @@
 				repository.close();
 			}
 			result = localBranches;
+		} else if (RpcRequest.GET_USER.equals(reqType)) {
+			if (StringUtils.isEmpty(objectName)) {
+				if (UserModel.ANONYMOUS.equals(user)) {
+					response.sendError(forbiddenCode);
+				} else {
+					// return the current user, reset credentials
+					UserModel requestedUser = DeepCopier.copy(user);
+					result = requestedUser;
+				}
+			} else {
+				if (user.canAdmin() || objectName.equals(user.username)) {
+					// return the specified user
+					UserModel requestedUser = GitBlit.self().getUserModel(objectName);
+					if (requestedUser == null) {
+						response.setStatus(failureCode);
+					} else {
+						result = requestedUser;
+					}
+				} else {
+					response.sendError(forbiddenCode);
+				}
+			}
 		} else if (RpcRequest.LIST_USERS.equals(reqType)) {
 			// list users
 			List<String> names = GitBlit.self().getAllUsernames();

--
Gitblit v1.9.1