Guest User

aaa

a guest
Jan 10th, 2016
32
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 10.62 KB | None | 0 0
  1. <?php
  2.  
  3. require_once "../include/DbHandler.php";
  4. require_once "../include/PassHash.php";
  5. require ‘vendor/autoload.php’;
  6.  
  7. \Slim\Slim::registerAutoloader();
  8.  
  9. $app = new \Slim\Slim();
  10.  
  11. // User id from db - Global Variable
  12. $user_id = NULL;
  13.  
  14. /**
  15.  * Verifying required params posted or not
  16. */
  17. function verifyRequiredParams($required_fields) {
  18.     $error = false;
  19.     $error_fields = "";
  20.     $request_params = array();
  21.     $request_params = $_REQUEST;
  22.  
  23.     // Handling PUT request params
  24.  
  25.     if ($_SERVER["REQUEST_METHOD"] == "PUT") {
  26.         $app = \Slim\Slim::getInstance();
  27.         parse_str($app->request()->getBody(), $request_params);
  28.     }
  29.     foreach ($required_fields as $field) {
  30.         if (!isset($request_params[$field]) || strlen(trim($request_params[$field])) <= 0) {
  31.             $error = true;
  32.             $error_fields .= $field . ", ";
  33.         }
  34.     }
  35.  
  36.     if ($error) {
  37.         // Required field(s) are missing or empty
  38.         // echo error json and stop the app
  39.         $response = array();
  40.         $app = \Slim\Slim::getInstance();
  41.         $response["error"] = true;
  42.         $response["message"] = "Required field(s) " . substr($error_fields, 0, -2) . " is missing or empty";
  43.         echoRespnse(400, $response);
  44.         $app->stop();
  45.     }
  46. }
  47.  
  48. /**
  49.  * Validating email address
  50.  */
  51. function validateEmail($email) {
  52.     $app = \Slim\Slim::getInstance();
  53.     if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
  54.         $response["error"] = true;
  55.         $response["message"] = "Email address is not valid";
  56.         echoRespnse(400, $response);
  57.         $app->stop();
  58.     }
  59. }
  60.  
  61. /**
  62.  * Echoing json response to client
  63.  * @param String $status_code Http response code
  64.  * @param Int $response Json response
  65.  */
  66. function echoRespnse($status_code, $response) {
  67.     $app = \Slim\Slim::getInstance();
  68.     // Http response code
  69.     $app->status($status_code);
  70.  
  71.     // setting response content type to json
  72.     $app->contentType("application/json");
  73.  
  74.     echo json_encode($response);
  75. }
  76.  
  77. /**
  78.  * User Registration
  79.  * url - /register
  80.  * method - POST
  81.  * params - name, email, password
  82.  */
  83. $app->post("/register", function() use ($app) {
  84.             // check for required params
  85.             verifyRequiredParams(array("name", "email", "password"));
  86.  
  87.             $response = array();
  88.  
  89.             // reading post params
  90.             $name = $app->request->post("name");
  91.             $email = $app->request->post("email");
  92.             $password = $app->request->post("password");
  93.  
  94.             // validating email address
  95.             validateEmail($email);
  96.  
  97.             $db = new DbHandler();
  98.             $res = $db->createUser($name, $email, $password);
  99.  
  100.             if ($res == USER_CREATED_SUCCESSFULLY) {
  101.                 $response["error"] = false;
  102.                 $response["message"] = "You are successfully registered";
  103.                 echoRespnse(201, $response);
  104.             } else if ($res == USER_CREATE_FAILED) {
  105.                 $response["error"] = true;
  106.                 $response["message"] = "Oops! An error occurred while registereing";
  107.                 echoRespnse(200, $response);
  108.             } else if ($res == USER_ALREADY_EXISTED) {
  109.                 $response["error"] = true;
  110.                 $response["message"] = "Sorry, this email already existed";
  111.                 echoRespnse(200, $response);
  112.             }
  113.         });
  114. /**
  115.  * User Login
  116.  * url - /login
  117.  * method - POST
  118.  * params - email, password
  119.  */
  120. $app->post("/login", function() use ($app) {
  121.             // check for required params
  122.             verifyRequiredParams(array("email", "password"));
  123.  
  124.             // reading post params
  125.             $email = $app->request()->post("email");
  126.             $password = $app->request()->post("password");
  127.             $response = array();
  128.  
  129.             $db = new DbHandler();
  130.             // check for correct email and password
  131.             if ($db->checkLogin($email, $password)) {
  132.                 // get the user by email
  133.                 $user = $db->getUserByEmail($email);
  134.  
  135.                 if ($user != NULL) {
  136.                     $response["error"] = false;
  137.                     $response["name"] = $user["name"];
  138.                     $response["email"] = $user["email"];
  139.                     $response["apiKey"] = $user["api_key"];
  140.                     $response["createdAt"] = $user["created_at"];
  141.                 } else {
  142.                     // unknown error occurred
  143.                     $response["error"] = true;
  144.                     $response["message"] = "An error occurred. Please try again";
  145.                 }
  146.             } else {
  147.                 // user credentials are wrong
  148.                 $response["error"] = true;
  149.                 $response["message"] = "Login failed. Incorrect credentials";
  150.             }
  151.  
  152.             echoRespnse(200, $response);
  153.         });
  154. /**
  155.  * Adding Middle Layer to authenticate every request
  156.  * Checking if the request has valid api key in the "Authorization" header
  157.  */
  158. function authenticate(\Slim\Route $route) {
  159.     // Getting request headers
  160.     $headers = apache_request_headers();
  161.     $response = array();
  162.     $app = \Slim\Slim::getInstance();
  163.  
  164.     // Verifying Authorization Header
  165.     if (isset($headers["Authorization"])) {
  166.         $db = new DbHandler();
  167.  
  168.         // get the api key
  169.         $api_key = $headers["Authorization"];
  170.         // validating api key
  171.         if (!$db->isValidApiKey($api_key)) {
  172.             // api key is not present in users table
  173.             $response["error"] = true;
  174.             $response["message"] = "Access Denied. Invalid Api key";
  175.             echoRespnse(401, $response);
  176.             $app->stop();
  177.         } else {
  178.             global $user_id;
  179.             // get user primary key id
  180.             $user = $db->getUserId($api_key);
  181.             if ($user != NULL)
  182.                 $user_id = $user["id"];
  183.         }
  184.     } else {
  185.         // api key is missing in header
  186.         $response["error"] = true;
  187.         $response["message"] = "Api key is misssing";
  188.         echoRespnse(400, $response);
  189.         $app->stop();
  190.     }
  191. }
  192.  
  193. /**
  194.  * Creating new task in db
  195.  * method POST
  196.  * params - name
  197.  * url - /tasks/
  198.  */
  199. $app->post("/tasks", "authenticate", function() use ($app) {
  200.             // check for required params
  201.             verifyRequiredParams(array("task"));
  202.  
  203.             $response = array();
  204.             $task = $app->request->post("task");
  205.  
  206.             global $user_id;
  207.             $db = new DbHandler();
  208.  
  209.             // creating new task
  210.             $task_id = $db->createTask($user_id, $task);
  211.  
  212.             if ($task_id != NULL) {
  213.                 $response["error"] = false;
  214.                 $response["message"] = "Task created successfully";
  215.                 $response["task_id"] = $task_id;
  216.             } else {
  217.                 $response["error"] = true;
  218.                 $response["message"] = "Failed to create task. Please try again";
  219.             }
  220.             echoRespnse(201, $response);
  221.         });
  222.  
  223. /**
  224.  * Listing all tasks of particual user
  225.  * method GET
  226.  * url /tasks          
  227.  */
  228. $app->get("/tasks", "authenticate", function() {
  229.             global $user_id;
  230.             $response = array();
  231.             $db = new DbHandler();
  232.  
  233.             // fetching all user tasks
  234.             $result = $db->getAllUserTasks($user_id);
  235.  
  236.             $response["error"] = false;
  237.             $response["tasks"] = array();
  238.  
  239.             // looping through result and preparing tasks array
  240.             while ($task = $result->fetch_assoc()) {
  241.                 $tmp = array();
  242.                 $tmp["id"] = $task["id"];
  243.                 $tmp["task"] = $task["task"];
  244.                 $tmp["status"] = $task["status"];
  245.                 $tmp["createdAt"] = $task["created_at"];
  246.                 array_push($response["tasks"], $tmp);
  247.             }
  248.  
  249.             echoRespnse(200, $response);
  250.         });
  251.  
  252. /**
  253.  * Listing single task of particual user
  254.  * method GET
  255.  * url /tasks/:id
  256.  * Will return 404 if the task doesn"t belongs to user
  257.  */
  258. $app->get("/tasks/:id", "authenticate", function($task_id) {
  259.             global $user_id;
  260.             $response = array();
  261.             $db = new DbHandler();
  262.  
  263.             // fetch task
  264.             $result = $db->getTask($task_id, $user_id);
  265.  
  266.             if ($result != NULL) {
  267.                 $response["error"] = false;
  268.                 $response["id"] = $result["id"];
  269.                 $response["task"] = $result["task"];
  270.                 $response["status"] = $result["status"];
  271.                 $response["createdAt"] = $result["created_at"];
  272.                 echoRespnse(200, $response);
  273.             } else {
  274.                 $response["error"] = true;
  275.                 $response["message"] = "The requested resource doesn"t exists";
  276.                echoRespnse(404, $response);
  277.            }
  278.        });
  279.  
  280. /**
  281. * Updating existing task
  282. * method PUT
  283. * params task, status
  284. * url - /tasks/:id
  285. */
  286. $app->put("/tasks/:id", "authenticate", function($task_id) use($app) {
  287.            // check for required params
  288.            verifyRequiredParams(array("task", "status"));
  289.  
  290.            global $user_id;            
  291.            $task = $app->request->put("task");
  292.            $status = $app->request->put("status");
  293.  
  294.            $db = new DbHandler();
  295.            $response = array();
  296.  
  297.            // updating task
  298.            $result = $db->updateTask($user_id, $task_id, $task, $status);
  299.            if ($result) {
  300.                // task updated successfully
  301.                $response["error"] = false;
  302.                $response["message"] = "Task updated successfully";
  303.            } else {
  304.                // task failed to update
  305.                $response["error"] = true;
  306.                $response["message"] = "Task failed to update. Please try again!";
  307.            }
  308.            echoRespnse(200, $response);
  309.        });
  310.  
  311. /**
  312. * Deleting task. Users can delete only their tasks
  313. * method DELETE
  314. * url /tasks
  315. */
  316. $app->delete("/tasks/:id", "authenticate", function($task_id) use($app) {
  317.            global $user_id;
  318.  
  319.            $db = new DbHandler();
  320.            $response = array();
  321.            $result = $db->deleteTask($user_id, $task_id);
  322.            if ($result) {
  323.                // task deleted successfully
  324.                $response["error"] = false;
  325.                $response["message"] = "Task deleted succesfully";
  326.            } else {
  327.                // task failed to delete
  328.                $response["error"] = true;
  329.                $response["message"] = "Task failed to delete. Please try again!";
  330.            }
  331.            echoRespnse(200, $response);
  332.        });
  333.  
  334. $app->run();
  335.  
  336. ?>
Add Comment
Please, Sign In to add comment