[
  {
    "lines": [
      "> v3.0.0"
    ], 
    "host": "https://signpuddle.com/server", 
    "meta": "Generated from ApiTxt format (output/user.txt) using txt2json.py", 
    "root": "user", 
    "title": "SignPuddle 3 User API"
  }, 
  {
    "lines": [
      "+ Source: [ApiTxt format](../src/user.txt) and [JSON objects](../src/user.json)", 
      "+ Documents: [API Blueprint](../doc/user.md) and [Stand Alone HTML](../doc/user.htm)", 
      "+ Live Page: [API Interface](../api/user.html) and [JavaScript](../api/user.js)"
    ], 
    "group": "user", 
    "description": "SignPuddle 3 collections are organized by country and language codes"
  }, 
  {
    "route": "/user/who", 
    "name": "Who uses SignWriting?", 
    "description": "List of countries with size and activity."
  }, 
  {
    "description": "The available countries where signs are available.", 
    "method": "GET", 
    "dialog": [
      {
        "request": {
          "name": "user-who"
        }, 
        "responses": [
          {
            "status": 200, 
            "body": [
              "BR", 
              "US"
            ], 
            "type": "text/plain"
          }
        ]
      }
    ], 
    "name": "Retrieve country list"
  }, 
  {
    "route": "/user/pass", 
    "name": "User pass", 
    "description": "A string for accounting and validation"
  }, 
  {
    "code": [
      "  echo json_pretty(userPass());"
    ], 
    "method": "POST", 
    "dialog": [
      {
        "request": {
          "name": "user pass"
        }, 
        "responses": [
          {
            "status": 200, 
            "body": [
              "{\"pass\": \"90c19ce2076db097c75b3406e966a6b6\",\"ip\": \"192.168.254.2\"}"
            ], 
            "type": "text/plain"
          }
        ]
      }
    ], 
    "name": "String for accounting and validation"
  }, 
  {
    "code": [
      "  $data = $app->request->getbody();", 
      "  $data = json_decode($data,true);", 
      "  verifyPass($data['username'],$data['pass']);", 
      "  $app->response->setStatus(204);", 
      "  return;"
    ], 
    "method": "PUT", 
    "dialog": [
      {
        "request": {
          "body": [
            "{\"username\":\"anonymous\",\"pass\":\"af77...\"}"
          ], 
          "lines": [
            "+ Attributes", 
            "    + username: anonymous (string) - name of the user", 
            "    + pass: af77... (string) - pass for session validation"
          ], 
          "name": "user pass verify"
        }, 
        "responses": [
          {
            "status": 204
          }
        ]
      }
    ], 
    "name": "Check pass against user"
  }, 
  {
    "route": "/user/login", 
    "name": "User login", 
    "description": "Validation of user with validated password"
  }, 
  {
    "code": [
      "  $data = $app->request->getbody();", 
      "  $data = json_decode($data,true);", 
      "  $results = userVerify($data['username'],$data['pass'],$data['validated']);", 
      "  echo json_pretty($results);"
    ], 
    "method": "PUT", 
    "dialog": [
      {
        "request": {
          "body": [
            "{\"username\":\"anonymous\",\"pass\":\"af77...\",\"validated\":\"2793f...\"}"
          ], 
          "lines": [
            "+ Attributes", 
            "    + username: anonymous (string) - name of the user", 
            "    + pass: af77... (string) - pass for session validation", 
            "    + validated: 2793f... (string) - validated pass mixed with password"
          ], 
          "type": "application/json", 
          "name": "verify user"
        }, 
        "responses": [
          {
            "status": 200, 
            "lines": [
              "response text here"
            ], 
            "body": [
              "{\"user-profile\":\"\"}"
            ], 
            "type": "application/json"
          }
        ]
      }
    ], 
    "name": "Process log in to server"
  }, 
  {
    "route": "/user/{name}", 
    "name": "User profile", 
    "parameters": [
      {
        "description": "The name of a user", 
        "type": "string", 
        "name": "name", 
        "example": "slevinski"
      }
    ], 
    "description": "User details"
  }, 
  {
    "description": "Updates the profile of the user", 
    "code": [
      "$headers = getHeaders();", 
      "$pass = isset($headers['Pass'])?$headers['Pass']:'';", 
      "$user = userVerified($pass);", 
      "if ($user!=$name) haltForbidden($user . \" not \" . $name);", 
      "$data = $app->request->getbody();", 
      "$data = json_decode($data,true);", 
      "userProfileUpdate($name,$data);", 
      "$app->response->setStatus(204);", 
      "return;"
    ], 
    "method": "PUT", 
    "dialog": [
      {
        "request": {
          "headers": {
            "Pass": "5ffab638bde372b4fa63bb6f8484595d"
          }, 
          "name": "user-update"
        }, 
        "responses": [
          {
            "status": 204
          }
        ]
      }
    ], 
    "name": "Update user profile"
  }, 
  {
    "description": "Creates and returns a new user", 
    "method": "POST", 
    "dialog": [
      {
        "request": {
          "headers": {
            "Pass": "5ffab638bde372b4fa63bb6f8484595d"
          }, 
          "name": "user-add"
        }, 
        "responses": [
          {
            "status": 200, 
            "body": [
              "profile created and returned"
            ], 
            "type": "text/plain"
          }
        ]
      }
    ], 
    "name": "Register new user"
  }, 
  {
    "route": "/user/{name}/password", 
    "name": "User password", 
    "parameters": [
      {
        "description": "The name of a user", 
        "type": "string", 
        "name": "name", 
        "example": "slevinski"
      }
    ], 
    "description": "User password resource"
  }, 
  {
    "description": "Updates the password of the user", 
    "code": [
      "$headers = getHeaders();", 
      "$pass = isset($headers['Pass'])?$headers['Pass']:'';", 
      "$user = userVerified($pass,true);", 
      "if (!$user) haltForbidden();", 
      "$data = $app->request->getbody();", 
      "$data = json_decode($data,true);", 
      "$old = isset($data['old'])?$data['old']:'';", 
      "$new = isset($data['new'])?$data['new']:'';", 
      "if ($old && $new){", 
      "  userPasswordUpdate($name,$old,$new);", 
      "  $app->response->setStatus(204);", 
      "  return;", 
      "} else {", 
      "  haltBadRequest();", 
      "}"
    ], 
    "method": "POST", 
    "dialog": [
      {
        "request": {
          "body": [
            "{\"old\":\"149603e6c03516362a8da23f624db945\",\"new\":\"22af645d1859cb5ca6da0c484f1f37ea\"}"
          ], 
          "headers": {
            "Pass": "5ffab638bde372b4fa63bb6f8484595d"
          }, 
          "type": "plain/text", 
          "name": "user-update-password"
        }, 
        "responses": [
          {
            "status": 204
          }
        ]
      }
    ], 
    "name": "Update user password"
  }, 
  {
    "description": "Creates a temporary password for the user", 
    "code": [
      "$headers = getHeaders();", 
      "$pass = isset($headers['Pass'])?$headers['Pass']:'';", 
      "$user = userVerified($pass,true);", 
      "if (!$user) haltForbidden();", 
      "$data = $app->request->getbody();", 
      "$data = json_decode($data,true);", 
      "$user = isset($data['user'])?$data['user']:'';", 
      "if ($user){", 
      "  userPasswordReset($user);", 
      "  $app->response->setStatus(204);", 
      "  return;", 
      "} else {", 
      "  haltBadRequest();", 
      "}"
    ], 
    "method": "PUT", 
    "dialog": [
      {
        "request": {
          "headers": {
            "Pass": "5ffab638bde372b4fa63bb6f8484595d"
          }, 
          "type": "plain/text", 
          "name": "user-password-reset"
        }, 
        "responses": [
          {
            "status": 204
          }
        ]
      }
    ], 
    "name": "Reset user password"
  }, 
  {
    "route": "/user/email", 
    "name": "User email requests", 
    "description": "Requests for email of username or password reset"
  }, 
  {
    "description": "User email requests for username or passwords", 
    "code": [
      "$headers = getHeaders();", 
      "$pass = isset($headers['Pass'])?$headers['Pass']:'';", 
      "rightscheck(\"\",$pass,SP_ADMIN);", 
      "$users = userEmailRequests();", 
      "echo json_pretty($users);", 
      "return;"
    ], 
    "method": "GET", 
    "dialog": [
      {
        "request": {
          "headers": {
            "Pass": "5ffab638bde372b4fa63bb6f8484595d"
          }, 
          "name": "user-email-request"
        }, 
        "responses": [
          {
            "status": 200, 
            "body": [
              "[{\"name\":\"slevinski\",\"email\":\"slevinski@signwriting.org\",\"temp\":\"username\"}]"
            ], 
            "type": "text/plain"
          }
        ]
      }
    ], 
    "name": "List of user email requests"
  }, 
  {
    "route": "/user/email/{email}", 
    "name": "Username lookup", 
    "parameters": [
      {
        "description": "The email for a user", 
        "type": "string", 
        "name": "email", 
        "example": "slevinski@signwriting.org"
      }
    ], 
    "description": "Forgot username email lookup"
  }, 
  {
    "description": "Creates a request for email of username", 
    "code": [
      "$headers = getHeaders();", 
      "$pass = isset($headers['Pass'])?$headers['Pass']:'';", 
      "$user = userVerified($pass,true);", 
      "if (!$user) haltForbidden();", 
      "userNameLookup($email);", 
      "$app->response->setStatus(204);", 
      "return;"
    ], 
    "method": "PUT", 
    "dialog": [
      {
        "request": {
          "headers": {
            "Pass": "5ffab638bde372b4fa63bb6f8484595d"
          }, 
          "name": "user-name-lookup"
        }, 
        "responses": [
          {
            "status": 204
          }
        ]
      }
    ], 
    "name": "Lookup username"
  }
]
