71 lines
1.4 KiB
C++
71 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include <boost/signals2.hpp>
|
|
|
|
#include <memory>
|
|
#include <optional>
|
|
#include <string>
|
|
#include <string_view>
|
|
|
|
class SaslMechanism
|
|
{
|
|
public:
|
|
virtual ~SaslMechanism() {}
|
|
|
|
virtual auto mechanism_name() const -> std::string = 0;
|
|
virtual auto step(std::string_view msg) -> std::optional<std::string> = 0;
|
|
virtual auto is_complete() const -> bool = 0;
|
|
};
|
|
|
|
class SaslPlain final : public SaslMechanism
|
|
{
|
|
std::string authcid_;
|
|
std::string authzid_;
|
|
std::string password_;
|
|
bool complete_;
|
|
|
|
public:
|
|
SaslPlain(std::string authcid, std::string authzid, std::string password)
|
|
: authcid_{std::move(authcid)}
|
|
, authzid_{std::move(authzid)}
|
|
, password_{std::move(password)}
|
|
, complete_{false}
|
|
{}
|
|
|
|
auto mechanism_name() const -> std::string override
|
|
{
|
|
return "PLAIN";
|
|
}
|
|
|
|
auto step(std::string_view msg) -> std::optional<std::string> override;
|
|
|
|
auto is_complete() const -> bool override
|
|
{
|
|
return complete_;
|
|
}
|
|
};
|
|
|
|
class SaslExternal final : public SaslMechanism
|
|
{
|
|
std::string authzid_;
|
|
bool complete_;
|
|
|
|
public:
|
|
SaslExternal(std::string authzid)
|
|
: authzid_{std::move(authzid)}
|
|
, complete_{false}
|
|
{}
|
|
|
|
auto mechanism_name() const -> std::string override
|
|
{
|
|
return "EXTERNAL";
|
|
}
|
|
|
|
auto step(std::string_view msg) -> std::optional<std::string> override;
|
|
|
|
auto is_complete() const -> bool override
|
|
{
|
|
return complete_;
|
|
}
|
|
};
|