- updated Brazilian Portuguese translation | - updated Brazilian Portuguese translation | ||||
additions: | additions: | ||||
- Added optional browser-side page caching using Last-Modified and Cache-Control for the dashboard, activity, project, and several repository pages | - Added optional browser-side page caching using Last-Modified and Cache-Control for the dashboard, activity, project, and several repository pages | ||||
- Added a GET_USER request type for the RPC mechanism (issue-275) | |||||
dependencyChanges: ~ | dependencyChanges: ~ | ||||
settings: | settings: | ||||
- { name: 'web.pageCacheExpires', defaultValue: 0 } | - { name: 'web.pageCacheExpires', defaultValue: 0 } | ||||
- Rafael Cavazin | - Rafael Cavazin | ||||
- Tamás Papp | - Tamás Papp | ||||
- Florian Zschocke | - Florian Zschocke | ||||
- Amélie Benoit | |||||
} | } | ||||
# | # |
public static enum RpcRequest { | public static enum RpcRequest { | ||||
// Order is important here. anything above LIST_SETTINGS requires | // Order is important here. anything above LIST_SETTINGS requires | ||||
// administrator privileges and web.allowRpcManagement. | // administrator privileges and web.allowRpcManagement. | ||||
CLEAR_REPOSITORY_CACHE, GET_PROTOCOL, LIST_REPOSITORIES, LIST_BRANCHES, LIST_SETTINGS, | |||||
CLEAR_REPOSITORY_CACHE, GET_PROTOCOL, LIST_REPOSITORIES, LIST_BRANCHES, GET_USER, LIST_SETTINGS, | |||||
CREATE_REPOSITORY, EDIT_REPOSITORY, DELETE_REPOSITORY, | CREATE_REPOSITORY, EDIT_REPOSITORY, DELETE_REPOSITORY, | ||||
LIST_USERS, CREATE_USER, EDIT_USER, DELETE_USER, | LIST_USERS, CREATE_USER, EDIT_USER, DELETE_USER, | ||||
LIST_TEAMS, CREATE_TEAM, EDIT_TEAM, DELETE_TEAM, | LIST_TEAMS, CREATE_TEAM, EDIT_TEAM, DELETE_TEAM, |
import com.gitblit.models.ServerSettings; | import com.gitblit.models.ServerSettings; | ||||
import com.gitblit.models.TeamModel; | import com.gitblit.models.TeamModel; | ||||
import com.gitblit.models.UserModel; | import com.gitblit.models.UserModel; | ||||
import com.gitblit.utils.DeepCopier; | |||||
import com.gitblit.utils.HttpUtils; | import com.gitblit.utils.HttpUtils; | ||||
import com.gitblit.utils.JGitUtils; | import com.gitblit.utils.JGitUtils; | ||||
import com.gitblit.utils.RpcUtils; | import com.gitblit.utils.RpcUtils; | ||||
import com.gitblit.utils.StringUtils; | |||||
/** | /** | ||||
* Handles remote procedure calls. | * Handles remote procedure calls. | ||||
private static final long serialVersionUID = 1L; | private static final long serialVersionUID = 1L; | ||||
public static final int PROTOCOL_VERSION = 5; | |||||
public static final int PROTOCOL_VERSION = 6; | |||||
public RpcServlet() { | public RpcServlet() { | ||||
super(); | super(); | ||||
repository.close(); | repository.close(); | ||||
} | } | ||||
result = localBranches; | 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)) { | } else if (RpcRequest.LIST_USERS.equals(reqType)) { | ||||
// list users | // list users | ||||
List<String> names = GitBlit.self().getAllUsernames(); | List<String> names = GitBlit.self().getAllUsernames(); |
char[] password) throws IOException { | char[] password) throws IOException { | ||||
return doAction(RpcRequest.DELETE_USER, null, user, serverUrl, account, password); | return doAction(RpcRequest.DELETE_USER, null, user, serverUrl, account, password); | ||||
} | } | ||||
/** | |||||
* Tries to get the specified gitblit user account from the remote gitblit instance. | |||||
* If the username is null or empty, the current user is returned. | |||||
* | |||||
* @param username | |||||
* @param serverUrl | |||||
* @param account | |||||
* @param password | |||||
* @return a UserModel or null | |||||
* @throws IOException | |||||
*/ | |||||
public static UserModel getUser(String username, String serverUrl, String account, char[] password) | |||||
throws IOException { | |||||
String url = asLink(serverUrl, RpcRequest.GET_USER); | |||||
UserModel model = JsonUtils.retrieveJson(url, UserModel.class, account, password); | |||||
return model; | |||||
} | |||||
/** | /** | ||||
* Create a team on the Gitblit server. | * Create a team on the Gitblit server. |
<tr><td>Gitblit v0.9.0 - v1.0.0</td><td>3</td></tr> | <tr><td>Gitblit v0.9.0 - v1.0.0</td><td>3</td></tr> | ||||
<tr><td>Gitblit v1.1.0</td><td>4</td></tr> | <tr><td>Gitblit v1.1.0</td><td>4</td></tr> | ||||
<tr><td>Gitblit v1.2.0+</td><td>5</td></tr> | <tr><td>Gitblit v1.2.0+</td><td>5</td></tr> | ||||
<tr><td>Gitblit v1.3.1+</td><td>6</td></tr> | |||||
</tbody> | </tbody> | ||||
</table> | </table> | ||||
<tr><td>LIST_REPOSITORIES</td><td>-</td><td>-</td><td>1</td><td>-</td><td>Map<String, RepositoryModel></td></tr> | <tr><td>LIST_REPOSITORIES</td><td>-</td><td>-</td><td>1</td><td>-</td><td>Map<String, RepositoryModel></td></tr> | ||||
<tr><td>LIST_BRANCHES</td><td>-</td><td>-</td><td>1</td><td>-</td><td>Map<String, List<String>></td></tr> | <tr><td>LIST_BRANCHES</td><td>-</td><td>-</td><td>1</td><td>-</td><td>Map<String, List<String>></td></tr> | ||||
<tr><td>LIST_SETTINGS</td><td>-</td><td><em>-</em></td><td>1</td><td>-</td><td>ServerSettings (basic keys)</td></tr> | <tr><td>LIST_SETTINGS</td><td>-</td><td><em>-</em></td><td>1</td><td>-</td><td>ServerSettings (basic keys)</td></tr> | ||||
<tr><td>GET_USER</td><td>user name</td><td>-</td><td>6</td><td>-</td><td>UserModel</td></tr> | |||||
<tr><td colspan='6'><em>web.enableRpcManagement=true</em></td></tr> | <tr><td colspan='6'><em>web.enableRpcManagement=true</em></td></tr> | ||||
<tr><td>CREATE_REPOSITORY</td><td>repository name</td><td><em>admin</em></td><td>1</td><td>RepositoryModel</td><td>-</td></tr> | <tr><td>CREATE_REPOSITORY</td><td>repository name</td><td><em>admin</em></td><td>1</td><td>RepositoryModel</td><td>-</td></tr> | ||||
<tr><td>EDIT_REPOSITORY</td><td>repository name</td><td><em>admin</em></td><td>1</td><td>RepositoryModel</td><td>-</td></tr> | <tr><td>EDIT_REPOSITORY</td><td>repository name</td><td><em>admin</em></td><td>1</td><td>RepositoryModel</td><td>-</td></tr> |
import com.gitblit.Constants.AuthorizationControl; | import com.gitblit.Constants.AuthorizationControl; | ||||
import com.gitblit.Constants.PermissionType; | import com.gitblit.Constants.PermissionType; | ||||
import com.gitblit.Constants.RegistrantType; | import com.gitblit.Constants.RegistrantType; | ||||
import com.gitblit.GitBlitException.NotAllowedException; | |||||
import com.gitblit.GitBlitException.UnauthorizedException; | import com.gitblit.GitBlitException.UnauthorizedException; | ||||
import com.gitblit.Keys; | import com.gitblit.Keys; | ||||
import com.gitblit.RpcServlet; | import com.gitblit.RpcServlet; | ||||
list = RpcUtils.getUsers(url, "admin", "admin".toCharArray()); | list = RpcUtils.getUsers(url, "admin", "admin".toCharArray()); | ||||
assertTrue("User list is empty!", list.size() > 0); | assertTrue("User list is empty!", list.size() > 0); | ||||
} | } | ||||
@Test | |||||
public void testGetUser() throws IOException { | |||||
UserModel user = null; | |||||
try { | |||||
user = RpcUtils.getUser("admin", url, null, null); | |||||
} catch (NotAllowedException e) { | |||||
} | |||||
assertNull("Server allows anyone to get user!", user); | |||||
user = RpcUtils.getUser("admin", url, "admin", "admin".toCharArray()); | |||||
assertEquals("User is not the admin!", "admin", user.username); | |||||
assertTrue("User is not an administrator!", user.canAdmin()); | |||||
} | |||||
@Test | @Test | ||||
public void testListTeams() throws IOException { | public void testListTeams() throws IOException { |