Statistics
| Branch: | Tag: | Revision:

root / flowspec / views.py @ 2a2ea58f

History | View | Annotate | Download (17.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 357e5b54 Leonidas Poulopoulos
from django.contrib.sites.models import Site
12 357e5b54 Leonidas Poulopoulos
from django.contrib.auth.models import User
13 357d48dc Leonidas Poulopoulos
from django.http import HttpResponseRedirect, HttpResponseForbidden, HttpResponse
14 357d48dc Leonidas Poulopoulos
from django.shortcuts import get_object_or_404, render_to_response
15 357d48dc Leonidas Poulopoulos
from django.core.context_processors import request
16 357d48dc Leonidas Poulopoulos
from django.template.context import RequestContext
17 fd3870ee Leonidas Poulopoulos
from django.template.loader import get_template, render_to_string
18 357d48dc Leonidas Poulopoulos
from django.core.urlresolvers import reverse
19 357d48dc Leonidas Poulopoulos
from django.contrib import messages
20 6ee21ffd Leonidas Poulopoulos
from flowspy.accounts.models import *
21 c6c0a85f Leonidas Poulopoulos
from ipaddr import *
22 357d48dc Leonidas Poulopoulos
23 97e42c7d Leonidas Poulopoulos
from django.contrib.auth import authenticate, login
24 97e42c7d Leonidas Poulopoulos
25 3e99e2d1 Leonidas Poulopoulos
from django.forms.models import model_to_dict
26 3e99e2d1 Leonidas Poulopoulos
27 9cad4715 Leonidas Poulopoulos
from flowspy.flowspec.forms import * 
28 357d48dc Leonidas Poulopoulos
from flowspy.flowspec.models import *
29 b969de46 Leonidas Poulopoulos
from flowspy.peers.models import *
30 b969de46 Leonidas Poulopoulos
31 357e5b54 Leonidas Poulopoulos
from registration.models import RegistrationProfile
32 357d48dc Leonidas Poulopoulos
33 3e99e2d1 Leonidas Poulopoulos
from copy import deepcopy
34 97e42c7d Leonidas Poulopoulos
from flowspy.utils.decorators import shib_required
35 3e99e2d1 Leonidas Poulopoulos
36 6a946adf Leonidas Poulopoulos
from django.views.decorators.cache import never_cache
37 6a946adf Leonidas Poulopoulos
from django.conf import settings
38 fdb1f9ec Leonidas Poulopoulos
from django.core.mail.message import EmailMessage
39 fdc3d663 Leonidas Poulopoulos
import datetime
40 57de574d Leonidas Poulopoulos
import os
41 57de574d Leonidas Poulopoulos
42 b4401a0c Leonidas Poulopoulos
LOG_FILENAME = os.path.join(settings.LOG_FILE_LOCATION, 'celery_jobs.log')
43 57de574d Leonidas Poulopoulos
#FORMAT = '%(asctime)s %(levelname)s: %(message)s'
44 57de574d Leonidas Poulopoulos
#logging.basicConfig(format=FORMAT)
45 cb0e212e Leonidas Poulopoulos
formatter = logging.Formatter('%(asctime)s %(levelname)s %(clientip)s %(user)s: %(message)s')
46 57de574d Leonidas Poulopoulos
47 57de574d Leonidas Poulopoulos
logger = logging.getLogger(__name__)
48 57de574d Leonidas Poulopoulos
logger.setLevel(logging.DEBUG)
49 57de574d Leonidas Poulopoulos
handler = logging.FileHandler(LOG_FILENAME)
50 57de574d Leonidas Poulopoulos
handler.setFormatter(formatter)
51 57de574d Leonidas Poulopoulos
logger.addHandler(handler)
52 57de574d Leonidas Poulopoulos
53 3e99e2d1 Leonidas Poulopoulos
@login_required
54 357d48dc Leonidas Poulopoulos
def user_routes(request):
55 357d48dc Leonidas Poulopoulos
    user_routes = Route.objects.filter(applier=request.user)
56 357d48dc Leonidas Poulopoulos
    return render_to_response('user_routes.html', {'routes': user_routes},
57 357d48dc Leonidas Poulopoulos
                              context_instance=RequestContext(request))
58 357d48dc Leonidas Poulopoulos
59 049a5a10 Leonidas Poulopoulos
def welcome(request):
60 049a5a10 Leonidas Poulopoulos
    return render_to_response('welcome.html', context_instance=RequestContext(request))
61 049a5a10 Leonidas Poulopoulos
62 3e99e2d1 Leonidas Poulopoulos
@login_required
63 6a946adf Leonidas Poulopoulos
@never_cache
64 6ee21ffd Leonidas Poulopoulos
def group_routes(request):
65 97e42c7d Leonidas Poulopoulos
    group_routes = []
66 6ee21ffd Leonidas Poulopoulos
    peer = request.user.get_profile().peer
67 6ee21ffd Leonidas Poulopoulos
    if peer:
68 6ee21ffd Leonidas Poulopoulos
       peer_members = UserProfile.objects.filter(peer=peer)
69 6ee21ffd Leonidas Poulopoulos
       users = [prof.user for prof in peer_members]
70 6ee21ffd Leonidas Poulopoulos
       group_routes = Route.objects.filter(applier__in=users)
71 6ee21ffd Leonidas Poulopoulos
    return render_to_response('user_routes.html', {'routes': group_routes},
72 6ee21ffd Leonidas Poulopoulos
                              context_instance=RequestContext(request))
73 6ee21ffd Leonidas Poulopoulos
74 6ee21ffd Leonidas Poulopoulos
75 6ee21ffd Leonidas Poulopoulos
@login_required
76 6a946adf Leonidas Poulopoulos
@never_cache
77 9cad4715 Leonidas Poulopoulos
def add_route(request):
78 97e42c7d Leonidas Poulopoulos
    applier = request.user.pk
79 6a946adf Leonidas Poulopoulos
    applier_peer_networks = request.user.get_profile().peer.networks.all()
80 6a946adf Leonidas Poulopoulos
    if not applier_peer_networks:
81 6a946adf Leonidas Poulopoulos
         messages.add_message(request, messages.WARNING,
82 33e8f0b8 Leonidas Poulopoulos
                             "Insufficient rights on administrative networks. Cannot add rule. Contact your administrator")
83 6a946adf Leonidas Poulopoulos
         return HttpResponseRedirect(reverse("group-routes"))
84 9cad4715 Leonidas Poulopoulos
    if request.method == "GET":
85 9cad4715 Leonidas Poulopoulos
        form = RouteForm()
86 6d48c46c Leonidas Poulopoulos
        if not request.user.is_superuser:
87 6d48c46c Leonidas Poulopoulos
            form.fields['then'] = forms.ModelMultipleChoiceField(queryset=ThenAction.objects.filter(action__in=settings.UI_USER_THEN_ACTIONS).order_by('action'), required=True)
88 b4e7dff4 Leonidas Poulopoulos
            form.fields['protocol'] = forms.ModelMultipleChoiceField(queryset=MatchProtocol.objects.filter(protocol__in=settings.UI_USER_PROTOCOLS).order_by('protocol'), required=False)
89 97e42c7d Leonidas Poulopoulos
        return render_to_response('apply.html', {'form': form, 'applier': applier},
90 9cad4715 Leonidas Poulopoulos
                                  context_instance=RequestContext(request))
91 9cad4715 Leonidas Poulopoulos
92 9cad4715 Leonidas Poulopoulos
    else:
93 9cad4715 Leonidas Poulopoulos
        form = RouteForm(request.POST)
94 9cad4715 Leonidas Poulopoulos
        if form.is_valid():
95 9cad4715 Leonidas Poulopoulos
            route=form.save(commit=False)
96 9cad4715 Leonidas Poulopoulos
            route.applier = request.user
97 97e42c7d Leonidas Poulopoulos
            route.status = "PENDING"
98 c6c0a85f Leonidas Poulopoulos
            route.source = IPNetwork("%s/%s" %(IPNetwork(route.source).network.compressed, IPNetwork(route.source).prefixlen)).compressed
99 c6c0a85f Leonidas Poulopoulos
            route.destination = IPNetwork("%s/%s" %(IPNetwork(route.destination).network.compressed, IPNetwork(route.destination).prefixlen)).compressed
100 9cad4715 Leonidas Poulopoulos
            route.save()
101 9cad4715 Leonidas Poulopoulos
            form.save_m2m()
102 9cad4715 Leonidas Poulopoulos
            route.commit_add()
103 cb0e212e Leonidas Poulopoulos
            requesters_address = request.META['HTTP_X_FORWARDED_FOR']
104 fd3870ee Leonidas Poulopoulos
            mail_body = render_to_string("rule_add_mail.txt",
105 cb0e212e Leonidas Poulopoulos
                                             {"route": route, "address": requesters_address})
106 fdb1f9ec Leonidas Poulopoulos
            user_mail = "%s" %route.applier.email
107 fdb1f9ec Leonidas Poulopoulos
            user_mail = user_mail.split(';')
108 fdb1f9ec Leonidas Poulopoulos
            send_new_mail(settings.EMAIL_SUBJECT_PREFIX + "Rule %s creation request submitted by %s" %(route.name, route.applier.username),
109 fdb1f9ec Leonidas Poulopoulos
                              mail_body, settings.SERVER_EMAIL, user_mail,
110 fdb1f9ec Leonidas Poulopoulos
                              get_peer_techc_mails(route.applier))
111 cb0e212e Leonidas Poulopoulos
            d = { 'clientip' : "%s"%requesters_address, 'user' : route.applier.username }
112 cb0e212e Leonidas Poulopoulos
            logger.info(mail_body, extra=d)
113 97e42c7d Leonidas Poulopoulos
            return HttpResponseRedirect(reverse("group-routes"))
114 9cad4715 Leonidas Poulopoulos
        else:
115 97e42c7d Leonidas Poulopoulos
            return render_to_response('apply.html', {'form': form, 'applier':applier},
116 9cad4715 Leonidas Poulopoulos
                                      context_instance=RequestContext(request))
117 97e42c7d Leonidas Poulopoulos
118 97e42c7d Leonidas Poulopoulos
@login_required
119 6a946adf Leonidas Poulopoulos
@never_cache
120 3e99e2d1 Leonidas Poulopoulos
def edit_route(request, route_slug):
121 97e42c7d Leonidas Poulopoulos
    applier = request.user.pk
122 5141cf4a Leonidas Poulopoulos
    applier_peer = request.user.get_profile().peer
123 3e99e2d1 Leonidas Poulopoulos
    route_edit = get_object_or_404(Route, name=route_slug)
124 5141cf4a Leonidas Poulopoulos
    route_edit_applier_peer = route_edit.applier.get_profile().peer
125 5141cf4a Leonidas Poulopoulos
    if applier_peer != route_edit_applier_peer:
126 5141cf4a Leonidas Poulopoulos
        messages.add_message(request, messages.WARNING,
127 33e8f0b8 Leonidas Poulopoulos
                             "Insufficient rights to edit rule %s" %(route_slug))
128 5141cf4a Leonidas Poulopoulos
        return HttpResponseRedirect(reverse("group-routes"))
129 2e52e8a5 Leonidas Poulopoulos
#    if route_edit.status == "ADMININACTIVE" :
130 2e52e8a5 Leonidas Poulopoulos
#        messages.add_message(request, messages.WARNING,
131 2e52e8a5 Leonidas Poulopoulos
#                             "Administrator has disabled editing of rule %s" %(route_slug))
132 2e52e8a5 Leonidas Poulopoulos
#        return HttpResponseRedirect(reverse("group-routes"))
133 2e52e8a5 Leonidas Poulopoulos
#    if route_edit.status == "EXPIRED" :
134 2e52e8a5 Leonidas Poulopoulos
#        messages.add_message(request, messages.WARNING,
135 2e52e8a5 Leonidas Poulopoulos
#                             "Cannot edit the expired rule %s. Contact helpdesk to enable it" %(route_slug))
136 2e52e8a5 Leonidas Poulopoulos
#        return HttpResponseRedirect(reverse("group-routes"))
137 fd3870ee Leonidas Poulopoulos
    if route_edit.status == "PENDING" :
138 fd3870ee Leonidas Poulopoulos
        messages.add_message(request, messages.WARNING,
139 fd3870ee Leonidas Poulopoulos
                             "Cannot edit a pending rule: %s." %(route_slug))
140 fd3870ee Leonidas Poulopoulos
        return HttpResponseRedirect(reverse("group-routes"))
141 3e99e2d1 Leonidas Poulopoulos
    route_original = deepcopy(route_edit)
142 3e99e2d1 Leonidas Poulopoulos
    if request.POST:
143 3e99e2d1 Leonidas Poulopoulos
        form = RouteForm(request.POST, instance = route_edit)
144 3e99e2d1 Leonidas Poulopoulos
        if form.is_valid():
145 3e99e2d1 Leonidas Poulopoulos
            route=form.save(commit=False)
146 3e99e2d1 Leonidas Poulopoulos
            route.name = route_original.name
147 97e42c7d Leonidas Poulopoulos
            route.applier = request.user
148 97e42c7d Leonidas Poulopoulos
            route.status = "PENDING"
149 c6c0a85f Leonidas Poulopoulos
            route.source = IPNetwork("%s/%s" %(IPNetwork(route.source).network.compressed, IPNetwork(route.source).prefixlen)).compressed
150 c6c0a85f Leonidas Poulopoulos
            route.destination = IPNetwork("%s/%s" %(IPNetwork(route.destination).network.compressed, IPNetwork(route.destination).prefixlen)).compressed
151 3e99e2d1 Leonidas Poulopoulos
            route.save()
152 3e99e2d1 Leonidas Poulopoulos
            form.save_m2m()
153 3e99e2d1 Leonidas Poulopoulos
            route.commit_edit()
154 cb0e212e Leonidas Poulopoulos
            requesters_address = request.META['HTTP_X_FORWARDED_FOR']
155 fd3870ee Leonidas Poulopoulos
            mail_body = render_to_string("rule_edit_mail.txt",
156 cb0e212e Leonidas Poulopoulos
                                             {"route": route, "address": requesters_address})
157 fdb1f9ec Leonidas Poulopoulos
            user_mail = "%s" %route.applier.email
158 fdb1f9ec Leonidas Poulopoulos
            user_mail = user_mail.split(';')
159 fdb1f9ec Leonidas Poulopoulos
            send_new_mail(settings.EMAIL_SUBJECT_PREFIX + "Rule %s edit request submitted by %s" %(route.name, route.applier.username),
160 fdb1f9ec Leonidas Poulopoulos
                              mail_body, settings.SERVER_EMAIL, user_mail,
161 fdb1f9ec Leonidas Poulopoulos
                              get_peer_techc_mails(route.applier))
162 cb0e212e Leonidas Poulopoulos
            d = { 'clientip' : requesters_address, 'user' : route.applier.username }
163 cb0e212e Leonidas Poulopoulos
            logger.info(mail_body, extra=d)
164 97e42c7d Leonidas Poulopoulos
            return HttpResponseRedirect(reverse("group-routes"))
165 3e99e2d1 Leonidas Poulopoulos
        else:
166 97e42c7d Leonidas Poulopoulos
            return render_to_response('apply.html', {'form': form, 'edit':True, 'applier': applier},
167 3e99e2d1 Leonidas Poulopoulos
                                      context_instance=RequestContext(request))
168 3e99e2d1 Leonidas Poulopoulos
    else:
169 3e99e2d1 Leonidas Poulopoulos
        dictionary = model_to_dict(route_edit, fields=[], exclude=[])
170 97e42c7d Leonidas Poulopoulos
        #form = RouteForm(instance=route_edit)
171 3e99e2d1 Leonidas Poulopoulos
        form = RouteForm(dictionary)
172 6d48c46c Leonidas Poulopoulos
        if not request.user.is_superuser:
173 6d48c46c Leonidas Poulopoulos
            form.fields['then'] = forms.ModelMultipleChoiceField(queryset=ThenAction.objects.filter(action__in=settings.UI_USER_THEN_ACTIONS).order_by('action'), required=True)
174 b4e7dff4 Leonidas Poulopoulos
            form.fields['protocol'] = forms.ModelMultipleChoiceField(queryset=MatchProtocol.objects.filter(protocol__in=settings.UI_USER_PROTOCOLS).order_by('protocol'), required=False)
175 97e42c7d Leonidas Poulopoulos
        return render_to_response('apply.html', {'form': form, 'edit':True, 'applier': applier},
176 3e99e2d1 Leonidas Poulopoulos
                                  context_instance=RequestContext(request))
177 3e99e2d1 Leonidas Poulopoulos
178 3e99e2d1 Leonidas Poulopoulos
@login_required
179 6a946adf Leonidas Poulopoulos
@never_cache
180 3e99e2d1 Leonidas Poulopoulos
def delete_route(request, route_slug):
181 3e99e2d1 Leonidas Poulopoulos
    if request.is_ajax():
182 3e99e2d1 Leonidas Poulopoulos
        route = get_object_or_404(Route, name=route_slug)
183 97e42c7d Leonidas Poulopoulos
        applier_peer = route.applier.get_profile().peer
184 97e42c7d Leonidas Poulopoulos
        requester_peer = request.user.get_profile().peer
185 97e42c7d Leonidas Poulopoulos
        if applier_peer == requester_peer:
186 6a946adf Leonidas Poulopoulos
            route.status = "PENDING"
187 fdc3d663 Leonidas Poulopoulos
            route.expires = datetime.date.today()
188 7c900acb Leonidas Poulopoulos
            route.applier = request.user
189 22752ac0 Leonidas Poulopoulos
            route.save()
190 3e99e2d1 Leonidas Poulopoulos
            route.commit_delete()
191 cb0e212e Leonidas Poulopoulos
            requesters_address = request.META['HTTP_X_FORWARDED_FOR']
192 fd3870ee Leonidas Poulopoulos
            mail_body = render_to_string("rule_delete_mail.txt",
193 cb0e212e Leonidas Poulopoulos
                                             {"route": route, "address": requesters_address})
194 fdb1f9ec Leonidas Poulopoulos
            user_mail = "%s" %route.applier.email
195 fdb1f9ec Leonidas Poulopoulos
            user_mail = user_mail.split(';')
196 fdb1f9ec Leonidas Poulopoulos
            send_new_mail(settings.EMAIL_SUBJECT_PREFIX + "Rule %s removal request submitted by %s" %(route.name, route.applier.username), 
197 fdb1f9ec Leonidas Poulopoulos
                              mail_body, settings.SERVER_EMAIL, user_mail,
198 fdb1f9ec Leonidas Poulopoulos
                             get_peer_techc_mails(route.applier))
199 cb0e212e Leonidas Poulopoulos
            d = { 'clientip' : requesters_address, 'user' : route.applier.username }
200 cb0e212e Leonidas Poulopoulos
            logger.info(mail_body, extra=d)            
201 97e42c7d Leonidas Poulopoulos
        html = "<html><body>Done</body></html>"
202 97e42c7d Leonidas Poulopoulos
        return HttpResponse(html)
203 97e42c7d Leonidas Poulopoulos
    else:
204 97e42c7d Leonidas Poulopoulos
        return HttpResponseRedirect(reverse("group-routes"))
205 97e42c7d Leonidas Poulopoulos
206 97e42c7d Leonidas Poulopoulos
@login_required
207 6a946adf Leonidas Poulopoulos
@never_cache
208 97e42c7d Leonidas Poulopoulos
def user_profile(request):
209 97e42c7d Leonidas Poulopoulos
    user = request.user
210 97e42c7d Leonidas Poulopoulos
    peer = request.user.get_profile().peer
211 97e42c7d Leonidas Poulopoulos
    
212 97e42c7d Leonidas Poulopoulos
    return render_to_response('profile.html', {'user': user, 'peer':peer},
213 97e42c7d Leonidas Poulopoulos
                                  context_instance=RequestContext(request))
214 97e42c7d Leonidas Poulopoulos
215 6a946adf Leonidas Poulopoulos
@never_cache
216 97e42c7d Leonidas Poulopoulos
def user_login(request):
217 97e42c7d Leonidas Poulopoulos
    try:
218 26d25791 Leonidas Poulopoulos
        error_username = False
219 26d25791 Leonidas Poulopoulos
        error_orgname = False
220 b969de46 Leonidas Poulopoulos
        error_entitlement = False
221 26d25791 Leonidas Poulopoulos
        error_mail = False
222 b969de46 Leonidas Poulopoulos
        has_entitlement = False
223 6a946adf Leonidas Poulopoulos
        error = ''
224 97e42c7d Leonidas Poulopoulos
        username = request.META['HTTP_EPPN']
225 97e42c7d Leonidas Poulopoulos
        if not username:
226 97e42c7d Leonidas Poulopoulos
            error_username = True
227 97e42c7d Leonidas Poulopoulos
        firstname = request.META['HTTP_SHIB_INETORGPERSON_GIVENNAME']
228 97e42c7d Leonidas Poulopoulos
        lastname = request.META['HTTP_SHIB_PERSON_SURNAME']
229 97e42c7d Leonidas Poulopoulos
        mail = request.META['HTTP_SHIB_INETORGPERSON_MAIL']
230 97e42c7d Leonidas Poulopoulos
        organization = request.META['HTTP_SHIB_HOMEORGANIZATION']
231 b969de46 Leonidas Poulopoulos
        entitlement = request.META['HTTP_SHIB_EP_ENTITLEMENT']
232 b969de46 Leonidas Poulopoulos
        if settings.SHIB_AUTH_ENTITLEMENT in entitlement.split(";"):
233 b969de46 Leonidas Poulopoulos
            has_entitlement = True
234 b969de46 Leonidas Poulopoulos
        if not has_entitlement:
235 b969de46 Leonidas Poulopoulos
            error_entitlement = True
236 97e42c7d Leonidas Poulopoulos
        if not organization:
237 97e42c7d Leonidas Poulopoulos
            error_orgname = True
238 26d25791 Leonidas Poulopoulos
        if not mail:
239 26d25791 Leonidas Poulopoulos
            error_mail = True
240 6a946adf Leonidas Poulopoulos
        if error_username:
241 26d25791 Leonidas Poulopoulos
            error = "Your idP should release the HTTP_EPPN attribute towards this service<br>"
242 6a946adf Leonidas Poulopoulos
        if error_orgname:
243 26d25791 Leonidas Poulopoulos
            error = error + "Your idP should release the HTTP_SHIB_HOMEORGANIZATION attribute towards this service<br>"
244 b969de46 Leonidas Poulopoulos
        if error_entitlement:
245 26d25791 Leonidas Poulopoulos
            error = error + "Your idP should release an appropriate HTTP_SHIB_EP_ENTITLEMENT attribute towards this service<br>"
246 26d25791 Leonidas Poulopoulos
        if error_mail:
247 26d25791 Leonidas Poulopoulos
            error = error + "Your idP should release the HTTP_SHIB_INETORGPERSON_MAIL attribute towards this service"
248 b969de46 Leonidas Poulopoulos
        if error_username or error_orgname or error_entitlement or error_mail:
249 f9634455 Leonidas Poulopoulos
            return render_to_response('error.html', {'error': error, "missing_attributes": True},
250 97e42c7d Leonidas Poulopoulos
                                  context_instance=RequestContext(request))
251 357e5b54 Leonidas Poulopoulos
        try:
252 357e5b54 Leonidas Poulopoulos
            user = User.objects.get(username__exact=username)
253 357e5b54 Leonidas Poulopoulos
            user_exists = True
254 357e5b54 Leonidas Poulopoulos
        except:
255 357e5b54 Leonidas Poulopoulos
            user_exists = False
256 b969de46 Leonidas Poulopoulos
        user = authenticate(username=username, firstname=firstname, lastname=lastname, mail=mail)
257 97e42c7d Leonidas Poulopoulos
        if user is not None:
258 b969de46 Leonidas Poulopoulos
            try:
259 b969de46 Leonidas Poulopoulos
                peer = Peer.objects.get(domain_name=organization)
260 b969de46 Leonidas Poulopoulos
                up = UserProfile.objects.get_or_create(user=user,peer=peer)
261 b969de46 Leonidas Poulopoulos
            except:
262 b969de46 Leonidas Poulopoulos
                error = "Your organization's domain name does not match our peers' domain names<br>Please contact Helpdesk to resolve this issue"
263 b969de46 Leonidas Poulopoulos
                return render_to_response('error.html', {'error': error})
264 357e5b54 Leonidas Poulopoulos
            if not user_exists:
265 357e5b54 Leonidas Poulopoulos
                user_activation_notify(user)
266 357e5b54 Leonidas Poulopoulos
            if user.is_active:
267 357e5b54 Leonidas Poulopoulos
               login(request, user)
268 357e5b54 Leonidas Poulopoulos
               return HttpResponseRedirect(reverse("group-routes"))
269 357e5b54 Leonidas Poulopoulos
            else:
270 1381e2d4 Leonidas Poulopoulos
                error = "User account <strong>%s</strong> is pending activation. Administrators have been notified and will activate this account within the next days. <br>If this account has remained inactive for a long time contact your technical coordinator or GRNET Helpdesk" %user.username
271 357e5b54 Leonidas Poulopoulos
                return render_to_response('error.html', {'error': error, 'inactive': True},
272 357e5b54 Leonidas Poulopoulos
                                  context_instance=RequestContext(request))
273 97e42c7d Leonidas Poulopoulos
        else:
274 6a946adf Leonidas Poulopoulos
            error = "Something went wrong during user authentication. Contact your administrator"
275 6a946adf Leonidas Poulopoulos
            return render_to_response('error.html', {'error': error,},
276 6a946adf Leonidas Poulopoulos
                                  context_instance=RequestContext(request))
277 357e5b54 Leonidas Poulopoulos
    except Exception:
278 6a946adf Leonidas Poulopoulos
        error = "Invalid login procedure"
279 6a946adf Leonidas Poulopoulos
        return render_to_response('error.html', {'error': error,},
280 6a946adf Leonidas Poulopoulos
                                  context_instance=RequestContext(request))
281 97e42c7d Leonidas Poulopoulos
        # Return an 'invalid login' error message.
282 97e42c7d Leonidas Poulopoulos
#    return HttpResponseRedirect(reverse("user-routes"))
283 97e42c7d Leonidas Poulopoulos
284 357e5b54 Leonidas Poulopoulos
def user_activation_notify(user):
285 357e5b54 Leonidas Poulopoulos
    current_site = Site.objects.get_current()
286 357e5b54 Leonidas Poulopoulos
    subject = render_to_string('registration/activation_email_subject.txt',
287 357e5b54 Leonidas Poulopoulos
                                   { 'site': current_site })
288 357e5b54 Leonidas Poulopoulos
    # Email subject *must not* contain newlines
289 357e5b54 Leonidas Poulopoulos
    subject = ''.join(subject.splitlines())
290 357e5b54 Leonidas Poulopoulos
    registration_profile = RegistrationProfile.objects.create_profile(user)
291 357e5b54 Leonidas Poulopoulos
    message = render_to_string('registration/activation_email.txt',
292 357e5b54 Leonidas Poulopoulos
                                   { 'activation_key': registration_profile.activation_key,
293 357e5b54 Leonidas Poulopoulos
                                     'expiration_days': settings.ACCOUNT_ACTIVATION_DAYS,
294 357e5b54 Leonidas Poulopoulos
                                     'site': current_site,
295 357e5b54 Leonidas Poulopoulos
                                     'user': user })
296 357e5b54 Leonidas Poulopoulos
    send_new_mail(settings.EMAIL_SUBJECT_PREFIX + subject, 
297 357e5b54 Leonidas Poulopoulos
                              message, settings.SERVER_EMAIL,
298 357e5b54 Leonidas Poulopoulos
                             get_peer_techc_mails(user), [])
299 b969de46 Leonidas Poulopoulos
300 97e42c7d Leonidas Poulopoulos
@login_required
301 6a946adf Leonidas Poulopoulos
@never_cache
302 97e42c7d Leonidas Poulopoulos
def add_rate_limit(request):
303 97e42c7d Leonidas Poulopoulos
    if request.method == "GET":
304 97e42c7d Leonidas Poulopoulos
        form = ThenPlainForm()
305 97e42c7d Leonidas Poulopoulos
        return render_to_response('add_rate_limit.html', {'form': form,},
306 97e42c7d Leonidas Poulopoulos
                                  context_instance=RequestContext(request))
307 97e42c7d Leonidas Poulopoulos
308 97e42c7d Leonidas Poulopoulos
    else:
309 97e42c7d Leonidas Poulopoulos
        form = ThenPlainForm(request.POST)
310 97e42c7d Leonidas Poulopoulos
        if form.is_valid():
311 97e42c7d Leonidas Poulopoulos
            then=form.save(commit=False)
312 97e42c7d Leonidas Poulopoulos
            then.action_value = "%sk"%then.action_value
313 97e42c7d Leonidas Poulopoulos
            then.save()
314 97e42c7d Leonidas Poulopoulos
            response_data = {}
315 97e42c7d Leonidas Poulopoulos
            response_data['pk'] = "%s" %then.pk
316 97e42c7d Leonidas Poulopoulos
            response_data['value'] = "%s:%s" %(then.action, then.action_value)
317 c00eba1c Leonidas Poulopoulos
            return HttpResponse(json.dumps(response_data), mimetype='application/json')
318 97e42c7d Leonidas Poulopoulos
        else:
319 97e42c7d Leonidas Poulopoulos
            return render_to_response('add_rate_limit.html', {'form': form,},
320 97e42c7d Leonidas Poulopoulos
                                      context_instance=RequestContext(request))
321 97e42c7d Leonidas Poulopoulos
322 97e42c7d Leonidas Poulopoulos
@login_required
323 6a946adf Leonidas Poulopoulos
@never_cache
324 97e42c7d Leonidas Poulopoulos
def add_port(request):
325 97e42c7d Leonidas Poulopoulos
    if request.method == "GET":
326 97e42c7d Leonidas Poulopoulos
        form = PortPlainForm()
327 97e42c7d Leonidas Poulopoulos
        return render_to_response('add_port.html', {'form': form,},
328 97e42c7d Leonidas Poulopoulos
                                  context_instance=RequestContext(request))
329 97e42c7d Leonidas Poulopoulos
330 97e42c7d Leonidas Poulopoulos
    else:
331 97e42c7d Leonidas Poulopoulos
        form = PortPlainForm(request.POST)
332 97e42c7d Leonidas Poulopoulos
        if form.is_valid():
333 97e42c7d Leonidas Poulopoulos
            port=form.save()
334 97e42c7d Leonidas Poulopoulos
            response_data = {}
335 97e42c7d Leonidas Poulopoulos
            response_data['value'] = "%s" %port.pk
336 97e42c7d Leonidas Poulopoulos
            response_data['text'] = "%s" %port.port
337 c00eba1c Leonidas Poulopoulos
            return HttpResponse(json.dumps(response_data), mimetype='application/json')
338 97e42c7d Leonidas Poulopoulos
        else:
339 97e42c7d Leonidas Poulopoulos
            return render_to_response('add_port.html', {'form': form,},
340 97e42c7d Leonidas Poulopoulos
                                      context_instance=RequestContext(request))
341 97e42c7d Leonidas Poulopoulos
342 97e42c7d Leonidas Poulopoulos
@login_required
343 6a946adf Leonidas Poulopoulos
@never_cache
344 97e42c7d Leonidas Poulopoulos
def user_logout(request):
345 34cff057 Leonidas Poulopoulos
    logout(request)
346 34cff057 Leonidas Poulopoulos
    return HttpResponseRedirect(reverse('group-routes'))
347 97e42c7d Leonidas Poulopoulos
    
348 049a5a10 Leonidas Poulopoulos
@never_cache
349 97e42c7d Leonidas Poulopoulos
def load_jscript(request, file):
350 bec1a51b Leonidas Poulopoulos
    long_polling_timeout = int(settings.POLL_SESSION_UPDATE)*1000 + 10000
351 bec1a51b Leonidas Poulopoulos
    return render_to_response('%s.js' % file, {'timeout': long_polling_timeout}, context_instance=RequestContext(request), mimetype="text/javascript")
352 a2f464f0 Leonidas Poulopoulos
353 a2f464f0 Leonidas Poulopoulos
354 a2f464f0 Leonidas Poulopoulos
def get_peer_techc_mails(user):
355 86da41f0 Leonidas Poulopoulos
    mail = []
356 86da41f0 Leonidas Poulopoulos
    additional_mail = []
357 86da41f0 Leonidas Poulopoulos
    techmails_list = []
358 86da41f0 Leonidas Poulopoulos
    user_mail = "%s" %user.email
359 86da41f0 Leonidas Poulopoulos
    user_mail = user_mail.split(';')
360 b36bd381 Leonidas Poulopoulos
    techmails = user.get_profile().peer.techc_emails.all()
361 a2f464f0 Leonidas Poulopoulos
    if techmails:
362 b36bd381 Leonidas Poulopoulos
        for techmail in techmails:
363 b36bd381 Leonidas Poulopoulos
            techmails_list.append(techmail.email)
364 86da41f0 Leonidas Poulopoulos
    if settings.NOTIFY_ADMIN_MAILS:
365 86da41f0 Leonidas Poulopoulos
        additional_mail = settings.NOTIFY_ADMIN_MAILS
366 fdb1f9ec Leonidas Poulopoulos
#    mail.extend(user_mail)
367 86da41f0 Leonidas Poulopoulos
    mail.extend(additional_mail)
368 86da41f0 Leonidas Poulopoulos
    mail.extend(techmails_list)
369 a2f464f0 Leonidas Poulopoulos
    return mail
370 fdb1f9ec Leonidas Poulopoulos
371 fdb1f9ec Leonidas Poulopoulos
372 fdb1f9ec Leonidas Poulopoulos
def send_new_mail(subject, message, from_email, recipient_list, bcc_list):
373 fdb1f9ec Leonidas Poulopoulos
    return EmailMessage(subject, message, from_email, recipient_list, bcc_list).send()