git.fiddlerwoaroof.com
dual_control.cc
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
 }