From 013203cfb5a564b2c697f6f38f244c0050c6e120 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Sat, 22 Aug 2015 01:59:08 +0200 Subject: [PATCH] webadmin: make the traffic info page visible for non-admins --- modules/data/webadmin/tmpl/traffic.tmpl | 23 ++++++++++++++++++++++- modules/webadmin.cpp | 14 ++++++++++++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/modules/data/webadmin/tmpl/traffic.tmpl b/modules/data/webadmin/tmpl/traffic.tmpl index 81d26c5b..d9641481 100644 --- a/modules/data/webadmin/tmpl/traffic.tmpl +++ b/modules/data/webadmin/tmpl/traffic.tmpl @@ -33,6 +33,23 @@ Total IRC Connections + + + Networks + + + + Attached Networks + + + + Client Connections + + + + IRC Connections + + @@ -80,9 +97,13 @@ - +
+

Users

+ +

Traffic

+
diff --git a/modules/webadmin.cpp b/modules/webadmin.cpp index afc967b8..8922b24b 100644 --- a/modules/webadmin.cpp +++ b/modules/webadmin.cpp @@ -78,7 +78,7 @@ public: vParams.push_back(make_pair("user", "")); AddSubPage(std::make_shared("settings", "Global Settings", CWebSubPage::F_ADMIN)); AddSubPage(std::make_shared("edituser", "Your Settings", vParams)); - AddSubPage(std::make_shared("traffic", "Traffic Info", CWebSubPage::F_ADMIN)); + AddSubPage(std::make_shared("traffic", "Traffic Info", vParams)); AddSubPage(std::make_shared("listusers", "Manage Users", CWebSubPage::F_ADMIN)); } @@ -573,7 +573,7 @@ public: return true; } else if (sPageName == "listusers" && spSession->IsAdmin()) { return ListUsersPage(WebSock, Tmpl); - } else if (sPageName == "traffic" && spSession->IsAdmin()) { + } else if (sPageName == "traffic") { return TrafficPage(WebSock, Tmpl); } else if (sPageName == "index") { return true; @@ -1431,6 +1431,7 @@ public: } bool TrafficPage(CWebSock& WebSock, CTemplate& Tmpl) { + std::shared_ptr spSession = WebSock.GetSession(); Tmpl["Title"] = "Traffic Info"; Tmpl["Uptime"] = CZNC::Get().GetUptime(); @@ -1441,6 +1442,11 @@ public: for (const auto& it : msUsers) { CUser* pUser = it.second; + + if (!spSession->IsAdmin() && spSession->GetUser() != it.second) { + continue; + } + vector vNetworks = pUser->GetNetworks(); for (const CIRCNetwork* pNetwork : vNetworks) { @@ -1469,6 +1475,10 @@ public: CZNC::TrafficStatsMap traffic = CZNC::Get().GetTrafficStats(Users, ZNC, Total); for (const auto& it : traffic) { + if (!spSession->IsAdmin() && !spSession->GetUser()->GetUserName().Equals(it.first)) { + continue; + } + CTemplate& l = Tmpl.AddRow("TrafficLoop"); l["Username"] = it.first;