Add API for listing directory content

PR #20314.
This commit is contained in:
Paweł Kotiuk 2024-04-29 20:13:32 +02:00 committed by GitHub
parent 42b87963fd
commit a1af077889
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 35 additions and 0 deletions

View file

@ -36,6 +36,7 @@
#include <QCoreApplication>
#include <QDebug>
#include <QDir>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
@ -62,6 +63,7 @@
#include "base/utils/password.h"
#include "base/utils/string.h"
#include "base/version.h"
#include "apierror.h"
#include "../webapplication.h"
using namespace std::chrono_literals;
@ -1129,6 +1131,38 @@ void AppController::sendTestEmailAction()
app()->sendTestEmail();
}
void AppController::getDirectoryContentAction()
{
requireParams({u"dirPath"_s});
const QString dirPath = params().value(u"dirPath"_s);
if (dirPath.isEmpty() || dirPath.startsWith(u':'))
throw APIError(APIErrorType::BadParams, tr("Invalid directory path"));
const QDir dir {dirPath};
if (!dir.isAbsolute())
throw APIError(APIErrorType::BadParams, tr("Invalid directory path"));
if (!dir.exists())
throw APIError(APIErrorType::NotFound, tr("Directory does not exist"));
const QString visibility = params().value(u"mode"_s, u"all"_s);
const auto parseDirectoryContentMode = [](const QString &visibility) -> QDir::Filters
{
if (visibility == u"dirs")
return QDir::Dirs;
if (visibility == u"files")
return QDir::Files;
if (visibility == u"all")
return (QDir::Dirs | QDir::Files);
throw APIError(APIErrorType::BadParams, tr("Invalid mode, allowed values: %1").arg(u"all, dirs, files"_s));
};
const QStringList dirs = dir.entryList(QDir::NoDotAndDotDot | parseDirectoryContentMode(visibility));
setResult(QJsonArray::fromStringList(dirs));
}
void AppController::networkInterfaceListAction()
{
QJsonArray ifaceList;