Skip to content

Instantly share code, notes, and snippets.

@maksadbek
Last active August 29, 2015 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maksadbek/6768c7e635bc5d3091e5 to your computer and use it in GitHub Desktop.
Save maksadbek/6768c7e635bc5d3091e5 to your computer and use it in GitHub Desktop.
<?php
$RATEREMAIN = 60;
$RESETIME = 1;
$APIKEY = $_SERVER["HTTP_APIKEY"];
$IP = $_SERVER["REMOTE_ADDR"];
define("MYSQLHOST", "127.0.0.1");
define("MYSQLPORT", "3306");
define("DATABASE", "streets");
define("MYSQLUSER", "root");
define("MYSQLPASS", "toor");
function setHeader($remain, $reset){
GLOBAL $RATEREMAIN;
header("X-RateLimit-Limit: $RATEREMAIN");
header("X-RateLimit-Remaining: $remain");
header("X-RateLimit-Reset: $reset");
}
function readRate($ip){
global $RATEREMAIN;
global $RESETIME;
if(file_exists($ip)){
$file = fopen($ip, "r");
$contents = fread($file, filesize($ip));
$rateData = unserialize($contents);
fclose($file);
return($rateData);
}
else{
return array(
"ip" => $ip,
"rateCount" => $RATEREMAIN,
"rateRemain"=> $RATEREMAIN,
"created" => time(),
"reset" => $RESETIME*60*60
);
}
}
function writeRate($arr, $ip){
$b = serialize($arr);
$file = fopen($ip, "w+");
fwrite($file, $b);
fclose($file);
}
function setDefault($rateParams){
global $RATEREMAIN;
global $RESETIME;
$rateParams["rateCount"] = $RATEREMAIN;
$rateParams["rateRemain"] = $RATEREMAIN;
$rateParams["created"] = time();
$rateParams["reset"] = $RESETIME*60*60;
return $rateParams;
}
function doIt(){
if(isset($_POST["method"]) ){
if($_POST["method"] == "coordinate" && isset($_POST["lat"]) && isset($_POST["lon"])){
$lat = $_POST["lat"];
$lon = $_POST["lon"];
$url = 'http:///api/json/navsys.api.geocoding.findNearby/j7AX5tuobawjbB8?{"point":{"lon":'.$lon.',"lat":'.$lat.'},"maxResults":1}';
$js = file_get_contents($url);
$js = json_decode(trim($js));
$rt = $js->result[0]->address->components;
$ad = null;
foreach ($rt as $js){
$ad = ", " . $js->fullName . $ad;
}
$ad = substr($ad, 2);
$ad = str_replace('"', "`", str_replace("'", "`", $ad));
$ret = array( "address" => (string)$ad, "success" => strlen($ad) > 5);
print_r($ret);
echo json_encode($ret);
}
elseif($_POST["method"] == "pattern" && isset($_POST["pattern"])){
$pattern = $_POST["pattern"];
$mysql = mysql_connect(MYSQLHOST, MYSQLUSER, MYSQLPASS);
mysql_select_db(DATABASE);
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
if(!$mysql){
die('Could not connect ');
}
$name = getNameFromStreets($pattern);
print_r($name);
echo json_encode($name);
}
else{
echo "error";
}
}
else{
echo "invalid request";
}
}
function getNameFromStreets($hash){
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
$getLocalQuery = "SELECT `name`
FROM `streets`
WHERE `name`
LIKE '".$hash."' LIMIT 10;";
$query = mysql_query($getLocalQuery);
if(!$query){
die("error in query");
}
$result = Array();
while($row = mysql_fetch_array($query)){
array_push($result, $row["name"]);
}
return $result;
}
$rate = readRate($IP); //agar bu ip bilan client bolsa, uni danniylari olinadi. Agar yoq bolsa, yangi yaratiladi
$rateRemain = --$rate["rateRemain"] >= 0 ? $rate["rateRemain"] : -1;
$rate["rateRemain"] = $rateRemain;
$reset = ($rate["created"]+($RESETIME*60*60)) - time();
$rate["reset"] = $reset;
writeRate($rate, $IP);
if($APIKEY == "deadbeef"){
if($rateRemain > 0){
if($reset <= 0){
$rate["rateRemain"] = $RATEREMAIN;
$rate["created"] = time();
writeRate($rate, $IP);
}
doIt();
setHeader($rate["rateRemain"], $rate["reset"]);
}
elseif($rateRemain == 0){
}
elseif($rateRemain < 0){
setHeader(0, $RESETIME*60*60);
if($reset <= 0){
$rate["rateRemain"] = $RATEREMAIN;
$rate["created"] = time();
print_r($rate);
writeRate($rate, $IP);
}
$reset = ($rate["created"]+($RESETIME*60*60)) - time();
$rate["reset"] = $reset;
writeRate($rate, $IP);
http_response_code(429);
die("you fired too many requests");
}
}else{
echo "APIKEY is invalid";
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment