AusweisApp2/src/network/UrlUtil.cpp

108 lines
2.6 KiB
C++
Raw Normal View History

2017-07-03 09:30:10 +02:00
/*!
2019-05-22 10:08:38 +02:00
* \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany
2017-07-03 09:30:10 +02:00
*/
#include "UrlUtil.h"
#include <QHostAddress>
#include <QLoggingCategory>
#include <QRegularExpression>
#include <QUrlQuery>
Q_DECLARE_LOGGING_CATEGORY(network)
using namespace governikus;
QUrl UrlUtil::getUrlOrigin(const QUrl& pUrl)
{
// get default port for scheme
int defaultPort = -1;
QString scheme = pUrl.scheme();
if (scheme == QLatin1String("http"))
{
defaultPort = 80;
}
else if (scheme == QLatin1String("https"))
{
defaultPort = 443;
}
QUrl origin;
origin.setScheme(scheme);
origin.setHost(pUrl.host());
origin.setPort(pUrl.port(defaultPort));
2019-01-03 15:06:22 +01:00
qDebug() << "Normalized URL from" << pUrl << "to" << origin;
2017-07-03 09:30:10 +02:00
return origin;
}
bool UrlUtil::isMatchingSameOriginPolicy(const QUrl& pUrl1, const QUrl& pUrl2)
{
QUrl urlOrigin1 = UrlUtil::getUrlOrigin(pUrl1);
QUrl urlOrigin2 = UrlUtil::getUrlOrigin(pUrl2);
bool sameOriginPolicyCheckResult = (urlOrigin1 == urlOrigin2);
qCDebug(network) << "SOP-Check(" << urlOrigin1.toString() << "," << urlOrigin2.toString() << ")=" << sameOriginPolicyCheckResult;
return sameOriginPolicyCheckResult;
}
QString UrlUtil::removePrefix(QString pStr)
{
return pStr.replace(QRegularExpression(QStringLiteral("(.*)#")), QLatin1String(""));
}
2019-01-03 15:06:22 +01:00
QString UrlUtil::getSuffix(ECardApiResult::Minor pMinor)
2017-07-03 09:30:10 +02:00
{
2019-01-03 15:06:22 +01:00
return removePrefix(ECardApiResult::getMinorString(pMinor));
}
2017-07-03 09:30:10 +02:00
2019-01-03 15:06:22 +01:00
QUrl UrlUtil::addMajorMinor(const QUrl& pOriginUrl, const GlobalStatus& pStatus)
{
2017-07-03 09:30:10 +02:00
QUrlQuery q;
q.setQuery(pOriginUrl.query());
2019-01-03 15:06:22 +01:00
const ECardApiResult::Major majorEnumVal = pStatus.isError() ? ECardApiResult::Major::Error : ECardApiResult::Major::Ok;
QString major = removePrefix(ECardApiResult::getMajorString(majorEnumVal));
2017-07-03 09:30:10 +02:00
q.addQueryItem(QStringLiteral("ResultMajor"), major);
2019-01-03 15:06:22 +01:00
if (pStatus.isError())
2017-07-03 09:30:10 +02:00
{
QString minor;
2019-01-03 15:06:22 +01:00
if (pStatus.isOriginServer())
2017-07-03 09:30:10 +02:00
{
minor = QStringLiteral("serverError");
}
else
{
2019-01-03 15:06:22 +01:00
switch (pStatus.getStatusCode())
{
case GlobalStatus::Code::Paos_Error_AL_Communication_Error:
minor = getSuffix(ECardApiResult::Minor::AL_Communication_Error);
break;
case GlobalStatus::Code::Paos_Error_DP_Trusted_Channel_Establishment_Failed:
minor = getSuffix(ECardApiResult::Minor::DP_Trusted_Channel_Establishment_Failed);
break;
case GlobalStatus::Code::Paos_Error_SAL_Cancellation_by_User:
minor = getSuffix(ECardApiResult::Minor::SAL_Cancellation_by_User);
break;
default:
minor = QStringLiteral("clientError");
break;
}
2017-07-03 09:30:10 +02:00
}
q.addQueryItem(QStringLiteral("ResultMinor"), minor);
}
QUrl adaptedUrl(pOriginUrl);
adaptedUrl.setQuery(q);
return adaptedUrl;
}