#pragma once #include #include #include #include #include #include namespace NYql { struct TCredential { const TString Category; const TString Subcategory; const TString Content; TCredential(const TString& category, const TString& subcategory, const TString& content) : Category(category) , Subcategory(subcategory) , Content(content) { } }; struct TUserCredentials { TString OauthToken; TString BlackboxSessionIdCookie; }; class TCredentials: public TThrRefBase { public: using TPtr = TIntrusivePtr; TCredentials() = default; ~TCredentials() = default; void AddCredential(const TString& alias, const TCredential& cred); void SetUserCredentials(const TUserCredentials& userCredentials) { UserCredentials_ = userCredentials; } void SetGroups(std::unordered_set&& groups) { Groups_ = std::move(groups); } const std::unordered_set& GetGroups() const { return Groups_; } const TCredential* FindCredential(const TStringBuf& name) const; TString FindCredentialContent(const TStringBuf& name1, const TStringBuf& name2, const TString& defaultContent) const; const TUserCredentials& GetUserCredentials() const { return UserCredentials_; } void ForEach(const std::function& callback) const; private: THashMap CredentialTable_; TUserCredentials UserCredentials_; std::unordered_set Groups_; }; } // namespace NYql