| // 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 { | 
 |     Entry() = default; | 
 |  | 
 |     Entry(const std::vector<uint8_t>& user, | 
 |           const std::vector<uint8_t>& app, | 
 |           base::Time revocation_ts, | 
 |           base::Time expiration_ts) | 
 |         : user_id{user}, | 
 |           app_id{app}, | 
 |           revocation{revocation_ts}, | 
 |           expiration{expiration_ts} {} | 
 |     // 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; | 
 |  | 
 |     // Revoke matching entries if |revocation| is not less than | 
 |     // delegation timestamp. | 
 |     base::Time revocation; | 
 |  | 
 |     // Time after which to discard the rule. | 
 |     base::Time expiration; | 
 |   }; | 
 |   virtual ~AccessBlackListManager() = default; | 
 |  | 
 |   virtual void AddEntryAddedCallback(const base::Closure& callback) = 0; | 
 |   virtual void Block(const Entry& entry, const DoneCallback& callback) = 0; | 
 |   virtual bool IsBlocked(const std::vector<uint8_t>& user_id, | 
 |                          const std::vector<uint8_t>& app_id, | 
 |                          base::Time timestamp) 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.revocation == r.revocation && l.expiration == r.expiration && | 
 |          l.user_id == r.user_id && l.app_id == r.app_id; | 
 | } | 
 |  | 
 | inline bool operator!=(const AccessBlackListManager::Entry& l, | 
 |                        const AccessBlackListManager::Entry& r) { | 
 |   return !(l == r); | 
 | } | 
 |  | 
 | }  // namespace weave | 
 |  | 
 | #endif  // LIBWEAVE_SRC_ACCESS_BLACK_LIST_H_ |