1 |
1 |
import logging
|
2 |
2 |
|
3 |
3 |
from django.conf import settings
|
4 |
|
from django.core.exceptions import ValidationError, ObjectDoesNotExist
|
|
4 |
from django.core.exceptions import ValidationError
|
5 |
5 |
from django.core.urlresolvers import reverse
|
6 |
6 |
from django.db import models
|
7 |
7 |
from django.db.models import Q
|
... | ... | |
14 |
14 |
from model_utils.managers import InheritanceManager as ModelUtilsInheritanceManager
|
15 |
15 |
|
16 |
16 |
import passerelle
|
17 |
|
import requests
|
18 |
17 |
|
19 |
18 |
KEYTYPE_CHOICES = (
|
20 |
19 |
('API', 'API Key'),
|
21 |
20 |
('SIGN', 'Signature HMAC'),
|
22 |
21 |
)
|
23 |
22 |
|
|
23 |
|
24 |
24 |
class ApiUser(models.Model):
|
25 |
25 |
username = models.CharField(max_length=128,
|
26 |
|
verbose_name=_('Username'))
|
|
26 |
verbose_name=_('Username'))
|
27 |
27 |
fullname = models.CharField(max_length=50,
|
28 |
|
verbose_name=_('Full Name'))
|
|
28 |
verbose_name=_('Full Name'))
|
29 |
29 |
description = models.TextField(blank=True,
|
30 |
|
verbose_name=_('Description'))
|
|
30 |
verbose_name=_('Description'))
|
31 |
31 |
|
32 |
32 |
keytype = models.CharField(max_length=4, choices=KEYTYPE_CHOICES,
|
33 |
|
blank=True, verbose_name=_('Key Type'))
|
|
33 |
blank=True, verbose_name=_('Key Type'))
|
34 |
34 |
key = models.CharField(max_length=256, blank=True, verbose_name=_('Key'))
|
35 |
35 |
|
36 |
36 |
ipsource = models.GenericIPAddressField(blank=True, null=True, unpack_ipv4=True,
|
37 |
|
verbose_name=_('IP Address'))
|
|
37 |
verbose_name=_('IP Address'))
|
38 |
38 |
|
39 |
39 |
def __unicode__(self):
|
40 |
40 |
return u'%s <%s>' % (self.fullname, self.username)
|
... | ... | |
78 |
78 |
users = models.ManyToManyField(ApiUser, blank=True)
|
79 |
79 |
log_level = models.CharField(
|
80 |
80 |
_('Log Level'), max_length=10,
|
81 |
|
choices = (
|
82 |
|
('NOTSET','NOTSET'),
|
83 |
|
('DEBUG','DEBUG'),
|
84 |
|
('INFO','INFO'),
|
85 |
|
('WARNING','WARNING'),
|
86 |
|
('ERROR','ERROR'),
|
87 |
|
('CRITICAL','CRITICAL'),
|
88 |
|
('FATAL','FATAL'),
|
|
81 |
choices=(
|
|
82 |
('NOTSET', 'NOTSET'), ('DEBUG', 'DEBUG'),
|
|
83 |
('INFO', 'INFO'), ('WARNING', 'WARNING'),
|
|
84 |
('ERROR', 'ERROR'), ('CRITICAL', 'CRITICAL'),
|
|
85 |
('FATAL', 'FATAL'),
|
89 |
86 |
),
|
90 |
87 |
default='NOTSET'
|
91 |
88 |
)
|
... | ... | |
112 |
109 |
if request.user.is_superuser:
|
113 |
110 |
return True
|
114 |
111 |
restricted = self.users.all()
|
115 |
|
return not restricted or request.apiuser in restricted
|
|
112 |
return not restricted or request.apiuser in restricted
|
116 |
113 |
|
117 |
114 |
@classmethod
|
118 |
115 |
def is_enabled(cls):
|
... | ... | |
136 |
133 |
|
137 |
134 |
def get_absolute_url(self):
|
138 |
135 |
return reverse('view-connector',
|
139 |
|
kwargs={'connector': self.get_connector_slug(), 'slug': self.slug})
|
|
136 |
kwargs={'connector': self.get_connector_slug(), 'slug': self.slug})
|
140 |
137 |
|
141 |
138 |
@classmethod
|
142 |
139 |
def get_add_url(cls):
|
... | ... | |
144 |
141 |
|
145 |
142 |
def get_edit_url(self):
|
146 |
143 |
return reverse('edit-connector',
|
147 |
|
kwargs={'connector': self.get_connector_slug(), 'slug': self.slug})
|
|
144 |
kwargs={'connector': self.get_connector_slug(), 'slug': self.slug})
|
148 |
145 |
|
149 |
146 |
def get_delete_url(self):
|
150 |
147 |
return reverse('delete-connector',
|
151 |
|
kwargs={'connector': self.get_connector_slug(), 'slug': self.slug})
|
|
148 |
kwargs={'connector': self.get_connector_slug(), 'slug': self.slug})
|
152 |
149 |
|
153 |
150 |
def get_description_fields(self):
|
154 |
151 |
return [(x, getattr(self, x.name, None)) for x in self._meta.fields if x.name not in (
|
... | ... | |
168 |
165 |
)
|
169 |
166 |
|
170 |
167 |
def __unicode__(self):
|
171 |
|
return '%s (on %s <%s>) (for %s)' % (self.codename,
|
172 |
|
self.resource_type, self.resource_pk, self.apiuser)
|
|
168 |
return '%s (on %s <%s>) (for %s)' % (self.codename, self.resource_type, self.resource_pk, self.apiuser)
|
173 |
|
-
|