QByteArray QAuthenticatorPrivate::calculateResponse(const QByteArray &requestMethod, const QByteArray &path) { QByteArray response; const char *methodString = 0; switch(method) { case QAuthenticatorPrivate::None: methodString = ""; phase = Done; break; case QAuthenticatorPrivate::Plain: response = '\0' + user.toUtf8() + '\0' + password.toUtf8(); phase = Done; break; case QAuthenticatorPrivate::Basic: methodString = "Basic "; response = user.toLatin1() + ':' + password.toLatin1(); response = response.toBase64(); phase = Done; break; case QAuthenticatorPrivate::Login: if (challenge.contains("VXNlciBOYW1lAA==")) { response = user.toUtf8().toBase64(); phase = Phase2; } else if (challenge.contains("UGFzc3dvcmQA")) { response = password.toUtf8().toBase64(); phase = Done; } break; case QAuthenticatorPrivate::CramMd5: break; case QAuthenticatorPrivate::DigestMd5: methodString = "Digest "; response = digestMd5Response(challenge, requestMethod, path); phase = Done; break; case QAuthenticatorPrivate::Ntlm: methodString = "NTLM "; if (challenge.isEmpty()) { response = qNtlmPhase1().toBase64(); if (user.isEmpty()) phase = Done; else phase = Phase2; } else { response = qNtlmPhase3(this, QByteArray::fromBase64(challenge)).toBase64(); phase = Done; } break; } return QByteArray(methodString) + response; }
QByteArray QAuthenticatorPrivate::calculateResponse(const QByteArray &requestMethod, const QByteArray &path) { QByteArray response; const char *methodString = 0; switch(method) { case QAuthenticatorPrivate::None: methodString = ""; phase = Done; break; case QAuthenticatorPrivate::Plain: response = '\0' + user.toUtf8() + '\0' + password.toUtf8(); phase = Done; break; case QAuthenticatorPrivate::Basic: methodString = "Basic "; response = user.toLatin1() + ':' + password.toLatin1(); response = response.toBase64(); phase = Done; break; case QAuthenticatorPrivate::Login: if (challenge.contains("VXNlciBOYW1lAA==")) { response = user.toUtf8().toBase64(); phase = Phase2; } else if (challenge.contains("UGFzc3dvcmQA")) { response = password.toUtf8().toBase64(); phase = Done; } break; case QAuthenticatorPrivate::CramMd5: break; case QAuthenticatorPrivate::DigestMd5: methodString = "Digest "; response = digestMd5Response(challenge, requestMethod, path); phase = Done; break; case QAuthenticatorPrivate::Ntlm: methodString = "NTLM "; if (challenge.isEmpty()) { #if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) QByteArray phase1Token; if (user.isEmpty()) // Only pull from system if no user was specified in authenticator phase1Token = qNtlmPhase1_SSPI(this); if (!phase1Token.isEmpty()) { response = phase1Token.toBase64(); phase = Phase2; } else #endif { response = qNtlmPhase1().toBase64(); if (user.isEmpty()) phase = Done; else phase = Phase2; } } else { #if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) QByteArray phase3Token; if (ntlmWindowsHandles) phase3Token = qNtlmPhase3_SSPI(this, QByteArray::fromBase64(challenge)); if (!phase3Token.isEmpty()) { response = phase3Token.toBase64(); phase = Done; } else #endif { response = qNtlmPhase3(this, QByteArray::fromBase64(challenge)).toBase64(); phase = Done; } } break; } return QByteArray(methodString) + response; }