MinecraftConsoles/Minecraft.World/SessionAuthModule.h

45 lines
1.4 KiB
C
Raw Normal View History

#pragma once
using namespace std;
#include "AuthModule.h"
2026-04-06 02:33:39 -04:00
#include <vector>
#include <memory>
2026-04-06 02:33:39 -04:00
struct YggdrasilProviderConfig
{
wstring name;
wstring displayName;
string authUrl;
string sessionUrl;
string authenticateUrl() const { return authUrl + "/authenticate"; }
string validateUrl() const { return authUrl + "/validate"; }
string refreshUrl() const { return authUrl + "/refresh"; }
string joinUrl() const { return sessionUrl + "/join"; }
string hasJoinedUrl() const { return sessionUrl + "/hasJoined"; }
};
class YggdrasilRegistry
{
public:
2026-04-06 02:33:39 -04:00
static void load();
static const vector<YggdrasilProviderConfig> &providers();
static const YggdrasilProviderConfig *find(const wstring &name);
static const YggdrasilProviderConfig &defaultProvider();
};
2026-04-06 02:33:39 -04:00
class SessionAuthModule : public AuthModule
{
private:
2026-04-06 02:33:39 -04:00
const YggdrasilProviderConfig *activeProvider = nullptr;
wstring activeServerId;
2026-04-06 02:33:39 -04:00
bool serverVerify(const YggdrasilProviderConfig &provider, const wstring &username, const wstring &serverId, wstring &outUid, wstring &outUsername);
public:
2026-04-06 02:33:39 -04:00
SessionAuthModule() = default;
const wchar_t *schemeName() override;
vector<wstring> supportedVariations() override;
vector<pair<wstring, wstring>> getSettings(const wstring &variation) override;
bool onAuthData(const vector<pair<wstring, wstring>> &fields, wstring &outUid, wstring &outUsername) override;
};