From 343c2a23e8320610db6017a09182054b802a7fcd Mon Sep 17 00:00:00 2001 From: Patrick Cernko Date: Tue, 5 Sep 2023 06:11:54 +0200 Subject: [PATCH] fixed detection of server version in cmd client similar to gui client: first check status.php for version and then capabilities, only use version string if not empty this also fixes 'File names containing the character ":" are not supported on this file system.' errors in nextcloudcmd (on Linux): The invalidFilenameRegex was set to a static default in case the server version was not set correctly. As newer versions of nextcloud do not return the version in capabilities but status.php, the server version was empty. Signed-off-by: Patrick Cernko --- src/cmd/cmd.cpp | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/cmd/cmd.cpp b/src/cmd/cmd.cpp index 37c456dd1ae0f..2764f7255d19f 100644 --- a/src/cmd/cmd.cpp +++ b/src/cmd/cmd.cpp @@ -442,12 +442,40 @@ int main(int argc, char **argv) account->setTrustCertificates(options.trustSSL); QEventLoop loop; + auto *csjob = new CheckServerJob(account); + csjob->setIgnoreCredentialFailure(true); + QObject::connect(csjob, &CheckServerJob::instanceFound, [&](const QUrl &, const QJsonObject &info) { + // see ConnectionValidator::slotCapabilitiesRecieved: only set server version if not empty + QString serverVersion = CheckServerJob::version(info); + if (!serverVersion.isEmpty()) { + account->setServerVersion(serverVersion); + } + loop.quit(); + }); + QObject::connect(csjob, &CheckServerJob::instanceNotFound, [&]() { + loop.quit(); + }); + QObject::connect(csjob, &CheckServerJob::timeout, [&](const QUrl &) { + loop.quit(); + }); + csjob->start(); + loop.exec(); + + if (csjob->reply()->error() != QNetworkReply::NoError){ + std::cout<<"Error connecting to server for status\n"; + return EXIT_FAILURE; + } + auto *job = new JsonApiJob(account, QLatin1String("ocs/v1.php/cloud/capabilities")); QObject::connect(job, &JsonApiJob::jsonReceived, [&](const QJsonDocument &json) { auto caps = json.object().value("ocs").toObject().value("data").toObject().value("capabilities").toObject(); qDebug() << "Server capabilities" << caps; account->setCapabilities(caps.toVariantMap()); - account->setServerVersion(caps["core"].toObject()["status"].toObject()["version"].toString()); + // see ConnectionValidator::slotCapabilitiesRecieved: only set server version if not empty + QString serverVersion = caps["core"].toObject()["status"].toObject()["version"].toString(); + if (!serverVersion.isEmpty()) { + account->setServerVersion(serverVersion); + } loop.quit(); }); job->start();