Added new class EncryptedDevice. EncryptedDevice inherits QIODevice and uses AES...
[accounts-sso:rikonen-signon.git] / src / remotepluginprocess / remotepluginprocess.h
1 /*
2  * This file is part of signon
3  *
4  * Copyright (C) 2009-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 REMOTEPLUGINPROCESS_H
24 #define REMOTEPLUGINPROCESS_H
25
26 #include <QCoreApplication>
27 #include <QString>
28 #include <QStringList>
29 #include <QDataStream>
30 #include <QByteArray>
31 #include <QVariant>
32 #include <QMap>
33 #include <QIODevice>
34 #include <QFile>
35 #include <QDir>
36 #include <QLibrary>
37 #include <QSocketNotifier>
38 #include <QThread>
39
40 #include "SignOn/uisessiondata.h"
41 #include "SignOn/authpluginif.h"
42 #include "SignOn/signonplugincommon.h"
43 #include "SignOn/encrypteddevice.h"
44
45 extern "C" {
46 #include <sys/types.h>
47 #include <sys/socket.h>
48 #include <signal.h>
49 }
50
51 #ifndef SIGNON_PLUGINS_DIR
52       #define SIGNON_PLUGINS_DIR "/usr/lib/signon"
53 #endif
54
55 #ifndef SIGNON_PLUGIN_PREFIX
56     #define SIGNON_PLUGIN_PREFIX "lib"
57 #endif
58
59 #ifndef SIGNON_PLUGIN_SUFFIX
60     #define SIGNON_PLUGIN_SUFFIX "plugin.so"
61 #endif
62
63 #include "SignOn/blobiohandler.h"
64
65 using namespace SignOn;
66
67 namespace RemotePluginProcessNS {
68
69 /*!
70  * @class CancelEventThread
71  * Thread to enable cancel functionality.
72  */
73  class CancelEventThread : public QThread
74 {
75     Q_OBJECT
76
77     public:
78         CancelEventThread(AuthPluginInterface *plugin, EncryptedDevice *encryptedInDevice);
79         ~CancelEventThread();
80
81         void run();
82
83     public Q_SLOTS:
84         void cancel();
85
86     private:
87         AuthPluginInterface *m_plugin;
88         QSocketNotifier *m_cancelNotifier;
89         EncryptedDevice *m_encryptedInDevice;
90 };
91
92 /*!
93  * @class RemotePluginProcess
94  * Class to execute plugin process.
95  */
96 class RemotePluginProcess : public QObject
97 {
98     Q_OBJECT
99
100     public:
101         RemotePluginProcess(QObject *parent);
102         ~RemotePluginProcess();
103
104         static RemotePluginProcess* createRemotePluginProcess(QString &type, QObject *parent);
105
106         bool loadPlugin(QString &type);
107         bool setupDataStreams();
108         bool setupProxySettings();
109
110     public Q_SLOTS:
111         void startTask();
112         void sessionDataReceived(const QVariantMap &sessionDataMap);
113
114     private:
115         AuthPluginInterface *m_plugin;
116
117         QFile m_infile;
118         QFile m_outfile;
119
120         QSocketNotifier *m_readnotifier;
121         QSocketNotifier *m_errnotifier;
122         EncryptedDevice *m_encryptedInDevice;
123         EncryptedDevice *m_encryptedOutDevice;
124
125         BlobIOHandler *m_blobIOHandler;
126
127         //Requiered for async session data reading
128         quint32 m_currentOperation;
129         QString m_currentMechanism;
130
131     private:
132         QString getPluginName(const QString &type);
133         void type();
134         void mechanism();
135         void mechanisms();
136
137         void process();
138         void userActionFinished();
139         void refresh();
140
141         void enableCancelThread();
142         void disableCancelThread();
143
144     private Q_SLOTS:
145         void result(const SignOn::SessionData &data);
146         void store(const SignOn::SessionData &data);
147         void error(const SignOn::Error &err);
148         void userActionRequired(const SignOn::UiSessionData &data);
149         void refreshed(const SignOn::UiSessionData &data);
150         void statusChanged(const AuthPluginState state, const QString &message);
151         void blobIOError();
152
153     Q_SIGNALS :
154         void processStopped();
155 };
156
157 } //namespace RemotePluginProcessNS
158
159 #endif /* REMOTEPLUGINPROCESS_H */