#include "auth_digest.hpp"
#include "user_info.hpp"
#include "sql/queries.hpp"
#include <algorithm>
#include <optional>
#include <string_view>
namespace samples::digest_auth {
using HA1 = server::handlers::auth::digest::UserData::HA1;
using TimePoint = std::chrono::time_point<std::chrono::system_clock>;
public:
AuthChecker(
const AuthDigestSettings& digest_settings,
std::string realm,
const SecdistConfig& secdist_config,
)
pg_cluster_(std::move(pg_cluster)),
nonce_ttl_(digest_settings.nonce_ttl)
{}
std::optional<UserData> FetchUserData(const std::string& username) const override;
void SetUserData(
const std::string& username,
const std::string& nonce,
std::int64_t nonce_count,
TimePoint nonce_creation_time
) const override;
void PushUnnamedNonce(std::string nonce) const override;
std::optional<TimePoint> GetUnnamedNonceCreationTime(const std::string& nonce) const override;
private:
const std::chrono::milliseconds nonce_ttl_;
};
std::optional<UserData> AuthChecker::FetchUserData(const std::string& username) const {
return std::nullopt;
}
auto user_db_info = res.
AsSingleRow<UserDbInfo>(storages::postgres::kRowTag);
return UserData{
HA1{user_db_info.ha1},
user_db_info.nonce,
user_db_info.timestamp.GetUnderlying(),
user_db_info.nonce_count
};
}
void AuthChecker::SetUserData(
const std::string& username,
const std::string& nonce,
std::int64_t nonce_count,
TimePoint nonce_creation_time
) const {
pg_cluster_->Execute(
uservice_dynconf::sql::kUpdateUser,
nonce,
nonce_count,
username
);
}
void AuthChecker::PushUnnamedNonce(std::string nonce) const {
auto res = pg_cluster_->Execute(
uservice_dynconf::sql::kInsertUnnamedNonce,
nonce,
);
}
std::optional<TimePoint> AuthChecker::GetUnnamedNonceCreationTime(const std::string& nonce) const {
auto res =
pg_cluster_
if (res.IsEmpty()) {
return std::nullopt;
}
}
{}
server::handlers::auth::AuthCheckerBasePtr CheckerFactory::MakeAuthChecker(
) const {
return std::make_shared<
AuthChecker>(digest_auth_settings_, auth_config[
"realm"].
As<std::string>({}), secdist_.Get(), pg_cluster_);
}
: digest_auth_settings_(
context
.FindComponent<server::handlers::auth::digest::AuthCheckerSettingsComponent>(
"auth-"
"digest-"
"checker-"
"settings-"
"proxy"
)
.GetSettings()
),
{}
server::handlers::auth::AuthCheckerBasePtr CheckerProxyFactory::MakeAuthChecker(
) const {
return std::make_shared<
AuthChecker>(digest_auth_settings_, auth_config[
"realm"].
As<std::string>({}), secdist_.Get(), pg_cluster_);
}
}