20 #include "awsabstractsignature.h"
21 #include "awsabstractsignature_p.h"
137 QString path = QDir::cleanPath(QLatin1Char(
'/') + url.path(QUrl::FullyEncoded));
146 if (path.startsWith(QLatin1String(
"//"))) {
152 if ((url.path().endsWith(QLatin1Char(
'/'))) && (!path.endsWith(QLatin1Char(
'/')))) {
153 path += QLatin1Char(
'/');
180 typedef QPair<QString, QString> QStringPair;
181 QList<QStringPair> list = query.queryItems(QUrl::FullyDecoded);
184 foreach (
const QStringPair &pair, list) {
185 if (!result.isEmpty()) result += QLatin1Char(
'&');
186 result += QString::fromUtf8(QUrl::toPercentEncoding(pair.first)) + QLatin1Char(
'=') +
187 QString::fromUtf8(QUrl::toPercentEncoding(pair.second));
189 return result.toUtf8();
206 case QNetworkAccessManager::DeleteOperation:
return QLatin1String(
"DELETE");
207 case QNetworkAccessManager::HeadOperation:
return QLatin1String(
"HEAD");
208 case QNetworkAccessManager::GetOperation:
return QLatin1String(
"GET");
209 case QNetworkAccessManager::PostOperation:
return QLatin1String(
"POST");
210 case QNetworkAccessManager::PutOperation:
return QLatin1String(
"PUT");
211 case QNetworkAccessManager::CustomOperation:
214 Q_ASSERT_X(
false, Q_FUNC_INFO,
"invalid operation");
245 const bool warnOnNonIdenticalDuplicate)
const
247 if (query.hasQueryItem(key)) {
248 const QString existingValue = query.queryItemValue(key, QUrl::FullyEncoded);
249 const bool existingQueryItemIsIdentical = (existingValue == value);
250 if ((warnOnNonIdenticalDuplicate) && (!existingQueryItemIsIdentical)) {
251 qWarning() <<
"AwsAbstractSignature::setQueryItem Not overwriting existing value for key"
252 << key <<
':' << existingValue;
254 return existingQueryItemIsIdentical;
256 query.addQueryItem(key, value);
bool setQueryItem(QUrlQuery &query, const QString &key, const QString &value, const bool warnOnNonIdenticalDuplicate=true) const
Set a query item, checking for existing values first.
AwsAbstractSignaturePrivate *const d_ptr
Internal d-pointer.
Private implementation for AwsAbstractSignature.
QByteArray canonicalQuery(const QUrlQuery &query) const
Create an AWS Signature canonical query.
AwsAbstractSignature()
Initialises an AwsAbstractSignature object.
virtual ~AwsAbstractSignature()
AwsAbstractSignature destructor.
virtual ~AwsAbstractSignaturePrivate()
AwsAbstractSignaturePrivate destructor.
QString httpMethod(const QNetworkAccessManager::Operation operation) const
Create an AWS Signature request method string.
Interface class for providing AWS signatures.
AwsAbstractSignaturePrivate(AwsAbstractSignature *const q)
Constructs a new AwsAbstractSignaturePrivate object.
QString canonicalPath(const QUrl &url) const
Create an AWS Signature canonical path.