users (POST)
Overview
Add or modify a user
- REST Method: POST
 - Method Access: public
 
Query Parameters
| Name | Type | Description | 
| authenticate | bool? | Force authentication for request (default: false) | 
| authpassword | string? | Password to use for verification with external authentication service | 
| authusername | string? | Username to use for verification with external authentication service | 
| accountpassword | string? | Account password to set (default: do not set/change password) | 
Return Codes
| Name | Value | Description | 
| OK | 200 | The request completed successfully | 
| Bad Request | 400 | Invalid input parameter or request body | 
| Forbidden | 403 | Administrator access, apikey, 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 id="{int}">
    <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
If no user ID is specified, a new user is created. Otherwise, the existing user is updated.
Note that is not possible to create two users having the same username. It is also not possible to modify a username to one that already exists.
 
C# Code Sample: Create New User
The following code example creates "newuser1". This user has the Contributor role, uses the local authentication service, and has account password "mypassword"
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("username", "newuser1")
     .Elem("email", "newuser1@mindtouch.com")
     .Elem("fullname", "newuser1's full name")
     .Start("permissions.user")
         .Elem("role", "Contributor")
     .End();
p.At("users").With("accountpassword", "mypassword").Post(usersDoc); 
Sample Response from executing Code
<user id="3" href="http://deki-hayes/@api/deki/users/3">
   <nick>newuser1</nick>
      <username>newuser1</username>
      <email>newuser1@mindtouch.com</email>
      <fullname>newuser1's 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="1343">LOGIN,BROWSE,READ,SUBSCRIBE,UPDATE,CREATE,DELETE,CHANGEPERMISSIONS</operations>
         <role id="4" href="http://deki-hayes/@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 />
  </user> 
Curl Code Sample: Create New User
The following command line creates a new user according to the XML data in "createuser.xml".
Sample Code
curl -u admin:password -H "Content-Type: application/xml" -d @createuser.xml -i http://mindtouch.address/@api/deki/users
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.
 - -d @file
 - Specifies 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
The Riddler has invaded Mindtouch! The following will demonstrate how to create a Batman user to administer swift justice. Below is an XML document with all the necessary data to create the user.
batman.xml
Content-Type: application/xml
<user>
    <username>Batman</username> 
    <email>alfred@batcave.com</email> 
    <fullname>I am the Batman</fullname> 
    <status>active</status> 
</user>
Command Line
curl -u admin:password -H "Content-Type: application/xml" -d @batman.xml -i http://192.168.168.110/@api/deki/users
HTTP Response Headers
HTTP/1.1 200 OK Date: Wed, 06 Jan 2010 01:29:35 GMT Server: Dream-HTTPAPI/1.7.0.16080 X-Deki-Site: id="default" Content-Type: application/xml; charset=utf-8 Content-Length: 1246 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>Batman</nick>
  <username>Batman</username>
  <email>alfred@batcave.com</email>
  <hash.email>d46d8fa3b6c7af9b1794aa260b38a89e</hash.email>
  <uri.gravatar>http://www.gravatar.com/avatar/d46d8fa3b6c7af9b1794aa260b38a89e</uri.gravatar>
  <date.created>2010-01-04T22:55:32Z</date.created>
  <page.home id="41" href="http://192.168.168.110/@api/deki/pages/41?redirects=0">
    <uri.ui>http://192.168.168.110/User:Batman</uri.ui>
    <title>User:Batman</title>
    <path>User:Batman</path>
    <namespace>user</namespace>
  </page.home>
  <fullname>I am the Batman</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/>
  <properties href="http://192.168.168.110/@api/deki/users/3/properties"/>
</user>
Notes
- Attempting to create a user of the same name will result in a 409 HTTP response (Conflict).
 

