| // Copyright 2016 The Weave Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef LIBWEAVE_SRC_ACCESS_REVOCATION_MANAGER_IMPL_H_ |
| #define LIBWEAVE_SRC_ACCESS_REVOCATION_MANAGER_IMPL_H_ |
| |
| #include <set> |
| #include <utility> |
| |
| #include <base/time/default_clock.h> |
| #include <base/time/time.h> |
| #include <weave/error.h> |
| #include <weave/provider/config_store.h> |
| |
| #include "src/access_revocation_manager.h" |
| |
| namespace weave { |
| |
| class AccessRevocationManagerImpl : public AccessRevocationManager { |
| public: |
| explicit AccessRevocationManagerImpl(provider::ConfigStore* store, |
| size_t capacity = 1024, |
| base::Clock* clock = nullptr); |
| |
| // AccessRevocationManager implementation. |
| void AddEntryAddedCallback(const base::Closure& callback) override; |
| void Block(const Entry& entry, const DoneCallback& callback) override; |
| bool IsBlocked(const std::vector<uint8_t>& user_id, |
| const std::vector<uint8_t>& app_id, |
| base::Time timestamp) const override; |
| std::vector<Entry> GetEntries() const override; |
| size_t GetSize() const override; |
| size_t GetCapacity() const override; |
| |
| private: |
| void Load(); |
| void Save(const DoneCallback& callback); |
| void Shrink(); |
| |
| struct EntryIdsLess { |
| bool operator()(const Entry& l, const Entry& r) const { |
| auto make_tuple = [](const AccessRevocationManager::Entry& e) { |
| return std::tie(e.user_id, e.app_id); |
| }; |
| return make_tuple(l) < make_tuple(r); |
| } |
| }; |
| |
| const size_t capacity_{0}; |
| base::DefaultClock default_clock_; |
| base::Clock* clock_{&default_clock_}; |
| |
| provider::ConfigStore* store_{nullptr}; |
| std::set<Entry, EntryIdsLess> entries_; |
| std::vector<base::Closure> on_entry_added_callbacks_; |
| |
| DISALLOW_COPY_AND_ASSIGN(AccessRevocationManagerImpl); |
| }; |
| |
| } // namespace weave |
| |
| #endif // LIBWEAVE_SRC_ACCESS_REVOCATION_MANAGER_IMPL_H_ |