|
4 | 4 | from hashlib import md5, sha256 |
5 | 5 | import json |
6 | 6 |
|
| 7 | +from django.apps import apps |
7 | 8 | from django.db import models |
8 | 9 | from django.utils import timezone |
9 | 10 | from django.utils.translation import ugettext_lazy as _ |
10 | 11 | from django.conf import settings |
11 | 12 |
|
| 13 | +from oidc_provider import settings as oidc_settings |
| 14 | + |
12 | 15 |
|
13 | 16 | CLIENT_TYPE_CHOICES = [ |
14 | 17 | ('confidential', 'Confidential'), |
@@ -54,12 +57,13 @@ def __str__(self): |
54 | 57 | return u'{0}'.format(self.description) |
55 | 58 |
|
56 | 59 |
|
57 | | -class Client(models.Model): |
| 60 | +class AbstractClient(models.Model): |
58 | 61 |
|
59 | 62 | name = models.CharField(max_length=100, default='', verbose_name=_(u'Name')) |
60 | 63 | owner = models.ForeignKey( |
61 | 64 | settings.AUTH_USER_MODEL, verbose_name=_(u'Owner'), blank=True, |
62 | | - null=True, default=None, on_delete=models.SET_NULL, related_name='oidc_clients_set') |
| 65 | + null=True, default=None, on_delete=models.SET_NULL, |
| 66 | + related_name='%(app_label)s_%(class)s_set') |
63 | 67 | client_type = models.CharField( |
64 | 68 | max_length=30, |
65 | 69 | choices=CLIENT_TYPE_CHOICES, |
@@ -115,6 +119,7 @@ class Client(models.Model): |
115 | 119 | class Meta: |
116 | 120 | verbose_name = _(u'Client') |
117 | 121 | verbose_name_plural = _(u'Clients') |
| 122 | + abstract = True |
118 | 123 |
|
119 | 124 | def __str__(self): |
120 | 125 | return u'{0}'.format(self.name) |
@@ -158,9 +163,21 @@ def default_redirect_uri(self): |
158 | 163 | return self.redirect_uris[0] if self.redirect_uris else '' |
159 | 164 |
|
160 | 165 |
|
| 166 | +class Client(AbstractClient): |
| 167 | + class Meta(AbstractClient.Meta): |
| 168 | + swappable = 'OIDC_CLIENT_MODEL' |
| 169 | + |
| 170 | + |
| 171 | +def get_client_model(): |
| 172 | + """ Return the Application model that is active in this project. """ |
| 173 | + return apps.get_model(oidc_settings.get('OIDC_CLIENT_MODEL')) |
| 174 | + |
| 175 | + |
161 | 176 | class BaseCodeTokenModel(models.Model): |
162 | 177 |
|
163 | | - client = models.ForeignKey(Client, verbose_name=_(u'Client'), on_delete=models.CASCADE) |
| 178 | + client = models.ForeignKey( |
| 179 | + oidc_settings.get('OIDC_CLIENT_MODEL'), verbose_name=_(u'Client'), |
| 180 | + on_delete=models.CASCADE) |
164 | 181 | expires_at = models.DateTimeField(verbose_name=_(u'Expiration Date')) |
165 | 182 | _scope = models.TextField(default='', verbose_name=_(u'Scopes')) |
166 | 183 |
|
|
0 commit comments