users/{userid} (PUT)
Overview
Modify an existing user
- REST Method: PUT
- Method Access: public
Uri Parameters
Name | Type | Description |
userid | string | either an integer user ID, "current", or "=" followed by a double uri-encoded user name |
Query Parameters
Name | Type | Description |
authpassword | string? | Password to use for verification with external authentication service |
authusername | string? | Username to use for verification with external authentication service |
authenticate | bool? | Force authentication for request (default: false) |
Return Codes
Name | Value | Description |
OK | 200 | The request completed successfully |
Bad Request | 400 | Invalid input parameter or request body |
Forbidden | 403 | Administrator access or account owner is required |
Not Found | 404 | Requested user could not be found |
Conflict | 409 | Username conflicts with an existing username |
Message Format
Input:
<user> <username>{text}</username> <email>{text}</email> <fullname>{text}</fullname> <status>{active|inactive}</status> <service.authentication id="{int}" /> <permissions.user> <role>{text}</role> </permissions.user> </user>
Output:
<user id="{int}" href="{uri}"> <nick>{text}</nick> <username>{text}</username> <email>{text}</email> <page.home id="{int}" href="{int}"> <title>{text}</title> <path>{text}</path> </page.home> <fullname>{text}</fullname> <status>{active|inactive}</status> <date.lastlogin>{date}</date.lastlogin> <service.authentication id="{int}" href="{uri]" /> <permissions.user> <operations mask="{int}">{text}</operations> <role id="{int}" href="{uri}">{text}</role> </permissions.user> <permissions.effective> <operations mask="{int}">{text}</operations> </permissions.effective> <groups count="{int}" href="{uri}"> <group id="{int}" href="{uri}"> <name>{text}</name> <service.authentication id="{int}" href="{uri}" /> <users count="{int}" href="{uri}" /> <permissions.group> <operations mask="{int}">{text}</operations> <role id="{int}" href="{uri}">{text}</role> </permissions.group> </group> ... </groups> </user>
Implementation Notes
Note that it is not possible to modify an existing user's authentication service.
Use PUT:users/{userid}/password to change the user password.
C# Sample: Modifying a User
The following code example modifies "newuser1":
Sample Code
Plug p = Plug.New("http://deki-hayes/@api/deki"); p.At("users", "authenticate").WithCredentials("admin", "password").Get(); XDoc usersDoc = new XDoc("user") .Elem("email", "newemail@mindtouch.com") .Elem("fullname", "new full name") .Start("permissions.user") .Elem("role", "Viewer") .End(); p.At("users", "=newuser1").Put(usersDoc);
Sample Response from executing Code
<user id="6" href="http://deki-hayes/@api/deki/users/6"> <nick>newuser1</nick> <username>newuser1</username> <email>newemail@mindtouch.com</email> <fullname>new full name</fullname> <status>active</status> <date.lastlogin>2007-09-06T00:56:51Z</date.lastlogin> <service.authentication id="1" href="http://deki-hayes/@api/deki/site/services/1" /> <permissions.user> <operations mask="15">LOGIN,BROWSE,READ,SUBSCRIBE</operations> <role id="3" href="http://deki-hayes/@api/deki/site/roles/3">Viewer</role> </permissions.user> <permissions.effective> <operations mask="15">LOGIN,BROWSE,READ,SUBSCRIBE</operations> </permissions.effective> <groups /> </user>
Implementation notes
Add notes about requirements or config values.
Curl Sample: Modifying a User
The following command modifies an existing user (user ID = 1) with the user data in "user.xml".
Sample Code
curl -u admin:password -H "Content-Type: application/xml" -T user.xml -i http://mindtouch.address/@api/deki/users/1
Implementation notes
curl flags
- -u
- Basic HTTP authentication. Sends a username and password to server so it can verify whether a user is of privilege to perform specific operation.
- -H
- Adds a header or modifies an existing one. In this case, since an xml document is being sent, the content type must be set to "application/xml". The server will not accept the request otherwise.
- -T file
- Specifies a PUT command and the .xml file that contains the user data.
- -i
- Includes the HTTP response header in the output. Useful for debugging.
Permissions
- ADMIN permission is required to execute above command. Otherwise, a 403 HTTP response (Forbidden) will be returned.
Example
We want to play a prank on a user with user ID = 3. The following xml document contains the new information with which will modify the user.
modifyuser.xml
Content-Type: application/xml
<user> <username>Amanda Hug and Kiss</username> <email>moes@tavern.com</email> <fullname>Amanda Hug and Kiss</fullname> <status>active</status> </user>
Command Line
curl -u admin:password -H "Content-Type: application/xml" -T modifyuser.xml -i http://192.168.168.110/@api/deki/users/3
HTTP Response Headers
HTTP/1.1 200 OK Date: Tue, 12 Jan 2010 21:41:18 GMT Server: Dream-HTTPAPI/1.7.2.17433 X-Deki-Site: id="default" Content-Type: application/xml; charset=utf-8 Content-Length: 1554 Via: 1.1 dekiwiki
HTTP Response Body
Content-Type: application/xml
<?xml version="1.0"?> <user id="3" href="http://192.168.168.110/@api/deki/users/3"> <nick>Amanda Hug and Kiss</nick> <username>Amanda Hug and Kiss</username> <email>moes@tavern.com</email> <hash.email>71bb00a704247d31bef82ffd2cc37476</hash.email> <uri.gravatar>http://www.gravatar.com/avatar/71bb00a704247d31bef82ffd2cc37476</uri.gravatar> <date.created>2010-01-04T22:55:32Z</date.created> <fullname>Amanda Hug and Kiss</fullname> <status>active</status> <date.lastlogin>2010-01-04T22:55:31Z</date.lastlogin> <language/> <timezone/> <service.authentication id="1" href="http://192.168.168.110/@api/deki/site/services/1"/> <permissions.user> <operations mask="1343">LOGIN,BROWSE,READ,SUBSCRIBE,UPDATE,CREATE,DELETE,CHANGEPERMISSIONS</operations> <role id="4" href="http://192.168.168.110/@api/deki/site/roles/4">Contributor</role> </permissions.user> <permissions.effective> <operations mask="1343">LOGIN,BROWSE,READ,SUBSCRIBE,UPDATE,CREATE,DELETE,CHANGEPERMISSIONS</operations> </permissions.effective> <groups> <group id="1" href="http://192.168.168.110/@api/deki/groups/1"> <groupname>l33t group</groupname> <service.authentication id="1" href="http://192.168.168.110/@api/deki/site/services/1"/> <users count="3" href="http://192.168.168.110/@api/deki/groups/1/users"/> <permissions.group> <operations mask="1343">LOGIN,BROWSE,READ,SUBSCRIBE,UPDATE,CREATE,DELETE,CHANGEPERMISSIONS</operations> <role id="4" href="http://192.168.168.110/@api/deki/site/roles/4">Contributor</role> </permissions.group> </group> </groups> <properties href="http://192.168.168.110/@api/deki/users/3/properties"/> </user>