From 7b7febea558825aca2391ec8909933f8a575ed47 Mon Sep 17 00:00:00 2001 From: Shish Date: Sun, 15 Dec 2019 16:01:32 +0000 Subject: [PATCH] better validation --- ext/alias_editor/main.php | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/ext/alias_editor/main.php b/ext/alias_editor/main.php index ed512eda..5db1d22f 100644 --- a/ext/alias_editor/main.php +++ b/ext/alias_editor/main.php @@ -106,15 +106,28 @@ class AliasEditor extends Extension public function onAddAlias(AddAliasEvent $event) { global $database; - $pair = ["oldtag" => $event->oldtag, "newtag" => $event->newtag]; - if ($database->get_row("SELECT * FROM aliases WHERE oldtag=:oldtag AND lower(newtag)=lower(:newtag)", $pair)) { - throw new AddAliasException("That alias already exists"); - } elseif ($database->get_row("SELECT * FROM aliases WHERE oldtag=:newtag", ["newtag" => $event->newtag])) { - throw new AddAliasException("{$event->newtag} is itself an alias"); - } else { - $database->execute("INSERT INTO aliases(oldtag, newtag) VALUES(:oldtag, :newtag)", $pair); - log_info("alias_editor", "Added alias for {$event->oldtag} -> {$event->newtag}", "Added alias"); + + $row = $database->get_row( + "SELECT * FROM aliases WHERE lower(oldtag)=lower(:oldtag)", + ["oldtag"=>$event->oldtag] + ); + if ($row) { + throw new AddAliasException("{$row['oldtag']} is already an alias for {$row['newtag']}"); } + + $row = $database->get_row( + "SELECT * FROM aliases WHERE lower(oldtag)=lower(:newtag)", + ["newtag" => $event->newtag] + ); + if ($row) { + throw new AddAliasException("{$row['oldtag']} is itself an alias for {$row['newtag']}"); + } + + $database->execute( + "INSERT INTO aliases(oldtag, newtag) VALUES(:oldtag, :newtag)", + ["oldtag" => $event->oldtag, "newtag" => $event->newtag] + ); + log_info("alias_editor", "Added alias for {$event->oldtag} -> {$event->newtag}", "Added alias"); } public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)