20 #include "awssignaturev0.h" 
   21 #include "awssignaturev0_p.h" 
   23 #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) && QT_VERSION < QT_VERSION_CHECK(5, 1, 0) 
   24 #include "qmessageauthenticationcode.h" 
   26 #include <QMessageAuthenticationCode> 
   29 #include <QCryptographicHash> 
   31 #include <QNetworkRequest> 
   81                           QNetworkRequest &request, 
const QByteArray &data)
 const 
   88 #ifndef QTAWS_ALLOW_INSECURE_SIGNATURES 
   89     if (request.url().scheme() != QString::fromLatin1(
"https")) {
 
   90         qWarning(
"AwsSignatureV%d::sign Refusing to sign insecure (non-HTTPS) request", 
version());
 
   91         Q_ASSERT_X(
false, Q_FUNC_INFO, 
"insecure V1 signatures not enabled");
 
   97     d->adornRequest(request, credentials);
 
  100     const QByteArray stringToSign = d->canonicalQuery(QUrlQuery(request.url().query()));
 
  101     const QString signature = QString::fromUtf8(QUrl::toPercentEncoding(QString::fromUtf8(
 
  102         QMessageAuthenticationCode::hash(stringToSign, credentials.
secretKey().toUtf8(),
 
  103                                          QCryptographicHash::Sha1).toBase64())));
 
  106     QUrl url = request.url();
 
  107     url.setQuery(url.query() + QLatin1String(
"&Signature=") + signature);
 
  179     QUrl url = request.url();
 
  180     QUrlQuery query(url);
 
  182     setQueryItem(query, QLatin1String(
"SignatureVersion"), QString::fromLatin1(
"%1").arg(q->version()));
 
  186     if (!query.hasQueryItem(QLatin1String(
"Expires"))) {
 
  188                         QString::fromUtf8(QUrl::toPercentEncoding(
 
  189                             QDateTime::currentDateTimeUtc().toString(QLatin1String(
"yyyy-MM-ddThh:mm:ssZ"))
 
  195     if (query != QUrlQuery(url.query())) {
 
  196         qDebug() << Q_FUNC_INFO << url;
 
  198         qDebug() << Q_FUNC_INFO << url;
 
  231     Q_ASSERT_X(query.hasQueryItem(QLatin1String(
"Action")), Q_FUNC_INFO, 
"Action query parameter required");
 
  232     Q_ASSERT_X(query.hasQueryItem(QLatin1String(
"Timestamp")) || query.hasQueryItem(QLatin1String(
"Expires")),
 
  233                Q_FUNC_INFO, 
"Timestamp or Expires query parameter required");
 
  235     return (query.queryItemValue(QLatin1String(
"Action")) + query.queryItemValue(QLatin1String(
 
  236                 (query.hasQueryItem(QLatin1String(
"Timestamp"))) ? 
"Timestamp" : 
"Expires"))).toUtf8();
 
AwsSignatureV0()
Constructs a new AwsSignatureV0 object. 
bool setQueryItem(QUrlQuery &query, const QString &key, const QString &value, const bool warnOnNonIdenticalDuplicate=true) const 
Set a query item, checking for existing values first. 
virtual int version() const 
AWS Signature version implemented by this class. 
virtual QByteArray canonicalQuery(const QUrlQuery &query) const 
Create an AWS Signature version 0 canonical query. 
Private implementation for AwsAbstractSignature. 
virtual QString secretKey() const =0
AWS secret access key for this credentials object. 
Interface class for providing AWS credentials. 
Private implementation for AwsSignatureV0. 
virtual void sign(const AwsAbstractCredentials &credentials, const QNetworkAccessManager::Operation operation, QNetworkRequest &request, const QByteArray &data=QByteArray()) const 
Sign an AWS request. 
AwsSignatureV0Private(AwsSignatureV0 *const q)
Constructs a new AwsSignatureV0Private object. 
void adornRequest(QNetworkRequest &request, const AwsAbstractCredentials &credentials) const 
Add AWS Signature Version 0 adornments to an AWS request. 
virtual ~AwsSignatureV0Private()
AwsSignatureV0Private destructor. 
virtual QString accessKeyId() const =0
AWS access key ID for this credentials object. 
Implements AWS Signature Version 0 (deprecated by Amazon). 
Interface class for providing AWS signatures.