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