diff --git a/src/App/Service/IPListService.php b/src/App/Service/IPListService.php index eeafe03..e7ae100 100644 --- a/src/App/Service/IPListService.php +++ b/src/App/Service/IPListService.php @@ -30,7 +30,8 @@ class IPListService { } foreach (scandir($dir) as $file) { if (str_ends_with($file, '.json')) { - $this->loadConfig(substr($file, 0, -5), json_decode(file_get_contents($dir . $file))); + $name = substr($file, 0, -5); + $this->loadConfig($name, json_decode(file_get_contents($dir . $file))); } } } @@ -44,6 +45,11 @@ class IPListService { return self::$_instance ??= new self($logger); } + /** + * @param string $name + * @param object $config + * @return void + */ private function loadConfig(string $name, object $config): void { $this->sites[$name] = SiteFactory::create($name, $config); } diff --git a/src/Domain/Entity/Site.php b/src/Domain/Entity/Site.php index e5cff26..3f30116 100644 --- a/src/Domain/Entity/Site.php +++ b/src/Domain/Entity/Site.php @@ -62,6 +62,7 @@ final class Site { $this->ip4 = SiteFactory::normalize(array_merge($this->ip4, $ip4)); $this->ip6 = SiteFactory::normalize(array_merge($this->ip6, $ip6)); + $this->saveConfig(); App::getLogger()->debug('Reloaded for ' . $this->name); EventLoop::delay($this->timeout, function () { @@ -112,4 +113,30 @@ final class Site { App::getLogger()->debug('External reloaded for ' . $this->name); } + + /** + * @return object + */ + public function getConfig(): object { + return (object) [ + 'domains' => SiteFactory::normalizeArray($this->domains), + 'dns' => $this->dns, + 'timeout' => $this->timeout, + 'ip4' => SiteFactory::normalizeArray($this->ip4, true), + 'ip6' => SiteFactory::normalizeArray($this->ip6, true), + 'cidr4' => SiteFactory::normalizeArray($this->cidr4, true), + 'cidr6' => SiteFactory::normalizeArray($this->cidr6, true), + 'external' => $this->external, + ]; + } + + /** + * @return void + */ + private function saveConfig(): void { + file_put_contents( + PATH_ROOT . '/config/' . $this->name . '.json', + json_encode($this->getConfig(), JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) + ); + } }