]> git.stg.codes - stg.git/blobdiff - include/stg/users.h
More subscriptions, less notifiers.
[stg.git] / include / stg / users.h
index 1a8d7a4379bff76d74b685dea039fcf3057aa44e..1587f35050c4eb8fdcb5aa91203270193cc95cb9 100644 (file)
  *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
  */
 
-#ifndef USERS_H
-#define USERS_H
+#pragma once
+
+#include "subscriptions.h"
 
 #include <string>
 
-#include "notifer.h"
-#include "user.h"
+#include <cstdint>
+
+namespace STG
+{
+
+struct Admin;
+struct User;
+struct Auth;
 
-class ADMIN;
+class Users
+{
+    public:
+        virtual ~Users() = default;
 
-class USERS {
-public:
-    virtual ~USERS() {}
-    virtual int  FindByName(const std::string & login, USER_PTR * user) = 0;
-    virtual int  FindByName(const std::string & login, CONST_USER_PTR * user) const = 0;
+        using UserPtr = User*;
+        using ConstUserPtr = const User*;
 
-    virtual bool TariffInUse(const std::string & tariffName) const = 0;
+        virtual int  FindByName(const std::string& login, UserPtr* user) = 0;
+        virtual int  FindByName(const std::string& login, ConstUserPtr* user) const = 0;
+        virtual bool Exists(const std::string& login) const = 0;
 
-    virtual void AddNotifierUserAdd(NOTIFIER_BASE<USER_PTR> * notifier) = 0;
-    virtual void DelNotifierUserAdd(NOTIFIER_BASE<USER_PTR> * notifier) = 0;
+        virtual bool TariffInUse(const std::string& tariffName) const = 0;
 
-    virtual void AddNotifierUserDel(NOTIFIER_BASE<USER_PTR> * notifier) = 0;
-    virtual void DelNotifierUserDel(NOTIFIER_BASE<USER_PTR> * notifier) = 0;
+        template <typename F>
+        auto onAdd(F&& f) { return m_onAddCallbacks.add(std::forward<F>(f)); }
+        template <typename F>
+        auto onDel(F&& f) { return m_onDelCallbacks.add(std::forward<F>(f)); }
 
-    virtual int  Add(const std::string & login, const ADMIN * admin) = 0;
-    virtual void Del(const std::string & login, const ADMIN * admin) = 0;
+        virtual int  Add(const std::string& login, const Admin* admin) = 0;
+        virtual void Del(const std::string& login, const Admin* admin) = 0;
 
-    virtual bool Authorize(const std::string & login, uint32_t ip,
-                           uint32_t enabledDirs, const AUTH * auth) = 0;
-    virtual bool Unauthorize(const std::string & login,
-                             const AUTH * auth,
-                             const std::string & reason = std::string()) = 0;
+        virtual bool Authorize(const std::string& login, uint32_t ip,
+                               uint32_t enabledDirs, const Auth* auth) = 0;
+        virtual bool Unauthorize(const std::string& login,
+                                 const Auth* auth,
+                                 const std::string& reason = {}) = 0;
 
-    virtual int  ReadUsers() = 0;
-    virtual size_t Count() const = 0;
+        virtual int  ReadUsers() = 0;
+        virtual size_t Count() const = 0;
 
-    virtual int  FindByIPIdx(uint32_t ip, USER_PTR * user) const = 0;
-    virtual bool IsIPInIndex(uint32_t ip) const = 0;
-    virtual bool IsIPInUse(uint32_t ip, const std::string & login, CONST_USER_PTR * user) const = 0;
+        virtual int  FindByIPIdx(uint32_t ip, User** user) const = 0;
+        virtual bool IsIPInIndex(uint32_t ip) const = 0;
+        virtual bool IsIPInUse(uint32_t ip, const std::string & login, const User** user) const = 0;
 
-    virtual int  OpenSearch() = 0;
-    virtual int  SearchNext(int handle, USER_PTR * u) = 0;
-    virtual int  CloseSearch(int handle) = 0;
+        virtual unsigned int  OpenSearch() = 0;
+        virtual int  SearchNext(int handle, User** u) = 0;
+        virtual int  CloseSearch(int handle) = 0;
 
-    virtual int  Start() = 0;
-    virtual int  Stop() = 0;
+        virtual int  Start() = 0;
+        virtual int  Stop() = 0;
 
+    protected:
+        Subscriptions<UserPtr> m_onAddCallbacks;
+        Subscriptions<UserPtr> m_onDelCallbacks;
 };
 
-#endif
+}