X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/e9ae1f101b5418c0ba2e6c9d86b23c12f0140982..7ef8de40e0bcdd931f5a400fd586fee3a1aaaeea:/include/stg/admin.h

diff --git a/include/stg/admin.h b/include/stg/admin.h
index f78640ae..7f302bb4 100644
--- a/include/stg/admin.h
+++ b/include/stg/admin.h
@@ -20,27 +20,50 @@
 
 #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;
 };
 
 }