git.fiddlerwoaroof.com
Raw Blame History
#include <string>
#include <vector>

#include "installer.h"
#include "token.h"
#include "sys_unistd.h"
#include "user.h"

namespace {

class impl : public installer_ifc {
    private:
        tokens tokens_;
        unistd unistd_;
        directory directory_;
        generator generator_;
    public:
        impl(const tokens &tokens, const unistd &unistd,
            const directory &directory, const installer_ifc::generator &generator) :
            tokens_(tokens), unistd_(unistd), directory_(directory), generator_(generator) {}
        std::string install_token() const override {
            const char *c_user_name = unistd_.getlogin();
            if (c_user_name == nullptr) {
                return "";
            }

            std::string user_name = c_user_name;

            auto found_user = directory_.find_user(user_name);
            if (found_user.empty()) {
                return "";
            }

            user user(found_user[0]);
            std::string token(generator_());
            tokens_.save(user, token);
            return token;
        }
};

}


installer installer::create(const tokens &tokens, const unistd &unistd,
        const directory &directory, const installer_ifc::generator &generator) {
    return installer(std::make_shared<impl>(tokens, unistd, directory, generator));
}