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

Implements AWS Signature Version 0 (deprecated by Amazon). More...

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

Public Member Functions

 AwsSignatureV0 ()
 Constructs a new AwsSignatureV0 object. More...
 
virtual void sign (const AwsAbstractCredentials &credentials, const QNetworkAccessManager::Operation operation, QNetworkRequest &request, const QByteArray &data=QByteArray()) const
 Sign an AWS request. More...
 
virtual int version () const
 AWS Signature version implemented by this class. More...
 
- Public Member Functions inherited from AwsAbstractSignature
 AwsAbstractSignature ()
 Initialises an AwsAbstractSignature object. More...
 
virtual ~AwsAbstractSignature ()
 AwsAbstractSignature destructor.
 

Protected Member Functions

 AwsSignatureV0 (AwsSignatureV0Private *const d)
 Constructs a new AwsSignatureV0 object with a specific private implementation. More...
 
- Protected Member Functions inherited from AwsAbstractSignature
 AwsAbstractSignature (AwsAbstractSignaturePrivate *const d)
 Initialises an AwsAbstractSignature object. More...
 

Friends

class TestAwsSignatureV0
 

Additional Inherited Members

- Protected Attributes inherited from AwsAbstractSignature
AwsAbstractSignaturePrivate *const d_ptr
 Internal d-pointer.
 

Detailed Description

Implements AWS Signature Version 0 (deprecated by Amazon).

Deprecated:
Amazon has officially deprecated signature Version 0 in favor of later, more secure signatures, such as AwsSignatureV2 and AwsSignatureV4.

As version 0 signatures are rightly regarded as insecure, this class will refuse to sign requests that use insecure transports such as HTTP instead of HTTPS. However, insecure signatures can be enabled (why would you want to?) by defining QTAWS_ALLOW_INSECURE_SIGNATURES when compiling this library.

See also
http://s3.amazonaws.com/awsdocs/SQS/20070501/sqs-dg-20070501.pdf

Definition at line 30 of file awssignaturev0.h.

Constructor & Destructor Documentation

AwsSignatureV0::AwsSignatureV0 ( )

Constructs a new AwsSignatureV0 object.

Use instances of this object to provide Version 0 signatures for AWS services.

Definition at line 57 of file awssignaturev0.cpp.

58 {
59 
60 }
Private implementation for AwsSignatureV0.
AwsAbstractSignature()
Initialises an AwsAbstractSignature object.
AwsSignatureV0::AwsSignatureV0 ( AwsSignatureV0Private *const  d)
protected

Constructs a new AwsSignatureV0 object with a specific private implementation.

This internal constructor allows derived classes to provide their own derived private implementation. Specifically, AwsSignatureV1 uses this constructor to extend this class.

Parameters
dInternal private implementation to use.
See also
AwsSignatureV1

Definition at line 75 of file awssignaturev0.cpp.

76 {
77 
78 }
AwsAbstractSignature()
Initialises an AwsAbstractSignature object.

Member Function Documentation

void AwsSignatureV0::sign ( const AwsAbstractCredentials credentials,
const QNetworkAccessManager::Operation  operation,
QNetworkRequest &  request,
const QByteArray &  data = QByteArray() 
) const
virtual

Sign an AWS request.

Note, credentials must be valid before calling this function. So, for example, if credentials has expired, and is refreshable, it is the caller's responsibility to refresh the credentials before calling this function.

Parameters
operationThe network operation to sign request for.
requestThe network request to be signed.
credentialsThe credentials to use for signing.
dataOptional POST / PUT data to sign request for.

Implements AwsAbstractSignature.

Definition at line 80 of file awssignaturev0.cpp.

References AwsAbstractCredentials::secretKey(), and version().

82 {
83  Q_UNUSED(operation) // Not included in V0 signatures.
84  Q_UNUSED(data) // Not included in V0 signatures.
85  Q_D(const AwsSignatureV0);
86 
87  // Refuse to sign non-HTTPS requests, unless built with QTAWS_ALLOW_INSECURE_SIGNATURES defined.
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");
92  return;
93  }
94 #endif
95 
96  // Set the AWSAccessKeyId, SignatureVersion and Timestamp query items, if not already.
97  d->adornRequest(request, credentials);
98 
99  // Calculate the signature.
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())));
104 
105  // Append the signature to the request.
106  QUrl url = request.url();
107  url.setQuery(url.query() + QLatin1String("&Signature=") + signature);
108  request.setUrl(url);
109 }
virtual int version() const
AWS Signature version implemented by this class.
virtual QString secretKey() const =0
AWS secret access key for this credentials object.
Implements AWS Signature Version 0 (deprecated by Amazon).
int AwsSignatureV0::version ( ) const
virtual

AWS Signature version implemented by this class.

Derived classes must implement this function to report the version of the AWS Signature implemented by the class.

Returns
The AWS Signature version implemented by this class.

Implements AwsAbstractSignature.

Reimplemented in AwsSignatureV1.

Definition at line 111 of file awssignaturev0.cpp.

Referenced by sign().

112 {
113  return 0;
114 }

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