#pragma once
+#include "admin_conf.h"
+
+#include "stg/common.h"
+
#include <string>
#include <cstdint>
namespace STG
{
-struct AdminConf;
-struct Priv;
-
-struct Admin {
- virtual ~Admin() = default;
-
- virtual const std::string& GetPassword() const = 0;
- virtual const std::string& GetLogin() const = 0;
- virtual const Priv* GetPriv() const = 0;
- virtual uint32_t GetPrivAsInt() const = 0;
- virtual const AdminConf& GetConf() const = 0;
- virtual uint32_t GetIP() const = 0;
- virtual std::string GetIPStr() const = 0;
- virtual void SetIP(uint32_t ip) = 0;
- virtual const std::string GetLogStr() const = 0;
+class Admin
+{
+ public:
+ Admin() noexcept : Admin(AdminConf{}) {}
+ Admin(const Priv& priv,
+ const std::string& login,
+ const std::string& password) noexcept
+ : Admin(AdminConf{priv, login, password})
+ {}
+ explicit Admin(const AdminConf& ac) noexcept : m_conf(ac), m_ip(0) {}
+
+ Admin(const Admin&) = default;
+ Admin& operator=(const Admin&) = default;
+ Admin(Admin&&) = default;
+ Admin& operator=(Admin&&) = default;
+
+ Admin& operator=(const AdminConf& ac) noexcept { m_conf = ac; return *this; }
+ bool operator==(const Admin& rhs) const noexcept { return m_conf.login == rhs.m_conf.login; }
+ bool operator!=(const Admin& rhs) const noexcept { return !(*this == rhs); }
+ bool operator<(const Admin& rhs) const noexcept { return m_conf.login < rhs.m_conf.login; }
+
+ const std::string& password() const { return m_conf.password; }
+ const std::string& login() const { return m_conf.login; }
+ const Priv& priv() const { return m_conf.priv; }
+ uint32_t privAsInt() const { return m_conf.priv.toInt(); }
+ const AdminConf& conf() const { return m_conf; }
+ uint32_t IP() const { return m_ip; }
+ std::string IPStr() const { return inet_ntostring(m_ip); }
+ void setIP(uint32_t v) { m_ip = v; }
+ const std::string logStr() const { return "Admin \'" + m_conf.login + "\', " + IPStr() + ":"; }
+
+ private:
+ AdminConf m_conf;
+ uint32_t m_ip;
};
}