Skip to content

Commit

Permalink
fixed detection of server version in cmd client similar to gui client:
Browse files Browse the repository at this point in the history
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 <errror@errror.org>
  • Loading branch information
Patrick Cernko committed Sep 5, 2023
1 parent 270f6bf commit b967dd9
Showing 1 changed file with 29 additions and 1 deletion.
30 changes: 29 additions & 1 deletion src/cmd/cmd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down

0 comments on commit b967dd9

Please sign in to comment.