81 lines
2.5 KiB
PHP
81 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace okapi\services\replicate\fulldump;
|
|
|
|
use Exception;
|
|
use okapi\Okapi;
|
|
use okapi\Db;
|
|
use okapi\Cache;
|
|
use okapi\OkapiHttpResponse;
|
|
use okapi\OkapiRequest;
|
|
use okapi\ParamMissing;
|
|
use okapi\InvalidParam;
|
|
use okapi\BadRequest;
|
|
|
|
class WebService
|
|
{
|
|
public static function options()
|
|
{
|
|
return array(
|
|
'min_auth_level' => 1
|
|
);
|
|
}
|
|
|
|
private static function count_calls($consumer_key, $days)
|
|
{
|
|
return (
|
|
Db::select_value("
|
|
select count(*)
|
|
from okapi_stats_temp
|
|
where
|
|
consumer_key = '".mysql_real_escape_string($consumer_key)."'
|
|
and service_name='services/replicate/fulldump'
|
|
")
|
|
+
|
|
Db::select_value("
|
|
select sum(total_calls)
|
|
from okapi_stats_hourly
|
|
where
|
|
consumer_key = '".mysql_real_escape_string($consumer_key)."'
|
|
and service_name='services/replicate/fulldump'
|
|
and period_start > date_add(now(), interval -$days day)
|
|
limit 1
|
|
")
|
|
);
|
|
}
|
|
|
|
public static function call(OkapiRequest $request)
|
|
{
|
|
require_once('replicate_common.inc.php');
|
|
|
|
$data = Cache::get("last_fulldump");
|
|
if ($data == null)
|
|
throw new BadRequest("No fulldump found. Try again later. If this doesn't help ".
|
|
"contact site administrator and/or OKAPI developers.");
|
|
|
|
# Check consumer's quota
|
|
|
|
$please = $request->get_parameter('pleeaase');
|
|
if ($please != 'true')
|
|
{
|
|
$not_good = 3 < self::count_calls($request->consumer->key, 30);
|
|
if ($not_good)
|
|
throw new BadRequest("Consumer's monthly quota exceeded. Try later or call with '&pleeaase=true'.");
|
|
}
|
|
else
|
|
{
|
|
$not_good = 5 < self::count_calls($request->consumer->key, 1);
|
|
if ($not_good)
|
|
throw new BadRequest("No more please. Seriously, dude...");
|
|
}
|
|
|
|
$response = new OkapiHttpResponse();
|
|
$response->content_type = $data['meta']['content_type'];
|
|
$response->content_disposition = 'attachment; filename="'.$data['meta']['public_filename'].'"';
|
|
$response->stream_length = $data['meta']['compressed_size'];
|
|
$response->body = fopen($data['meta']['filepath'], "rb");
|
|
$response->allow_gzip = false;
|
|
return $response;
|
|
}
|
|
}
|