]> git.stg.codes - stg.git/blobdiff - include/stg/admin.h
Pretty-printing CTX diff.
[stg.git] / include / stg / admin.h
index f78640ae826e45547d6761379a97a578f9c5ec88..7f302bb4400330fdf962514ca492815b756a9872 100644 (file)
 
 #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;
 };
 
 }