## Remote Management, Administration and Integration *SINCE 0.7.0* Gitblit optionally allows a remote client to administer the Gitblit server. This client could be a Java-based tool or perhaps a tool written in another language. web.enableRpcServlet=true web.enableRpcManagement=false web.enableRpcAdministration=false **https** is strongly recommended because passwords are insecurely transmitted form your browser/rpc client using Basic authentication! The Gitblit JSON RPC mechanism, like the Gitblit JGit servlet, syndication/feed servlet, etc, supports request-based authentication. Making an *admin* request will trigger Gitblit's basic authentication mechanism. Listing of repositories, generally, will not trigger this authentication mechanism unless *web.authenticateViewPages=true*. That means its possible to allow anonymous enumeration of repositories that are not *view restricted* or *clone restricted*. Of course, if credentials are provided then all private repositories that are available to the user account will be enumerated in the JSON response. ### Gitblit Manager [Gitblit Manager](http://code.google.com/p/gitblit/downloads/detail?name=%MANAGER%) is an example Java/Swing application that allows remote management (repository and user objects) and administration (server settings) of a Gitblit server. This application uses a combination of RSS feeds and the JSON RPC interface, both of which are part of the [Gitblit API](http://code.google.com/p/gitblit/downloads/detail?name=%API%) library, to present live information from a Gitblit server. Some JSON RPC methods from the utility class `com.gitblit.utils.RpcUtils` are not currently used by the Gitblit Manager. **NOTE:** Gitblit Manager stores your login credentials **INSECURELY** in homedir/.gitblit/config. ### Eclipse/EGit "Import from Gitblit" Feature (Planning) One obvious goal of a Gitblit RPC mechanism would be to have an Eclipse/EGit Feature that allows authentication and enumeration of Gitblit repositories from the Eclipse *Import...* menu. Batch cloning would be supported and delegated to EGit. This particular project should not be difficult as the only external dependency for `com.gitblit.utils.RpcUtils` is [google-gson](http://google-gson.googlecode.com) which is already a dependency of the EGit/GitHub Mylyn feature. One proposal from the EGit team is to define a common JSON RPC method for enumeration of repositories which can be implemented by Git hosts. The EGit team would then implement the UI and the client-side enumeration code. This idea was raised as part of this [feature request for EGit](https://bugs.eclipse.org/bugs/show_bug.cgi?id=361251). Currently this project is in the planning stage. ## RSS Query Interface At present, Gitblit does not yet support retrieving Git objects (commits, etc) via the JSON RPC mechanism. However, the repository/branch RSS feeds can be used to extract log/history information from a repository branch. The Gitblit API includes methods for retrieving and interpreting RSS feeds. The Gitblit Manager uses these methods to allow branch activity monitoring and repository searching.
url parameter | default | description |
---|---|---|
standard query | ||
repository | required | repository name is part of the url (see examples below) |
h= | optional default: HEAD | starting branch, ref, or commit id |
l= | optional default: web.syndicationEntries | maximum return count |
pg= | optional default: 0 | page number for paging (offset into history = pagenumber*maximum return count) |
search query | ||
s= | required | search string |
st= | optional default: COMMIT | search type |
Release | Protocol Version |
---|---|
Gitblit v0.7.0 | 1 (inferred version) |
Gitblit v0.8.0 | 2 |
Gitblit v0.9.0 | 3 |
url parameters | required user permission | protocol version | json | ||
---|---|---|---|---|---|
req= | name= | post body | response body | ||
web.enableRpcServlet=true | |||||
GET_PROTOCOL | - | - | 2 | - | Integer |
LIST_REPOSITORIES | - | - | 1 | - | Map<String, RepositoryModel> |
LIST_BRANCHES | - | - | 1 | - | Map<String, List<String>> |
LIST_SETTINGS | - | - | 1 | - | ServerSettings (basic keys) |
web.enableRpcManagement=true | |||||
CREATE_REPOSITORY | repository name | admin | 1 | RepositoryModel | - |
EDIT_REPOSITORY | repository name | admin | 1 | RepositoryModel | - |
DELETE_REPOSITORY | repository name | admin | 1 | - | - |
LIST_USERS | - | admin | 1 | - | List<UserModel> |
CREATE_USER | user name | admin | 1 | UserModel | - |
EDIT_USER | user name | admin | 1 | UserModel | - |
DELETE_USER | user name | admin | 1 | - | - |
LIST_TEAMS | - | admin | 2 | - | List<TeamModel> |
CREATE_TEAM | team name | admin | 2 | TeamModel | - |
EDIT_TEAM | team name | admin | 2 | TeamModel | - |
DELETE_TEAM | team name | admin | 2 | - | - |
LIST_REPOSITORY_MEMBERS | repository name | admin | 1 | - | List<String> |
SET_REPOSITORY_MEMBERS | repository name | admin | 1 | List<String> | - |
LIST_REPOSITORY_TEAMS | repository name | admin | 2 | - | List<String> |
SET_REPOSITORY_TEAMS | repository name | admin | 2 | List<String> | - |
LIST_SETTINGS | - | admin | 1 | - | ServerSettings (management keys) |
web.enableRpcAdministration=true | |||||
LIST_FEDERATION_REGISTRATIONS | - | admin | 1 | - | List<FederationModel> |
LIST_FEDERATION_RESULTS | - | admin | 1 | - | List<FederationModel> |
LIST_FEDERATION_PROPOSALS | - | admin | 1 | - | List<FederationProposal> |
LIST_FEDERATION_SETS | - | admin | 1 | - | List<FederationSet> |
LIST_SETTINGS | - | admin | 1 | - | ServerSettings (all keys) |
EDIT_SETTINGS | - | admin | 1 | Map<String, String> | - |
LIST_STATUS | - | admin | 1 | - | ServerStatus (see example below) |
code | name | description |
---|---|---|
200 | success | Gitblit processed the request successfully |
401 | unauthorized | Gitblit requires user credentials to process the request |
403 | forbidden | Gitblit can not process the request for the supplied credentials |
405 | method not allowed | Gitblit has disallowed the processing the specified request |
500 | server error | Gitblit failed to process the request likely because the input object created a conflict |
501 | unknown request | Gitblit does not recognize the RPC request type |
{ "https://localhost/git/libraries/xmlapache.git": { "name": "libraries/xmlapache.git", "description": "apache xmlrpc client and server", "owner": "admin", "lastChange": "2010-01-28T22:12:06Z", "hasCommits": true, "showRemoteBranches": false, "useTickets": false, "useDocs": false, "accessRestriction": "VIEW", "isFrozen": false, "showReadme": false, "federationStrategy": "FEDERATE_THIS", "federationSets": [ "libraries" ], "isFederated": false, "skipSizeCalculation": false, "skipSummaryMetrics": false, "size": "102 KB" }, "https://localhost/git/libraries/smack.git": { "name": "libraries/smack.git", "description": "smack xmpp client", "owner": "admin", "lastChange": "2009-01-28T18:38:14Z", "hasCommits": true, "showRemoteBranches": false, "useTickets": false, "useDocs": false, "accessRestriction": "VIEW", "isFrozen": false, "showReadme": false, "federationStrategy": "FEDERATE_THIS", "federationSets": [], "isFederated": false, "skipSizeCalculation": false, "skipSummaryMetrics": false, "size": "4.8 MB" } }### Example: EDIT_REPOSITORY (rename) The original repository name is specified in the *name* url parameter. The new name is set within the JSON object. **url**: https://localhost/rpc?req=EDIT_REPOSITORY&name=libraries/xmlapache.git **post body**: RepositoryModel
{ "name": "libraries/xmlapache-renamed.git", "description": "apache xmlrpc client and server", "owner": "admin", "lastChange": "2010-01-28T22:12:06Z", "hasCommits": true, "showRemoteBranches": false, "useTickets": false, "useDocs": false, "accessRestriction": "VIEW", "isFrozen": false, "showReadme": false, "federationStrategy": "FEDERATE_THIS", "federationSets": [ "libraries" ], "isFederated": false, "skipSizeCalculation": false, "skipSummaryMetrics": false, "size": "102 KB" }### Example: LIST_USERS **url**: https://localhost/rpc?req=LIST_USERS **response body**: List<UserModel>
[ { "username": "admin", "password": "admin", "canAdmin": true, "excludeFromFederation": true, "repositories": [] }, { "username": "test", "password": "test", "canAdmin": false, "excludeFromFederation": false, "repositories": [ "libraries/xmlapache.git", "libraries/smack.git" ] } ]### Example: LIST_SETTINGS **url**: https://localhost/rpc?req=LIST_SETTINGS **response body**: ServerSettings
{ "settings": { "web.siteName": { "name": "web.siteName", "currentValue": "", "defaultValue": "", "description": "Gitblit Web Settings\nIf blank Gitblit is displayed.", "since": "0.5.0", "caseSensitive": false, "restartRequired": false, "spaceDelimited": false }, "web.summaryCommitCount": { "name": "web.summaryCommitCount", "currentValue": "16", "defaultValue": "16", "description": "The number of commits to display on the summary page\nValue must exceed 0 else default of 16 is used", "since": "0.5.0", "caseSensitive": false, "restartRequired": false, "spaceDelimited": false } } }### Example: LIST_STATUS **url**: https://localhost/rpc?req=LIST_STATUS **response body**: ServerStatus
{ "bootDate": "2011-10-22T12:13:00Z", "version": "0.7.0-SNAPSHOT", "releaseDate": "PENDING", "isGO": true, "systemProperties": { "file.encoding": "Cp1252", "java.home": "C:\\Program Files\\Java\\jdk1.6.0_26\\jre", "java.io.tmpdir": "C:\\Users\\JAMESM~1\\AppData\\Local\\Temp\\", "java.runtime.name": "Java(TM) SE Runtime Environment", "java.runtime.version": "1.6.0_26-b03", "java.vendor": "Sun Microsystems Inc.", "java.version": "1.6.0_26", "java.vm.info": "mixed mode", "java.vm.name": "Java HotSpot(TM) 64-Bit Server VM", "java.vm.vendor": "Sun Microsystems Inc.", "java.vm.version": "20.1-b02", "os.arch": "amd64", "os.name": "Windows 7", "os.version": "6.1" }, "heapAllocated": 128057344, "heapFree": 120399168, "heapSize": 1899560960, "servletContainer": "jetty/7.4.3.v20110701" }