git.fiddlerwoaroof.com
Raw Blame History
/* Copyright (C) CJ Affiliate
 *
 * You may use, distribute and modify this code under  the
 * terms of the  GNU General Public License  version 2  or
 * later.
 *
 * You should have received a copy of the license with this
 * file. If not, you will find a copy in the "LICENSE" file
 * at https://github.com/cjdev/dual-control.
 */

#ifndef _USER_H
#define _USER_H
#include <vector>
#include <string>
#include <memory>
#include <iostream>
#include "sys_unistd.h"
#include "sys_pwd.h"

class user_ifc
{
public:
    virtual ~user_ifc() {}
    virtual std::string home_directory() const
    {
        return "";
    }
    virtual uid_t uid() const
    {
        return -1;
    }
};

class user
{
public:
    typedef std::shared_ptr<user_ifc> delegate;
private:
    delegate delegate_;
public:
    user (delegate delegate) : delegate_ (delegate)
    {
    }
    user() : user (delegate (new user_ifc)) {}
    std::string home_directory() const
    {
        return delegate_-> home_directory();
    }
    uid_t uid() const
    {
        return delegate_->uid();
    }
    static user create (const passwd &passwd);
};

class directory_ifc
{
public:
    virtual ~directory_ifc() {}
    virtual std::vector<user> find_user (const std::string &user_name) const
    {
        return std::vector<user>();
    }
    virtual std::vector<user> get_current_user () const
    {
        return {};
    };
};

class directory : public directory_ifc
{
public:
    typedef std::shared_ptr<directory_ifc> delegate;
private:
    delegate delegate_;
public:
    directory (delegate delegate) : delegate_ (delegate) {}
    /* directory() : directory (delegate (new directory_ifc)) {} */
    std::vector<user> find_user (const std::string &user_name) const
    {
        return delegate_->find_user (user_name);
    }

    std::vector<user> get_current_user () const
    {
        return delegate_->get_current_user();
    }
    static directory create (unistd &unistd, pwd &pwd);
};

#endif