yacreader/YACReaderLibrary/server/controllers/webui/statuspagecontroller.cpp
2023-12-16 08:28:42 +01:00

129 lines
5.2 KiB
C++

#include "statuspagecontroller.h"
#include "template.h"
#include "yacreader_global.h"
#include "db_helper.h"
#include "yacreader_libraries.h"
#include <QSysInfo>
using stefanfrings::HttpRequest;
using stefanfrings::HttpResponse;
using stefanfrings::Template;
StatusPageController::StatusPageController() { }
void StatusPageController::service(HttpRequest &request, HttpResponse &response)
{
response.setHeader("Content-Type", "text/html; charset=utf-8");
response.setHeader("Connection", "close");
Template StatusPage = Template(
QStringLiteral(
"<!DOCTYPE html>\n"
"<html lang='en'>\n"
"<head>\n"
" <meta charset='UTF-8'>\n"
" <meta name='viewport' content='width=device-width, initial-scale=1.0'>\n"
" <link href='https://fonts.googleapis.com/css?family=Open+Sans:300,400,700,300italic,400italic,800italic' rel='stylesheet' type='text/css'>"
" <title>YACReaderLibrary Server</title>\n"
" <style>\n"
" body {\n"
" font-family: 'Open Sans', sans-serif;\n"
" margin: 0;\n"
" padding: 0;\n"
" }\n"
" header {\n"
" text-align: center;\n"
" padding: 20px;\n"
" padding-top: 80px;\n"
" background-color: #fff;\n"
" color: rgb(34, 34, 34);\n"
" }\n"
" header h1 {\n"
" font-size: 40px;\n"
" font-style: normal;\n"
" font-weight: 400;\n"
" }\n"
" img {\n"
" max-width: 100%;\n"
" height: auto;\n"
" }\n"
" h1 {\n"
" color: rgb(34, 34, 34);\n"
" }\n"
" section {\n"
" margin: 20px;\n"
" }\n"
" table {\n"
" border-collapse: collapse;\n"
" margin: 20px auto;\n"
" }\n"
" th, td {\n"
" border: 1px solid #ddd;\n"
" padding: 8px;\n"
" text-align: left;\n"
" }\n"
" th {\n"
" background-color: #eee;\n"
" color: rgb(34, 34, 34);\n"
" }\n"
" </style>\n"
"</head>\n"
"<body>\n"
" <header>\n"
" <img src='/images/webui/YACLibraryServer.svg' alt='YACReaderLibrary Server Logo' width='200px'>\n"
" <h1>YACReaderLibrary Server <span style = 'display: block;'>is up and running.</span></h1>"
" <p>YACReader {yr.version}</p>\n"
" <p>Server {server.version}</p>\n"
" <p>OS: {os.name} {os.version}</p>\n"
" <p>Port: {os.port}</p>\n"
" </header>\n"
" <section>\n"
" <table>\n"
" <thead>\n"
" <tr>\n"
" <th>Library</th>\n"
" <th>Path</th>\n"
" </tr>\n"
" </thead>\n"
" <tbody>\n"
" {loop Library}\n"
" <tr>\n"
" <td>{Library.Name}</td>\n"
" <td>{Library.Path}</td>\n"
" </tr>\n"
" {end Library}\n"
" </tbody>\n"
" </table>\n"
" </section>\n"
"</body>\n"
"</html>\n"),
"StatusPage");
StatusPage.enableWarnings();
// Set template variables
StatusPage.setVariable("os.name", QSysInfo::prettyProductName());
StatusPage.setVariable("os.version", QSysInfo::productVersion());
// Getting the port from the request is basically a hack, but should do the trick
StatusPage.setVariable("os.port", QString(request.getHeader("host")).split(":")[1]);
StatusPage.setVariable("server.version", SERVER_VERSION_NUMBER);
StatusPage.setVariable("yr.version", VERSION);
// Get library info
YACReaderLibraries libraries = DBHelper::getLibraries();
QList<QString> library_names = libraries.getNames();
size_t num_libs = libraries.getNames().size();
// Fill template
StatusPage.loop("Library", num_libs);
for (size_t i = 0; i < num_libs; i++) {
StatusPage.setVariable(QString("Library%1.Name").arg(i), library_names.at(i));
StatusPage.setVariable(QString("Library%1.Path").arg(i), libraries.getPath(library_names.at(i)));
}
response.write(StatusPage.toUtf8(), true);
}