合并分支 'akun' 到 'master'
Akun 查看合并请求 !394
正在显示
1 个修改的文件
包含
140 行增加
和
45 行删除
| @@ -11,7 +11,6 @@ namespace App\Console\Commands\Domain; | @@ -11,7 +11,6 @@ namespace App\Console\Commands\Domain; | ||
| 11 | 11 | ||
| 12 | use Illuminate\Console\Command; | 12 | use Illuminate\Console\Command; |
| 13 | use App\Models\Domain\DomainInfo as DomainInfoModel; | 13 | use App\Models\Domain\DomainInfo as DomainInfoModel; |
| 14 | -use Illuminate\Support\Facades\Log; | ||
| 15 | 14 | ||
| 16 | class DomainInfo extends Command | 15 | class DomainInfo extends Command |
| 17 | { | 16 | { |
| @@ -36,37 +35,113 @@ class DomainInfo extends Command | @@ -36,37 +35,113 @@ class DomainInfo extends Command | ||
| 36 | * @method :post | 35 | * @method :post |
| 37 | * @time :2023/9/11 15:09 | 36 | * @time :2023/9/11 15:09 |
| 38 | */ | 37 | */ |
| 39 | - public function handle(){ | 38 | + public function handle() |
| 39 | + { | ||
| 40 | + //更新域名到期时间 | ||
| 41 | + $this->startUpdateDomain(); | ||
| 42 | + | ||
| 43 | + //主站证书到期更新 | ||
| 44 | + $this->startUpdateCert(); | ||
| 45 | + | ||
| 46 | + //AMP站证书到期更新 | ||
| 47 | + $this->startUpdateAmpCert(); | ||
| 48 | + | ||
| 49 | + return true; | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | + /** | ||
| 53 | + * 更新域名到期时间 | ||
| 54 | + * @author Akun | ||
| 55 | + * @date 2024/02/26 10:26 | ||
| 56 | + */ | ||
| 57 | + public function startUpdateDomain() | ||
| 58 | + { | ||
| 40 | $domainModel = new DomainInfoModel(); | 59 | $domainModel = new DomainInfoModel(); |
| 41 | - $map = ['status'=>['!=',2]]; | 60 | + $map = [ |
| 61 | + 'status' => ['!=', 2], | ||
| 62 | + 'domain_end_time' => ['<', date('Y-m-d H:i:s')] | ||
| 63 | + ]; | ||
| 42 | $list = $domainModel->list($map); | 64 | $list = $domainModel->list($map); |
| 43 | - foreach ($list as $v){ | ||
| 44 | - if(empty($v['private_key']) || empty($v['private_cert'])){ | ||
| 45 | - //域名结束时间<2天时,重新生成 | ||
| 46 | - if(!empty($v['certificate_end_time'])){ | ||
| 47 | - if(($v['certificate_end_time'] > date('Y-m-d H:i:s',time() + 24*3600)) || ($v['certificate_end_time'] < date('Y-m-d H:i:s',time()))){ | ||
| 48 | - $this->updatePrivate($v); | ||
| 49 | - } | ||
| 50 | - } | ||
| 51 | - } | ||
| 52 | - $ssl = $this->updateDomainSsl($v['domain']); | 65 | + foreach ($list as $v) { |
| 53 | $time = $this->updateDomain($v['domain']); | 66 | $time = $this->updateDomain($v['domain']); |
| 54 | - if(!empty($time['start']) && !empty($time['end'])){ | ||
| 55 | - $data = [ | ||
| 56 | - 'certificate_start_time'=>$ssl['from'], | ||
| 57 | - 'certificate_end_time'=>$ssl['to'], | ||
| 58 | - 'domain_start_time'=>$time['start'], | ||
| 59 | - 'domain_end_time'=>$time['end'] | ||
| 60 | - ]; | ||
| 61 | - }else{ | ||
| 62 | - $data = [ | ||
| 63 | - 'domain_start_time'=>$time['start'], | ||
| 64 | - 'domain_end_time'=>$time['end'] | ||
| 65 | - ]; | 67 | + $data = [ |
| 68 | + 'domain_start_time' => $time['start'], | ||
| 69 | + 'domain_end_time' => $time['end'] | ||
| 70 | + ]; | ||
| 71 | + | ||
| 72 | + $domainModel->edit($data, ['id' => $v['id']]); | ||
| 73 | + } | ||
| 74 | + } | ||
| 75 | + | ||
| 76 | + /** | ||
| 77 | + * 主站证书到期更新 | ||
| 78 | + * @author Akun | ||
| 79 | + * @date 2024/02/26 10:26 | ||
| 80 | + */ | ||
| 81 | + public function startUpdateCert() | ||
| 82 | + { | ||
| 83 | + $domainModel = new DomainInfoModel(); | ||
| 84 | + $end_day = date('Y-m-d H:i:s', time() + 2 * 24 * 3600);//2天后到期 | ||
| 85 | + $map = [ | ||
| 86 | + 'status' => ['!=', 2], | ||
| 87 | + 'certificate_end_time' => ['<', $end_day] | ||
| 88 | + ]; | ||
| 89 | + $list = $domainModel->list($map); | ||
| 90 | + foreach ($list as $v) { | ||
| 91 | + //更新证书到期时间 | ||
| 92 | + $data = []; | ||
| 93 | + $ssl = $this->updateDomainSsl($v['domain']); | ||
| 94 | + $ssl['from'] && $data['certificate_start_time'] = $ssl['from']; | ||
| 95 | + $ssl['to'] && $data['certificate_end_time'] = $ssl['to']; | ||
| 96 | + | ||
| 97 | + $domainModel->edit($data, ['id' => $v['id']]); | ||
| 98 | + | ||
| 99 | + if($v['type'] == 1 && ($data['certificate_end_time'] ?? '') < $end_day){ | ||
| 100 | + //申请免费证书 | ||
| 101 | + $this->updatePrivate($v); | ||
| 102 | + } | ||
| 103 | + } | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + /** | ||
| 107 | + * AMP站证书到期更新 | ||
| 108 | + * @author Akun | ||
| 109 | + * @date 2024/02/26 10:26 | ||
| 110 | + */ | ||
| 111 | + public function startUpdateAmpCert() | ||
| 112 | + { | ||
| 113 | + $domainModel = new DomainInfoModel(); | ||
| 114 | + $end_day = date('Y-m-d H:i:s', time() + 2 * 24 * 3600);//2天后到期 | ||
| 115 | + $map = [ | ||
| 116 | + 'status' => ['!=', 2], | ||
| 117 | + 'amp_status' => ['=', 1], | ||
| 118 | + 'amp_certificate_end_time' => ['<', $end_day] | ||
| 119 | + ]; | ||
| 120 | + $list = $domainModel->list($map); | ||
| 121 | + foreach ($list as $v) { | ||
| 122 | + //更新amp站点证书到期时间 | ||
| 123 | + $domain_array = parse_url($v['domain']); | ||
| 124 | + $host = $domain_array['host'] ?? $domain_array['path']; | ||
| 125 | + $host_array = explode('.', $host); | ||
| 126 | + if (count($host_array) <= 2) { | ||
| 127 | + array_unshift($host_array, 'm'); | ||
| 128 | + } else { | ||
| 129 | + $host_array[0] = 'm'; | ||
| 130 | + } | ||
| 131 | + $amp_domain = implode('.', $host_array); | ||
| 132 | + | ||
| 133 | + $data = []; | ||
| 134 | + $ssl = $this->updateDomainSsl($amp_domain); | ||
| 135 | + $ssl['from'] && $data['amp_certificate_start_time'] = $ssl['from']; | ||
| 136 | + $ssl['to'] && $data['amp_certificate_start_time'] = $ssl['to']; | ||
| 137 | + | ||
| 138 | + $domainModel->edit($data, ['id' => $v['id']]); | ||
| 139 | + | ||
| 140 | + if($v['amp_type'] == 1 && ($data['amp_certificate_start_time'] ?? '') < $end_day){ | ||
| 141 | + //申请免费证书 | ||
| 142 | + $this->updateAmpPrivate($v['domain']); | ||
| 66 | } | 143 | } |
| 67 | - $domainModel->edit($data,['id'=>$v['id']]); | ||
| 68 | } | 144 | } |
| 69 | - return 1; | ||
| 70 | } | 145 | } |
| 71 | 146 | ||
| 72 | /** | 147 | /** |
| @@ -78,7 +153,7 @@ class DomainInfo extends Command | @@ -78,7 +153,7 @@ class DomainInfo extends Command | ||
| 78 | */ | 153 | */ |
| 79 | public function updatePrivate($param) | 154 | public function updatePrivate($param) |
| 80 | { | 155 | { |
| 81 | - $url = 'https://' . $param['domain']. '/api/applySsl/'; | 156 | + $url = 'https://' . $param['domain'] . '/api/applySsl/'; |
| 82 | $top_domain = $this->getTopDomain($param['domain']); | 157 | $top_domain = $this->getTopDomain($param['domain']); |
| 83 | if ((empty($extend_config) || empty($extend_config[0]['origin'])) && $param['id'] != 3) { | 158 | if ((empty($extend_config) || empty($extend_config[0]['origin'])) && $param['id'] != 3) { |
| 84 | $extend_config = [ | 159 | $extend_config = [ |
| @@ -89,21 +164,39 @@ class DomainInfo extends Command | @@ -89,21 +164,39 @@ class DomainInfo extends Command | ||
| 89 | 'project_id' => $param['project_id'], | 164 | 'project_id' => $param['project_id'], |
| 90 | 'type' => 1, | 165 | 'type' => 1, |
| 91 | 'route' => 1, | 166 | 'route' => 1, |
| 92 | - "domain" =>$param['domain'], | ||
| 93 | - "rewrite"=> $extend_config ?? [], | 167 | + "domain" => $param['domain'], |
| 168 | + "rewrite" => $extend_config ?? [], | ||
| 94 | 'other_domain' => [$top_domain, '*.' . $top_domain], | 169 | 'other_domain' => [$top_domain, '*.' . $top_domain], |
| 95 | 'private_key' => '', | 170 | 'private_key' => '', |
| 96 | 'cert' => '' | 171 | 'cert' => '' |
| 97 | ]; | 172 | ]; |
| 98 | - $result = $this->curlRequest($url, $param); | 173 | + return $this->curlRequest($url, $param); |
| 174 | + } | ||
| 175 | + | ||
| 176 | + /** | ||
| 177 | + * 更新证书 | ||
| 178 | + * @param $domain | ||
| 179 | + * @return array | ||
| 180 | + * @author Akun | ||
| 181 | + * @date 2024/02/26 10:25 | ||
| 182 | + */ | ||
| 183 | + public function updateAmpPrivate($domain){ | ||
| 184 | + $url = 'https://' . $domain . '/api/createSiteAmp/'; | ||
| 185 | + $param = [ | ||
| 186 | + "domain" => $domain, | ||
| 187 | + 'private_key' => '', | ||
| 188 | + 'cert' => '' | ||
| 189 | + ]; | ||
| 190 | + return $this->curlRequest($url, $param); | ||
| 99 | } | 191 | } |
| 100 | 192 | ||
| 101 | - public static function getTopDomain ($url) { | 193 | + public static function getTopDomain($url) |
| 194 | + { | ||
| 102 | $url = strtolower($url); //首先转成小写 | 195 | $url = strtolower($url); //首先转成小写 |
| 103 | $url = mb_ereg_replace('^( | )+', '', trim($url)); | 196 | $url = mb_ereg_replace('^( | )+', '', trim($url)); |
| 104 | $url = mb_ereg_replace('( | )+$', '', $url); | 197 | $url = mb_ereg_replace('( | )+$', '', $url); |
| 105 | if (!preg_match('/^(http:\/\/|https)/', $url)) { | 198 | if (!preg_match('/^(http:\/\/|https)/', $url)) { |
| 106 | - $url = "https://".$url; | 199 | + $url = "https://" . $url; |
| 107 | } | 200 | } |
| 108 | $hosts = parse_url($url); | 201 | $hosts = parse_url($url); |
| 109 | $host = $hosts['host'] ?? ''; | 202 | $host = $hosts['host'] ?? ''; |
| @@ -117,10 +210,10 @@ class DomainInfo extends Command | @@ -117,10 +210,10 @@ class DomainInfo extends Command | ||
| 117 | $preg = '/[\w].+\.(com|net|org|gov|edu|co|ne)\.[\w]/'; | 210 | $preg = '/[\w].+\.(com|net|org|gov|edu|co|ne)\.[\w]/'; |
| 118 | if (($n > 2) && preg_match($preg, $host)) { | 211 | if (($n > 2) && preg_match($preg, $host)) { |
| 119 | //双后缀取后3位 | 212 | //双后缀取后3位 |
| 120 | - $host = $data[$n - 3].'.'.$data[$n - 2].'.'.$data[$n - 1]; | 213 | + $host = $data[$n - 3] . '.' . $data[$n - 2] . '.' . $data[$n - 1]; |
| 121 | } else { | 214 | } else { |
| 122 | //非双后缀取后两位 | 215 | //非双后缀取后两位 |
| 123 | - $host = $data[$n - 2].'.'.$data[$n - 1]; | 216 | + $host = $data[$n - 2] . '.' . $data[$n - 1]; |
| 124 | } | 217 | } |
| 125 | return $host; | 218 | return $host; |
| 126 | } | 219 | } |
| @@ -155,7 +248,8 @@ class DomainInfo extends Command | @@ -155,7 +248,8 @@ class DomainInfo extends Command | ||
| 155 | * @method :post | 248 | * @method :post |
| 156 | * @time :2023/9/11 15:07 | 249 | * @time :2023/9/11 15:07 |
| 157 | */ | 250 | */ |
| 158 | - public function updateDomainSsl($domain){ | 251 | + public function updateDomainSsl($domain) |
| 252 | + { | ||
| 159 | try { | 253 | try { |
| 160 | $context = stream_context_create([ | 254 | $context = stream_context_create([ |
| 161 | 'ssl' => [ | 255 | 'ssl' => [ |
| @@ -163,22 +257,22 @@ class DomainInfo extends Command | @@ -163,22 +257,22 @@ class DomainInfo extends Command | ||
| 163 | 'capture_peer_cert_chain' => false, | 257 | 'capture_peer_cert_chain' => false, |
| 164 | ], | 258 | ], |
| 165 | ]); | 259 | ]); |
| 166 | - $stream = stream_socket_client('ssl://'.$domain.':443', $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context); | ||
| 167 | - if(!$stream) { | 260 | + $stream = stream_socket_client('ssl://' . $domain . ':443', $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context); |
| 261 | + if (!$stream) { | ||
| 168 | die("Failed to connect: $errno - $errstr"); | 262 | die("Failed to connect: $errno - $errstr"); |
| 169 | } | 263 | } |
| 170 | $remote_cert = stream_context_get_params($stream)['options']['ssl']['peer_certificate']; | 264 | $remote_cert = stream_context_get_params($stream)['options']['ssl']['peer_certificate']; |
| 171 | - if(!$remote_cert) { | 265 | + if (!$remote_cert) { |
| 172 | die("Failed to retrieve certificate"); | 266 | die("Failed to retrieve certificate"); |
| 173 | } | 267 | } |
| 174 | $valid_from = date('Y-m-d H:i:s', openssl_x509_parse($remote_cert)['validFrom_time_t']); | 268 | $valid_from = date('Y-m-d H:i:s', openssl_x509_parse($remote_cert)['validFrom_time_t']); |
| 175 | $valid_to = date('Y-m-d H:i:s', openssl_x509_parse($remote_cert)['validTo_time_t']); | 269 | $valid_to = date('Y-m-d H:i:s', openssl_x509_parse($remote_cert)['validTo_time_t']); |
| 176 | fclose($stream); | 270 | fclose($stream); |
| 177 | - }catch (\Exception $e){ | 271 | + } catch (\Exception $e) { |
| 178 | $valid_from = ''; | 272 | $valid_from = ''; |
| 179 | $valid_to = ''; | 273 | $valid_to = ''; |
| 180 | } | 274 | } |
| 181 | - return ['from'=>$valid_from,'to'=>$valid_to]; | 275 | + return ['from' => $valid_from, 'to' => $valid_to]; |
| 182 | } | 276 | } |
| 183 | 277 | ||
| 184 | /** | 278 | /** |
| @@ -188,15 +282,16 @@ class DomainInfo extends Command | @@ -188,15 +282,16 @@ class DomainInfo extends Command | ||
| 188 | * @method :post | 282 | * @method :post |
| 189 | * @time :2023/9/11 15:11 | 283 | * @time :2023/9/11 15:11 |
| 190 | */ | 284 | */ |
| 191 | - public function updateDomain($domain){ | ||
| 192 | - $url = 'http://openai.waimaoq.com/v1/whois_api?domain='.$domain; | 285 | + public function updateDomain($domain) |
| 286 | + { | ||
| 287 | + $url = 'http://openai.waimaoq.com/v1/whois_api?domain=' . $domain; | ||
| 193 | $response = http_get($url); | 288 | $response = http_get($url); |
| 194 | $start = date('Y-m-d H:i:s'); | 289 | $start = date('Y-m-d H:i:s'); |
| 195 | $end = date('Y-m-d H:i:s'); | 290 | $end = date('Y-m-d H:i:s'); |
| 196 | - if($response['code'] == 200){ | 291 | + if ($response['code'] == 200) { |
| 197 | $start = $response['text']['creation_date']; | 292 | $start = $response['text']['creation_date']; |
| 198 | $end = $response['text']['expiration_date']; | 293 | $end = $response['text']['expiration_date']; |
| 199 | } | 294 | } |
| 200 | - return ['start'=>$start,'end'=>$end]; | 295 | + return ['start' => $start, 'end' => $end]; |
| 201 | } | 296 | } |
| 202 | } | 297 | } |
-
请 注册 或 登录 后发表评论