Revision 052c14aa
b/flowspec/forms.py | ||
---|---|---|
7 | 7 |
from ipaddr import * |
8 | 8 |
from django.core.urlresolvers import reverse |
9 | 9 |
from django.contrib.auth.models import User |
10 |
from django.db.models import Avg, Max, Min, Count |
|
10 |
import datetime |
|
11 |
|
|
11 | 12 |
|
12 | 13 |
|
13 | 14 |
class RouteForm(forms.ModelForm): |
... | ... | |
40 | 41 |
return self.cleaned_data["destination"] |
41 | 42 |
except Exception: |
42 | 43 |
raise forms.ValidationError('Invalid network address format') |
44 |
|
|
45 |
def clean_expires(self): |
|
46 |
date = self.cleaned_data['expires'] |
|
47 |
if date: |
|
48 |
range_days = (date - datetime.date.today()).days |
|
49 |
if range_days > 0 and range_days < 11: |
|
50 |
return self.cleaned_data["expires"] |
|
51 |
else: |
|
52 |
raise forms.ValidationError('Invalid date range') |
|
43 | 53 |
|
44 | 54 |
def clean(self): |
45 | 55 |
name = self.cleaned_data.get('name', None) |
b/flowspec/models.py | ||
---|---|---|
97 | 97 |
status = models.CharField(max_length=20, choices=ROUTE_STATES, blank=True, null=True, verbose_name="Status", default="PENDING") |
98 | 98 |
# is_online = models.BooleanField(default=False) |
99 | 99 |
# is_active = models.BooleanField(default=False) |
100 |
expires = models.DateField(default=days_offset, blank=True, null=True,)
|
|
100 |
expires = models.DateField(default=days_offset) |
|
101 | 101 |
response = models.CharField(max_length=512, blank=True, null=True) |
102 | 102 |
comments = models.TextField(null=True, blank=True, verbose_name="Comments") |
103 | 103 |
|
b/flowspec/views.py | ||
---|---|---|
92 | 92 |
|
93 | 93 |
@login_required |
94 | 94 |
@never_cache |
95 |
def add_then(request): |
|
96 |
applier = request.user.pk |
|
97 |
if request.method == "GET": |
|
98 |
form = RouteForm() |
|
99 |
return render_to_response('apply.html', {'form': form, 'applier': applier}, |
|
100 |
context_instance=RequestContext(request)) |
|
101 |
|
|
102 |
else: |
|
103 |
form = RouteForm(request.POST) |
|
104 |
if form.is_valid(): |
|
105 |
route=form.save(commit=False) |
|
106 |
route.applier = request.user |
|
107 |
route.expires = days_offset() |
|
108 |
route.save() |
|
109 |
form.save_m2m() |
|
110 |
route.commit_add() |
|
111 |
return HttpResponseRedirect(reverse("group-routes")) |
|
112 |
else: |
|
113 |
return render_to_response('apply.html', {'form': form, 'applier':applier}, |
|
114 |
context_instance=RequestContext(request)) |
|
115 |
|
|
116 |
@login_required |
|
117 |
@never_cache |
|
118 | 95 |
def edit_route(request, route_slug): |
119 | 96 |
applier = request.user.pk |
120 | 97 |
applier_peer = request.user.get_profile().peer |
b/templates/apply.html | ||
---|---|---|
24 | 24 |
$("#id_port").css('width', '100px').attr('size', '5'); |
25 | 25 |
$("#id_destinationport").css('width', '100px').attr('size', '5'); |
26 | 26 |
$('#id_then').attr("multiple", ""); |
27 |
$( "#id_expires" ).datepicker({ dateFormat: 'yy-mm-dd' , maxDate: '+10d', minDate: '+1d', changeMonth: false, changeYear: false }).datepicker( $.datepicker.regional[ "el" ] ); |
|
27 | 28 |
$('#then_diag').dialog({ |
28 | 29 |
height: 220, |
29 | 30 |
width: 340, |
... | ... | |
186 | 187 |
</table> |
187 | 188 |
</fieldset> |
188 | 189 |
<fieldset> |
190 |
<legend>{% trans "Expiration" %}</legend> |
|
191 |
<table> |
|
192 |
<tr><th>{{ form.expires.label_tag }}</th><td>{{ form.expires }}<span class="error">{{ form.expires.errors|join:", " }}</span></td></tr> |
|
193 |
</table> |
|
194 |
</fieldset> |
|
195 |
<fieldset> |
|
189 | 196 |
<legend>{% trans "Use/Comments" %}</legend> |
190 | 197 |
{% blocktrans %} |
191 | 198 |
<p>Give a short description of the intended use of this rule, that justifies the parameter selection above. Feel free to include any additional comments.</p> |
Also available in: Unified diff