Statistics
| Branch: | Tag: | Revision:

root / flowspec / views.py @ 26d25791

History | View | Annotate | Download (14.6 kB)

1 a3af8464 Leonidas Poulopoulos
# Create your views here.
2 357d48dc Leonidas Poulopoulos
import urllib2
3 357d48dc Leonidas Poulopoulos
import socket
4 97e42c7d Leonidas Poulopoulos
import json
5 357d48dc Leonidas Poulopoulos
from django import forms
6 357d48dc Leonidas Poulopoulos
from django.views.decorators.csrf import csrf_exempt
7 9cad4715 Leonidas Poulopoulos
from django.core import urlresolvers
8 97e42c7d Leonidas Poulopoulos
from django.core import serializers
9 357d48dc Leonidas Poulopoulos
from django.contrib.auth.decorators import login_required
10 34cff057 Leonidas Poulopoulos
from django.contrib.auth import logout
11 357d48dc Leonidas Poulopoulos
from django.http import HttpResponseRedirect, HttpResponseForbidden, HttpResponse
12 357d48dc Leonidas Poulopoulos
from django.shortcuts import get_object_or_404, render_to_response
13 357d48dc Leonidas Poulopoulos
from django.core.context_processors import request
14 357d48dc Leonidas Poulopoulos
from django.template.context import RequestContext
15 fd3870ee Leonidas Poulopoulos
from django.template.loader import get_template, render_to_string
16 357d48dc Leonidas Poulopoulos
from django.utils import simplejson
17 357d48dc Leonidas Poulopoulos
from django.core.urlresolvers import reverse
18 357d48dc Leonidas Poulopoulos
from django.contrib import messages
19 6ee21ffd Leonidas Poulopoulos
from flowspy.accounts.models import *
20 c6c0a85f Leonidas Poulopoulos
from ipaddr import *
21 357d48dc Leonidas Poulopoulos
22 97e42c7d Leonidas Poulopoulos
from django.contrib.auth import authenticate, login
23 97e42c7d Leonidas Poulopoulos
24 3e99e2d1 Leonidas Poulopoulos
from django.forms.models import model_to_dict
25 3e99e2d1 Leonidas Poulopoulos
26 9cad4715 Leonidas Poulopoulos
from flowspy.flowspec.forms import * 
27 357d48dc Leonidas Poulopoulos
from flowspy.flowspec.models import *
28 357d48dc Leonidas Poulopoulos
29 3e99e2d1 Leonidas Poulopoulos
from copy import deepcopy
30 97e42c7d Leonidas Poulopoulos
from flowspy.utils.decorators import shib_required
31 3e99e2d1 Leonidas Poulopoulos
32 6a946adf Leonidas Poulopoulos
from django.views.decorators.cache import never_cache
33 6a946adf Leonidas Poulopoulos
from django.conf import settings
34 fd3870ee Leonidas Poulopoulos
from django.core.mail import mail_admins, mail_managers, send_mail
35 fdc3d663 Leonidas Poulopoulos
import datetime
36 57de574d Leonidas Poulopoulos
import os
37 57de574d Leonidas Poulopoulos
38 b4401a0c Leonidas Poulopoulos
LOG_FILENAME = os.path.join(settings.LOG_FILE_LOCATION, 'celery_jobs.log')
39 57de574d Leonidas Poulopoulos
#FORMAT = '%(asctime)s %(levelname)s: %(message)s'
40 57de574d Leonidas Poulopoulos
#logging.basicConfig(format=FORMAT)
41 cb0e212e Leonidas Poulopoulos
formatter = logging.Formatter('%(asctime)s %(levelname)s %(clientip)s %(user)s: %(message)s')
42 57de574d Leonidas Poulopoulos
43 57de574d Leonidas Poulopoulos
logger = logging.getLogger(__name__)
44 57de574d Leonidas Poulopoulos
logger.setLevel(logging.DEBUG)
45 57de574d Leonidas Poulopoulos
handler = logging.FileHandler(LOG_FILENAME)
46 57de574d Leonidas Poulopoulos
handler.setFormatter(formatter)
47 57de574d Leonidas Poulopoulos
logger.addHandler(handler)
48 57de574d Leonidas Poulopoulos
49 3e99e2d1 Leonidas Poulopoulos
@login_required
50 357d48dc Leonidas Poulopoulos
def user_routes(request):
51 357d48dc Leonidas Poulopoulos
    user_routes = Route.objects.filter(applier=request.user)
52 357d48dc Leonidas Poulopoulos
    return render_to_response('user_routes.html', {'routes': user_routes},
53 357d48dc Leonidas Poulopoulos
                              context_instance=RequestContext(request))
54 357d48dc Leonidas Poulopoulos
55 049a5a10 Leonidas Poulopoulos
def welcome(request):
56 049a5a10 Leonidas Poulopoulos
    return render_to_response('welcome.html', context_instance=RequestContext(request))
57 049a5a10 Leonidas Poulopoulos
58 3e99e2d1 Leonidas Poulopoulos
@login_required
59 6a946adf Leonidas Poulopoulos
@never_cache
60 6ee21ffd Leonidas Poulopoulos
def group_routes(request):
61 97e42c7d Leonidas Poulopoulos
    group_routes = []
62 6ee21ffd Leonidas Poulopoulos
    peer = request.user.get_profile().peer
63 6ee21ffd Leonidas Poulopoulos
    if peer:
64 6ee21ffd Leonidas Poulopoulos
       peer_members = UserProfile.objects.filter(peer=peer)
65 6ee21ffd Leonidas Poulopoulos
       users = [prof.user for prof in peer_members]
66 6ee21ffd Leonidas Poulopoulos
       group_routes = Route.objects.filter(applier__in=users)
67 6ee21ffd Leonidas Poulopoulos
    return render_to_response('user_routes.html', {'routes': group_routes},
68 6ee21ffd Leonidas Poulopoulos
                              context_instance=RequestContext(request))
69 6ee21ffd Leonidas Poulopoulos
70 6ee21ffd Leonidas Poulopoulos
71 6ee21ffd Leonidas Poulopoulos
@login_required
72 6a946adf Leonidas Poulopoulos
@never_cache
73 9cad4715 Leonidas Poulopoulos
def add_route(request):
74 97e42c7d Leonidas Poulopoulos
    applier = request.user.pk
75 6a946adf Leonidas Poulopoulos
    applier_peer_networks = request.user.get_profile().peer.networks.all()
76 6a946adf Leonidas Poulopoulos
    if not applier_peer_networks:
77 6a946adf Leonidas Poulopoulos
         messages.add_message(request, messages.WARNING,
78 33e8f0b8 Leonidas Poulopoulos
                             "Insufficient rights on administrative networks. Cannot add rule. Contact your administrator")
79 6a946adf Leonidas Poulopoulos
         return HttpResponseRedirect(reverse("group-routes"))
80 9cad4715 Leonidas Poulopoulos
    if request.method == "GET":
81 9cad4715 Leonidas Poulopoulos
        form = RouteForm()
82 6d48c46c Leonidas Poulopoulos
        if not request.user.is_superuser:
83 6d48c46c Leonidas Poulopoulos
            form.fields['then'] = forms.ModelMultipleChoiceField(queryset=ThenAction.objects.filter(action__in=settings.UI_USER_THEN_ACTIONS).order_by('action'), required=True)
84 97e42c7d Leonidas Poulopoulos
        return render_to_response('apply.html', {'form': form, 'applier': applier},
85 9cad4715 Leonidas Poulopoulos
                                  context_instance=RequestContext(request))
86 9cad4715 Leonidas Poulopoulos
87 9cad4715 Leonidas Poulopoulos
    else:
88 9cad4715 Leonidas Poulopoulos
        form = RouteForm(request.POST)
89 9cad4715 Leonidas Poulopoulos
        if form.is_valid():
90 9cad4715 Leonidas Poulopoulos
            route=form.save(commit=False)
91 9cad4715 Leonidas Poulopoulos
            route.applier = request.user
92 97e42c7d Leonidas Poulopoulos
            route.status = "PENDING"
93 c6c0a85f Leonidas Poulopoulos
            route.source = IPNetwork("%s/%s" %(IPNetwork(route.source).network.compressed, IPNetwork(route.source).prefixlen)).compressed
94 c6c0a85f Leonidas Poulopoulos
            route.destination = IPNetwork("%s/%s" %(IPNetwork(route.destination).network.compressed, IPNetwork(route.destination).prefixlen)).compressed
95 9cad4715 Leonidas Poulopoulos
            route.save()
96 9cad4715 Leonidas Poulopoulos
            form.save_m2m()
97 9cad4715 Leonidas Poulopoulos
            route.commit_add()
98 cb0e212e Leonidas Poulopoulos
            requesters_address = request.META['HTTP_X_FORWARDED_FOR']
99 fd3870ee Leonidas Poulopoulos
            mail_body = render_to_string("rule_add_mail.txt",
100 cb0e212e Leonidas Poulopoulos
                                             {"route": route, "address": requesters_address})
101 a2f464f0 Leonidas Poulopoulos
            send_mail(settings.EMAIL_SUBJECT_PREFIX + "Rule %s creation request submitted by %s" %(route.name, route.applier.username),
102 a2f464f0 Leonidas Poulopoulos
                              mail_body, settings.SERVER_EMAIL,
103 a2f464f0 Leonidas Poulopoulos
                              get_peer_techc_mails(route.applier), fail_silently=True)
104 cb0e212e Leonidas Poulopoulos
            d = { 'clientip' : "%s"%requesters_address, 'user' : route.applier.username }
105 cb0e212e Leonidas Poulopoulos
            logger.info(mail_body, extra=d)
106 97e42c7d Leonidas Poulopoulos
            return HttpResponseRedirect(reverse("group-routes"))
107 9cad4715 Leonidas Poulopoulos
        else:
108 97e42c7d Leonidas Poulopoulos
            return render_to_response('apply.html', {'form': form, 'applier':applier},
109 9cad4715 Leonidas Poulopoulos
                                      context_instance=RequestContext(request))
110 97e42c7d Leonidas Poulopoulos
111 97e42c7d Leonidas Poulopoulos
@login_required
112 6a946adf Leonidas Poulopoulos
@never_cache
113 3e99e2d1 Leonidas Poulopoulos
def edit_route(request, route_slug):
114 97e42c7d Leonidas Poulopoulos
    applier = request.user.pk
115 5141cf4a Leonidas Poulopoulos
    applier_peer = request.user.get_profile().peer
116 3e99e2d1 Leonidas Poulopoulos
    route_edit = get_object_or_404(Route, name=route_slug)
117 5141cf4a Leonidas Poulopoulos
    route_edit_applier_peer = route_edit.applier.get_profile().peer
118 5141cf4a Leonidas Poulopoulos
    if applier_peer != route_edit_applier_peer:
119 5141cf4a Leonidas Poulopoulos
        messages.add_message(request, messages.WARNING,
120 33e8f0b8 Leonidas Poulopoulos
                             "Insufficient rights to edit rule %s" %(route_slug))
121 5141cf4a Leonidas Poulopoulos
        return HttpResponseRedirect(reverse("group-routes"))
122 2e52e8a5 Leonidas Poulopoulos
#    if route_edit.status == "ADMININACTIVE" :
123 2e52e8a5 Leonidas Poulopoulos
#        messages.add_message(request, messages.WARNING,
124 2e52e8a5 Leonidas Poulopoulos
#                             "Administrator has disabled editing of rule %s" %(route_slug))
125 2e52e8a5 Leonidas Poulopoulos
#        return HttpResponseRedirect(reverse("group-routes"))
126 2e52e8a5 Leonidas Poulopoulos
#    if route_edit.status == "EXPIRED" :
127 2e52e8a5 Leonidas Poulopoulos
#        messages.add_message(request, messages.WARNING,
128 2e52e8a5 Leonidas Poulopoulos
#                             "Cannot edit the expired rule %s. Contact helpdesk to enable it" %(route_slug))
129 2e52e8a5 Leonidas Poulopoulos
#        return HttpResponseRedirect(reverse("group-routes"))
130 fd3870ee Leonidas Poulopoulos
    if route_edit.status == "PENDING" :
131 fd3870ee Leonidas Poulopoulos
        messages.add_message(request, messages.WARNING,
132 fd3870ee Leonidas Poulopoulos
                             "Cannot edit a pending rule: %s." %(route_slug))
133 fd3870ee Leonidas Poulopoulos
        return HttpResponseRedirect(reverse("group-routes"))
134 3e99e2d1 Leonidas Poulopoulos
    route_original = deepcopy(route_edit)
135 3e99e2d1 Leonidas Poulopoulos
    if request.POST:
136 3e99e2d1 Leonidas Poulopoulos
        form = RouteForm(request.POST, instance = route_edit)
137 3e99e2d1 Leonidas Poulopoulos
        if form.is_valid():
138 3e99e2d1 Leonidas Poulopoulos
            route=form.save(commit=False)
139 3e99e2d1 Leonidas Poulopoulos
            route.name = route_original.name
140 97e42c7d Leonidas Poulopoulos
            route.applier = request.user
141 97e42c7d Leonidas Poulopoulos
            route.status = "PENDING"
142 c6c0a85f Leonidas Poulopoulos
            route.source = IPNetwork("%s/%s" %(IPNetwork(route.source).network.compressed, IPNetwork(route.source).prefixlen)).compressed
143 c6c0a85f Leonidas Poulopoulos
            route.destination = IPNetwork("%s/%s" %(IPNetwork(route.destination).network.compressed, IPNetwork(route.destination).prefixlen)).compressed
144 3e99e2d1 Leonidas Poulopoulos
            route.save()
145 3e99e2d1 Leonidas Poulopoulos
            form.save_m2m()
146 3e99e2d1 Leonidas Poulopoulos
            route.commit_edit()
147 cb0e212e Leonidas Poulopoulos
            requesters_address = request.META['HTTP_X_FORWARDED_FOR']
148 fd3870ee Leonidas Poulopoulos
            mail_body = render_to_string("rule_edit_mail.txt",
149 cb0e212e Leonidas Poulopoulos
                                             {"route": route, "address": requesters_address})
150 a2f464f0 Leonidas Poulopoulos
            send_mail(settings.EMAIL_SUBJECT_PREFIX + "Rule %s edit request submitted by %s" %(route.name, route.applier.username),
151 a2f464f0 Leonidas Poulopoulos
                              mail_body, settings.SERVER_EMAIL,
152 a2f464f0 Leonidas Poulopoulos
                              get_peer_techc_mails(route.applier), fail_silently=True)
153 cb0e212e Leonidas Poulopoulos
            d = { 'clientip' : requesters_address, 'user' : route.applier.username }
154 cb0e212e Leonidas Poulopoulos
            logger.info(mail_body, extra=d)
155 97e42c7d Leonidas Poulopoulos
            return HttpResponseRedirect(reverse("group-routes"))
156 3e99e2d1 Leonidas Poulopoulos
        else:
157 97e42c7d Leonidas Poulopoulos
            return render_to_response('apply.html', {'form': form, 'edit':True, 'applier': applier},
158 3e99e2d1 Leonidas Poulopoulos
                                      context_instance=RequestContext(request))
159 3e99e2d1 Leonidas Poulopoulos
    else:
160 3e99e2d1 Leonidas Poulopoulos
        dictionary = model_to_dict(route_edit, fields=[], exclude=[])
161 97e42c7d Leonidas Poulopoulos
        #form = RouteForm(instance=route_edit)
162 3e99e2d1 Leonidas Poulopoulos
        form = RouteForm(dictionary)
163 6d48c46c Leonidas Poulopoulos
        if not request.user.is_superuser:
164 6d48c46c Leonidas Poulopoulos
            form.fields['then'] = forms.ModelMultipleChoiceField(queryset=ThenAction.objects.filter(action__in=settings.UI_USER_THEN_ACTIONS).order_by('action'), required=True)
165 97e42c7d Leonidas Poulopoulos
        return render_to_response('apply.html', {'form': form, 'edit':True, 'applier': applier},
166 3e99e2d1 Leonidas Poulopoulos
                                  context_instance=RequestContext(request))
167 3e99e2d1 Leonidas Poulopoulos
168 3e99e2d1 Leonidas Poulopoulos
@login_required
169 6a946adf Leonidas Poulopoulos
@never_cache
170 3e99e2d1 Leonidas Poulopoulos
def delete_route(request, route_slug):
171 3e99e2d1 Leonidas Poulopoulos
    if request.is_ajax():
172 3e99e2d1 Leonidas Poulopoulos
        route = get_object_or_404(Route, name=route_slug)
173 97e42c7d Leonidas Poulopoulos
        applier_peer = route.applier.get_profile().peer
174 97e42c7d Leonidas Poulopoulos
        requester_peer = request.user.get_profile().peer
175 97e42c7d Leonidas Poulopoulos
        if applier_peer == requester_peer:
176 6a946adf Leonidas Poulopoulos
            route.status = "PENDING"
177 fdc3d663 Leonidas Poulopoulos
            route.expires = datetime.date.today()
178 22752ac0 Leonidas Poulopoulos
            route.save()
179 3e99e2d1 Leonidas Poulopoulos
            route.commit_delete()
180 cb0e212e Leonidas Poulopoulos
            requesters_address = request.META['HTTP_X_FORWARDED_FOR']
181 fd3870ee Leonidas Poulopoulos
            mail_body = render_to_string("rule_delete_mail.txt",
182 cb0e212e Leonidas Poulopoulos
                                             {"route": route, "address": requesters_address})
183 a2f464f0 Leonidas Poulopoulos
            send_mail(settings.EMAIL_SUBJECT_PREFIX + "Rule %s removal request submitted by %s" %(route.name, route.applier.username),
184 a2f464f0 Leonidas Poulopoulos
                              mail_body, settings.SERVER_EMAIL,
185 cb0e212e Leonidas Poulopoulos
                             get_peer_techc_mails(route.applier), fail_silently=True)
186 cb0e212e Leonidas Poulopoulos
            d = { 'clientip' : requesters_address, 'user' : route.applier.username }
187 cb0e212e Leonidas Poulopoulos
            logger.info(mail_body, extra=d)            
188 97e42c7d Leonidas Poulopoulos
        html = "<html><body>Done</body></html>"
189 97e42c7d Leonidas Poulopoulos
        return HttpResponse(html)
190 97e42c7d Leonidas Poulopoulos
    else:
191 97e42c7d Leonidas Poulopoulos
        return HttpResponseRedirect(reverse("group-routes"))
192 97e42c7d Leonidas Poulopoulos
193 97e42c7d Leonidas Poulopoulos
@login_required
194 6a946adf Leonidas Poulopoulos
@never_cache
195 97e42c7d Leonidas Poulopoulos
def user_profile(request):
196 97e42c7d Leonidas Poulopoulos
    user = request.user
197 97e42c7d Leonidas Poulopoulos
    peer = request.user.get_profile().peer
198 97e42c7d Leonidas Poulopoulos
    
199 97e42c7d Leonidas Poulopoulos
    return render_to_response('profile.html', {'user': user, 'peer':peer},
200 97e42c7d Leonidas Poulopoulos
                                  context_instance=RequestContext(request))
201 97e42c7d Leonidas Poulopoulos
202 6a946adf Leonidas Poulopoulos
@never_cache
203 97e42c7d Leonidas Poulopoulos
def user_login(request):
204 97e42c7d Leonidas Poulopoulos
    try:
205 26d25791 Leonidas Poulopoulos
        error_username = False
206 26d25791 Leonidas Poulopoulos
        error_orgname = False
207 26d25791 Leonidas Poulopoulos
        error_affiliation = False
208 26d25791 Leonidas Poulopoulos
        error_mail = False
209 26d25791 Leonidas Poulopoulos
        has_affiliation = False
210 6a946adf Leonidas Poulopoulos
        error = ''
211 97e42c7d Leonidas Poulopoulos
        username = request.META['HTTP_EPPN']
212 97e42c7d Leonidas Poulopoulos
        if not username:
213 97e42c7d Leonidas Poulopoulos
            error_username = True
214 97e42c7d Leonidas Poulopoulos
        firstname = request.META['HTTP_SHIB_INETORGPERSON_GIVENNAME']
215 97e42c7d Leonidas Poulopoulos
        lastname = request.META['HTTP_SHIB_PERSON_SURNAME']
216 97e42c7d Leonidas Poulopoulos
        mail = request.META['HTTP_SHIB_INETORGPERSON_MAIL']
217 97e42c7d Leonidas Poulopoulos
        organization = request.META['HTTP_SHIB_HOMEORGANIZATION']
218 6a946adf Leonidas Poulopoulos
        affiliation = request.META['HTTP_SHIB_EP_ENTITLEMENT']
219 b27537d5 Leonidas Poulopoulos
        if settings.SHIB_AUTH_AFFILIATION in affiliation.split(";"):
220 b27537d5 Leonidas Poulopoulos
            has_affiliation = True
221 6a946adf Leonidas Poulopoulos
        if not has_affiliation:
222 6a946adf Leonidas Poulopoulos
            error_affiliation = True
223 97e42c7d Leonidas Poulopoulos
        if not organization:
224 97e42c7d Leonidas Poulopoulos
            error_orgname = True
225 26d25791 Leonidas Poulopoulos
        if not mail:
226 26d25791 Leonidas Poulopoulos
            error_mail = True
227 6a946adf Leonidas Poulopoulos
        if error_username:
228 26d25791 Leonidas Poulopoulos
            error = "Your idP should release the HTTP_EPPN attribute towards this service<br>"
229 6a946adf Leonidas Poulopoulos
        if error_orgname:
230 26d25791 Leonidas Poulopoulos
            error = error + "Your idP should release the HTTP_SHIB_HOMEORGANIZATION attribute towards this service<br>"
231 6a946adf Leonidas Poulopoulos
        if error_affiliation:
232 26d25791 Leonidas Poulopoulos
            error = error + "Your idP should release an appropriate HTTP_SHIB_EP_ENTITLEMENT attribute towards this service<br>"
233 26d25791 Leonidas Poulopoulos
        if error_mail:
234 26d25791 Leonidas Poulopoulos
            error = error + "Your idP should release the HTTP_SHIB_INETORGPERSON_MAIL attribute towards this service"
235 26d25791 Leonidas Poulopoulos
        if error_username or error_orgname or error_affiliation or error_mail:
236 97e42c7d Leonidas Poulopoulos
            return render_to_response('error.html', {'error': error,},
237 97e42c7d Leonidas Poulopoulos
                                  context_instance=RequestContext(request))
238 049a5a10 Leonidas Poulopoulos
        user = authenticate(username=username, firstname=firstname, lastname=lastname, mail=mail, organization=organization, affiliation=affiliation)
239 97e42c7d Leonidas Poulopoulos
        if user is not None:
240 97e42c7d Leonidas Poulopoulos
            login(request, user)
241 97e42c7d Leonidas Poulopoulos
            return HttpResponseRedirect(reverse("group-routes"))
242 97e42c7d Leonidas Poulopoulos
                # Redirect to a success page.
243 97e42c7d Leonidas Poulopoulos
                # Return a 'disabled account' error message
244 97e42c7d Leonidas Poulopoulos
        else:
245 6a946adf Leonidas Poulopoulos
            error = "Something went wrong during user authentication. Contact your administrator"
246 6a946adf Leonidas Poulopoulos
            return render_to_response('error.html', {'error': error,},
247 6a946adf Leonidas Poulopoulos
                                  context_instance=RequestContext(request))
248 97e42c7d Leonidas Poulopoulos
    except Exception as e:
249 6a946adf Leonidas Poulopoulos
        error = "Invalid login procedure"
250 6a946adf Leonidas Poulopoulos
        return render_to_response('error.html', {'error': error,},
251 6a946adf Leonidas Poulopoulos
                                  context_instance=RequestContext(request))
252 97e42c7d Leonidas Poulopoulos
        # Return an 'invalid login' error message.
253 97e42c7d Leonidas Poulopoulos
#    return HttpResponseRedirect(reverse("user-routes"))
254 97e42c7d Leonidas Poulopoulos
255 97e42c7d Leonidas Poulopoulos
@login_required
256 6a946adf Leonidas Poulopoulos
@never_cache
257 97e42c7d Leonidas Poulopoulos
def add_rate_limit(request):
258 97e42c7d Leonidas Poulopoulos
    if request.method == "GET":
259 97e42c7d Leonidas Poulopoulos
        form = ThenPlainForm()
260 97e42c7d Leonidas Poulopoulos
        return render_to_response('add_rate_limit.html', {'form': form,},
261 97e42c7d Leonidas Poulopoulos
                                  context_instance=RequestContext(request))
262 97e42c7d Leonidas Poulopoulos
263 97e42c7d Leonidas Poulopoulos
    else:
264 97e42c7d Leonidas Poulopoulos
        form = ThenPlainForm(request.POST)
265 97e42c7d Leonidas Poulopoulos
        if form.is_valid():
266 97e42c7d Leonidas Poulopoulos
            then=form.save(commit=False)
267 97e42c7d Leonidas Poulopoulos
            then.action_value = "%sk"%then.action_value
268 97e42c7d Leonidas Poulopoulos
            then.save()
269 97e42c7d Leonidas Poulopoulos
            response_data = {}
270 97e42c7d Leonidas Poulopoulos
            response_data['pk'] = "%s" %then.pk
271 97e42c7d Leonidas Poulopoulos
            response_data['value'] = "%s:%s" %(then.action, then.action_value)
272 97e42c7d Leonidas Poulopoulos
            return HttpResponse(simplejson.dumps(response_data), mimetype='application/json')
273 97e42c7d Leonidas Poulopoulos
        else:
274 97e42c7d Leonidas Poulopoulos
            return render_to_response('add_rate_limit.html', {'form': form,},
275 97e42c7d Leonidas Poulopoulos
                                      context_instance=RequestContext(request))
276 97e42c7d Leonidas Poulopoulos
277 97e42c7d Leonidas Poulopoulos
@login_required
278 6a946adf Leonidas Poulopoulos
@never_cache
279 97e42c7d Leonidas Poulopoulos
def add_port(request):
280 97e42c7d Leonidas Poulopoulos
    if request.method == "GET":
281 97e42c7d Leonidas Poulopoulos
        form = PortPlainForm()
282 97e42c7d Leonidas Poulopoulos
        return render_to_response('add_port.html', {'form': form,},
283 97e42c7d Leonidas Poulopoulos
                                  context_instance=RequestContext(request))
284 97e42c7d Leonidas Poulopoulos
285 97e42c7d Leonidas Poulopoulos
    else:
286 97e42c7d Leonidas Poulopoulos
        form = PortPlainForm(request.POST)
287 97e42c7d Leonidas Poulopoulos
        if form.is_valid():
288 97e42c7d Leonidas Poulopoulos
            port=form.save()
289 97e42c7d Leonidas Poulopoulos
            response_data = {}
290 97e42c7d Leonidas Poulopoulos
            response_data['value'] = "%s" %port.pk
291 97e42c7d Leonidas Poulopoulos
            response_data['text'] = "%s" %port.port
292 97e42c7d Leonidas Poulopoulos
            return HttpResponse(simplejson.dumps(response_data), mimetype='application/json')
293 97e42c7d Leonidas Poulopoulos
        else:
294 97e42c7d Leonidas Poulopoulos
            return render_to_response('add_port.html', {'form': form,},
295 97e42c7d Leonidas Poulopoulos
                                      context_instance=RequestContext(request))
296 97e42c7d Leonidas Poulopoulos
297 97e42c7d Leonidas Poulopoulos
@login_required
298 6a946adf Leonidas Poulopoulos
@never_cache
299 97e42c7d Leonidas Poulopoulos
def user_logout(request):
300 34cff057 Leonidas Poulopoulos
    logout(request)
301 34cff057 Leonidas Poulopoulos
    return HttpResponseRedirect(reverse('group-routes'))
302 97e42c7d Leonidas Poulopoulos
    
303 049a5a10 Leonidas Poulopoulos
@never_cache
304 97e42c7d Leonidas Poulopoulos
def load_jscript(request, file):
305 bec1a51b Leonidas Poulopoulos
    long_polling_timeout = int(settings.POLL_SESSION_UPDATE)*1000 + 10000
306 bec1a51b Leonidas Poulopoulos
    return render_to_response('%s.js' % file, {'timeout': long_polling_timeout}, context_instance=RequestContext(request), mimetype="text/javascript")
307 a2f464f0 Leonidas Poulopoulos
308 a2f464f0 Leonidas Poulopoulos
309 a2f464f0 Leonidas Poulopoulos
def get_peer_techc_mails(user):
310 a2f464f0 Leonidas Poulopoulos
    user_mail = user.email
311 a2f464f0 Leonidas Poulopoulos
    techmails = user.get_profile().peer.techc()
312 a2f464f0 Leonidas Poulopoulos
    additional_mail = "%s;%s" %(settings.HELPDESK_MAIL,settings.NOC_MAIL) 
313 a2f464f0 Leonidas Poulopoulos
    if techmails:
314 a2f464f0 Leonidas Poulopoulos
        mail = "%s;%s" %(techmails, additional_mail)
315 a2f464f0 Leonidas Poulopoulos
    else:
316 a2f464f0 Leonidas Poulopoulos
        mail = additional_mail
317 a2f464f0 Leonidas Poulopoulos
    mail = "%s;%s" %(user_mail, mail)
318 a2f464f0 Leonidas Poulopoulos
    mail =  mail.split(';')
319 a2f464f0 Leonidas Poulopoulos
    return mail