Don't send duplicate replies on error
[accounts-sso:jlaako-signon.git] / src / signond / signonidentity.h
1 /*
2  * This file is part of signon
3  *
4  * Copyright (C) 2009-2010 Nokia Corporation.
5  *
6  * Contact: Aurel Popirtac <ext-aurel.popirtac@nokia.com>
7  * Contact: Alberto Mardegan <alberto.mardegan@nokia.com>
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public License
11  * version 2.1 as published by the Free Software Foundation.
12  *
13  * This library is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
21  * 02110-1301 USA
22  */
23
24 #ifndef SIGNONIDENTITY_H_
25 #define SIGNONIDENTITY_H_
26
27 #include <QtCore>
28 #include <QtDBus>
29
30 #include <SignOnCrypto/Encryptor>
31
32 #include "pluginproxy.h"
33
34 #include "signond-common.h"
35 #include "signondaemon.h"
36 #include "signondisposable.h"
37 #include "signonidentityinfo.h"
38 #include "credentialsaccessmanager.h"
39
40 #include "signonui_interface.h"
41
42 namespace SignonDaemonNS {
43
44     /*!
45      * @class SignonIdentity
46      * Daemon side representation of identity.
47      * @todo description.
48      */
49     class SignonIdentity: public SignonDisposable, protected QDBusContext
50     {
51         Q_OBJECT
52         Q_CLASSINFO("D-Bus Interface", "com.nokia.SingleSignOn.Identity")
53
54         friend class SignonIdentityAdaptor;
55
56         virtual ~SignonIdentity();
57
58     public:
59         void destroy();
60         static SignonIdentity *createIdentity(quint32 id, SignonDaemon *parent);
61         quint32 id() const { return m_id; }
62
63         SignonIdentityInfo queryInfo(bool &ok, bool queryPassword = true);
64         quint32 storeCredentials(const SignonIdentityInfo &info, bool storeSecret);
65
66     public Q_SLOTS:
67         quint32 requestCredentialsUpdate(const QString &message);
68         QList<QVariant> queryInfo();
69         bool addReference(const QString &reference);
70         bool removeReference(const QString &reference);
71         bool verifyUser(const QVariantMap &params);
72         bool verifySecret(const QString &secret);
73         void remove();
74         bool signOut();
75         quint32 storeCredentials(const quint32 id,
76                                  const QString &userName,
77                                  const QString &secret,
78                                  const bool storeSecret,
79                                  const QMap<QString, QVariant> &methods,
80                                  const QString &caption,
81                                  const QStringList &realms,
82                                  const QStringList &accessControlList,
83                                  const int type);
84         void queryUiSlot(QDBusPendingCallWatcher *call);
85         void verifyUiSlot(QDBusPendingCallWatcher *call);
86     Q_SIGNALS:
87         void unregistered();
88         //TODO - split this into the 3 separate signals(updated, removed, signed out)
89         void infoUpdated(int);
90
91     private:
92         SignonIdentity(quint32 id, int timeout, SignonDaemon *parent);
93         bool init();
94         bool credentialsStored() const { return m_id > 0 ? true : false; }
95         void replyError(const QString &name, const QString &msg);
96
97     private:
98         quint32 m_id;
99         SignonUiAdaptor *m_signonui;
100         SignonIdentityInfo *m_pInfo;
101         SignonDaemon *m_pSignonDaemon;
102         SignOnCrypto::Encryptor *m_encryptor;
103         bool m_registered;
104         QDBusMessage m_message;
105
106     }; //class SignonDaemon
107
108 } //namespace SignonDaemonNS
109
110 #endif /* SIGNONIDENTITY_H_ */