31 const std::filesystem::path& path,
33 const std::string& nameServer);
38 std::shared_ptr<dht::crypto::Certificate>
ca;
42 std::string deviceName,
43 std::unique_ptr<AccountCredentials> credentials,
49 const std::string& )
override
57 = std::function<
void(
const std::map<std::string, std::string>& config)>;
62 std::string_view scheme,
63 const std::string& password,
68 std::string_view scheme,
69 const std::string& password,
77 std::string accountId;
80 std::string deviceName;
81 std::unique_ptr<ServerAccountCredentials> credentials;
86 const std::string managerHostname_;
87 std::shared_ptr<dht::Logger> logger_;
89 std::mutex requestLock_;
90 std::set<std::shared_ptr<dht::http::Request>> requests_;
91 std::unique_ptr<ServerAccountCredentials> creds_;
93 void sendRequest(
const std::shared_ptr<dht::http::Request>& request);
94 void clearRequest(
const std::weak_ptr<dht::http::Request>& request);
96 enum class TokenScope :
unsigned { None = 0, Device, User, Admin };
97 std::mutex tokenLock_;
98 std::string token_ {};
99 TokenScope tokenScope_ {};
100 std::chrono::steady_clock::time_point tokenExpire_ {
101 std::chrono::steady_clock::time_point::min()};
103 using RequestQueue = std::queue<std::shared_ptr<dht::http::Request>>;
104 RequestQueue pendingDeviceRequests_;
105 RequestQueue pendingAccountRequests_;
106 RequestQueue& getRequestQueue(TokenScope
scope)
108 return scope == TokenScope::Device ? pendingDeviceRequests_ : pendingAccountRequests_;
110 bool hasAuthorization(TokenScope
scope)
const
113 and tokenExpire_ >= std::chrono::steady_clock::now();
115 void setAuthHeaderFields(dht::http::Request& request)
const;
117 void sendDeviceRequest(
const std::shared_ptr<dht::http::Request>& req);
118 void sendAccountRequest(
const std::shared_ptr<dht::http::Request>& req,
119 const std::string& password);
121 void authenticateDevice();
122 void authenticateAccount(
const std::string& username,
const std::string& password);
123 void authFailed(TokenScope
scope,
int code);
124 void authError(TokenScope
scope);
125 void onAuthEnded(
const Json::Value& json,
const dht::http::Response& response, TokenScope
scope);
126 std::function<
void()> onNeedsMigration_;
128 void setToken(std::string token,
130 std::chrono::steady_clock::time_point
expiration);
void initAuthentication(PrivateKey request, std::string deviceName, std::unique_ptr< AccountCredentials > credentials, AuthSuccessCallback onSuccess, AuthFailureCallback onFailure, const OnChangeCallback &onChange) override