2017-07-03 09:30:10 +02:00
|
|
|
/*!
|
2017-12-20 14:54:05 +01:00
|
|
|
* \copyright Copyright (c) 2014-2017 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));
|
|
|
|
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(""));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-07-03 09:33:28 +02:00
|
|
|
QUrl UrlUtil::addMajorMinor(const QUrl& pOriginUrl, const GlobalStatus& pStatus)
|
2017-07-03 09:30:10 +02:00
|
|
|
{
|
2017-07-03 09:33:28 +02:00
|
|
|
const Result result(pStatus);
|
|
|
|
const QString& major = removePrefix(result.getMajorString());
|
2017-07-03 09:30:10 +02:00
|
|
|
|
|
|
|
QUrlQuery q;
|
|
|
|
q.setQuery(pOriginUrl.query());
|
|
|
|
q.addQueryItem(QStringLiteral("ResultMajor"), major);
|
|
|
|
|
2017-12-20 14:54:05 +01:00
|
|
|
if (result.getMinor() != GlobalStatus::Code::No_Error)
|
2017-07-03 09:30:10 +02:00
|
|
|
{
|
|
|
|
QString minor;
|
|
|
|
|
2017-07-03 09:33:28 +02:00
|
|
|
if (result.isOriginServer())
|
2017-07-03 09:30:10 +02:00
|
|
|
{
|
|
|
|
minor = QStringLiteral("serverError");
|
|
|
|
}
|
2017-07-03 09:33:28 +02:00
|
|
|
else if (result.getMinor() == GlobalStatus::Code::Paos_Error_AL_Communication_Error ||
|
|
|
|
result.getMinor() == GlobalStatus::Code::Paos_Error_DP_Trusted_Channel_Establishment_Failed ||
|
|
|
|
result.getMinor() == GlobalStatus::Code::Paos_Error_SAL_Cancellation_by_User)
|
2017-07-03 09:30:10 +02:00
|
|
|
{
|
2017-07-03 09:33:28 +02:00
|
|
|
minor = removePrefix(result.getMinorString());
|
2017-07-03 09:30:10 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
minor = QStringLiteral("clientError");
|
|
|
|
}
|
|
|
|
|
|
|
|
q.addQueryItem(QStringLiteral("ResultMinor"), minor);
|
|
|
|
}
|
|
|
|
|
|
|
|
QUrl adaptedUrl(pOriginUrl);
|
|
|
|
adaptedUrl.setQuery(q);
|
|
|
|
return adaptedUrl;
|
|
|
|
}
|