PageRenderTime 65ms CodeModel.GetById 27ms app.highlight 30ms RepoModel.GetById 2ms app.codeStats 0ms

/quassel-0.7.3/src/client/clientidentity.cpp

#
C++ | 110 lines | 72 code | 16 blank | 22 comment | 9 complexity | 8142c750fd329264a30d51f12cf42570 MD5 | raw file
Possible License(s): GPL-2.0, GPL-3.0
  1/***************************************************************************
  2 *   Copyright (C) 2005-09 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 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 19 ***************************************************************************/
 20
 21#include "clientidentity.h"
 22
 23#include "client.h"
 24#include "signalproxy.h"
 25
 26INIT_SYNCABLE_OBJECT(CertIdentity)
 27CertIdentity::CertIdentity(IdentityId id, QObject *parent)
 28  : Identity(id, parent)
 29#ifdef HAVE_SSL
 30  ,  _certManager(0),
 31    _isDirty(false)
 32#endif
 33{
 34}
 35
 36CertIdentity::CertIdentity(const Identity &other, QObject *parent)
 37  : Identity(other, parent)
 38#ifdef HAVE_SSL
 39  , _certManager(0),
 40    _isDirty(false)
 41#endif
 42{
 43}
 44
 45CertIdentity::CertIdentity(const CertIdentity &other, QObject *parent)
 46  : Identity(other, parent)
 47#ifdef HAVE_SSL
 48  , _certManager(0),
 49    _isDirty(other._isDirty),
 50    _sslKey(other._sslKey),
 51    _sslCert(other._sslCert)
 52#endif
 53{
 54}
 55
 56#ifdef HAVE_SSL
 57void CertIdentity::enableEditSsl(bool enable) {
 58  if(!enable || _certManager)
 59    return;
 60
 61  _certManager = new ClientCertManager(id(), this);
 62  if(isValid()) { // this means we are not a newly created Identity but have a proper Id
 63    Client::signalProxy()->synchronize(_certManager);
 64    connect(_certManager, SIGNAL(updated()), this, SLOT(markClean()));
 65    connect(_certManager, SIGNAL(initDone()), this, SLOT(markClean()));
 66  }
 67}
 68
 69void CertIdentity::setSslKey(const QSslKey &key) {
 70  if(key.toPem() == _sslKey.toPem())
 71    return;
 72  _sslKey = key;
 73  _isDirty = true;
 74}
 75
 76void CertIdentity::setSslCert(const QSslCertificate &cert) {
 77  if(cert.toPem() == _sslCert.toPem())
 78    return;
 79  _sslCert = cert;
 80  _isDirty = true;
 81}
 82
 83void CertIdentity::requestUpdateSslSettings() {
 84  if(!_certManager)
 85    return;
 86
 87  _certManager->requestUpdate(_certManager->toVariantMap());
 88}
 89
 90void CertIdentity::markClean() {
 91  _isDirty = false;
 92  emit sslSettingsUpdated();
 93}
 94
 95// ========================================
 96//  ClientCertManager
 97// ========================================
 98void ClientCertManager::setSslKey(const QByteArray &encoded) {
 99  QSslKey key(encoded, QSsl::Rsa);
100  if(key.isNull())
101    key = QSslKey(encoded, QSsl::Dsa);
102  _certIdentity->setSslKey(key);
103}
104
105void ClientCertManager::setSslCert(const QByteArray &encoded) {
106  _certIdentity->setSslCert(QSslCertificate(encoded));
107}
108
109
110#endif // HAVE_SSL