class Authenticator(BaseModel): __core__ = True id = BoundedAutoField(primary_key=True) user = FlexibleForeignKey('sentry.User', db_index=True) created_at = models.DateTimeField(_('created at'), default=timezone.now) last_used_at = models.DateTimeField(_('last used at'), null=True) type = BoundedPositiveIntegerField(choices=AUTHENTICATOR_CHOICES) config = EncryptedPickledObjectField() objects = AuthenticatorManager() class AlreadyEnrolled(Exception): pass class Meta: app_label = 'sentry' db_table = 'auth_authenticator' verbose_name = _('authenticator') verbose_name_plural = _('authenticators') unique_together = (('user', 'type'), ) @cached_property def interface(self): return AUTHENTICATOR_INTERFACES_BY_TYPE[self.type](self) def mark_used(self, save=True): self.last_used_at = timezone.now() if save: self.save() def __repr__(self): return '<Authenticator user=%r interface=%r>' % ( self.user.email, self.interface.interface_id, )
class Authenticator(BaseModel): __core__ = True id = BoundedAutoField(primary_key=True) user = FlexibleForeignKey("sentry.User", db_index=True) created_at = models.DateTimeField(_("created at"), default=timezone.now) last_used_at = models.DateTimeField(_("last used at"), null=True) type = BoundedPositiveIntegerField(choices=AUTHENTICATOR_CHOICES) config = EncryptedPickledObjectField() objects = AuthenticatorManager() class AlreadyEnrolled(Exception): pass class Meta: app_label = "sentry" db_table = "auth_authenticator" verbose_name = _("authenticator") verbose_name_plural = _("authenticators") unique_together = (("user", "type"),) @cached_property def interface(self): return AUTHENTICATOR_INTERFACES_BY_TYPE[self.type](self) def mark_used(self, save=True): self.last_used_at = timezone.now() if save: self.save() def reset_fields(self, save=True): self.created_at = timezone.now() self.last_used_at = None if save: self.save() def __repr__(self): return f"<Authenticator user={self.user.email!r} interface={self.interface.interface_id!r}>"