Files

71 lines
2.2 KiB
C++
Raw Permalink Normal View History

2026-08-22 18:19:13 +03:00
#pragma once
2026-09-01 22:25:23 +03:00
#include <QDateTime>
2026-08-22 18:19:13 +03:00
#include <QJsonObject>
#include <QObject>
#include <QString>
#include <functional>
class QNetworkAccessManager;
struct AuthResult
{
bool ok = false;
bool twoFactorRequired = false;
2026-09-01 22:25:23 +03:00
bool licenseMissing = false;
2026-08-22 18:19:13 +03:00
QString error;
2026-08-22 23:39:46 +00:00
QString playerName; // ${auth_player_name}
QString uuid; // ${auth_uuid}, hex без дефисов
QString accessToken; // ${auth_access_token}
QString clientToken; // ${clientid}
QString userType; // ${user_type}: legacy / msa / ELYBY
2026-09-01 22:25:23 +03:00
// Только для аккаунтов Microsoft.
QString refreshToken; // продлевает сессию без ввода пароля
QString xuid; // ${auth_xuid}
QDateTime expiresAt; // UTC-время, когда протухает accessToken
2026-08-22 18:19:13 +03:00
};
class AuthService : public QObject
{
Q_OBJECT
public:
using Callback = std::function<void(const AuthResult &)>;
explicit AuthService(QObject *parent = nullptr);
static AuthResult offline(const QString &nickname);
static QString generateClientToken();
void loginElyBy(const QString &login,
const QString &password,
const QString &clientToken,
const QString &accessToken,
Callback callback);
void loginElyByWithTotp(const QString &login,
const QString &password,
const QString &totp,
const QString &clientToken,
Callback callback);
2026-08-22 23:39:46 +00:00
void ensureAuthlibInjector(const QString &targetDir,
std::function<void(const QString &path, const QString &error)> callback);
2026-08-22 18:19:13 +03:00
signals:
void progress(const QString &message);
private:
2026-08-22 23:39:46 +00:00
void postJson(const QString &endpoint,
const QJsonObject &body,
std::function<void(int status, const QJsonObject &response, const QString &transportError)> handler);
2026-08-22 18:19:13 +03:00
void authenticate(const QString &login,
const QString &password,
const QString &clientToken,
Callback callback);
QNetworkAccessManager *m_network;
};