15 lines
979 B
PHP
15 lines
979 B
PHP
<?php
|
|
declare(strict_types=1);
|
|
namespace PrelandAdmin;
|
|
final class Catalog
|
|
{
|
|
public static function read(Store $store,\stdClass $config): ?array {
|
|
$catalog=$store->read('catalog.json',null);if(!is_array($catalog)||!is_string($catalog['generated_at']??null))return null;
|
|
$at=strtotime($catalog['generated_at']);if($at===false||$at<time()-180||$at>time()+30)return null;
|
|
$host=static fn($value)=>strtolower(rtrim((string)parse_url(str_contains((string)$value,'://')?(string)$value:'https://'.$value,PHP_URL_HOST),'.'));
|
|
if(!$host($config->host??'')||$host($catalog['host']??'')!==$host($config->host??''))return null;
|
|
foreach(['degr','tp','cons'] as $group){if(!is_array($catalog['groups'][$group]??null))return null;foreach($catalog['groups'][$group] as $entry)if(!is_array($entry)||!is_int($entry['number']??null)||$entry['number']<1||$entry['number']>9||!is_string($entry['name']??null))return null;}
|
|
return $catalog;
|
|
}
|
|
}
|