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 |
VAR TotalIRCConnections ?> |
+ ELSE ?>
+
+ | Networks |
+ VAR TotalNetworks ?> |
+
+
+ | Attached Networks |
+ VAR AttachedNetworks ?> |
+
+
+ | Client Connections |
+ VAR TotalCConnections ?> |
+
+
+ | IRC Connections |
+ VAR TotalIRCConnections ?> |
+
ENDIF ?>
@@ -80,9 +97,13 @@
ENDIF ?>
- IF IsAdmin && TrafficLoop ?>
+ IF TrafficLoop ?>
+ IF IsAdmin ?>
Users
+ ELSE ?>
+
Traffic
+ ENDIF ?>
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;