libqtaws  0.1.0
UnofficialAWSlibraryforQt-InternalDocumentation
Public Member Functions | Friends | List of all members
AwsSignatureV0Private Class Reference

Private implementation for AwsSignatureV0. More...

Inheritance diagram for AwsSignatureV0Private:
Inheritance graph
[legend]
Collaboration diagram for AwsSignatureV0Private:
Collaboration graph
[legend]

Public Member Functions

 AwsSignatureV0Private (AwsSignatureV0 *const q)
 Constructs a new AwsSignatureV0Private object. More...
 
virtual ~AwsSignatureV0Private ()
 AwsSignatureV0Private destructor.
 
void adornRequest (QNetworkRequest &request, const AwsAbstractCredentials &credentials) const
 Add AWS Signature Version 0 adornments to an AWS request. More...
 
virtual QByteArray canonicalQuery (const QUrlQuery &query) const
 Create an AWS Signature version 0 canonical query. More...
 
- Public Member Functions inherited from AwsAbstractSignaturePrivate
virtual ~AwsAbstractSignaturePrivate ()
 AwsAbstractSignaturePrivate destructor. More...
 
 AwsAbstractSignaturePrivate (AwsAbstractSignature *const q)
 Constructs a new AwsAbstractSignaturePrivate object. More...
 
QString canonicalPath (const QUrl &url) const
 Create an AWS Signature canonical path. More...
 
QByteArray canonicalQuery (const QUrlQuery &query) const
 Create an AWS Signature canonical query. More...
 
QString httpMethod (const QNetworkAccessManager::Operation operation) const
 Create an AWS Signature request method string. More...
 
bool setQueryItem (QUrlQuery &query, const QString &key, const QString &value, const bool warnOnNonIdenticalDuplicate=true) const
 Set a query item, checking for existing values first. More...
 

Friends

class TestAwsSignatureV0
 

Additional Inherited Members

- Protected Attributes inherited from AwsAbstractSignaturePrivate
AwsAbstractSignature *const q_ptr
 Internal q-pointer.
 

Detailed Description

Private implementation for AwsSignatureV0.

Warning
This is an internal private implementation class, and as such external should code should not depend directly on anything contained within this class.
See also
http://docs.aws.amazon.com/general/latest/gr/signature-version-4.html

Definition at line 32 of file awssignaturev0_p.h.

Constructor & Destructor Documentation

AwsSignatureV0Private::AwsSignatureV0Private ( AwsSignatureV0 *const  q)

Constructs a new AwsSignatureV0Private object.

Parameters
qPointer to this object's public AwsSignatureV0 instance.

Definition at line 136 of file awssignaturev0.cpp.

137 {
138 
139 }
AwsAbstractSignaturePrivate(AwsAbstractSignature *const q)
Constructs a new AwsAbstractSignaturePrivate object.

Member Function Documentation

void AwsSignatureV0Private::adornRequest ( QNetworkRequest &  request,
const AwsAbstractCredentials credentials 
) const

Add AWS Signature Version 0 adornments to an AWS request.

In addition to service-specific request parameters, Amazon requires that version 1 signatures contain a number of common query parameters. This functions adds those query parameters to request if they're not already present.

The query parameters added by this function, as required by Amazon, are:

  • AWSAccessKeyId - set to credentials.accessKeyId().
  • SignatureVersion - set to 0.
  • Timestamp - set to a current UTC timestamp in an ISO 8601 format, like 2013-10-30T12:34:56Z, unless an Expires value is present, in which case no Timestamp parameter is added.
Note
The SignatureVersion header is optional for version 0 signatures, but this function always includes it for clarity.
Parameters
requestRequest to adorn.
credentialsCredentials to use when adorning request.
See also
http://s3.amazonaws.com/awsdocs/SQS/20070501/sqs-dg-20070501.pdf

Definition at line 173 of file awssignaturev0.cpp.

References AwsAbstractCredentials::accessKeyId(), and AwsAbstractSignaturePrivate::setQueryItem().

175 {
176  Q_Q(const AwsSignatureV0);
177 
178  // Set / add the necessary query items.
179  QUrl url = request.url();
180  QUrlQuery query(url);
181  setQueryItem(query, QLatin1String("AWSAccessKeyId"), credentials.accessKeyId());
182  setQueryItem(query, QLatin1String("SignatureVersion"), QString::fromLatin1("%1").arg(q->version()));
183 
184  // Amazon: "Query requests must include either Timestamp or Expires, but not both."
185  // See http://s3.amazonaws.com/awsdocs/SQS/20070501/sqs-dg-20070501.pdf
186  if (!query.hasQueryItem(QLatin1String("Expires"))) {
187  setQueryItem(query, QLatin1String("Timestamp"),
188  QString::fromUtf8(QUrl::toPercentEncoding(
189  QDateTime::currentDateTimeUtc().toString(QLatin1String("yyyy-MM-ddThh:mm:ssZ"))
190  )),
191  false); // Don't warn if its already set to something else.
192  }
193 
194  // If we've touched the query items (likely), then update the request.
195  if (query != QUrlQuery(url.query())) {
196  qDebug() << Q_FUNC_INFO << url;
197  url.setQuery(query);
198  qDebug() << Q_FUNC_INFO << url;
199  request.setUrl(url);
200  }
201 }
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 QString accessKeyId() const =0
AWS access key ID for this credentials object.
Implements AWS Signature Version 0 (deprecated by Amazon).
QByteArray AwsSignatureV0Private::canonicalQuery ( const QUrlQuery &  query) const
virtual

Create an AWS Signature version 0 canonical query.

This function returns a string containing the concatenation of Action and timestamp (or Expires) query parameters.

For example, for the following SQS query string:

?Action=CreateQueue&QueueName=queue2&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&SignatureVersion=1&Expires=2007-01-12T12:00:00Z&Version=2006-04-01

this function will return the following canonical form:

CreateQueue2007-01-12T12:00:00Z
Parameters
queryQuery to encode the HTTP query string from.
Precondition
query must already contain an Action and either a Timestamp or Expires query paramter. See adornRequest().
Returns
An AWS Signature canonical query string.
See also
adornRequest()
http://s3.amazonaws.com/awsdocs/SQS/20070501/sqs-dg-20070501.pdf

Reimplemented in AwsSignatureV1Private.

Definition at line 229 of file awssignaturev0.cpp.

230 {
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");
234 
235  return (query.queryItemValue(QLatin1String("Action")) + query.queryItemValue(QLatin1String(
236  (query.hasQueryItem(QLatin1String("Timestamp"))) ? "Timestamp" : "Expires"))).toUtf8();
237 }

The documentation for this class was generated from the following files: