pezcurrel пре 1 месец
родитељ
комит
fcd2064983
1 измењених фајлова са 26 додато и 0 уклоњено
  1. 26 0
      web/lib/ckratelimit.php

+ 26 - 0
web/lib/ckratelimit.php

@@ -0,0 +1,26 @@
+<?php
+function ckratelimit($headers) {
+	$aaheaders=[];
+	array_shift($headers);
+	foreach ($headers as $header)
+		if (preg_match('#^([^:]+): (.*)$#',$header,$matches)===1)
+			$aaheaders[strtolower($matches[1])]=$matches[2];
+	//$aaheaders['x-ratelimit-remaining']=0;
+	//print_r($aaheaders);
+	if (!isset($aaheaders['date'])) return ['ok'=>false,'error'=>'no «date» header'];
+	if (!isset($aaheaders['x-ratelimit-reset'])) return ['ok'=>false,'error'=>'no «x-ratelimit-reset» header'];
+	if (!isset($aaheaders['x-ratelimit-remaining'])) return ['ok'=>false,'error'=>'no «x-ratelimit-remaining» header'];
+	if (preg_match('#^\d+$#',$aaheaders['x-ratelimit-remaining'])!==1) return ['ok'=>false,'error'=>'«x-ratelimit-remaining» header is not an integer'];
+	$remaining=$aaheaders['x-ratelimit-remaining']+0;
+	$date=@strtotime($aaheaders['date']);
+	if (!is_int($date)) return ['ok'=>false,'error'=>'«date» header could not be converted to a unix timestamp'];
+	$reset=@strtotime($aaheaders['x-ratelimit-reset']);
+	if (!is_int($reset)) return ['ok'=>false,'error'=>'«x-ratelimit-reset» header could not be converted to a unix timestamp'];
+	// don't do the one on the line below, since it happens lots of times
+	//if ($reset<$date) return ['ok'=>false,'error'=>'the unix timestamp parsed from «x-ratelimit-reset» header is less than the unix timestamp parsed from «date» header'];
+	if ($remaining==0)
+		return ['ok'=>true,'sleep'=>$reset-$date+1,'remaining'=>$remaining];
+	else
+		return ['ok'=>true,'sleep'=>0,'remaining'=>$remaining];
+}
+?>