api.rst
391 lines
| 10.2 KiB
| text/x-rst
|
RstLexer
r1446 | .. _api: | ||
API | |||
=== | |||
Starting from RhodeCode version 1.2 a simple API was implemented. | |||
r1500 | There's a single schema for calling all api methods. API is implemented | ||
Nicolas VINOT
|
r1592 | with JSON protocol both ways. An url to send API request in RhodeCode is | |
r1500 | <your_server>/_admin/api | ||
r1446 | |||
r1915 | API ACCESS FOR WEB VIEWS | ||
++++++++++++++++++++++++ | |||
API access can also be turned on for each web view in RhodeCode that is | |||
decorated with `@LoginRequired` decorator. To enable API access simple change | |||
the standard login decorator to `@LoginRequired(api_access=True)`. | |||
After this change, a rhodecode view can be accessed without login by adding a | |||
GET parameter `?api_key=<api_key>` to url. By default this is only | |||
enabled on RSS/ATOM feed views. | |||
API ACCESS | |||
++++++++++ | |||
r1446 | |||
r1794 | All clients are required to send JSON-RPC spec JSON data:: | ||
r1446 | |||
{ | |||
"api_key":"<api_key>", | |||
"method":"<method_name>", | |||
"args":{"<arg_key>":"<arg_val>"} | |||
} | |||
r1500 | Example call for autopulling remotes repos using curl:: | ||
curl https://server.com/_admin/api -X POST -H 'content-type:text/plain' --data-binary '{"api_key":"xe7cdb2v278e4evbdf5vs04v832v0efvcbcve4a3","method":"pull","args":{"repo":"CPython"}}' | |||
Nicolas VINOT
|
r1592 | Simply provide | |
r1500 | - *api_key* for access and permission validation. | ||
- *method* is name of method to call | |||
- *args* is an key:value list of arguments to pass to method | |||
Nicolas VINOT
|
r1592 | ||
r1446 | .. note:: | ||
Nicolas VINOT
|
r1592 | ||
api_key can be found in your user account page | |||
r1794 | RhodeCode API will return always a JSON-RPC response:: | ||
Nicolas VINOT
|
r1592 | ||
r1446 | { | ||
Nicolas VINOT
|
r1592 | "result": "<result>", | |
r1446 | "error": null | ||
} | |||
All responses from API will be `HTTP/1.0 200 OK`, if there's an error while | |||
Nicolas VINOT
|
r1592 | calling api *error* key from response will contain failure description | |
r1446 | and result will be null. | ||
API METHODS | |||
+++++++++++ | |||
Nicolas VINOT
|
r1592 | ||
r1446 | pull | ||
---- | |||
Nicolas VINOT
|
r1592 | Pulls given repo from remote location. Can be used to automatically keep | |
remote repos up to date. This command can be executed only using api_key | |||
r1500 | belonging to user with admin rights | ||
INPUT:: | |||
Nicolas VINOT
|
r1592 | api_key : "<api_key>" | |
method : "pull" | |||
args : { | |||
"repo" : "<repo_name>" | |||
} | |||
OUTPUT:: | |||
result : "Pulled from <repo_name>" | |||
error : null | |||
get_users | |||
--------- | |||
Lists all existing users. This command can be executed only using api_key | |||
belonging to user with admin rights. | |||
INPUT:: | |||
api_key : "<api_key>" | |||
method : "get_users" | |||
args : { } | |||
OUTPUT:: | |||
result: [ | |||
{ | |||
"id" : "<id>", | |||
"username" : "<username>", | |||
"firstname": "<firstname>", | |||
"lastname" : "<lastname>", | |||
"email" : "<email>", | |||
"active" : "<bool>", | |||
"admin" :Â "<bool>", | |||
"ldap" : "<ldap_dn>" | |||
}, | |||
… | |||
] | |||
error: null | |||
create_user | |||
----------- | |||
r1910 | Creates new user or updates current one if such user exists. This command can | ||
be executed only using api_key belonging to user with admin rights. | |||
Nicolas VINOT
|
r1592 | ||
INPUT:: | |||
api_key : "<api_key>" | |||
method : "create_user" | |||
args : { | |||
"username" : "<username>", | |||
"password" : "<password>", | |||
"firstname" : "<firstname>", | |||
"lastname" : "<lastname>", | |||
"email" : "<useremail>" | |||
"active" : "<bool> = True", | |||
"admin" : "<bool> = False", | |||
"ldap_dn" : "<ldap_dn> = None" | |||
} | |||
r1500 | |||
OUTPUT:: | |||
Nicolas VINOT
|
r1592 | result: { | |
"msg" : "created new user <username>" | |||
} | |||
error: null | |||
get_users_groups | |||
---------------- | |||
Lists all existing users groups. This command can be executed only using api_key | |||
belonging to user with admin rights. | |||
INPUT:: | |||
api_key : "<api_key>" | |||
method : "get_users_groups" | |||
args : { } | |||
OUTPUT:: | |||
result : [ | |||
{ | |||
"id" : "<id>", | |||
"name" : "<name>", | |||
"active": "<bool>", | |||
"members" : [ | |||
{ | |||
"id" : "<userid>", | |||
"username" : "<username>", | |||
"firstname": "<firstname>", | |||
"lastname" : "<lastname>", | |||
"email" : "<email>", | |||
"active" : "<bool>", | |||
"admin" :Â "<bool>", | |||
"ldap" : "<ldap_dn>" | |||
}, | |||
… | |||
] | |||
} | |||
] | |||
error : null | |||
get_users_group | |||
--------------- | |||
Gets an existing users group. This command can be executed only using api_key | |||
belonging to user with admin rights. | |||
INPUT:: | |||
api_key : "<api_key>" | |||
method : "get_users_group" | |||
args : { | |||
"group_name" : "<name>" | |||
} | |||
OUTPUT:: | |||
result : None if group not exist | |||
{ | |||
"id" : "<id>", | |||
"name" : "<name>", | |||
"active": "<bool>", | |||
"members" : [ | |||
{ "id" : "<userid>", | |||
"username" : "<username>", | |||
"firstname": "<firstname>", | |||
"lastname" : "<lastname>", | |||
"email" : "<email>", | |||
"active" : "<bool>", | |||
"admin" :Â "<bool>", | |||
"ldap" : "<ldap_dn>" | |||
}, | |||
… | |||
] | |||
} | |||
error : null | |||
r1500 | create_users_group | ||
------------------ | |||
Nicolas VINOT
|
r1592 | Creates new users group. This command can be executed only using api_key | |
r1500 | belonging to user with admin rights | ||
INPUT:: | |||
Nicolas VINOT
|
r1592 | api_key : "<api_key>" | |
method : "create_users_group" | |||
args: { | |||
"name": "<name>", | |||
"active":"<bool> = True" | |||
} | |||
OUTPUT:: | |||
result: { | |||
"id": "<newusersgroupid>", | |||
"msg": "created new users group <name>" | |||
} | |||
error: null | |||
r1794 | add_user_to_users_group | ||
----------------------- | |||
Nicolas VINOT
|
r1592 | ||
Adds a user to a users group. This command can be executed only using api_key | |||
belonging to user with admin rights | |||
INPUT:: | |||
api_key : "<api_key>" | |||
method : "add_user_users_group" | |||
args: { | |||
"group_name" : "<groupname>", | |||
"user_name" : "<username>" | |||
} | |||
OUTPUT:: | |||
result: { | |||
"id": "<newusersgroupmemberid>", | |||
"msg": "created new users group member" | |||
} | |||
error: null | |||
get_repos | |||
--------- | |||
Lists all existing repositories. This command can be executed only using api_key | |||
belonging to user with admin rights | |||
INPUT:: | |||
api_key : "<api_key>" | |||
method : "get_repos" | |||
args: { } | |||
r1500 | |||
OUTPUT:: | |||
Nicolas VINOT
|
r1592 | result: [ | |
{ | |||
"id" : "<id>", | |||
"name" : "<name>" | |||
"type" : "<type>", | |||
"description" : "<description>" | |||
}, | |||
… | |||
] | |||
error: null | |||
get_repo | |||
-------- | |||
Gets an existing repository. This command can be executed only using api_key | |||
belonging to user with admin rights | |||
INPUT:: | |||
api_key : "<api_key>" | |||
method : "get_repo" | |||
args: { | |||
"name" : "<name>" | |||
} | |||
OUTPUT:: | |||
result: None if repository not exist | |||
{ | |||
"id" : "<id>", | |||
"name" : "<name>" | |||
"type" : "<type>", | |||
"description" : "<description>", | |||
"members" : [ | |||
{ "id" : "<userid>", | |||
"username" : "<username>", | |||
"firstname": "<firstname>", | |||
"lastname" : "<lastname>", | |||
"email" : "<email>", | |||
"active" : "<bool>", | |||
"admin" :Â "<bool>", | |||
"ldap" : "<ldap_dn>", | |||
r1794 | "permission" : "repository.(read|write|admin)" | ||
Nicolas VINOT
|
r1592 | }, | |
… | |||
{ | |||
"id" : "<usersgroupid>", | |||
"name" : "<usersgroupname>", | |||
"active": "<bool>", | |||
r1794 | "permission" : "repository.(read|write|admin)" | ||
Nicolas VINOT
|
r1592 | }, | |
… | |||
] | |||
} | |||
error: null | |||
create_repo | |||
----------- | |||
Creates a repository. This command can be executed only using api_key | |||
belonging to user with admin rights. | |||
If repository name contains "/", all needed repository groups will be created. | |||
For example "foo/bar/baz" will create groups "foo", "bar" (with "foo" as parent), | |||
and create "baz" repository with "bar" as group. | |||
INPUT:: | |||
api_key : "<api_key>" | |||
method : "create_repo" | |||
args: { | |||
"name" : "<name>", | |||
"owner_name" : "<ownername>", | |||
"description" : "<description> = ''", | |||
"repo_type" : "<type> = 'hg'", | |||
"private" : "<bool> = False" | |||
} | |||
OUTPUT:: | |||
result: None | |||
error: null | |||
add_user_to_repo | |||
---------------- | |||
Add a user to a repository. This command can be executed only using api_key | |||
belonging to user with admin rights. | |||
If "perm" is None, user will be removed from the repository. | |||
INPUT:: | |||
api_key : "<api_key>" | |||
method : "add_user_to_repo" | |||
args: { | |||
"repo_name" : "<reponame>", | |||
"user_name" : "<username>", | |||
r1794 | "perm" : "(None|repository.(read|write|admin))", | ||
Nicolas VINOT
|
r1592 | } | |
OUTPUT:: | |||
result: None | |||
error: null | |||
r1794 | |||
add_users_group_to_repo | |||
----------------------- | |||
Add a users group to a repository. This command can be executed only using | |||
api_key belonging to user with admin rights. If "perm" is None, group will | |||
be removed from the repository. | |||
INPUT:: | |||
api_key : "<api_key>" | |||
method : "add_users_group_to_repo" | |||
args: { | |||
"repo_name" : "<reponame>", | |||
"group_name" : "<groupname>", | |||
"perm" : "(None|repository.(read|write|admin))", | |||
} |