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
isValid()70 inline bool isValid() const { return id().isValid(); }
71
id()72 inline IdentityId id() const { return _identityId; }
identityName()73 inline const QString& identityName() const { return _identityName; }
realName()74 inline const QString& realName() const { return _realName; }
nicks()75 inline const QStringList& nicks() const { return _nicks; }
awayNick()76 inline const QString& awayNick() const { return _awayNick; }
awayNickEnabled()77 inline bool awayNickEnabled() const { return _awayNickEnabled; }
awayReason()78 inline const QString& awayReason() const { return _awayReason; }
awayReasonEnabled()79 inline bool awayReasonEnabled() const { return _awayReasonEnabled; }
autoAwayEnabled()80 inline bool autoAwayEnabled() const { return _autoAwayEnabled; }
autoAwayTime()81 inline int autoAwayTime() const { return _autoAwayTime; }
autoAwayReason()82 inline const QString& autoAwayReason() const { return _autoAwayReason; }
autoAwayReasonEnabled()83 inline bool autoAwayReasonEnabled() const { return _autoAwayReasonEnabled; }
detachAwayEnabled()84 inline bool detachAwayEnabled() const { return _detachAwayEnabled; }
detachAwayReason()85 inline const QString& detachAwayReason() const { return _detachAwayReason; }
detachAwayReasonEnabled()86 inline bool detachAwayReasonEnabled() const { return _detachAwayReasonEnabled; }
ident()87 inline const QString& ident() const { return _ident; }
kickReason()88 inline const QString& kickReason() const { return _kickReason; }
partReason()89 inline const QString& partReason() const { return _partReason; }
quitReason()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
Q_DECLARE_METATYPE(Identity)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 };
187