diff --git a/Web/Models/Entities/BannedLink.php b/Web/Models/Entities/BannedLink.php index 09c42e39..bb71f8a8 100644 --- a/Web/Models/Entities/BannedLink.php +++ b/Web/Models/Entities/BannedLink.php @@ -39,7 +39,7 @@ class BannedLink extends RowModel function getRegexpRule(): string { - return addslashes("/" . $this->getDomain() . $this->getRawRegexp() . "/"); + return "/^" . $this->getDomain() . "\/" . $this->getRawRegexp() . "$/i"; } function getRawRegexp(): string diff --git a/Web/Models/Repositories/BannedLinks.php b/Web/Models/Repositories/BannedLinks.php index 8f93e6fd..81803716 100644 --- a/Web/Models/Repositories/BannedLinks.php +++ b/Web/Models/Repositories/BannedLinks.php @@ -3,6 +3,7 @@ namespace openvk\Web\Models\Repositories; use Chandler\Database\DatabaseConnection as DB; use Nette\Database\Table\{ActiveRow, Selection}; use openvk\Web\Models\Entities\BannedLink; +use function Symfony\Component\Translation\t; class BannedLinks { @@ -43,7 +44,7 @@ class BannedLinks function isDomainBanned(string $domain): bool { - return sizeof($this->bannedLinks->where(["link" => $domain, "regexp_rule" => ""])) > 0; + return sizeof($this->bannedLinks->where(["domain" => $domain, "regexp_rule" => ""])) > 0; } function genLinks($rules): \Traversable @@ -57,12 +58,14 @@ class BannedLinks foreach($links as $link) if (preg_match($link->getRegexpRule(), $uri)) yield $link->getId(); + else if ($this->isDomainBanned($link->getDomain())) + yield $link->getId(); } function check(string $url): ?array { - $uri = strstr(str_replace(["https://", "http://"], "", $url), "/", true); - $domain = str_replace("www.", "", $uri); + $uri = str_replace(["https://", "http://"], "", $url); + $domain = explode("/", str_replace("www.", "", $uri))[0]; $rules = $this->getByDomain($domain); if (is_null($rules)) diff --git a/Web/Presenters/AdminPresenter.php b/Web/Presenters/AdminPresenter.php index b8f480ca..85c048a0 100644 --- a/Web/Presenters/AdminPresenter.php +++ b/Web/Presenters/AdminPresenter.php @@ -481,7 +481,7 @@ final class AdminPresenter extends OpenVKPresenter if ($link) { $link->setDomain($new_domain ?? $this->postParam("link")); $link->setReason($new_reason); - $link->setRegexp_rule($this->postParam("regexp")); + $link->setRegexp_rule(mb_strlen(trim($this->postParam("regexp"))) > 0 ? $this->postParam("regexp") : ""); $link->save(); } else { if (!$new_domain) @@ -490,7 +490,7 @@ final class AdminPresenter extends OpenVKPresenter $link = new BannedLink; $link->setDomain($new_domain); $link->setReason($new_reason); - $link->setRegexp_rule($this->postParam("regexp")); + $link->setRegexp_rule(mb_strlen(trim($this->postParam("regexp"))) > 0 ? $this->postParam("regexp") : ""); $link->setInitiator($this->user->identity->getId()); $link->save(); diff --git a/Web/Presenters/AwayPresenter.php b/Web/Presenters/AwayPresenter.php index 18c7cca7..e1fea17a 100644 --- a/Web/Presenters/AwayPresenter.php +++ b/Web/Presenters/AwayPresenter.php @@ -7,7 +7,7 @@ final class AwayPresenter extends OpenVKPresenter { function renderAway(): void { - $checkBanEntries = (new BannedLinks)->check($this->queryParam("to") . "/"); + $checkBanEntries = (new BannedLinks)->check($this->queryParam("to")); if (OPENVK_ROOT_CONF["openvk"]["preferences"]["susLinks"]["warnings"]) if (sizeof($checkBanEntries) > 0) $this->pass("openvk!Away->view", $checkBanEntries[0]);