Home | History | Annotate | Download | only in src
      1 // Copyright 2016 The Weave Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef LIBWEAVE_SRC_ACCESS_BLACK_LIST_H_
      6 #define LIBWEAVE_SRC_ACCESS_BLACK_LIST_H_
      7 
      8 #include <vector>
      9 
     10 #include <base/time/time.h>
     11 
     12 namespace weave {
     13 
     14 class AccessBlackListManager {
     15  public:
     16   struct Entry {
     17     // user_id is empty, app_id is empty: block everything.
     18     // user_id is not empty, app_id is empty: block if user_id matches.
     19     // user_id is empty, app_id is not empty: block if app_id matches.
     20     // user_id is not empty, app_id is not empty: block if both match.
     21     std::vector<uint8_t> user_id;
     22     std::vector<uint8_t> app_id;
     23 
     24     // Time after which to discard the rule.
     25     base::Time expiration;
     26   };
     27   virtual ~AccessBlackListManager() = default;
     28 
     29   virtual void Block(const std::vector<uint8_t>& user_id,
     30                      const std::vector<uint8_t>& app_id,
     31                      const base::Time& expiration,
     32                      const DoneCallback& callback) = 0;
     33   virtual void Unblock(const std::vector<uint8_t>& user_id,
     34                        const std::vector<uint8_t>& app_id,
     35                        const DoneCallback& callback) = 0;
     36   virtual bool IsBlocked(const std::vector<uint8_t>& user_id,
     37                          const std::vector<uint8_t>& app_id) const = 0;
     38   virtual std::vector<Entry> GetEntries() const = 0;
     39   virtual size_t GetSize() const = 0;
     40   virtual size_t GetCapacity() const = 0;
     41 };
     42 
     43 inline bool operator==(const AccessBlackListManager::Entry& l,
     44                        const AccessBlackListManager::Entry& r) {
     45   return l.user_id == r.user_id && l.app_id == r.app_id &&
     46          l.expiration == r.expiration;
     47 }
     48 
     49 inline bool operator!=(const AccessBlackListManager::Entry& l,
     50                        const AccessBlackListManager::Entry& r) {
     51   return !(l == r);
     52 }
     53 
     54 }  // namespace weave
     55 
     56 #endif  // LIBWEAVE_SRC_ACCESS_BLACK_LIST_H_
     57