Various minor cleanup

This commit is contained in:
emeric
2024-12-06 14:08:31 +01:00
parent 5ce99411e1
commit 06fd444d26
54 changed files with 113 additions and 144 deletions
@@ -35,6 +35,9 @@ namespace lms::auth
{
protected:
AuthServiceBase(db::Db& db);
~AuthServiceBase() = default;
AuthServiceBase(const AuthServiceBase&) = delete;
AuthServiceBase& operator=(const AuthServiceBase&) = delete;
db::UserId getOrCreateUser(std::string_view loginName);
void onUserAuthenticated(db::UserId userId);
@@ -22,7 +22,6 @@
#include <Wt/Auth/HashFunction.h>
#include <Wt/WRandom.h>
#include "core/Exception.hpp"
#include "core/ILogger.hpp"
#include "database/AuthToken.hpp"
#include "database/Session.hpp"
@@ -126,7 +125,7 @@ namespace lms::auth
std::shared_lock lock{ _mutex };
if (_loginThrottler.isClientThrottled(clientAddress))
return AuthTokenProcessResult{ AuthTokenProcessResult::State::Throttled };
return AuthTokenProcessResult{ .state = AuthTokenProcessResult::State::Throttled, .authTokenInfo = std::nullopt };
}
auto res{ processAuthToken(domain, tokenValue) };
@@ -134,17 +133,17 @@ namespace lms::auth
std::unique_lock lock{ _mutex };
if (_loginThrottler.isClientThrottled(clientAddress))
return AuthTokenProcessResult{ AuthTokenProcessResult::State::Throttled };
return AuthTokenProcessResult{ .state = AuthTokenProcessResult::State::Throttled, .authTokenInfo = std::nullopt };
if (!res)
{
_loginThrottler.onBadClientAttempt(clientAddress);
return AuthTokenProcessResult{ AuthTokenProcessResult::State::Denied };
return AuthTokenProcessResult{ .state = AuthTokenProcessResult::State::Denied, .authTokenInfo = std::nullopt };
}
_loginThrottler.onGoodClientAttempt(clientAddress);
onUserAuthenticated(res->userId);
return AuthTokenProcessResult{ AuthTokenProcessResult::State::Granted, res };
return AuthTokenProcessResult{ .state = AuthTokenProcessResult::State::Granted, .authTokenInfo = res };
}
}
@@ -39,6 +39,7 @@ namespace lms::auth
public:
AuthTokenService(db::Db& db, std::size_t maxThrottlerEntryCount);
~AuthTokenService() override = default;
AuthTokenService(const AuthTokenService&) = delete;
AuthTokenService& operator=(const AuthTokenService&) = delete;
AuthTokenService(AuthTokenService&&) = delete;
+1 -2
View File
@@ -25,8 +25,7 @@
namespace lms::auth
{
std::unique_ptr<IEnvService>
createEnvService(std::string_view backendName, db::Db& db)
std::unique_ptr<IEnvService> createEnvService(std::string_view backendName, db::Db& db)
{
if (backendName == "http-headers")
return std::make_unique<HttpHeadersEnvService>(db);
@@ -24,7 +24,6 @@
#include <Wt/WDateTime.h>
#include "core/Exception.hpp"
#include "core/NetAddress.hpp"
namespace lms::auth
@@ -35,6 +34,10 @@ namespace lms::auth
LoginThrottler(std::size_t maxEntries)
: _maxEntries{ maxEntries } {}
~LoginThrottler() = default;
LoginThrottler(const LoginThrottler&) = delete;
LoginThrottler& operator=(const LoginThrottler&) = delete;
// user must lock these calls to avoid races
bool isClientThrottled(const boost::asio::ip::address& address) const;
void onBadClientAttempt(const boost::asio::ip::address& address);
@@ -27,10 +27,8 @@
#include "pam/PAMPasswordService.hpp"
#endif // LMS_SUPPORT_PAM
#include "core/Exception.hpp"
#include "core/ILogger.hpp"
#include "database/Session.hpp"
#include "database/User.hpp"
#include "services/auth/Types.hpp"
namespace lms::auth
@@ -63,7 +61,7 @@ namespace lms::auth
std::shared_lock lock{ _mutex };
if (_loginThrottler.isClientThrottled(clientAddress))
return { CheckResult::State::Throttled };
return CheckResult{ .state = CheckResult::State::Throttled, .userId = {} };
}
const bool match{ checkUserPassword(loginName, password) };
@@ -71,7 +69,7 @@ namespace lms::auth
std::unique_lock lock{ _mutex };
if (_loginThrottler.isClientThrottled(clientAddress))
return { CheckResult::State::Throttled };
return CheckResult{ .state = CheckResult::State::Throttled, .userId = {} };
if (match)
{
@@ -79,13 +77,11 @@ namespace lms::auth
const db::UserId userId{ getOrCreateUser(loginName) };
onUserAuthenticated(userId);
return { CheckResult::State::Granted, userId };
}
else
{
_loginThrottler.onBadClientAttempt(clientAddress);
return { CheckResult::State::Denied };
return CheckResult{ .state = CheckResult::State::Granted, .userId = userId };
}
_loginThrottler.onBadClientAttempt(clientAddress);
return CheckResult{ .state = CheckResult::State::Denied, .userId = {} };
}
}
} // namespace lms::auth
@@ -38,6 +38,7 @@ namespace lms::auth
public:
PasswordServiceBase(db::Db& db, std::size_t maxThrottlerEntries);
~PasswordServiceBase() override = default;
PasswordServiceBase(const PasswordServiceBase&) = delete;
PasswordServiceBase& operator=(const PasswordServiceBase&) = delete;
PasswordServiceBase(PasswordServiceBase&&) = delete;
@@ -38,7 +38,7 @@ namespace lms::auth
bool checkUserPassword(std::string_view loginName, std::string_view password) override;
bool canSetPasswords() const override;
PasswordAcceptabilityResult checkPasswordAcceptability(std::string_view loginName, const PasswordValidationContext& context) const override;
PasswordAcceptabilityResult checkPasswordAcceptability(std::string_view password, const PasswordValidationContext& context) const override;
void setPassword(db::UserId userId, std::string_view newPassword) override;
db::User::PasswordHash hashPassword(std::string_view password) const;
@@ -27,7 +27,6 @@
#include <security/pam_appl.h>
#include "core/ILogger.hpp"
#include "database/Session.hpp"
#include "services/auth/Types.hpp"
namespace lms::auth
@@ -192,7 +191,7 @@ namespace lms::auth
throw NotImplementedException{};
}
void PAMPasswordService::setPassword(db::UserId, std::string_view)
void PAMPasswordService::setPassword(db::UserId /*userId*/, std::string_view /*newPassword*/)
{
throw NotImplementedException{};
}
@@ -19,8 +19,6 @@
#pragma once
#include <shared_mutex>
#include "PasswordServiceBase.hpp"
namespace lms::auth
@@ -22,7 +22,6 @@
#include <chrono>
#include <memory>
#include <optional>
#include <string>
#include <string_view>
#include <Wt/WDateTime.h>
@@ -62,7 +61,7 @@ namespace lms::auth
};
State state{ State::Denied };
std::optional<AuthTokenInfo> authTokenInfo{};
std::optional<AuthTokenInfo> authTokenInfo;
};
struct DomainParameters
@@ -19,8 +19,7 @@
#pragma once
#include <optional>
#include <string>
#include <string_view>
#include "database/UserId.hpp"
@@ -19,7 +19,6 @@
#pragma once
#include <optional>
#include <string_view>
#include <Wt/Dbo/ptr.h>
@@ -52,7 +51,6 @@ namespace lms::auth
};
State state{ State::Denied };
db::UserId userId{};
std::optional<Wt::WDateTime> expiry{};
};
virtual CheckResult checkUserPassword(const boost::asio::ip::address& clientAddress,
std::string_view loginName,