ssl: Use QSslSocket directly to avoid redundant qobject_casts
[quassel.git] / src / common / identity.h
1 /***************************************************************************
2  *   Copyright (C) 2005-2020 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 #pragma once
22
23 #include "common-export.h"
24
25 #include <QByteArray>
26 #include <QDataStream>
27 #include <QMetaType>
28 #include <QSslCertificate>
29 #include <QSslKey>
30 #include <QString>
31 #include <QStringList>
32
33 #include "syncableobject.h"
34 #include "types.h"
35
36 class COMMON_EXPORT Identity : public SyncableObject
37 {
38     Q_OBJECT
39     SYNCABLE_OBJECT
40
41     Q_PROPERTY(IdentityId identityId READ id WRITE setId)
42     Q_PROPERTY(QString identityName READ identityName WRITE setIdentityName)
43     Q_PROPERTY(QString realName READ realName WRITE setRealName)
44     Q_PROPERTY(QStringList nicks READ nicks WRITE setNicks)
45     Q_PROPERTY(QString awayNick READ awayNick WRITE setAwayNick)
46     Q_PROPERTY(bool awayNickEnabled READ awayNickEnabled WRITE setAwayNickEnabled)
47     Q_PROPERTY(QString awayReason READ awayReason WRITE setAwayReason)
48     Q_PROPERTY(bool awayReasonEnabled READ awayReasonEnabled WRITE setAwayReasonEnabled)
49     Q_PROPERTY(bool autoAwayEnabled READ autoAwayEnabled WRITE setAutoAwayEnabled)
50     Q_PROPERTY(int autoAwayTime READ autoAwayTime WRITE setAutoAwayTime)
51     Q_PROPERTY(QString autoAwayReason READ autoAwayReason WRITE setAutoAwayReason)
52     Q_PROPERTY(bool autoAwayReasonEnabled READ autoAwayReasonEnabled WRITE setAutoAwayReasonEnabled)
53     Q_PROPERTY(bool detachAwayEnabled READ detachAwayEnabled WRITE setDetachAwayEnabled)
54     Q_PROPERTY(QString detachAwayReason READ detachAwayReason WRITE setDetachAwayReason)
55     Q_PROPERTY(bool detachAwayReasonEnabled READ detachAwayReasonEnabled WRITE setDetachAwayReasonEnabled)
56     Q_PROPERTY(QString ident READ ident WRITE setIdent)
57     Q_PROPERTY(QString kickReason READ kickReason WRITE setKickReason)
58     Q_PROPERTY(QString partReason READ partReason WRITE setPartReason)
59     Q_PROPERTY(QString quitReason READ quitReason WRITE setQuitReason)
60
61 public:
62     Identity(IdentityId id = 0, QObject* parent = nullptr);
63     Identity(const Identity& other, QObject* parent = nullptr);
64
65     void setToDefaults();
66
67     bool operator==(const Identity& other) const;
68     bool operator!=(const Identity& other) const;
69
70     inline bool isValid() const { return id().isValid(); }
71
72     inline IdentityId id() const { return _identityId; }
73     inline const QString& identityName() const { return _identityName; }
74     inline const QString& realName() const { return _realName; }
75     inline const QStringList& nicks() const { return _nicks; }
76     inline const QString& awayNick() const { return _awayNick; }
77     inline bool awayNickEnabled() const { return _awayNickEnabled; }
78     inline const QString& awayReason() const { return _awayReason; }
79     inline bool awayReasonEnabled() const { return _awayReasonEnabled; }
80     inline bool autoAwayEnabled() const { return _autoAwayEnabled; }
81     inline int autoAwayTime() const { return _autoAwayTime; }
82     inline const QString& autoAwayReason() const { return _autoAwayReason; }
83     inline bool autoAwayReasonEnabled() const { return _autoAwayReasonEnabled; }
84     inline bool detachAwayEnabled() const { return _detachAwayEnabled; }
85     inline const QString& detachAwayReason() const { return _detachAwayReason; }
86     inline bool detachAwayReasonEnabled() const { return _detachAwayReasonEnabled; }
87     inline const QString& ident() const { return _ident; }
88     inline const QString& kickReason() const { return _kickReason; }
89     inline const QString& partReason() const { return _partReason; }
90     inline const QString& quitReason() const { return _quitReason; }
91
92 public slots:
93     void setId(IdentityId id);
94     void setIdentityName(const QString& name);
95     void setRealName(const QString& realName);
96     void setNicks(const QStringList& nicks);
97     void setAwayNick(const QString& awayNick);
98     void setAwayNickEnabled(bool enabled);
99     void setAwayReason(const QString& awayReason);
100     void setAwayReasonEnabled(bool enabled);
101     void setAutoAwayEnabled(bool enabled);
102     void setAutoAwayTime(int time);
103     void setAutoAwayReason(const QString& reason);
104     void setAutoAwayReasonEnabled(bool enabled);
105     void setDetachAwayEnabled(bool enabled);
106     void setDetachAwayReason(const QString& reason);
107     void setDetachAwayReasonEnabled(bool enabled);
108     void setIdent(const QString& ident);
109     void setKickReason(const QString& reason);
110     void setPartReason(const QString& reason);
111     void setQuitReason(const QString& reason);
112
113     void copyFrom(const Identity& other);
114
115 signals:
116     void idSet(IdentityId id);
117     //   void identityNameSet(const QString &name);
118     //   void realNameSet(const QString &realName);
119     void nicksSet(const QStringList& nicks);
120     //   void awayNickSet(const QString &awayNick);
121     //   void awayNickEnabledSet(bool);
122     //   void awayReasonSet(const QString &awayReason);
123     //   void awayReasonEnabledSet(bool);
124     //   void autoAwayEnabledSet(bool);
125     //   void autoAwayTimeSet(int);
126     //   void autoAwayReasonSet(const QString &);
127     //   void autoAwayReasonEnabledSet(bool);
128     //   void detachAwayEnabledSet(bool);
129     //   void detachAwayReasonSet(const QString &);
130     //   void detachAwayReasonEnabledSet(bool);
131     //   void identSet(const QString &);
132     //   void kickReasonSet(const QString &);
133     //   void partReasonSet(const QString &);
134     //   void quitReasonSet(const QString &);
135
136 private:
137     IdentityId _identityId;
138     QString _identityName, _realName;
139     QStringList _nicks;
140     QString _awayNick;
141     bool _awayNickEnabled;
142     QString _awayReason;
143     bool _awayReasonEnabled;
144     bool _autoAwayEnabled;
145     int _autoAwayTime;
146     QString _autoAwayReason;
147     bool _autoAwayReasonEnabled;
148     bool _detachAwayEnabled;
149     QString _detachAwayReason;
150     bool _detachAwayReasonEnabled;
151     QString _ident, _kickReason, _partReason, _quitReason;
152
153     void init();
154     QString defaultNick();
155     QString defaultRealName();
156
157     friend QDataStream& operator>>(QDataStream& in, Identity& identity);
158 };
159
160 QDataStream& operator<<(QDataStream& out, Identity identity);
161 QDataStream& operator>>(QDataStream& in, Identity& identity);
162
163 Q_DECLARE_METATYPE(Identity)
164
165 class COMMON_EXPORT CertManager : public SyncableObject
166 {
167     Q_OBJECT
168     SYNCABLE_OBJECT
169
170     Q_PROPERTY(QByteArray sslKey READ sslKeyPem WRITE setSslKey)
171     Q_PROPERTY(QByteArray sslCert READ sslCertPem WRITE setSslCert)
172
173 public:
174     CertManager(IdentityId id, QObject* parent = nullptr)
175         : SyncableObject(QString::number(id.toInt()), parent)
176     {}
177
178     virtual const QSslKey& sslKey() const = 0;
179     inline QByteArray sslKeyPem() const { return sslKey().toPem(); }
180     virtual const QSslCertificate& sslCert() const = 0;
181     inline QByteArray sslCertPem() const { return sslCert().toPem(); }
182
183 public slots:
184     inline virtual void setSslKey(const QByteArray& encoded) { SYNC(ARG(encoded)) }
185     inline virtual void setSslCert(const QByteArray& encoded) { SYNC(ARG(encoded)) }
186 };