#pragma once using namespace std; #include #include #include class AuthModule { public: virtual ~AuthModule() = default; virtual const wchar_t *schemeName() = 0; virtual vector supportedVariations() = 0; virtual vector> getSettings(const wstring &variation) = 0; virtual bool onAuthData(const vector> &fields, wstring &outUid, wstring &outUsername) = 0; bool validate(const wstring &uid, const wstring &username); protected: bool extractIdentity(const vector> &fields, wstring &outUid, wstring &outUsername); }; class ElyByAuthModule : public AuthModule { protected: wstring endpoint; public: ElyByAuthModule(const wstring &endpoint = L"https://authserver.ely.by"); const wchar_t *schemeName() override; vector supportedVariations() override; vector> getSettings(const wstring &variation) override; bool onAuthData(const vector> &fields, wstring &outUid, wstring &outUsername) override; }; class MojangAuthModule : public ElyByAuthModule { public: MojangAuthModule(); const wchar_t *schemeName() override; vector supportedVariations() override; }; class KeypairOfflineAuthModule : public AuthModule { public: const wchar_t *schemeName() override; vector supportedVariations() override; vector> getSettings(const wstring &variation) override; bool onAuthData(const vector> &fields, wstring &outUid, wstring &outUsername) override; }; class OfflineAuthModule : public AuthModule { public: const wchar_t *schemeName() override; vector supportedVariations() override; vector> getSettings(const wstring &variation) override; bool onAuthData(const vector> &fields, wstring &outUid, wstring &outUsername) override; };