-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsecurity.h
72 lines (67 loc) · 2.22 KB
/
security.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#pragma once
#include <QObject>
#include <QStringList>
#include <QTimer>
#include <QMqttClient>
#include "settings.h"
inline const char *QUERY_PARAMETER_CODE="code";
inline const char *QUERY_PARAMETER_SCOPE="scope";
inline const char *NETWORK_HEADER_AUTHORIZATION="Authorization";
inline const char *NETWORK_HEADER_CLIENT_ID="Client-Id";
class PrivateSetting : public BasicSetting
{
public:
PrivateSetting(const QString &name,const QVariant &value=QVariant()) : BasicSetting("Private",qApp->applicationName(),name,value)
{
std::optional<QString> filePath=Filesystem::CreateHiddenFile(source->fileName());
if (!filePath) throw std::runtime_error("Could not create file for private settings");
source=std::make_shared<QSettings>(*filePath,source->format());
}
};
class Security final : public QObject
{
Q_OBJECT
public:
Security();
PrivateSetting& Administrator() { return settingAdministrator; }
PrivateSetting& OAuthToken() { return settingOAuthToken; }
PrivateSetting& ClientID() { return settingClientID; }
PrivateSetting& CallbackURL() { return settingCallbackURL; }
PrivateSetting& Scope() { return settingScope; }
const QString& AdministratorID() const;
QByteArray Bearer(const QByteArray &token);
void Listen();
static const QStringList SCOPES;
private:
PrivateSetting settingAdministrator;
PrivateSetting settingClientID;
PrivateSetting settingOAuthToken;
PrivateSetting settingRefreshToken;
PrivateSetting settingCallbackURL;
PrivateSetting settingScope;
PrivateSetting settingRewireSession;
ApplicationSetting settingRewireHost;
ApplicationSetting settingRewirePort;
QString administratorID;
QMqttClient *rewire;
QMqttSubscription *rewireChannel;
bool tokensInitialized;
QTimer tokenValidationTimer;
bool authorizing;
signals:
void Print(const QString &message,const QString operation=QString(),const QString subsystem=QString("security"));
void TokenRequestFailed();
void Listening();
void Disconnected();
void Initialized();
public slots:
void AuthorizeUser();
private slots:
void ValidateTokenWithRewire();
void ValidateTokenWithTwitch();
void ObtainAdministratorProfile();
void RewireConnected();
void RewireError(QMqttClient::ClientError error);
void RewireMessage(QMqttMessage messasge);
void Initialize();
};