1 | /*************************************************************************** |
2 | * Copyright (C) 2005-2014 by the Quassel Project * |
3 | * devel@quassel-irc.org * |
4 | * * |
5 | * This program is free software; you can redistribute it and/or modify * |
6 | * it under the terms of the GNU General Public License as published by * |
7 | * the Free Software Foundation; either version 2 of the License, or * |
8 | * (at your option) version 3. * |
9 | * * |
10 | * This program is distributed in the hope that it will be useful, * |
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of * |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
13 | * GNU General Public License for more details. * |
14 | * * |
15 | * You should have received a copy of the GNU General Public License * |
16 | * along with this program; if not, write to the * |
17 | * Free Software Foundation, Inc., * |
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * |
19 | ***************************************************************************/ |
20 | |
21 | #include "coreidentity.h" |
22 | |
23 | #include "signalproxy.h" |
24 | |
25 | INIT_SYNCABLE_OBJECT(CoreIdentity) |
26 | CoreIdentity::CoreIdentity(IdentityId id, QObject *parent) |
27 | : Identity(id, parent) |
28 | #ifdef HAVE_SSL |
29 | , _certManager(*this) |
30 | #endif |
31 | { |
32 | #ifdef HAVE_SSL |
33 | connect(this, SIGNAL(idSet(IdentityId)), &_certManager, SLOT(setId(IdentityId))); |
34 | connect(&_certManager, SIGNAL(updated()), this, SIGNAL(updated())); |
35 | #endif |
36 | } |
37 | |
38 | |
39 | CoreIdentity::CoreIdentity(const Identity &other, QObject *parent) |
40 | : Identity(other, parent) |
41 | #ifdef HAVE_SSL |
42 | , _certManager(*this) |
43 | #endif |
44 | { |
45 | #ifdef HAVE_SSL |
46 | connect(this, SIGNAL(idSet(IdentityId)), &_certManager, SLOT(setId(IdentityId))); |
47 | connect(&_certManager, SIGNAL(updated()), this, SIGNAL(updated())); |
48 | #endif |
49 | } |
50 | |
51 | |
52 | CoreIdentity::CoreIdentity(const CoreIdentity &other, QObject *parent) |
53 | : Identity(other, parent) |
54 | #ifdef HAVE_SSL |
55 | , _sslKey(other._sslKey), |
56 | _sslCert(other._sslCert), |
57 | _certManager(*this) |
58 | #endif |
59 | { |
60 | #ifdef HAVE_SSL |
61 | connect(this, SIGNAL(idSet(IdentityId)), &_certManager, SLOT(setId(IdentityId))); |
62 | connect(&_certManager, SIGNAL(updated()), this, SIGNAL(updated())); |
63 | #endif |
64 | } |
65 | |
66 | |
67 | void CoreIdentity::synchronize(SignalProxy *proxy) |
68 | { |
69 | proxy->synchronize(this); |
70 | #ifdef HAVE_SSL |
71 | proxy->synchronize(&_certManager); |
72 | #endif |
73 | } |
74 | |
75 | |
76 | #ifdef HAVE_SSL |
77 | void CoreIdentity::setSslKey(const QByteArray &encoded) |
78 | { |
79 | QSslKey key(encoded, QSsl::Rsa); |
80 | if (key.isNull()) |
81 | key = QSslKey(encoded, QSsl::Dsa); |
82 | setSslKey(key); |
83 | } |
84 | |
85 | |
86 | void CoreIdentity::setSslCert(const QByteArray &encoded) |
87 | { |
88 | setSslCert(QSslCertificate(encoded)); |
89 | } |
90 | |
91 | |
92 | #endif |
93 | |
94 | CoreIdentity &CoreIdentity::operator=(const CoreIdentity &identity) |
95 | { |
96 | Identity::operator=(identity); |
97 | #ifdef HAVE_SSL |
98 | _sslKey = identity._sslKey; |
99 | _sslCert = identity._sslCert; |
100 | #endif |
101 | return *this; |
102 | } |
103 | |
104 | |
105 | #ifdef HAVE_SSL |
106 | // ======================================== |
107 | // CoreCertManager |
108 | // ======================================== |
109 | INIT_SYNCABLE_OBJECT(CoreCertManager) |
110 | CoreCertManager::CoreCertManager(CoreIdentity &identity) |
111 | : CertManager(identity.id()), |
112 | identity(identity) |
113 | { |
114 | setAllowClientUpdates(true); |
115 | } |
116 | |
117 | |
118 | void CoreCertManager::setId(IdentityId id) |
119 | { |
120 | renameObject(QString::number(id.toInt())); |
121 | } |
122 | |
123 | |
124 | void CoreCertManager::setSslKey(const QByteArray &encoded) |
125 | { |
126 | identity.setSslKey(encoded); |
127 | CertManager::setSslKey(encoded); |
128 | } |
129 | |
130 | |
131 | void CoreCertManager::setSslCert(const QByteArray &encoded) |
132 | { |
133 | identity.setSslCert(encoded); |
134 | CertManager::setSslCert(encoded); |
135 | } |
136 | |
137 | |
138 | #endif //HAVE_SSL |
139 | |