The Signon session request data also holds the dbus peer pid now.
[accounts-sso:vitalyrepins-signon.git] / src / signond / signonsessioncoretools.h
1 /*
2  * This file is part of signon
3  *
4  * Copyright (C) 2009-2011 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 SIGNONSESSIONCORETOOLS_H
25 #define SIGNONSESSIONCORETOOLS_H
26
27 #include <QObject>
28 #include <QVariantMap>
29 #include <QDBusMessage>
30
31 #include "signonidentityinfo.h"
32
33 namespace SignonDaemonNS {
34
35 /*!
36  * @brief Helper method which unites two variant maps.
37  * @param map1 base map to be united with
38  * @param map2 map to be united with base. If map2 and map1 contain common
39           keys, the values in map1 will be overwritten by map2 values
40  * @returns a union of the map1 and map2 with unique keys,
41  */
42 QVariantMap mergeVariantMaps(const QVariantMap &map1, const QVariantMap &map2);
43
44 /*!
45  * @class StoreOperation
46  * Describes a credentials store operatation.
47  */
48 struct StoreOperation {
49     enum StoreType {
50         Credentials = 0,
51         Blob
52     };
53
54     StoreOperation(const StoreType type);
55     StoreOperation(const StoreOperation &src);
56     ~StoreOperation();
57
58 public:
59     StoreType m_storeType;
60     QVariantMap m_credsData;
61     SignonIdentityInfo m_info;
62     //Blob store related
63     QString m_authMethod;
64     QVariantMap m_blobData;
65 };
66
67 /*!
68  * @class RequestData
69  * Request data.
70  * @todo description.
71  */
72 struct RequestData
73 {
74     RequestData(const QDBusConnection &conn,
75                 const QDBusMessage &msg,
76                 const QVariantMap &params,
77                 const QString &mechanism,
78                 const QString &sessionKey,
79                 const pid_t peerPid);
80
81     RequestData(const RequestData &other);
82     ~RequestData();
83
84 public:
85     QDBusConnection m_conn;
86     QDBusMessage m_msg;
87     QVariantMap m_params;
88     QString m_mechanism;
89     QString m_sessionKey;
90     pid_t m_peerPid;
91 };
92
93 /*!
94  * @class AuthCoreCache
95  * Caches credentials or BLOB authentication data.
96  * The cache is credentials' record oriented (credentials ID as key).
97  * Once all references of authentication sessions for a specifc
98  * credentials ID are destroyed, the cache for that specific ID
99  * will be deleted.
100  */
101 class AuthCoreCache : public QObject
102 {
103     Q_OBJECT
104
105 public:
106     typedef quint32 IdentityId;
107     typedef QString AuthMethod;
108     typedef QList<AuthMethod> AuthMethods;
109     typedef QPair<IdentityId, AuthMethod> CacheId;
110
111     class AuthCache
112     {
113         friend class AuthCoreCache;
114
115         ~AuthCache();
116
117     public:
118         AuthCache();
119         QString username() const { return m_username; }
120         QString password() const { return m_password; }
121         QVariantMap blobData() const { return m_blobData; }
122
123         void setUsername(const QString &username)
124             { m_username = username; }
125         void setPassword(const QString &password)
126             { m_password = password; }
127         void setBlobData(const QVariantMap &blobData)
128             { m_blobData = blobData; }
129
130         bool isEmpty() const;
131
132     private:
133         QString m_username;
134         QString m_password;
135         QVariantMap m_blobData;
136     };
137
138 private:
139     static AuthCoreCache *m_instance;
140     AuthCoreCache(QObject *parent = 0);
141
142 public:
143     static AuthCoreCache *instance(QObject *parent = 0);
144     ~AuthCoreCache();
145
146     AuthCache *data(const IdentityId id) const;
147     void insert(const CacheId &id, AuthCache *cache);
148     void clear();
149
150     void authSessionDestroyed(const CacheId &id);
151
152 private:
153     QHash<IdentityId, AuthCache *> m_cache;
154     QHash<IdentityId, AuthMethods> m_cachingSessionsMethods;
155 };
156
157 typedef AuthCoreCache::AuthCache AuthCache;
158
159 } //SignonDaemonNS
160
161 #endif //SIGNONSESSIONCORETOOLS_H