browsing: 8a15acc66fa831eb7a75dbc567fc6db41ac5aa99
34ba20e5
a85aeaf0
#include "dual_control.h"
caf7db60
#include "conversation.h"
#include "validator.h"
34ba20e5
4a1812fd
class impl : public dual_control_ifc {
caf7db60
private:
conversations conversations_;
validator validator_;
47f9faed
logger logger_;
4a1812fd
public:
caf7db60
impl(const dual_control_configuration &configuration);
4a1812fd
int authenticate(pam_handle *handle, int flags, const std::vector<const std::string> &arguments );
int setcred(pam_handle *handle, int flags, const std::vector<const std::string> &arguments);
};
7699d7ec
caf7db60
impl::impl(const dual_control_configuration &configuration) :
conversations_(configuration.conversations),
47f9faed
validator_(configuration.validator),
logger_(configuration.logger) {}
caf7db60
4a1812fd
int impl::setcred(pam_handle *handle, int flags, const std::vector<const std::string> &arguments) {
return PAM_SUCCESS;
9404cc1a
}
df73f11d
4a1812fd
int impl::authenticate(pam_handle *handle, int flags, const std::vector<const std::string> &arguments) {
caf7db60
8a15acc6
conversation_result conversation = conversations_.initiate_conversation();
47f9faed
std::string user_name = conversation.user_name();
std::string token = conversation.token();
caf7db60
47f9faed
int auth_result = validator_->validate(user_name, token) ? PAM_SUCCESS : PAM_AUTH_ERR;
370f8031
logger_.log(auth_result, user_name, token);
47f9faed
return auth_result;
df73f11d
}
704ed597
caf7db60
dual_control create_dual_control(const dual_control_configuration &configuration) {
return dual_control(new impl(configuration));
4a1812fd
}