mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-04-29 04:07:49 +02:00
Console: move 'sensitive' info to control page; refinements; hide header buttons for now
This commit is contained in:
parent
7032b4c8ec
commit
cf1719427e
2 changed files with 78 additions and 54 deletions
|
@ -374,7 +374,8 @@ namespace http {
|
||||||
time_t t = divTime.quot;
|
time_t t = divTime.quot;
|
||||||
struct tm *tm = localtime(&t);
|
struct tm *tm = localtime(&t);
|
||||||
char date[128];
|
char date[128];
|
||||||
snprintf(date, sizeof(date), "%02d/%02d/%d %02d:%02d:%02d.%03lld", tm->tm_mday, tm->tm_mon + 1, tm->tm_year + 1900, tm->tm_hour, tm->tm_min, tm->tm_sec, divTime.rem);
|
snprintf(date, sizeof(date), "%02d/%02d/%d %02d:%02d:%02d.%03lld",
|
||||||
|
tm->tm_mday, tm->tm_mon + 1, tm->tm_year + 1900, tm->tm_hour, tm->tm_min, tm->tm_sec, divTime.rem);
|
||||||
return date;
|
return date;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -580,7 +581,6 @@ namespace http {
|
||||||
|
|
||||||
void ShowStatus (std::stringstream& s, bool includeHiddenContent, i2p::http::OutputFormatEnum outputFormat)
|
void ShowStatus (std::stringstream& s, bool includeHiddenContent, i2p::http::OutputFormatEnum outputFormat)
|
||||||
{
|
{
|
||||||
s << "<tr id=\"version\"><td>" << tr("Version") << "</td><td>" VERSION "</td></tr>\r\n";
|
|
||||||
s << "<tr><td>" << tr("Uptime") << "</td><td>";
|
s << "<tr><td>" << tr("Uptime") << "</td><td>";
|
||||||
ShowUptime(s, i2p::context.GetUptime ());
|
ShowUptime(s, i2p::context.GetUptime ());
|
||||||
s << "</td></tr>\r\n";
|
s << "</td></tr>\r\n";
|
||||||
|
@ -664,50 +664,6 @@ namespace http {
|
||||||
}
|
}
|
||||||
s << "<tr><td>" << tr("Build Success") << "</td><td>";
|
s << "<tr><td>" << tr("Build Success") << "</td><td>";
|
||||||
s << i2p::tunnel::tunnels.GetTunnelCreationSuccessRate () << "%</td></tr>\r\n";
|
s << i2p::tunnel::tunnels.GetTunnelCreationSuccessRate () << "%</td></tr>\r\n";
|
||||||
// TODO: Move to separate routerinfo page
|
|
||||||
/*
|
|
||||||
s << "<tr><td>" << tr("Router Caps") << "</td><td>" << i2p::context.GetRouterInfo().GetProperty("caps") << "</td></tr>\r\n";
|
|
||||||
s << "<tr><td>" << tr("Data path") << "</td><td><span class=\"sensitive\">" << i2p::fs::GetUTF8DataDir() << "</span></td></tr>\r\n";
|
|
||||||
s << "<tr><td>" << tr("Router Ident") << "</td><td><span class=\"sensitive\" hidden>" << i2p::context.GetRouterInfo().GetIdentHashBase64() << "</span></td></tr>\r\n";
|
|
||||||
auto family = i2p::context.GetFamily ();
|
|
||||||
if (family.length () > 0)
|
|
||||||
s << "<tr><td>"<< tr("Family") << "</td><td>" << family << "<br>\r\n";
|
|
||||||
if (!i2p::context.GetRouterInfo().GetProperty("family").empty())
|
|
||||||
s << "<tr><td>" << tr("Router Family") << "</td><td><span class=\"sensitive\" hidden>" << i2p::context.GetRouterInfo().GetProperty("family") << "</span></td></tr>\r\n";
|
|
||||||
for (const auto& address : i2p::context.GetRouterInfo().GetAddresses())
|
|
||||||
{
|
|
||||||
s << "<tr>\r\n";
|
|
||||||
if (address->IsNTCP2 () && !address->IsPublishedNTCP2 ())
|
|
||||||
{
|
|
||||||
s << "<td>NTCP2";
|
|
||||||
if (address->host.is_v6 ()) s << "v6";
|
|
||||||
s << "</td><td><span class=\"enabled\">" << tr("supported") << "</span></td>\r\n</tr>\r\n";
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
switch (address->transportStyle)
|
|
||||||
{
|
|
||||||
case i2p::data::RouterInfo::eTransportNTCP:
|
|
||||||
{
|
|
||||||
s << "<td>NTCP";
|
|
||||||
if (address->IsPublishedNTCP2 ()) s << "2";
|
|
||||||
if (address->host.is_v6 ()) s << "v6";
|
|
||||||
s << "</td>\r\n";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case i2p::data::RouterInfo::eTransportSSU:
|
|
||||||
{
|
|
||||||
s << "<td>SSU";
|
|
||||||
if (address->host.is_v6 ())
|
|
||||||
s << "v6";
|
|
||||||
s << "</td>\r\n";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
s << "<td>" << tr("Unknown") << "</td>\r\n";
|
|
||||||
}
|
|
||||||
s << "<td><span class=\"sensitive\" hidden>" << address->host.to_string() << ":" << address->port << "</span></td>\r\n</tr>\r\n";
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
s << "<tr><td>" << tr("Routers") << "</td><td>" << i2p::data::netdb.GetNumRouters () << "</td></tr>\r\n";
|
s << "<tr><td>" << tr("Routers") << "</td><td>" << i2p::data::netdb.GetNumRouters () << "</td></tr>\r\n";
|
||||||
s << "<tr><td>" << tr("Floodfills") << "</td><td>" << i2p::data::netdb.GetNumFloodfills () << "</td></tr>\r\n";
|
s << "<tr><td>" << tr("Floodfills") << "</td><td>" << i2p::data::netdb.GetNumFloodfills () << "</td></tr>\r\n";
|
||||||
s << "<tr><td>" << tr("LeaseSets") << "</td><td>" << i2p::data::netdb.GetNumLeaseSets () << "</td></tr>\r\n";
|
s << "<tr><td>" << tr("LeaseSets") << "</td><td>" << i2p::data::netdb.GetNumLeaseSets () << "</td></tr>\r\n";
|
||||||
|
@ -731,7 +687,7 @@ namespace http {
|
||||||
bool i2cp = i2p::client::context.GetI2CPServer () ? true : false;
|
bool i2cp = i2p::client::context.GetI2CPServer () ? true : false;
|
||||||
bool i2pcontrol; i2p::config::GetOption("i2pcontrol.enabled", i2pcontrol);
|
bool i2pcontrol; i2p::config::GetOption("i2pcontrol.enabled", i2pcontrol);
|
||||||
if (httpproxy || socksproxy || bob || sam || i2cp || i2pcontrol) {
|
if (httpproxy || socksproxy || bob || sam || i2cp || i2pcontrol) {
|
||||||
s << "<tr><th colspan=\"2\">" << tr("Active Router Services") << "</th></tr>\r\n";
|
s << "<tr><th class=\"sectiontitle configuration\" colspan=\"2\"><span>" << tr("Router Services") << "</span></th></tr>";
|
||||||
s << "<tr><td id=\"routerservices\" class=\"center\" colspan=\"2\">";
|
s << "<tr><td id=\"routerservices\" class=\"center\" colspan=\"2\">";
|
||||||
if (httpproxy)
|
if (httpproxy)
|
||||||
s << " <span class=\"routerservice\">HTTP " << tr("Proxy") << "</span> ";
|
s << " <span class=\"routerservice\">HTTP " << tr("Proxy") << "</span> ";
|
||||||
|
@ -1141,8 +1097,54 @@ namespace http {
|
||||||
|
|
||||||
static void ShowCommands (std::stringstream& s, uint32_t token)
|
static void ShowCommands (std::stringstream& s, uint32_t token)
|
||||||
{
|
{
|
||||||
std::string webroot; i2p::config::GetOption("http.webroot", webroot);
|
s << "<tr><th class=\"sectiontitle configuration\" colspan=\"2\"><span>" << tr("Router Configuration") << "</span></th></tr>";
|
||||||
|
s << "<tr id=\"version\"><td>" << tr("Version") << "</td><td>" VERSION "</td></tr>\r\n";
|
||||||
|
s << "<tr><td>" << tr("Router Ident") << "</td><td><span class=\"sensitive\" hidden>"
|
||||||
|
<< i2p::context.GetRouterInfo().GetIdentHashBase64() << "</span></td></tr>\r\n";
|
||||||
|
s << "<tr><td>" << tr("Router Caps") << "</td><td>" << i2p::context.GetRouterInfo().GetProperty("caps") << "</td></tr>\r\n";
|
||||||
|
if (!i2p::context.GetRouterInfo().GetProperty("family").empty())
|
||||||
|
s << "<tr><td>" << tr("Router Family") << "</td><td><span class=\"sensitive\" hidden>"
|
||||||
|
<< i2p::context.GetRouterInfo().GetProperty("family") << "</span></td></tr>\r\n";
|
||||||
|
auto family = i2p::context.GetFamily ();
|
||||||
|
if (family.length () > 0)
|
||||||
|
s << "<tr><td>"<< tr("Family") << "</td><td>" << family << "<br>\r\n";
|
||||||
|
for (const auto& address : i2p::context.GetRouterInfo().GetAddresses())
|
||||||
|
{
|
||||||
|
s << "<tr>\r\n";
|
||||||
|
if (address->IsNTCP2 () && !address->IsPublishedNTCP2 ())
|
||||||
|
{
|
||||||
|
s << "<td>NTCP2";
|
||||||
|
if (address->host.is_v6 ()) s << "v6";
|
||||||
|
s << "</td><td><span class=\"enabled\">" << tr("supported") << "</span></td>\r\n</tr>\r\n";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
switch (address->transportStyle)
|
||||||
|
{
|
||||||
|
case i2p::data::RouterInfo::eTransportNTCP:
|
||||||
|
{
|
||||||
|
s << "<td>NTCP";
|
||||||
|
if (address->IsPublishedNTCP2 ()) s << "2";
|
||||||
|
if (address->host.is_v6 ()) s << "v6";
|
||||||
|
s << "</td>\r\n";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case i2p::data::RouterInfo::eTransportSSU:
|
||||||
|
{
|
||||||
|
s << "<td>SSU";
|
||||||
|
if (address->host.is_v6 ())
|
||||||
|
s << "v6";
|
||||||
|
s << "</td>\r\n";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
s << "<td>" << tr("Unknown") << "</td>\r\n";
|
||||||
|
}
|
||||||
|
s << "<td><span class=\"sensitive\" hidden>" << address->host.to_string() << ":" << address->port << "</span></td>\r\n</tr>\r\n";
|
||||||
|
}
|
||||||
|
s << "<tr><td>" << tr("Data path") << "</td><td><span class=\"sensitive\">" << i2p::fs::GetUTF8DataDir() << "</span></td></tr>\r\n";
|
||||||
|
|
||||||
|
|
||||||
|
std::string webroot; i2p::config::GetOption("http.webroot", webroot);
|
||||||
s << "<tr><th class=\"sectiontitle\" colspan=\"2\"><span>" << tr("Router Commands") << "</span></th></tr>"
|
s << "<tr><th class=\"sectiontitle\" colspan=\"2\"><span>" << tr("Router Commands") << "</span></th></tr>"
|
||||||
<< "<tr class=\"chrome\"><td class=\"center\" colspan=\"2\">\r\n";
|
<< "<tr class=\"chrome\"><td class=\"center\" colspan=\"2\">\r\n";
|
||||||
s << " <a id=\"homelink\" href=\"" << webroot << "?cmd="
|
s << " <a id=\"homelink\" href=\"" << webroot << "?cmd="
|
||||||
|
@ -1183,14 +1185,16 @@ namespace http {
|
||||||
s << " <a href=\"" << webroot << "?cmd="
|
s << " <a href=\"" << webroot << "?cmd="
|
||||||
<< HTTP_COMMAND_SHUTDOWN_NOW << "&token=" << token << "\">"
|
<< HTTP_COMMAND_SHUTDOWN_NOW << "&token=" << token << "\">"
|
||||||
<< tr("Force shutdown") << "</a></td></tr>\r\n";
|
<< tr("Force shutdown") << "</a></td></tr>\r\n";
|
||||||
}
|
/* TODO graceful shutdown button in header with .notify dialog if transit tunnels
|
||||||
/* only one option? displayed in the header
|
active to offer option to shutdown immediately
|
||||||
|
only one option? displayed in the header
|
||||||
|
*/
|
||||||
} else {
|
} else {
|
||||||
s << " <a href=\"" << webroot << "?cmd="
|
s << " <a href=\"" << webroot << "?cmd="
|
||||||
<< HTTP_COMMAND_SHUTDOWN_NOW << "&token="
|
<< HTTP_COMMAND_SHUTDOWN_NOW << "&token="
|
||||||
<< token << "\">" << tr("Shutdown") << "</a></td></tr>\r\n";
|
<< token << "\">" << tr("Shutdown") << "</a></td></tr>\r\n";
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
std::string styleFile = i2p::fs::DataDirPath ("webconsole/style.css");
|
std::string styleFile = i2p::fs::DataDirPath ("webconsole/style.css");
|
||||||
if (i2p::fs::Exists(styleFile)) {
|
if (i2p::fs::Exists(styleFile)) {
|
||||||
s << "<tr class=\"chrome\"><td class=\"center\" colspan=\"2\"><a href=\"" << webroot << "?cmd="
|
s << "<tr class=\"chrome\"><td class=\"center\" colspan=\"2\"><a href=\"" << webroot << "?cmd="
|
||||||
|
|
|
@ -126,6 +126,7 @@ a, label, button, #navlinks, .sectiontitle span, .chrome {
|
||||||
font-size: 0;
|
font-size: 0;
|
||||||
background: var(--shutdown) no-repeat center center / 24px;
|
background: var(--shutdown) no-repeat center center / 24px;
|
||||||
mix-blend-mode: luminosity;
|
mix-blend-mode: luminosity;
|
||||||
|
display: none; /* while inactive */
|
||||||
}
|
}
|
||||||
|
|
||||||
#enabletransit, #disabletransit {
|
#enabletransit, #disabletransit {
|
||||||
|
@ -413,11 +414,11 @@ tr {
|
||||||
border-bottom: 1px solid var(--border);
|
border-bottom: 1px solid var(--border);
|
||||||
}
|
}
|
||||||
|
|
||||||
tr#version, tr#version ~ tr:nth-child(odd), tr.chrome, .listitem:nth-child(odd) {
|
tr#version, tr#version ~ tr:nth-child(odd), tr.chrome, .listitem:nth-child(odd), tr:not(.chrome):nth-child(odd) {
|
||||||
background: linear-gradient(to bottom, rgba(16,0,16,.5), rgba(8,0,8,.5));
|
background: linear-gradient(to bottom, rgba(16,0,16,.5), rgba(8,0,8,.5));
|
||||||
}
|
}
|
||||||
|
|
||||||
tr#version ~ tr:nth-child(even), .listitem:nth-child(even) {
|
tr#version ~ tr:nth-child(even), .listitem:nth-child(even), tr:not(.chrome):nth-child(even) {
|
||||||
background: linear-gradient(to bottom, rgba(32,0,32,.5), rgba(24,0,24,.5));
|
background: linear-gradient(to bottom, rgba(32,0,32,.5), rgba(24,0,24,.5));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -425,6 +426,10 @@ tr tr, /*tr#version, tr#version ~ tr:nth-child(odd),*/ .tableitem tr:nth-child(o
|
||||||
background: var(--tr-inner) !important;
|
background: var(--tr-inner) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tr.chrome {
|
||||||
|
background: linear-gradient(to bottom, rgba(16,0,16,.5), rgba(8,0,8,.5)) !important;
|
||||||
|
}
|
||||||
|
|
||||||
.tableitem tr:nth-child(even) {
|
.tableitem tr:nth-child(even) {
|
||||||
background: var(--tr) !important;
|
background: var(--tr) !important;
|
||||||
}
|
}
|
||||||
|
@ -567,6 +572,10 @@ td:last-child {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.sectiontitle.configuration ~ tr td.thin {
|
||||||
|
width: 13% !important;
|
||||||
|
}
|
||||||
|
|
||||||
#navlinks {
|
#navlinks {
|
||||||
padding: 10px 2px !important;
|
padding: 10px 2px !important;
|
||||||
font-size: 100%;
|
font-size: 100%;
|
||||||
|
@ -599,7 +608,14 @@ td:last-child {
|
||||||
background: var(--no) no-repeat left 12px center / 10px;
|
background: var(--no) no-repeat left 12px center / 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sensitive {
|
#main .enabled.fixedsize {
|
||||||
|
margin-top: -5px;
|
||||||
|
width: 14px;
|
||||||
|
height: 14px;
|
||||||
|
background: var(--yes) no-repeat center center / 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*.sensitive {
|
||||||
filter: blur(8px);
|
filter: blur(8px);
|
||||||
display: inline-block !important;
|
display: inline-block !important;
|
||||||
max-width: 120px;
|
max-width: 120px;
|
||||||
|
@ -615,6 +631,10 @@ td:last-child {
|
||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
word-break: break-all;
|
word-break: break-all;
|
||||||
filter: blur(0);
|
filter: blur(0);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
.sensitive {
|
||||||
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.arrowright, .arrowleft, .arrowleftright, .arrowup, .arrowdown {
|
.arrowright, .arrowleft, .arrowleftright, .arrowup, .arrowdown {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue