--- /dev/null
+/**
+ * KQOAuth - An OAuth authentication library for Qt.
+ *
+ * Author: Johan Paul (johan.paul@d-pointer.com)
+ * http://www.d-pointer.com
+ *
+ * KQOAuth is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * KQOAuth is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with KQOAuth. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef KQOAUTHREQUEST_H
+#define KQOAUTHREQUEST_H
+
+#include <QObject>
+#include <QUrl>
+#include <QMultiMap>
+
+#include "kqoauthglobals.h"
+
+typedef QMultiMap<QString, QString> KQOAuthParameters;
+
+class KQOAuthRequestPrivate;
+class KQOAUTH_EXPORT KQOAuthRequest : public QObject
+{
+ Q_OBJECT
+public:
+ explicit KQOAuthRequest(QObject *parent = 0);
+ ~KQOAuthRequest();
+
+ enum RequestType {
+ TemporaryCredentials = 0,
+ AccessToken,
+ AuthorizedRequest
+ };
+
+ enum RequestSignatureMethod {
+ PLAINTEXT = 0,
+ HMAC_SHA1,
+ RSA_SHA1
+ };
+
+ enum RequestHttpMethod {
+ GET = 0,
+ POST
+ };
+
+ /**
+ * These methods can be overridden in child classes which are different types of
+ * OAuth requests.
+ */
+ // Validate the request of this type.
+ virtual bool isValid() const;
+
+ /**
+ * These methods are OAuth request type specific and not overridden in child
+ * classes.
+ * NOTE: Refactorting still a TODO
+ */
+ // Initialize the request of this type.
+ void initRequest(KQOAuthRequest::RequestType type, const QUrl &requestEndpoint);
+
+ void setConsumerKey(const QString &consumerKey);
+ void setConsumerSecretKey(const QString &consumerSecretKey);
+
+ // Mandatory methods for acquiring a request token
+ void setCallbackUrl(const QUrl &callbackUrl);
+
+ // Mandator methods for acquiring a access token
+ void setTokenSecret(const QString &tokenSecret);
+ void setToken(const QString &token);
+ void setVerifier(const QString &verifier);
+
+ // Request signature method to use - HMAC_SHA1 currently only supported
+ void setSignatureMethod(KQOAuthRequest::RequestSignatureMethod = KQOAuthRequest::HMAC_SHA1);
+
+ // Request's HTTP method.
+ void setHttpMethod(KQOAuthRequest::RequestHttpMethod = KQOAuthRequest::POST);
+ KQOAuthRequest::RequestHttpMethod httpMethod() const;
+
+ // Sets the timeout for this request. If the timeout expires, signal "requestTimedout" will be
+ // emitted from the manager.
+ // 0 = If set to zero, timeout is disabled.
+ // TODO: Do we need some request ID now?
+ void setTimeout(int timeoutMilliseconds);
+
+ // Additional optional parameters to the request.
+ void setAdditionalParameters(const KQOAuthParameters &additionalParams);
+ KQOAuthParameters additionalParameters() const;
+ QList<QByteArray> requestParameters(); // This will return all request's parameters in the raw format given
+ // to the QNetworkRequest.
+ QByteArray requestBody() const; // This will return the POST body as given to the QNetworkRequest.
+
+ KQOAuthRequest::RequestType requestType() const;
+ QUrl requestEndpoint() const;
+
+ void setContentType(const QString &contentType);
+ QString contentType();
+
+ void setRawData(const QByteArray &rawData);
+ QByteArray rawData();
+
+ void clearRequest();
+
+ // Enable verbose debug output for request content.
+ void setEnableDebugOutput(bool enabled);
+
+Q_SIGNALS:
+ // This signal is emited if the request is not completed before the request's timeout
+ // value has expired.
+ void requestTimedout();
+
+protected:
+ bool validateXAuthRequest() const;
+
+private:
+ KQOAuthRequestPrivate * const d_ptr;
+ Q_DECLARE_PRIVATE(KQOAuthRequest);
+ Q_DISABLE_COPY(KQOAuthRequest);
+
+ // These classes are only for the internal use of KQOAuthManager so it can
+ // work with the opaque request.
+ QString consumerKeyForManager() const;
+ QString consumerKeySecretForManager() const;
+ QUrl callbackUrlForManager() const;
+
+ // This method is for timeout handling by the KQOAuthManager.
+ void requestTimerStart();
+ void requestTimerStop();
+
+ friend class KQOAuthManager;
+#ifdef UNIT_TEST
+ friend class Ut_KQOAuth;
+#endif
+};
+
+#endif // KQOAUTHREQUEST_H