]> git.stg.codes - stg.git/blobdiff - include/stg/admin.h
Fix build on Darwin.
[stg.git] / include / stg / admin.h
index 961968a1065234e12a2a803c2812abf078b23655..7f302bb4400330fdf962514ca492815b756a9872 100644 (file)
  *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
  */
 
-#ifndef ADMIN_H
-#define ADMIN_H
+#pragma once
+
+#include "admin_conf.h"
+
+#include "stg/common.h"
 
 #include <string>
+#include <cstdint>
 
-#include "admin_conf.h"
-#include "os_int.h"
-
-class ADMIN {
-public:
-    virtual ~ADMIN() {}
-    virtual const std::string & GetPassword() const = 0;
-    virtual const std::string & GetLogin() const = 0;
-    virtual PRIV const *        GetPriv() const = 0;
-    virtual uint32_t            GetPrivAsInt() const = 0;
-    virtual const ADMIN_CONF &  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;
+namespace STG
+{
+
+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;
 };
 
-#endif
+}