3636import com .gitblit .models .ServerSettings ;
3737import com .gitblit .models .TeamModel ;
3838import com .gitblit .models .UserModel ;
39+ import com .gitblit .utils .DeepCopier ;
3940import com .gitblit .utils .HttpUtils ;
4041import com .gitblit .utils .JGitUtils ;
4142import com .gitblit .utils .RpcUtils ;
43+ import com .gitblit .utils .StringUtils ;
4244
4345/**
4446 * Handles remote procedure calls.
@@ -50,7 +52,7 @@ public class RpcServlet extends JsonServlet {
5052
5153 private static final long serialVersionUID = 1L ;
5254
53- public static final int PROTOCOL_VERSION = 5 ;
55+ public static final int PROTOCOL_VERSION = 6 ;
5456
5557 public RpcServlet () {
5658 super ();
@@ -132,6 +134,28 @@ protected void processRequest(HttpServletRequest request, HttpServletResponse re
132134 repository .close ();
133135 }
134136 result = localBranches ;
137+ } else if (RpcRequest .GET_USER .equals (reqType )) {
138+ if (StringUtils .isEmpty (objectName )) {
139+ if (UserModel .ANONYMOUS .equals (user )) {
140+ response .sendError (forbiddenCode );
141+ } else {
142+ // return the current user, reset credentials
143+ UserModel requestedUser = DeepCopier .copy (user );
144+ result = requestedUser ;
145+ }
146+ } else {
147+ if (user .canAdmin () || objectName .equals (user .username )) {
148+ // return the specified user
149+ UserModel requestedUser = GitBlit .self ().getUserModel (objectName );
150+ if (requestedUser == null ) {
151+ response .setStatus (failureCode );
152+ } else {
153+ result = requestedUser ;
154+ }
155+ } else {
156+ response .sendError (forbiddenCode );
157+ }
158+ }
135159 } else if (RpcRequest .LIST_USERS .equals (reqType )) {
136160 // list users
137161 List <String > names = GitBlit .self ().getAllUsernames ();
0 commit comments