libqtaws  0.1.0
UnofficialAWSlibraryforQt-InternalDocumentation
Public Member Functions | Protected Types | Static Protected Member Functions | Friends | List of all members
AwsSignatureV1Private Class Reference

Private implementation for AwsSignatureV1. More...

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

Public Member Functions

 AwsSignatureV1Private (AwsSignatureV1 *const q)
 Constructs a new AwsSignatureV1Private object. More...
 
QByteArray canonicalQuery (const QUrlQuery &query) const
 Create an AWS Signature version 1 canonical query. More...
 
- Public Member Functions inherited from AwsSignatureV0Private
 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...
 
- 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...
 

Protected Types

typedef QPair< QString, QString > QStringPair
 A key-value pair of strings for working with QUrlQuery::queryItems() results.
 

Static Protected Member Functions

static bool caseInsensitiveLessThan (const QStringPair &pair1, const QStringPair &pair2)
 Is a key-value pair less than another key-value pair? More...
 

Friends

class TestAwsSignatureV1
 

Additional Inherited Members

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

Detailed Description

Private implementation for AwsSignatureV1.

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 awssignaturev1_p.h.

Constructor & Destructor Documentation

AwsSignatureV1Private::AwsSignatureV1Private ( AwsSignatureV1 *const  q)

Constructs a new AwsSignatureV1Private object.

Parameters
qPointer to this object's public AwsSignatureV1 instance.

Definition at line 88 of file awssignaturev1.cpp.

89 {
90 
91 }
AwsSignatureV0Private(AwsSignatureV0 *const q)
Constructs a new AwsSignatureV0Private object.

Member Function Documentation

QByteArray AwsSignatureV1Private::canonicalQuery ( const QUrlQuery &  query) const
virtual

Create an AWS Signature version 1 canonical query.

This function returns a string containing all non-empty query parameters in sorted order (case-insensitive), with no separators at all.

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:

ActionCreateQueueAWSAccessKeyIdAKIAIOSFODNN7EXAMPLEExpires2007-01-12T12:00:00ZQueueNamequeue2SignatureVersion1Version2006-04-01

This function is very similar to AwsAbstractSignature::canonicalQuery(), except that:

  1. this function sorts case-insensitively, whereas AwsAbstractSignature::canonicalQuery() use a byte sort (ie is case sensitive); and
  2. this function excludes parameters with empty values, where AwsAbstractSignature::canonicalQuery() includes all query parameters, regardless of content; and
  3. this function does not use any separators in the generated string, whereas AwsAbstractSignature::canonicalQuery() uses & and = separators just as you would expect to see them in a typical query string; and
  4. this function does not perform any URL encoding of the query parameters, whereas AwsAbstractSignature::canonicalQuery() URL encodes both parameter keys and values.

The AwsAbstractSignature::canonicalQuery() function is used by the later signature algorithms, such as AwsSignatureV2 and AwsSignatureV4, as required by Amazon. Instead this function is specific to version 1 signatures.

Parameters
queryQuery to encode the HTTP query string from.
Returns
An AWS Signature canonical query string.
See also
http://docs.aws.amazon.com/AmazonDevPay/latest/DevPayDeveloperGuide/LSAPI_Auth_REST.html#CalculatingHMACSignature

Reimplemented from AwsSignatureV0Private.

Definition at line 133 of file awssignaturev1.cpp.

References caseInsensitiveLessThan().

134 {
135  QList<QStringPair> list = query.queryItems(QUrl::FullyDecoded);
136  qSort(list.begin(), list.end(), AwsSignatureV1Private::caseInsensitiveLessThan);
137  QString result;
138  foreach (const QStringPair &pair, list) {
139  if (!pair.second.isEmpty()) {
140  result += pair.first + pair.second;
141  }
142  }
143  return result.toUtf8();
144 }
static bool caseInsensitiveLessThan(const QStringPair &pair1, const QStringPair &pair2)
Is a key-value pair less than another key-value pair?
QPair< QString, QString > QStringPair
A key-value pair of strings for working with QUrlQuery::queryItems() results.
bool AwsSignatureV1Private::caseInsensitiveLessThan ( const QStringPair pair1,
const QStringPair pair2 
)
staticprotected

Is a key-value pair less than another key-value pair?

This static function is used by the canonicalQuery function to sort query string parameters in case-insensitive order, via Qt's qSort function.

Parameters
pair1The first key-value (query string parameter) pair.
pair2The second key-value (query string parameter) pair.
Returns
true if pair1 is less than pair2.

Definition at line 159 of file awssignaturev1.cpp.

Referenced by canonicalQuery().

160 {
161  if (pair1.first.toLower() < pair2.first.toLower())
162  return true;
163  if (pair1.first.toLower() > pair2.first.toLower())
164  return false;
165  return (pair1.second.toLower() < pair2.second.toLower());
166 }

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