Guest User

Untitled

a guest
Feb 13th, 2018
643
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 17.62 KB | None | 0 0
  1. <?php
  2. error_reporting(E_ALL);
  3. ini_set('display_errors', 1);
  4.  
  5. require_once 'vendor/autoload.php';
  6.  
  7. header('Access-Control-Allow-Origin: *');
  8. header("Access-Control-Allow-Credentials: true");
  9. header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
  10. header('Access-Control-Max-Age: 1000');
  11. header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token, Authorization, X-Requested-With');
  12.  
  13. header('Content-Type: application/json');
  14.  
  15. //session_set_cookie_params(3600,"/react");
  16. //@session_start();
  17.  
  18. use \Firebase\JWT\JWT;
  19.  
  20. JWT::$leeway = 3600*3; // $leeway in seconds
  21.  
  22. $privateKey = <<<EOD
  23. -----BEGIN RSA PRIVATE KEY-----
  24. MIIEowIBAAKCAQEAycKKa5tjn39sntykesOvPaG+9HviIggjcRBud3X4yOt9Rres
  25. bd3WRTrvaa2Qq7qIsNLnB2PCfCOlhGZq7xW9Qa75OlsMBQDCGvEgZ14NANyaQ8xQ
  26. XmPgttartomWhOp44IwFsnubnhc21/67/Y5ZFTIEPWkGWtkw0i6NMUUKErebMe8l
  27. 3kwJPZRwYkq6RW4eEn0k5TS5lRatm5EX+F9+5gKS5MGdgjkeItgDLuNHbJSYvCoN
  28. Jshtd4IVl7r1x9vEIOHU03O1K/SGeZCtnJeBuWrjP3z6Idom1rpWrvlS8U8QGazE
  29. Jgq2Rmft3SFBimxJOaGWk+PtLYhZJM/bq1if1QIDAQABAoIBACVOWXXoN5WIZDdD
  30. qQ4iHMcSn1JpjbipNJR1a1efcq8EDBgFYla2TCZk7VvnAfce+KNpe9p78bwugy5m
  31. GaO3q1T325GUwDY0m6+Lomg6lcDxCX07zCiH40crjnikHDbbfBpZCbyk6nNi63so
  32. 2O3bYlFu/CW2w7wMqOBURzsy/tfS0t0FGrwd/ht+FdGYA49inmtGp17T662HO4eT
  33. B2Fck7jmRdv1Q1XRI052EY9OAL096IGzJhPZnZbRdeOxnLPO/cjlXQbceNlPqx/p
  34. eczuJGwYF+RcOUz3ztDOf17uojh6DcN7Bnz6gq4Yaug9HXC292D6vvyCQkll4hSJ
  35. ZKL3/IkCgYEA+71xphNgUL5YCPJ/toy5EP66Y/UZLOzB6kgZqf5v68DGaD64bTjV
  36. 0YG7Gb6ZHNl6ybJoAhZMqCJB3WZWACf+qqPMB9TEN3Jal3Yr7bBhNprqNVNA4D30
  37. MnoNRoZOdDWmEXQNNgd173SzlaUcimtc45+ZCrWIEv20BQ4SnyRMxXMCgYEAzSyU
  38. UeyfMvOtGkAjIEvHpU97NW93uxpurtExvLlrTj6rm/Ye1g67tRUwr1tCAso5lkLD
  39. Gq0del7HBzMNfbpRw4KC5R2U69YRU4mnuVKsJUyhTC+qTKanIa8/1wwbBcq87qTC
  40. 9lpjQ/RTx4lvnhy6TQ4Ncr6vtECkTMU/bgnM85cCgYEAgy4yFc/NBeZaa7cqNA9a
  41. tO94Y3QqPU3WsuYFcZ8j5V8cROBCLLBMQ5Nt0zmOAgmWQZqVNlk2cvr/BYc5U3WD
  42. 8JnQTVhjM12EtZ6fv4mE7vaFC2qpyPCf2tndJx3/rfDy6+9knv3+R9yxZE6Y88yE
  43. qBzXnEwCb5sC/wtZStKYqt8CgYAU+OiUUzaWs7fPBh1REM3whOZYOPOpKXOE5RdL
  44. bjycu+U4xPiz8r+XK/pVAmQF+vvV8y8US/vGZWe8wagwYNo4vN96YgK19KTCwEBn
  45. vh6glWuraPfka+iLlelVpwQgHHAhiK/xFJ4u9QuXSuIg7FjSxYv0Xa+CIlVpD4SD
  46. T/cmMwKBgBdo6y3cqgCtBoByF5+t6x3xefChFilGno/ZY1XI36B+Fdj/HiHjQOD3
  47. Wx7qf6akZGCIfK+Hc4nz3PT1sO7ukmNpDuHqpYjbtucxIsTpUgwn1lTj3JbJWa32
  48. xlV3L6RdINGT3KbaMyUlnJhpJ+Rsd5lqQYCsgyyGr/yFy4VkqdiO
  49. -----END RSA PRIVATE KEY-----
  50. EOD;
  51.  
  52. $publicKey = <<<EOD
  53. -----BEGIN PUBLIC KEY-----
  54. MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAycKKa5tjn39sntykesOv
  55. PaG+9HviIggjcRBud3X4yOt9Rresbd3WRTrvaa2Qq7qIsNLnB2PCfCOlhGZq7xW9
  56. Qa75OlsMBQDCGvEgZ14NANyaQ8xQXmPgttartomWhOp44IwFsnubnhc21/67/Y5Z
  57. FTIEPWkGWtkw0i6NMUUKErebMe8l3kwJPZRwYkq6RW4eEn0k5TS5lRatm5EX+F9+
  58. 5gKS5MGdgjkeItgDLuNHbJSYvCoNJshtd4IVl7r1x9vEIOHU03O1K/SGeZCtnJeB
  59. uWrjP3z6Idom1rpWrvlS8U8QGazEJgq2Rmft3SFBimxJOaGWk+PtLYhZJM/bq1if
  60. 1QIDAQAB
  61. -----END PUBLIC KEY-----
  62. EOD;
  63.  
  64. $db = new mysqli(null, "bbrc", "vppCS4Q2cDMY5WDB", "bbrc");
  65. if (!$db || $db->connect_error) {
  66.     $ret['Error'] = true;
  67.     $ret['Message'] = $db->connect_error;
  68.     die(json_encode($ret));
  69. }
  70. $db->query("SET NAMES UTF8;") or die("couldnt set sql names");
  71. $db->query("SET FOREIGN_KEY_CHECKS = 0;") or die("couldnt set 65757");
  72.  
  73. function ensureLoggedIn() {
  74.     return TRUE;
  75. }
  76.  
  77. function generateToken($data) {
  78.     global $privateKey;
  79.  
  80.     $tokenId    = base64_encode(mcrypt_create_iv(32));
  81.     $issuedAt   = time();
  82.     $notBefore  = $issuedAt - 3601;             //Adding 10 seconds
  83.     $expire     = $notBefore + (3 * 24 * 60 * 60);            // 3 days
  84.     $serverName = "secure.bbrc.tv"; // Retrieve the server name from config file
  85.  
  86.     /*
  87.      * Create the token as an array
  88.      */
  89.     $token  = [
  90.         'iat'  => $issuedAt,         // Issued at: time when the token was generated
  91.         'jti'  => $tokenId,          // Json Token Id: an unique identifier for the token
  92.         'iss'  => $serverName,       // Issuer
  93.         'nbf'  => $notBefore,        // Not before
  94.         'exp'  => $expire,           // Expire
  95.         'data' => $data
  96.     ];
  97.     return [
  98.         "token" => JWT::encode($token, $privateKey, 'RS256'),
  99.         "data" => $token
  100.     ];
  101. }
  102.  
  103. // https://www.chriswiegman.com/2014/05/getting-correct-ip-address-php/
  104. function get_ip() {
  105.     //Just get the headers if we can or else use the SERVER global.
  106.     if ( function_exists( 'apache_request_headers' ) ) {
  107.         $headers = apache_request_headers();
  108.     } else {
  109.         $headers = $_SERVER;
  110.     }
  111.  
  112.     //Get the forwarded IP if it exists.
  113.     if ( array_key_exists( 'X-Forwarded-For', $headers ) && filter_var( $headers['X-Forwarded-For'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) ) {
  114.         $the_ip = $headers['X-Forwarded-For'];
  115.     } elseif ( array_key_exists( 'HTTP_X_FORWARDED_FOR', $headers ) && filter_var( $headers['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) ) {
  116.         $the_ip = $headers['HTTP_X_FORWARDED_FOR'];
  117.     } else {
  118.  
  119.         $the_ip = filter_var( $_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 );
  120.     }
  121.     return $the_ip;
  122. }
  123.  
  124. if (isset($_GET['login'])) {
  125.  
  126.     $query = "
  127.        INSERT INTO audit SET
  128.            users_id = 0,
  129.            tag = 'Login',
  130.            val1 = '" . $db->real_escape_string(date(DATE_RFC2822)) . "',
  131.            val2 = '" . $db->real_escape_string(get_ip()) . "',
  132.            val3 = '" . $db->real_escape_string(@gethostbyaddr(get_ip())) . "',
  133.            description = 'Login attempt'
  134.    ";
  135.     $db->query($query) or die("95839204553 : " . $db->error);
  136.  
  137.     $ret = array();
  138.     $ret['status'] = "";
  139.  
  140.     $data = json_decode(file_get_contents('php://input'), true);
  141.     if (isset($data['username']) && isset($data['password'])) {
  142.         $query = "
  143.          SELECT
  144.            *
  145.          FROM users
  146.          WHERE
  147.            username = '" . $db->real_escape_string($data['username']) . "'
  148.            AND password = '" . md5($data['password']) . "'
  149.          LIMIT 1
  150.        ";
  151.         $res = $db->query($query) or die("4354675464 : " . $db->error);
  152.         while ($row = $res->fetch_assoc()) {
  153.             $query = "
  154.                INSERT INTO audit SET
  155.                    users_id = 0,
  156.                    tag = 'Login',
  157.                    val1 = '" . $db->real_escape_string(date(DATE_RFC2822)) . "',
  158.                    val2 = '" . $db->real_escape_string(get_ip()) . "',
  159.                    val3 = '" . $db->real_escape_string(@gethostbyaddr(get_ip())) . "',
  160.                    description = 'Login successful'
  161.            ";
  162.             $db->query($query) or die("95839204553 : " . $db->error);
  163.  
  164.             $ret['token'] = generateToken([
  165.                 'userId'   => (int)$row['id'],
  166.                 'userName' => $row['username'],
  167.                 'admin' => false
  168.             ]);
  169.         }
  170.         if (strtolower($data['username']) == "admin" && $data['password'] == "gooey.1444") {
  171.             $query = "
  172.                INSERT INTO audit SET
  173.                    users_id = 0,
  174.                    tag = 'Login',
  175.                    val1 = '" . $db->real_escape_string(date(DATE_RFC2822)) . "',
  176.                    val2 = '" . $db->real_escape_string(get_ip()) . "',
  177.                    val3 = '" . $db->real_escape_string(@gethostbyaddr(get_ip())) . "',
  178.                    description = 'Admin login successful'
  179.            ";
  180.             $db->query($query) or die("95839204553 : " . $db->error);
  181.  
  182.             $ret['token'] = generateToken([
  183.                 'userId'   => 1234,
  184.                 'userName' => "admin",
  185.                 'admin' => true
  186.             ]);
  187.         }
  188.     }
  189.  
  190.     if (!isset($ret['token'])) {
  191.  
  192.  
  193.         $token = null;
  194.         //$headers = apache_request_headers();
  195.         //var_dump($headers,$_SERVER);
  196.         if (isset($_SERVER['HTTP_AUTHORIZATION'])) {
  197.             $query = "
  198.                INSERT INTO audit SET
  199.                    users_id = 0,
  200.                    tag = 'Login',
  201.                    val1 = '" . $db->real_escape_string(date(DATE_RFC2822)) . "',
  202.                    val2 = '" . $db->real_escape_string(get_ip()) . "',
  203.                    val3 = '" . $db->real_escape_string(@gethostbyaddr(get_ip())) . "',
  204.                    description = 'User has submitted a new login request'
  205.            ";
  206.                     $db->query($query) or die("95839204553 : " . $db->error);
  207.  
  208.           $matches = array();
  209.           preg_match('/Bearer (.*)/', $_SERVER['HTTP_AUTHORIZATION'], $matches);
  210.           if (isset($matches[1])) {
  211.             //die("1224");
  212.             $token = $matches[1];
  213.             //die("got auth! ;) " . $token);
  214.             $decoded = NULL;
  215.             try {
  216.  
  217.                 $decoded = JWT::decode($token, $publicKey, array('RS256'));
  218.                 if ($decoded !== NULL) {
  219.                     $ret['token'] = generateToken($decoded->data);
  220.                 }
  221.             } catch (\Exception $e) {
  222.                 //die("invalid token " . var_export($e, true));
  223.                 $query = "
  224.                    INSERT INTO audit SET
  225.                        users_id = 0,
  226.                        tag = 'Login',
  227.                        val1 = '" . $db->real_escape_string(date(DATE_RFC2822)) . "',
  228.                        val2 = '" . $db->real_escape_string(get_ip()) . "',
  229.                        val3 = '" . $db->real_escape_string(@gethostbyaddr(get_ip())) . "',
  230.                        description = 'Token invalid!'
  231.                ";
  232.                             $db->query($query) or die("95839204553 : " . $db->error);
  233.             }
  234.             //$ret['_debug_decoded'] = $decoded;
  235.             //$ret['_debug_token'] = $token;
  236.  
  237.             if ($decoded === NULL) {
  238.                 $query = "
  239.                    INSERT INTO audit SET
  240.                        users_id = 0,
  241.                        tag = 'Login',
  242.                        val1 = '" . $db->real_escape_string(date(DATE_RFC2822)) . "',
  243.                        val2 = '" . $db->real_escape_string(get_ip()) . "',
  244.                        val3 = '" . $db->real_escape_string(@gethostbyaddr(get_ip())) . "',
  245.                        description = 'No token'
  246.                ";
  247.                             $db->query($query) or die("95839204553 : " . $db->error);
  248.  
  249.                 //var_dump($decoded);die();
  250.             }
  251.           }
  252.         }
  253.         //die("got auth header " . $token);
  254.         //$decoded = JWT::decode($_REQUEST['Authorization'])
  255.     }
  256.  
  257.     if (isset($ret['token'])) {
  258.  
  259.         //ADD CONFIDENTIAL DATA TO $RET HERE, WE ARE AUTHORISED!
  260.         $query = "
  261.            INSERT INTO audit SET
  262.                users_id = 0,
  263.                tag = 'Login',
  264.                val1 = '" . $db->real_escape_string(date(DATE_RFC2822)) . "',
  265.                val2 = '" . $db->real_escape_string(get_ip()) . "',
  266.                val3 = '" . $db->real_escape_string(@gethostbyaddr(get_ip())) . "',
  267.                description = 'User loading data!'
  268.        ";
  269.             $db->query($query) or die("95839204553 : " . $db->error);
  270.  
  271.         $ret['persons'] = array();
  272.  
  273.         $query = "
  274.            SELECT * FROM persons
  275.        ";
  276.         $res = $db->query($query) or die("457666435454 : " . $db->error);
  277.         while ($row = $res->fetch_object()) {
  278.             array_push($ret['persons'], array(
  279.                 'name' => $row->name,
  280.                 'notes' => $row->notes,
  281.                 'image' => "api.php?image=" . $row->id
  282.             ));
  283.         }
  284.     }
  285.     echo json_encode($ret);
  286.     exit;
  287. }
  288.  
  289. if (isset($_GET['upload'])) {
  290.     $query = "
  291.        INSERT INTO audit SET
  292.            users_id = 0,
  293.            tag = 'Login',
  294.            val1 = '" . $db->real_escape_string(date(DATE_RFC2822)) . "',
  295.            val2 = '" . $db->real_escape_string(get_ip()) . "',
  296.            val3 = '" . $db->real_escape_string(@gethostbyaddr(get_ip())) . "',
  297.            description = 'Sync starting'
  298.    ";
  299.     $db->query($query) or die("95839204553 : " . $db->error);
  300.  
  301.     ensureLoggedIn("Admin");
  302.     global $db;
  303.  
  304.     if ($_POST['_user'][0] !== "1" || $_POST['_pass'][0] !== "2") die("-ERR invalid credentials " . var_dump($_FILES,$_POST));
  305.     //die(var_dump($_FILES,$_POST));
  306.  
  307.     $ret = "";
  308.     $ret2 = "";
  309.  
  310.     $db->begin_transaction();
  311.  
  312.     $query = "
  313.        DELETE FROM persons
  314.    ";
  315.     $db->query($query) or die("34634577 : " . $db->error);
  316.  
  317.     $i = count($_POST['names']);
  318.     $i2 = count($_POST['notes']);
  319.     $i3 = count($_FILES['image']['tmp_name']);
  320.     if ($i !== $i2) die("length of names not equal to length of notes " . var_export($_POST, true) . var_export($_FILES, true));
  321.     if ($i !== $i3) die("length of names not equal to length of files " . var_export($_POST, true) . var_export($_FILES, true));
  322.     if ($i2 !== $i3) die("length of notes not equal to length of files " . var_export($_POST, true) . var_export($_FILES, true));
  323.     for ($c = 0; $c < $i; $c++) {
  324.         $f = file_get_contents($_FILES['image']['tmp_name'][$c]);
  325.         if (strlen($f) < 1000) die("-ERR too short " . var_export($_FILES, true));
  326.         $ret .= ", file_len=" . strlen($f);
  327.         $ret .= " name=" . $_POST['names'][$c];
  328.         $ret .= " note=" . $_POST['notes'][$c];
  329.  
  330.         $query = "
  331.            INSERT INTO persons SET
  332.                `name`='" . $db->real_escape_string($_POST['names'][$c]) . "',
  333.                `notes`='" . $db->real_escape_string($_POST['notes'][$c]) . "',
  334.                `image`='" . $db->real_escape_string($f) . "'
  335.        ";
  336.         $db->query($query) or die("984930578 : " . $db->error);
  337.  
  338.         $ret .= " insert_id=" . $db->insert_id;
  339.     }
  340.  
  341.     $query = "
  342.        INSERT INTO audit SET
  343.            users_id = 0,
  344.            tag = 'Login',
  345.            val1 = '" . $db->real_escape_string(date(DATE_RFC2822)) . "',
  346.            val2 = '" . $db->real_escape_string(get_ip()) . "',
  347.            val3 = '" . $db->real_escape_string(@gethostbyaddr(get_ip())) . "',
  348.            description = 'Sync successful'
  349.    ";
  350.     $db->query($query) or die("95839204553 : " . $db->error);
  351.  
  352.     $db->commit() or die("857894578934");
  353.     echo "SUCCESS - Sync OK"; //  thanks for " . $ret . " bytes id=" . $ret2;
  354. }
  355.  
  356. if (isset($_GET['image'])) {
  357.     ensureLoggedIn();
  358.     global $db;
  359.     header("Content-Type: image/jpeg");
  360.     $query = "
  361.        SELECT
  362.            *
  363.        FROM persons
  364.        WHERE id = '" . (int)$_GET['image'] . "'
  365.        LIMIT 1
  366.    ";
  367.     $res = $db->query($query) or die("549359408 : " . $db->error);
  368.     if ($row = $res->fetch_object()) {
  369.         $img = $row->image;
  370.         $key = "abcdef";
  371.         $key = "857348957348572390578:" . $key;
  372.         $key = sha1($key);
  373.         $key = strtoupper($key);
  374.         $key = substr($key, 0, 32);
  375.         $iv = "467578546746745675465";
  376.         $iv = sha1($iv);
  377.         $iv = strtoupper($iv);
  378.         $iv = substr($iv, 0, 32);
  379.         echo mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $img, MCRYPT_MODE_CBC, $iv);
  380.     }
  381. }
  382.  
  383. if (isset($_GET['audit'])) {
  384.     $ret = [];
  385.     $ret['debug'] = json_encode($_GET);
  386.  
  387.     $ret['results'] = [];
  388.  
  389.     $query = "
  390.        SELECT
  391.            *
  392.        FROM audit
  393.        ORDER BY id DESC
  394.        LIMIT 0,15
  395.    ";
  396.     $res = $db->query($query) or die("534895784 : " . $db->error);
  397.     while ($row = $res->fetch_assoc()) {
  398.         array_push($ret['results'], $row);
  399.     }
  400.  
  401.     // $row = [];
  402.     // $row['user'] = "admin";
  403.     // $row['date'] = time();
  404.     // $row['message'] = "Test";
  405.  
  406.     // array_push($ret['results'], $row);
  407.  
  408.     $ret['info'] = [
  409.         "seed" => "00c1d817b954f8e1",
  410.         "results" => count($ret['results']),
  411.         "page" => 1,
  412.         "version" => "1.1"
  413.     ];
  414.  
  415.     die(json_encode($ret));
  416. }
  417.  
  418. if($_SERVER['REQUEST_METHOD'] == 'PUT' &&  isset($_GET['user'])) {
  419.     $data = file_get_contents("php://input");
  420.     if (empty($data)) {
  421.         die(json_encode('err'));
  422.     }
  423.     parse_str($data, $post_vars);
  424.     if(isset($post_vars['id']) && $post_vars['id']>0){
  425.     $query = "
  426.            UPDATE users SET
  427.                `username`='" . $db->real_escape_string($post_vars['userName']) . "',
  428.                `password`=md5('" . $db->real_escape_string($post_vars['password']) . "'),
  429.                `access_level`='" . $db->real_escape_string($post_vars['level']) . "'
  430.                 WHERE id=" . $post_vars['id']. "";
  431.         $db->query($query) or die("123925473 : " . $db->error);
  432.         die('updated');
  433.     }else{
  434.     $query = "
  435.            INSERT INTO users SET
  436.                `username`='" . $db->real_escape_string($post_vars['userName']) . "',
  437.                `password`=md5('" . $db->real_escape_string($post_vars['password']) . "'),
  438.                `access_level`='" . $db->real_escape_string($post_vars['level']) . "'
  439.        ";
  440.         $db->query($query) or die("185923573 : " . $db->error);
  441.         die('added');
  442.     }
  443.     die(json_encode('err'));
  444. }
  445. if($_SERVER['REQUEST_METHOD'] == 'DELETE' &&  isset($_GET['user'])) {
  446.     $id = $_GET['user'];
  447.     if($id){
  448.         $query = "DELETE FROM users WHERE id=" . $id;
  449.         $db->query($query) or die("15329404732 : " . $db->error);
  450.         die('deleted');
  451.     }else
  452.         die('err');
  453. }
  454. if (isset($_GET['users'])) {
  455.  
  456.     $query = "SELECT * FROM users";
  457.     $res = $db->query($query) or die("534895784 : " . $db->error);
  458.  
  459.     $ret = [];
  460.     $ret['results'] = [];
  461.  
  462.     while ($row = $res->fetch_assoc()) {
  463.         $tmp = [];
  464.         $tmp['user'] = $row['username'];
  465.         $tmp['type'] = $row['access_level'];
  466.         $tmp['id'] = $row['id'];
  467.         array_push($ret['results'], $tmp);
  468.     }
  469.  
  470.     /*$row = [];
  471.     $row['user'] = "admin";
  472.     $row['type'] = "Admin";
  473.     $row['id'] = 123;
  474.  
  475.     array_push($ret['results'], $row);*/
  476.  
  477.     $ret['info'] = [
  478.         "seed" => "00c1d817b954f8e1",
  479.         "results" => 1,
  480.         "page" => 1,
  481.         "version" => "1.1"
  482.     ];
  483.  
  484.     die(json_encode($ret));
  485. }
Add Comment
Please, Sign In to add comment