web: only delete channels, notes, keys and certs on POST

This commit is contained in:
Alhuda Khan committed 2026-10-26 19:15:53 +05:30
1 parent 9962274521
commit 8dc96ae08c
9 files changed
+124 -10

No files matched your search

+56
View File
@@ -443,6 +443,62 @@ TEST_F(ZNCTest, ModuleCSRFOverride) {
EXPECT_THAT(reply, HasSubstr("ipsum"));
}
TEST_F(ZNCTest, WebDeleteNeedsPost) {
int port = PickPortNumber();
auto znc = Run();
auto ircd = ConnectIRCd();
auto client = LoginClient();
client.Write(QStringLiteral("znc addport %1 all all").arg(port).toUtf8());
client.ReadUntil(":Port added");
client.Write("znc loadmod notes");
client.ReadUntil("Loaded module");
client.Write("PRIVMSG *notes :Add secretkey lorem");
client.ReadUntil("Added note");
auto url = [&](const QString& path) {
QNetworkRequest request(
QUrl(QStringLiteral("http://127.0.0.1:%1%2").arg(port).arg(path)));
request.setRawHeader("Authorization",
"Basic " + QByteArray("user:hunter2").toBase64());
return request;
};
HttpPost(url("/mods/global/webadmin/addchan"), {
{"user", "user"},
{"network", "test"},
{"submitted", "1"},
{"name", "#znc"},
{"enabled", "1"},
});
const QString sEditNetwork =
"/mods/global/webadmin/editnetwork?user=user&network=test";
const std::string sChanRow = "name=\"channel\" value=\"#znc\"";
EXPECT_THAT(HttpGet(url(sEditNetwork))->readAll().toStdString(),
HasSubstr(sChanRow));
// A plain GET, e.g. from an <img> on another page, must not delete
EXPECT_THAT(HttpGet(url("/mods/global/webadmin/"
"delchan?user=user&network=test&name=%23znc"))
->readAll()
.toStdString(),
HasSubstr("Confirm Channel Deletion"));
EXPECT_THAT(HttpGet(url(sEditNetwork))->readAll().toStdString(),
HasSubstr(sChanRow));
HttpGet(url("/mods/user/notes/delnote?key=secretkey"));
EXPECT_THAT(HttpGet(url("/mods/user/notes/"))->readAll().toStdString(),
HasSubstr("secretkey"));
HttpPost(url("/mods/global/webadmin/delchan"), {
{"user", "user"},
{"network", "test"},
{"name", "#znc"},
});
EXPECT_THAT(HttpGet(url(sEditNetwork))->readAll().toStdString(),
Not(HasSubstr(sChanRow)));
HttpPost(url("/mods/user/notes/delnote"), {{"key", "secretkey"}});
EXPECT_THAT(HttpGet(url("/mods/user/notes/"))->readAll().toStdString(),
Not(HasSubstr("secretkey")));
}
class SaslModuleTest : public ZNCTest,
public testing::WithParamInterface<
std::pair<int, std::vector<std::string>>> {