// 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 #include #include #include #include #include #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& user_id, const std::vector& app_id, base::Time timestamp) const override; std::vector 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 entries_; std::vector on_entry_added_callbacks_; DISALLOW_COPY_AND_ASSIGN(AccessRevocationManagerImpl); }; } // namespace weave #endif // LIBWEAVE_SRC_ACCESS_REVOCATION_MANAGER_IMPL_H_