Force basic auth on get authentication required error

If the get job got an authentication required error on the account url
(not davUrl! at that stage we always get auth error there), then it is
safe to assume basic auth is used on the server. It is then kind of
pointless to use any other auth mode they will necessarily fail. Only
basic auth will do the job so force it.

Signed-off-by: Kevin Ottens <kevin.ottens@enioka.com>
This commit is contained in:
Kevin Ottens 2021-03-11 18:33:21 +01:00 committed by allexzander (Rebase PR Action)
parent 0d3459e85e
commit a6bcd3af46

View file

@ -903,8 +903,8 @@ void DetermineAuthTypeJob::start()
// Start three parallel requests
// 1. determines whether it's a shib server
auto get = _account->sendRequest("GET", _account->davUrl(), req);
// 1. determines whether it's a basic auth server
auto get = _account->sendRequest("GET", _account->url(), req);
// 2. checks the HTTP auth method.
auto propfind = _account->sendRequest("PROPFIND", _account->davUrl(), req);
@ -919,8 +919,12 @@ void DetermineAuthTypeJob::start()
propfind->setIgnoreCredentialFailure(true);
oldFlowRequired->setIgnoreCredentialFailure(true);
connect(get, &SimpleNetworkJob::finishedSignal, this, [this]() {
_resultGet = Basic;
connect(get, &SimpleNetworkJob::finishedSignal, this, [this, get]() {
if (get->reply()->error() == QNetworkReply::AuthenticationRequiredError) {
_resultGet = Basic;
} else {
_resultGet = LoginFlowV2;
}
_getDone = true;
checkAllDone();
});
@ -991,6 +995,12 @@ void DetermineAuthTypeJob::checkAllDone()
result = WebViewFlow;
}
// If we determined that a simple get gave us an authentication required error
// then the server enforces basic auth and we got no choice but to use this
if (_resultGet == Basic) {
result = Basic;
}
qCInfo(lcDetermineAuthTypeJob) << "Auth type for" << _account->davUrl() << "is" << result;
emit authType(result);
deleteLater();