MythTV master
mythsession.h
Go to the documentation of this file.
1#ifndef MYTHSESSION_H
2#define MYTHSESSION_H
3
4#include "mythbaseexp.h"
5
6#include <cstdint>
7
8#include <QString>
9#include <QDateTime>
10#include <QMap>
11#include <QMutex>
12
13enum DigestUserActions : std::uint8_t {
17};
18
20{
21 public :
22 MythUserSession() = default;
23 ~MythUserSession() { m_sessionToken.fill('0'); m_sessionToken.clear(); }
24 MythUserSession(const MythUserSession &) = default;
25 MythUserSession(MythUserSession&& other) = default;
28
40 bool IsValid(void) const;
41
42 QString GetUserName(void) const { return m_name; }
43 uint GetUserId(void) const { return m_userId; }
44
45 QString GetSessionToken(void) const { return m_sessionToken; }
46 QString GetSessionClient(void) const { return m_sessionClient; }
47
48 QDateTime GetSessionCreated() const { return m_sessionCreated; }
49 QDateTime GetSessionLastActive() const { return m_sessionLastActive; }
50 QDateTime GetSessionExpires() const { return m_sessionExpires; }
51
60 bool CheckPermission( const QString &context, uint permission);
61
62 protected:
70 bool Save(void);
71
75 bool Update(void);
76
77 uint m_userId {0};
78 QString m_name;
79
82 QDateTime m_sessionLastActive; // For informational purposes
85
86 QMap<QString, uint> m_permissionsList; // Context, flags
87
88 friend class MythSessionManager;
89};
90
106{
107 public :
109
115 static bool IsValidUser(const QString &username);
116
121 bool IsValidSession(const QString &sessionToken);
122
129 MythUserSession GetSession(const QString &sessionToken);
130
137 static QString GetPasswordDigest(const QString &username);
138
147 MythUserSession LoginUser(const QString &username,
148 const QByteArray &digest,
149 const QString &client = "");
150
159 MythUserSession LoginUser(const QString &username,
160 const QString &password,
161 const QString &client = "");
162
168 static QByteArray CreateDigest(const QString &username,
169 const QString &password);
170
179 bool ManageDigestUser(DigestUserActions action,
180 const QString &username,
181 const QString &password,
182 const QString &newPassword);
183 static void LockSessions();
184 static void UnlockSessions();
185
186 private:
190 void LoadSessions(void);
191
195 void UpdateSession(const QString &sessionToken);
196
204 MythUserSession GetSession(const QString &username, const QString &client);
205
209 MythUserSession CreateUserSession(uint userId, const QString &username,
210 const QString &client);
211
215 void DestroyUserSession(const QString &sessionToken);
216
217 void DestroyUserAllSessions(const QString &username);
218
219 static bool AddDigestUser(const QString &username,
220 const QString &password);
221
222 bool RemoveDigestUser(const QString &username);
223
224 bool ChangeDigestUserPassword(const QString &username,
225 const QString &oldPassword,
226 const QString &newPassword);
227
228 QMap<QString, MythUserSession> m_sessionList;
229
230 static QMutex mutex;
231};
232
233#endif // MYTHSESSION_H
We use digest authentication because it protects the password over unprotected networks.
Definition: mythsession.h:106
static QMutex mutex
Definition: mythsession.h:230
QMap< QString, MythUserSession > m_sessionList
Definition: mythsession.h:228
MythUserSession & operator=(const MythUserSession &)=default
MythUserSession(const MythUserSession &)=default
QDateTime GetSessionLastActive() const
Definition: mythsession.h:49
uint GetUserId(void) const
Definition: mythsession.h:43
QDateTime m_sessionCreated
Definition: mythsession.h:81
QDateTime GetSessionCreated() const
Definition: mythsession.h:48
QDateTime m_sessionExpires
Definition: mythsession.h:83
QMap< QString, uint > m_permissionsList
Definition: mythsession.h:86
QString GetSessionToken(void) const
Definition: mythsession.h:45
MythUserSession()=default
QDateTime GetSessionExpires() const
Definition: mythsession.h:50
QString GetUserName(void) const
Definition: mythsession.h:42
QString m_sessionToken
Definition: mythsession.h:80
QString m_name
Definition: mythsession.h:78
MythUserSession(MythUserSession &&other)=default
QString m_sessionClient
Definition: mythsession.h:84
QString GetSessionClient(void) const
Definition: mythsession.h:46
QDateTime m_sessionLastActive
Definition: mythsession.h:82
MythUserSession & operator=(MythUserSession &&other)=default
unsigned int uint
Definition: compat.h:68
#define MBASE_PUBLIC
Definition: mythbaseexp.h:8
DigestUserActions
Definition: mythsession.h:13
@ DIGEST_USER_ADD
Definition: mythsession.h:14
@ DIGEST_USER_CHANGE_PW
Definition: mythsession.h:16
@ DIGEST_USER_REMOVE
Definition: mythsession.h:15