BeeeOn Gateway  v2020.3.1-2-g6f737dc
Platform to interconnect the IoT world
CredentialsStorage.h
1 #pragma once
2 
3 #include <functional>
4 #include <map>
5 
6 #include <Poco/Util/AbstractConfiguration.h>
7 #include <Poco/StringTokenizer.h>
8 #include <Poco/RWLock.h>
9 
10 #include "credentials/Credentials.h"
11 #include "model/DeviceID.h"
12 #include "util/Loggable.h"
13 
14 namespace BeeeOn {
15 
16 class CredentialsStorage : protected Loggable {
17 public:
18  typedef Poco::SharedPtr<CredentialsStorage> Ptr;
19 
47  typedef std::function<
48  Poco::SharedPtr<Credentials> (Poco::AutoPtr<Poco::Util::AbstractConfiguration>)>
50 
52  CredentialsStorage(const std::map<std::string, CredentialsFactory> &factory);
53 
55 
56  Poco::SharedPtr<Credentials> find(const DeviceID &ID);
57 
58  virtual void insertOrUpdate(
59  const DeviceID &device,
60  const Poco::SharedPtr<Credentials> credentials);
61 
62  virtual void remove(const DeviceID &device);
63  virtual void clear();
64 
65  void save(
66  Poco::AutoPtr<Poco::Util::AbstractConfiguration> conf,
67  const std::string &root = "credentials") const;
68 
69  void load(
70  Poco::AutoPtr<Poco::Util::AbstractConfiguration> rootConf,
71  const std::string &root = "credentials");
72 
73 protected:
74  Poco::RWLock &lock() const;
75 
76  void insertOrUpdateUnlocked(
77  const DeviceID &device,
78  const Poco::SharedPtr<Credentials> credentials);
79 
80  void removeUnlocked(const DeviceID &device);
81  void clearUnlocked();
82 
83 private:
84  Poco::SharedPtr<Credentials> createCredential(
85  Poco::AutoPtr<Poco::Util::AbstractConfiguration> conf);
86 
87  std::map<DeviceID, Poco::SharedPtr<Credentials>> m_credentialsMap;
88  std::map<std::string, CredentialsFactory> m_factory;
89  mutable Poco::RWLock m_lock;
90 };
91 
92 }
std::function< Poco::SharedPtr< Credentials >Poco::AutoPtr< Poco::Util::AbstractConfiguration >)> CredentialsFactory
Definition: CredentialsStorage.h:49
Definition: CredentialsStorage.h:16
Definition: Loggable.h:19
Definition: DeviceID.h:17