Revision b436bd51 flowspec/models.py
b/flowspec/models.py | ||
---|---|---|
20 | 20 |
from django.db import models |
21 | 21 |
from django.conf import settings |
22 | 22 |
from django.contrib.auth.models import User |
23 |
from django.contrib.sites.models import Site |
|
24 |
from django.db.models.signals import post_save |
|
23 | 25 |
from django.utils.translation import ugettext_lazy as _ |
26 |
from django.core.urlresolvers import reverse |
|
27 |
|
|
28 |
from flowspec.helpers import send_new_mail, get_peer_techc_mails |
|
24 | 29 |
from utils import proxy as PR |
25 | 30 |
from ipaddr import * |
26 | 31 |
import datetime |
27 | 32 |
import logging |
28 | 33 |
from time import sleep |
29 |
from junos import create_junos_name, policer_name
|
|
34 |
from junos import create_junos_name |
|
30 | 35 |
|
31 | 36 |
import beanstalkc |
32 | 37 |
from utils.randomizer import id_generator as id_gen |
... | ... | |
167 | 172 |
expires = models.DateField(default=days_offset, verbose_name=_("Expires")) |
168 | 173 |
response = models.CharField(max_length=512, blank=True, null=True, verbose_name=_("Response")) |
169 | 174 |
comments = models.TextField(null=True, blank=True, verbose_name=_("Comments")) |
170 |
|
|
175 |
requesters_address = models.CharField(max_length=255, blank=True, null=True) |
|
171 | 176 |
|
172 | 177 |
def __unicode__(self): |
173 | 178 |
return self.name |
... | ... | |
183 | 188 |
self.name = "%s_%s" %(self.name, hash) |
184 | 189 |
super(Route, self).save(*args, **kwargs) # Call the "real" save() method. |
185 | 190 |
|
186 |
|
|
187 | 191 |
def clean(self, *args, **kwargs): |
188 | 192 |
from django.core.exceptions import ValidationError |
189 | 193 |
if self.destination: |
... | ... | |
201 | 205 |
|
202 | 206 |
def commit_add(self, *args, **kwargs): |
203 | 207 |
peer = self.applier.get_profile().peer.peer_tag |
204 |
send_message("[%s] Adding rule %s. Please wait..." %(self.applier.username, self.name), peer) |
|
208 |
send_message("[%s] Adding rule %s. Please wait..." % (self.applier.username, self.name), peer)
|
|
205 | 209 |
response = add.delay(self) |
206 |
logger.info("Got add job id: %s" %response) |
|
210 |
logger.info('Got add job id: %s' % response) |
|
211 |
fqdn = Site.objects.get_current().domain |
|
212 |
admin_url = 'https://%s%s' % ( |
|
213 |
fqdn, |
|
214 |
reverse('edit-route', kwargs={'route_slug': self.name}) |
|
215 |
) |
|
216 |
mail_body = render_to_string( |
|
217 |
'rule_action.txt', |
|
218 |
{ |
|
219 |
'route': self, |
|
220 |
'address': self.requesters_address, |
|
221 |
'action': 'creation', |
|
222 |
'url': admin_url |
|
223 |
} |
|
224 |
) |
|
225 |
user_mail = '%s' % self.applier.email |
|
226 |
user_mail = user_mail.split(';') |
|
227 |
send_new_mail( |
|
228 |
settings.EMAIL_SUBJECT_PREFIX + 'Rule %s creation request submitted by %s' % (self.name, self.applier.username), |
|
229 |
mail_body, |
|
230 |
settings.SERVER_EMAIL, user_mail, |
|
231 |
get_peer_techc_mails(self.applier) |
|
232 |
) |
|
233 |
d = { |
|
234 |
'clientip': '%s' % self.requesters_address, |
|
235 |
'user': self.applier.username |
|
236 |
} |
|
237 |
logger.info(mail_body, extra=d) |
|
207 | 238 |
|
208 | 239 |
def commit_edit(self, *args, **kwargs): |
209 | 240 |
peer = self.applier.get_profile().peer.peer_tag |
210 |
send_message("[%s] Editing rule %s. Please wait..." %(self.applier.username, self.name), peer) |
|
241 |
send_message( |
|
242 |
'[%s] Editing rule %s. Please wait...' % |
|
243 |
( |
|
244 |
self.applier.username, |
|
245 |
self.name |
|
246 |
), peer |
|
247 |
) |
|
211 | 248 |
response = edit.delay(self) |
212 |
logger.info("Got edit job id: %s" %response) |
|
249 |
logger.info('Got edit job id: %s' % response) |
|
250 |
fqdn = Site.objects.get_current().domain |
|
251 |
admin_url = 'https://%s%s' % ( |
|
252 |
fqdn, |
|
253 |
reverse( |
|
254 |
'edit-route', |
|
255 |
kwargs={'route_slug': self.name} |
|
256 |
) |
|
257 |
) |
|
258 |
mail_body = render_to_string( |
|
259 |
'rule_action.txt', |
|
260 |
{ |
|
261 |
'route': self, |
|
262 |
'address': self.requesters_address, |
|
263 |
'action': 'edit', |
|
264 |
'url': admin_url |
|
265 |
} |
|
266 |
) |
|
267 |
user_mail = '%s' % self.applier.email |
|
268 |
user_mail = user_mail.split(';') |
|
269 |
send_new_mail( |
|
270 |
settings.EMAIL_SUBJECT_PREFIX + 'Rule %s edit request submitted by %s' % (self.name, self.applier.username), |
|
271 |
mail_body, settings.SERVER_EMAIL, user_mail, |
|
272 |
get_peer_techc_mails(self.applier) |
|
273 |
) |
|
274 |
d = { |
|
275 |
'clientip': self.requesters_address, |
|
276 |
'user': self.applier.username |
|
277 |
} |
|
278 |
logger.info(mail_body, extra=d) |
|
213 | 279 |
|
214 | 280 |
def commit_delete(self, *args, **kwargs): |
215 | 281 |
reason_text = '' |
216 | 282 |
reason = '' |
217 | 283 |
if "reason" in kwargs: |
218 | 284 |
reason = kwargs['reason'] |
219 |
reason_text = "Reason: %s. " %reason
|
|
285 |
reason_text = 'Reason: %s.' % reason
|
|
220 | 286 |
peer = self.applier.get_profile().peer.peer_tag |
221 |
send_message("[%s] Suspending rule %s. %sPlease wait..." %(self.applier.username, self.name, reason_text), peer) |
|
287 |
send_message( |
|
288 |
'[%s] Suspending rule %s. %sPlease wait...' % ( |
|
289 |
self.applier.username, |
|
290 |
self.name, |
|
291 |
reason_text |
|
292 |
), peer |
|
293 |
) |
|
222 | 294 |
response = delete.delay(self, reason=reason) |
223 |
logger.info("Got delete job id: %s" %response) |
|
295 |
logger.info('Got delete job id: %s' % response) |
|
296 |
fqdn = Site.objects.get_current().domain |
|
297 |
admin_url = 'https://%s%s' % ( |
|
298 |
fqdn, |
|
299 |
reverse( |
|
300 |
'edit-route', |
|
301 |
kwargs={'route_slug': self.name} |
|
302 |
) |
|
303 |
) |
|
304 |
mail_body = render_to_string( |
|
305 |
'rule_action.txt', |
|
306 |
{ |
|
307 |
'route': self, |
|
308 |
'address': self.requesters_address, |
|
309 |
'action': 'removal', |
|
310 |
'url': admin_url |
|
311 |
} |
|
312 |
) |
|
313 |
user_mail = '%' % self.applier.email |
|
314 |
user_mail = user_mail.split(';') |
|
315 |
send_new_mail( |
|
316 |
settings.EMAIL_SUBJECT_PREFIX + 'Rule %s removal request submitted by %s' % (self.name, self.applier.username), |
|
317 |
mail_body, |
|
318 |
settings.SERVER_EMAIL, |
|
319 |
user_mail, |
|
320 |
get_peer_techc_mails(self.applier) |
|
321 |
) |
|
322 |
d = { |
|
323 |
'clientip': self.requesters_address, |
|
324 |
'user': self.applier.username |
|
325 |
} |
|
326 |
logger.info(mail_body, extra=d) |
|
224 | 327 |
|
225 | 328 |
def has_expired(self): |
226 | 329 |
today = datetime.date.today() |
... | ... | |
242 | 345 |
except Exception as e: |
243 | 346 |
self.status = "EXPIRED" |
244 | 347 |
self.save() |
245 |
logger.error("No routing options on device. Exception: %s" %e)
|
|
348 |
logger.error('No routing options on device. Exception: %s' % e)
|
|
246 | 349 |
return True |
247 | 350 |
for route in routes: |
248 | 351 |
if route.name == self.name: |
... | ... | |
478 | 581 |
tube_message = json.dumps({'message': str(msg), 'username':peer}) |
479 | 582 |
b.put(tube_message) |
480 | 583 |
b.close() |
584 |
|
|
585 |
|
|
586 |
def notify_user(sender, instance, created, **kwargs): |
|
587 |
if created: |
|
588 |
instance.commit_add() |
|
589 |
else: |
|
590 |
if instance.has_expired(): |
|
591 |
instance.commit_delete() |
|
592 |
else: |
|
593 |
instance.commit_edit() |
|
594 |
|
|
595 |
|
|
596 |
post_save.connect(notify_user, sender=Route) |
Also available in: Unified diff