Refactoring to improve code readability.
[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 replyOAuth2RequestFinished(QNetworkReply *reply);
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         void sendOAuth2PostRequest(const QByteArray &postData);
69         void sendOAuth1PostRequest();
70         const QByteArray parseReply(const QByteArray &reply, const QByteArray &find);
71         const QByteArray parsePlainTextReply(const QByteArray &reply, const QByteArray &find);
72         void handleError(const QByteArray &reply);
73         void handleOAuth1Error(const QByteArray &reply);
74         QByteArray constructSignatureBaseString(const QString &aUrl,
75                                                 const OAuth1PluginData &inData,
76                                                 const QString &timestamp,
77                                                 const QString &nonce);
78         QString urlEncode(QString strData);
79         QString createOAuth1Header(const QString &aUrl, OAuth1PluginData inData);
80         QByteArray hashHMACSHA1(const QByteArray &keyForHash ,const QByteArray &secret);
81         void handleRequestFinishedError(QNetworkReply *reply, const QByteArray &replyContent);
82
83         class Private;
84         Private *d; // Owned.
85     };
86
87 } //namespace OAuth2PluginNS
88
89 #endif // OAUTH2PLUGIN_H