Stylistic changes to improve readability of the code.
[accounts-sso:signon-oauth2-jam.git] / src / oauth2plugin.h
1 /*
2  * This file is part of oauth2 plugin
3  *
4  * Copyright (C) 2010 Nokia Corporation.
5  *
6  * Contact: Alberto Mardegan <alberto.mardegan@nokia.com>
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public License
10  * version 2.1 as published by the Free Software Foundation.
11  *
12  * This library is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20  * 02110-1301 USA
21  */
22
23 #ifndef OAUTH2PLUGIN_H
24 #define OAUTH2PLUGIN_H
25
26 #include <QtCore>
27 #include <QSslError>
28 #include <QNetworkReply>
29
30 #include <SignOn/AuthPluginInterface>
31 #include <SignOn/SessionData>
32 #include <SignOn/Error>
33
34 #include "oauth2data.h"
35 #include "oauth1data.h"
36
37 class OAuth2PluginTest;
38 namespace OAuth2PluginNS {
39
40     /*!
41  * @class oauthPlugin
42  * OAuth authentication plugin.
43  */
44     class OAuth2Plugin : public AuthPluginInterface
45     {
46         Q_OBJECT
47         Q_INTERFACES(AuthPluginInterface);
48         friend class ::OAuth2PluginTest;
49     public:
50         OAuth2Plugin(QObject *parent = 0);
51         ~OAuth2Plugin();
52
53     public Q_SLOTS:
54         QString type() const;
55         QStringList mechanisms() const;
56         void cancel();
57         void process(const SignOn::SessionData &inData, const QString &mechanism = 0);
58         void userActionFinished(const SignOn::UiSessionData &data);
59         void refresh(const SignOn::UiSessionData &data);
60         void replyFinished(QNetworkReply*);
61         void replyOAuth1RequestFinished(QNetworkReply *reply);
62         void slotError(QNetworkReply::NetworkError);
63         void slotSslErrors(QList<QSslError> errorList);
64
65     private:
66         void sendAuthRequest();
67         bool validateInput(const SignOn::SessionData &inData, const QString &mechanism);
68         QByteArray getQueryString(const QVariantMap& parameters);
69         const QVariantMap getRefreshTokenRequestParams(QString refresh_token);
70         const QVariantMap getAssertionRequestParams(QString assertion_type, QString assertion);
71         const QVariantMap getUserBasicRequestParams(QString username, QString password);
72         const QVariantMap getAuthCodeRequestParams(QString code);
73         void sendPostRequest(const QByteArray &queryString);
74         void sendOAuth1PostRequest();
75         const QByteArray parseReply(const QByteArray &reply, const QByteArray &find);
76         const QByteArray parsePlainTextReply(const QByteArray &reply, const QByteArray &find);
77         void handleError(const QByteArray &reply);
78         void handleOAuth1Error(const QByteArray &reply);
79         QByteArray constructSignatureBaseString(const QString &aUrl, const QString &callback,
80                                                 const OAuth1PluginData &inData, const QString &timestamp,
81                                                 const QString &nonce);
82         QString urlEncode(QString strData);
83         QString createOAuthHeader(const QString& aUrl, OAuth1PluginData inData,
84                                   const QString &callback = QString());
85         QByteArray createHMACSha1(const QByteArray &keyForHash ,const QByteArray &secret);
86         void handleRequestFinishedError(QNetworkReply *reply, const QByteArray &replyContent);
87
88         class Private;
89         Private *d; // Owned.
90     };
91
92 } //namespace OAuth2PluginNS
93
94 #endif // OAUTH2PLUGIN_H