#pragma once #include #include #include #include #include struct UserInfo { int64_t id = 0; std::string username; bool isAdmin = false; bool isStreamer = false; bool isPgpOnly = false; std::string bio; std::string avatarUrl; std::string pgpOnlyEnabledAt; std::string colorCode; }; class AuthService { public: static AuthService& getInstance() { static AuthService instance; return instance; } void registerUser(const std::string& username, const std::string& password, const std::string& publicKey, const std::string& fingerprint, std::function callback); void loginUser(const std::string& username, const std::string& password, std::function callback); void initiatePgpLogin(const std::string& username, std::function callback); void verifyPgpLogin(const std::string& username, const std::string& signature, const std::string& challenge, std::function callback); std::string generateToken(const UserInfo& user); bool validateToken(const std::string& token, UserInfo& userInfo); // New method to fetch complete user info including color void fetchUserInfo(int64_t userId, std::function callback); void updatePassword(int64_t userId, const std::string& oldPassword, const std::string& newPassword, std::function callback); void updateUserColor(int64_t userId, const std::string& newColor, std::function callback); void generateUniqueColor(std::function callback); private: AuthService() = default; std::string jwtSecret_; bool validatePassword(const std::string& password, std::string& error); };