"""OAuth Client models""" from django.db import models from passbook.core.models import Source, UserSourceConnection from passbook.oauth_client.clients import get_client class OAuthSource(Source): """Configuration for OAuth provider.""" # FIXME: Dynamically load available source_types provider_type = models.CharField(max_length=255) request_token_url = models.CharField(blank=True, max_length=255) authorization_url = models.CharField(max_length=255) access_token_url = models.CharField(max_length=255) profile_url = models.CharField(max_length=255) consumer_key = models.TextField() consumer_secret = models.TextField() class Meta: verbose_name = 'OAuth Source' verbose_name_plural = 'OAuth Sources' class UserOAuthSourceConnection(UserSourceConnection): """Authorized remote OAuth provider.""" identifier = models.CharField(max_length=255) access_token = models.TextField(blank=True, null=True, default=None) def save(self, *args, **kwargs): self.access_token = self.access_token or None super().save(*args, **kwargs) @property def api_client(self): """Get API Client""" return get_client(self.source, self.access_token or '') class Meta: verbose_name = 'User OAuth Source Connection' verbose_name_plural = 'User OAuth Source Connections'