48 lines
1.3 KiB
C++
48 lines
1.3 KiB
C++
#pragma once
|
||
|
||
#include <QObject>
|
||
#include <QPointer>
|
||
#include <QString>
|
||
|
||
#include "AuthService.hpp" // geopro::net::AuthService::Captcha
|
||
|
||
namespace geopro::net {
|
||
|
||
class IApiCall;
|
||
class ApiChain;
|
||
|
||
// 验证码加载句柄(net 层,自管理):接管一个 getImageCode 的 IApiCall,
|
||
// 完成后解析 {data.id, data.code} -> done(Captcha);失败 -> failed(msg)。
|
||
// 安全不变量见 spec §5.0:aborted_ 入口守卫 + 一律 deleteLater(禁同步 delete)。
|
||
class CaptchaLoad : public QObject {
|
||
Q_OBJECT
|
||
public:
|
||
explicit CaptchaLoad(IApiCall* call, QObject* parent = nullptr);
|
||
void abort();
|
||
signals:
|
||
void done(const geopro::net::AuthService::Captcha& captcha);
|
||
void failed(const QString& message);
|
||
|
||
private:
|
||
QPointer<IApiCall> call_;
|
||
bool aborted_ = false;
|
||
};
|
||
|
||
// 登录加载句柄(net 层,自管理):接管一个 verifyCodeCheck->RSA->login2 的 ApiChain,
|
||
// succeeded 取末步 data.accessToken -> done(token);缺 token 或 failed -> failed(msg)。
|
||
class LoginLoad : public QObject {
|
||
Q_OBJECT
|
||
public:
|
||
explicit LoginLoad(ApiChain* chain, QObject* parent = nullptr);
|
||
void abort();
|
||
signals:
|
||
void done(const QString& token);
|
||
void failed(const QString& message);
|
||
|
||
private:
|
||
QPointer<ApiChain> chain_;
|
||
bool aborted_ = false;
|
||
};
|
||
|
||
} // namespace geopro::net
|