WebUI: Disable alternative UI in case of the index page being inaccessible

This commit is contained in:
Hanabishi 2025-03-27 08:15:28 +00:00
commit 9223e92559

View file

@ -75,6 +75,7 @@ const QString DEFAULT_SESSION_COOKIE_NAME = u"SID"_s;
const QString WWW_FOLDER = u":/www"_s; const QString WWW_FOLDER = u":/www"_s;
const QString PUBLIC_FOLDER = u"/public"_s; const QString PUBLIC_FOLDER = u"/public"_s;
const QString PRIVATE_FOLDER = u"/private"_s; const QString PRIVATE_FOLDER = u"/private"_s;
const QString INDEX_HTML = u"/index.html"_s;
using namespace std::chrono_literals; using namespace std::chrono_literals;
@ -213,7 +214,7 @@ void WebApplication::sendWebUIFile()
const QString path = (request().path != u"/") const QString path = (request().path != u"/")
? request().path ? request().path
: u"/index.html"_s; : INDEX_HTML;
Path localPath = m_rootFolder Path localPath = m_rootFolder
/ Path(session() ? PRIVATE_FOLDER : PUBLIC_FOLDER) / Path(session() ? PRIVATE_FOLDER : PUBLIC_FOLDER)
@ -227,7 +228,17 @@ void WebApplication::sendWebUIFile()
if (m_isAltUIUsed) if (m_isAltUIUsed)
{ {
if (!Utils::Fs::isRegularFile(localPath)) if (!Utils::Fs::isRegularFile(localPath))
{
#ifdef DISABLE_GUI
if (path == INDEX_HTML)
{
auto *preferences = Preferences::instance();
preferences->setAltWebUIEnabled(false);
preferences->apply();
}
#endif
throw InternalServerErrorHTTPError(tr("Unacceptable file type, only regular file is allowed.")); throw InternalServerErrorHTTPError(tr("Unacceptable file type, only regular file is allowed."));
}
const QString rootFolder = m_rootFolder.data(); const QString rootFolder = m_rootFolder.data();
@ -235,7 +246,17 @@ void WebApplication::sendWebUIFile()
while (fileInfo.path() != rootFolder) while (fileInfo.path() != rootFolder)
{ {
if (fileInfo.isSymLink()) if (fileInfo.isSymLink())
{
#ifdef DISABLE_GUI
if (path == INDEX_HTML)
{
auto *preferences = Preferences::instance();
preferences->setAltWebUIEnabled(false);
preferences->apply();
}
#endif
throw InternalServerErrorHTTPError(tr("Symlinks inside alternative UI folder are forbidden.")); throw InternalServerErrorHTTPError(tr("Symlinks inside alternative UI folder are forbidden."));
}
fileInfo.setFile(fileInfo.path()); fileInfo.setFile(fileInfo.path());
} }