class User: """ User identity model, based on external verified claims. """ @property def is_authenticated(self): return True @property def id(self): return self._sub @property def claims(self): return self._claims @property def email(self): return self._email @property def name(self): return self._name def __init__(self, sub, email, name, claims): self._sub = sub self._claims = claims self._email = email self._name = name def __str__(self): return f"User<{self.id}>" def __eq__(self, other): return self.id == other.id def __hash__(self): return hash(self.id) def __repr__(self): return f"User({self.id}, {self._claims})" class AnonymousUser: @property def is_authenticated(self): return False @property def id(self): return None @property def claims(self): return () def __str__(self): return "AnonymousUser" def __repr__(self): return "AnonymousUser()"