Statistics
| Branch: | Tag: | Revision:

root / flowspec / views.py @ 357e5b54

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