| // 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_BLACK_LIST_H_ |
| #define LIBWEAVE_SRC_ACCESS_BLACK_LIST_H_ |
| |
| #include <vector> |
| |
| #include <base/time/time.h> |
| |
| namespace weave { |
| |
| class AccessBlackListManager { |
| public: |
| struct Entry { |
| // user_id is empty, app_id is empty: block everything. |
| // user_id is not empty, app_id is empty: block if user_id matches. |
| // user_id is empty, app_id is not empty: block if app_id matches. |
| // user_id is not empty, app_id is not empty: block if both match. |
| std::vector<uint8_t> user_id; |
| std::vector<uint8_t> app_id; |
| |
| // Time after which to discard the rule. |
| base::Time expiration; |
| }; |
| virtual ~AccessBlackListManager() = default; |
| |
| virtual void Block(const std::vector<uint8_t>& user_id, |
| const std::vector<uint8_t>& app_id, |
| const base::Time& expiration, |
| const DoneCallback& callback) = 0; |
| virtual void Unblock(const std::vector<uint8_t>& user_id, |
| const std::vector<uint8_t>& app_id, |
| const DoneCallback& callback) = 0; |
| virtual bool IsBlocked(const std::vector<uint8_t>& user_id, |
| const std::vector<uint8_t>& app_id) const = 0; |
| virtual std::vector<Entry> GetEntries() const = 0; |
| virtual size_t GetSize() const = 0; |
| virtual size_t GetCapacity() const = 0; |
| }; |
| |
| inline bool operator==(const AccessBlackListManager::Entry& l, |
| const AccessBlackListManager::Entry& r) { |
| return l.user_id == r.user_id && l.app_id == r.app_id && |
| l.expiration == r.expiration; |
| } |
| |
| inline bool operator!=(const AccessBlackListManager::Entry& l, |
| const AccessBlackListManager::Entry& r) { |
| return !(l == r); |
| } |
| |
| } // namespace weave |
| |
| #endif // LIBWEAVE_SRC_ACCESS_BLACK_LIST_H_ |