diff --git a/db/icpTlds.db b/db/icpTlds.db index 2b5682d..591deee 100644 Binary files a/db/icpTlds.db and b/db/icpTlds.db differ diff --git a/models/icpQuery.php b/models/icpQuery.php index 87b5c02..2980686 100644 --- a/models/icpQuery.php +++ b/models/icpQuery.php @@ -50,6 +50,26 @@ class icpQuery { } class icpQueryEntry { + private function getIcpTlds() { // 获取所有可ICP备案的顶级域 + $db = new icpDB; + $punycode = new Punycode(); + $res = $db->query('SELECT tld FROM `tlds`;'); + while ($row = $res->fetchArray(SQLITE3_ASSOC)) { + $tlds[] = $punycode->encode($row['tld']); // 转为Punycode编码 + } + return $tlds; // Unicode字符使用Punycode编码 + } + + private function isIcpEnable($tld) { // 检查TLD是否允许ICP备案 + $icpTlds = $this->getIcpTlds(); + foreach ($icpTlds as $icpTld) { // 遍历所有可ICP域名 + if ($icpTld === $tld) { + return true; // 允许备案 + } + } + return false; // 无法备案 + } + private function check($str) { // 检查输入参数 $content = (new extractDomain)->analyse($str); if (!isset($content['domain'])) { // 格式错误 @@ -64,6 +84,12 @@ class icpQueryEntry { 'message' => 'Unknow TLD' ); } + if (!$this->isIcpEnable($content['tld'])) { + return array( + 'status' => 'error', + 'message' => '`' . $content['tld'] . '` is not allowed in ICP' + ); + } return array( 'status' => 'ok', 'domain' => $content['site'] // 返回主域名 @@ -80,7 +106,10 @@ class icpQueryEntry { } $content = $this->check($rawParam); if ($content['status'] !== 'ok') { // 请求参数错误 - tgApi::sendText($content['message']); + tgApi::sendMessage(array( + 'parse_mode' => 'Markdown', + 'text' => $content['message'] + )); return; } $domain = $content['domain'];