# -*- coding: utf-8 -*- # # vim:syntax=python:sw=4:ts=4:expandtab # # Copyright (C) Adelux - 2009 # from django.shortcuts import render_to_response from django.template import RequestContext from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect from django.contrib.auth import authenticate,login, logout from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.decorators import login_required from django.db.models import Q import django.views.generic.create_update from ovpnmanager.ovpnconsole.models import * ## Globales def index(request): object_list = OVPNSite.objects.all() return render_to_response('ovpnconsole/index.html', context_instance=RequestContext(request)) def search(request): return render_to_response('ovpnconsole/search.html', context_instance=RequestContext(request)) def keypress(request): content = request.POST['inputText'] if content is not None: results = OVPNUser.objects.filter(Q(name__istartswith = content) | Q(email__icontains = content) | Q(ovpnserver__name__icontains = content) | Q(ovpnserver__ovpnauthority__name__icontains = content)).order_by( 'name' ) return render_to_response( 'ovpnconsole/search_result.html', {'search' : 'user', 'results' : results}, context_instance = RequestContext( request ) ) ## Sites def ovpnsite_list(request): object_list = OVPNSite.objects.all() return render_to_response('ovpnconsole/ovpnsite_list.html',{'object_list' : object_list}, context_instance=RequestContext(request)) def modify_site(request, object_id): ovpnsite_object = OVPNSite.objects.get(pk=object_id) if request.user.is_superuser == False: return render_to_response('ovpnconsole/access_denied.html',{ 'ovpnsite_object':ovpnsite_object }, context_instance=RequestContext(request)) if request.method == 'POST': form = OVPNSiteForm(request.POST, instance=ovpnsite_object) if form.is_valid(): form.save() return HttpResponseRedirect('/ovpnconsole/site/' + object_id) else: form = OVPNSiteForm(instance=ovpnsite_object) return render_to_response('ovpnconsole/ovpnsite_form.html', { 'form': form, 'ovpnsite_object' : ovpnsite_object },context_instance=RequestContext(request)) #Authority def ovpnauthority_detail(request, object_id): ovpnauthority_object = OVPNAuthority.objects.get(id=object_id) return django.views.generic.list_detail.object_detail( request, queryset = OVPNAuthority.objects.all(), object_id = object_id, extra_context={'detail':'0'}, ) def modify_ovpnauthority(request,object_id): ovpnauthority_object = OVPNAuthority.objects.get(pk=object_id) return HttpResponseRedirect(reverse('modify_authority', args=(ovpnauthority_object.id,))) def create_ovpnauthority(request, site_id): ovpnsite_object = OVPNSite.objects.get(id=site_id) if request.method == "POST": form = OVPNAuthorityForm(request.POST) if form.is_valid(): form.save() return HttpResponseRedirect('/ovpnconsole/site/' + str(site_id)) else: form = OVPNAuthorityForm() return render_to_response('ovpnconsole/ovpnauthority_form.html', { 'form': form, 'ovpnsite_object': ovpnsite_object}, context_instance=RequestContext(request)) # Server def ovpnserver_detail(request, object_id): ovpnserver_object = OVPNServer.objects.get(id=object_id) return django.views.generic.list_detail.object_detail( request, queryset = OVPNServer.objects.all(), object_id = object_id, extra_context={'detail':'0' }, ) def ovpnserverconnhist_detail(request, object_id): ovpnserver_object = OVPNServer.objects.get(id=object_id) return django.views.generic.list_detail.object_list( request, queryset = OVPNServerConnHist.objects.filter(ovpnserver__exact=ovpnserver_object).order_by('-conn_date', '-disc_date'), paginate_by = 25, extra_context={'object':ovpnserver_object} ) def ovpnserverconnhist_search(request, object_id): ovpnserver_object = OVPNServer.objects.get(id=object_id) content = request.POST['inputText'] if content is not None: results = OVPNServerConnHist.objects.filter(Q( Q(user_name__istartswith = content) | Q(virt_ip__contains = content) | Q(real_ip__contains = content)) & Q(ovpnserver__exact=ovpnserver_object) ).order_by('-conn_date', '-disc_date') return render_to_response( 'ovpnconsole/search_result.html', {'search' : 'server_connhist', 'results' : results}, context_instance = RequestContext( request ) ) def create_ovpnserver(request, authority_id): ovpnauthority_object = OVPNAuthority.objects.get(id=authority_id) if request.method == "POST": form = OVPNServerForm(request.POST) if form.is_valid(): form.save() return HttpResponseRedirect('/ovpnconsole/authority/' + str(authority_id)) else: form = OVPNServerForm() return render_to_response('ovpnconsole/ovpnserver_form.html', { 'form': form, 'ovpnauthority_object': ovpnauthority_object}, context_instance=RequestContext(request)) def modify_ovpnserver(request, object_id): ovpnserver_object = OVPNServer.objects.get(id=object_id) if request.method == "POST": form = OVPNServerForm(request.POST, instance=ovpnserver_object) if form.is_valid(): form.save() return HttpResponseRedirect('/ovpnconsole/server/' + str(ovpnserver_object.id)) else: form = OVPNServerForm(instance=ovpnserver_object) return render_to_response('ovpnconsole/ovpnserver_form.html', { 'form': form, 'ovpnserver_object': ovpnserver_object},context_instance=RequestContext(request)) def ovpnserver_restart(request, object_id): ovpnserver_object = OVPNServer.objects.get(id=object_id) # verify if server is correctly configured if ovpnserver_object: # try to call restart function output = ovpnserver_object.restart_server() result = int(output[0]) if result == 0: message = 'Server successfully restarted : \n\n ' + output[1] else: message = 'Error during server restart : \n\n ' + output[2] return render_to_response('ovpnconsole/ovpnserver_result.html', { 'action' : 'restart', 'result': result, 'message': message, 'object': ovpnserver_object },context_instance=RequestContext(request)) else: return HttpResponseRedirect(reverse('server_settings', args=(ovpnserver_object.id,))) ## user def ovpnuser_detail(request, object_id): ovpnuser_object = OVPNUser.objects.get(id=object_id) ## get connexions history ovpnserver_connhist = OVPNServerConnHist.objects.filter(user_name = ovpnuser_object.name) return django.views.generic.list_detail.object_detail( request, queryset = OVPNUser.objects.all(), object_id = object_id, extra_context={'detail':'0', 'ovpnserver_connhist' : ovpnserver_connhist }, ) def create_ovpnuser(request, server_id): ovpnserver_object = OVPNServer.objects.get(id=server_id) if request.method == "POST": form = OVPNUserForm(request.POST) if form.is_valid(): form.save() return HttpResponseRedirect('/ovpnconsole/server/' + str(server_id)) else: form = OVPNUserForm() return render_to_response('ovpnconsole/ovpnuser_form.html', { 'form': form, 'ovpnserver_object': ovpnserver_object},context_instance=RequestContext(request)) def modify_ovpnuser(request, object_id): ovpnuser_object = OVPNUser.objects.get(id=object_id) if request.method == "POST": # preserve password newrequest = request.POST.copy() newrequest['password'] = ovpnuser_object.password newrequest['password_validation'] = ovpnuser_object.password_validation # pass the form data form = OVPNUserParamForm(newrequest, instance=ovpnuser_object) if form.is_valid(): form.save() return HttpResponseRedirect('/ovpnconsole/server/' + str(ovpnuser_object.ovpnserver.id)) else: form = OVPNUserParamForm(instance=ovpnuser_object, initial={'password':ovpnuser_object.password, 'password_validation':ovpnuser_object.password}) return render_to_response('ovpnconsole/ovpnuser_form.html', { 'form': form, 'ovpnuser_object': ovpnuser_object },context_instance=RequestContext(request)) def delete_ovpnuser(request, object_id): ovpnuser_object = OVPNUser.objects.get(id=object_id) postredirect = '/ovpnconsole/server/' + str(ovpnuser_object.ovpnserver.id) #return django.views.generic.create_update.delete_object(request, dict(model=OVPNUser,post_delete_redirect=postredirect, object_id=object_id)) return django.views.generic.create_update.delete_object(request, OVPNUser,postredirect, object_id) def change_user_passwd(request, object_id): ovpnuser_object = OVPNUser.objects.get(id=object_id) if request.method == "POST": form = OVPNUserPasswdForm(request.POST, instance=ovpnuser_object) if form.is_valid(): form.save() return HttpResponseRedirect('/ovpnconsole/server/' + str(ovpnuser_object.ovpnserver.id)) else: form = OVPNUserPasswdForm(instance=ovpnuser_object) return render_to_response('ovpnconsole/ovpnuser_form.html', { 'form': form, 'ovpnuser_object': ovpnuser_object, 'action' : 'changepasswd'},context_instance=RequestContext(request)) def revoke_ovpnuser(request, object_id): ovpnuser_object = OVPNUser.objects.get(id=object_id) ovpnuser_object.revoke_user() return HttpResponseRedirect('/ovpnconsole/server/' + str(ovpnuser_object.ovpnserver.id)) def notify_ovpnuser(request, object_id): ovpnuser_object = OVPNUser.objects.get(id=object_id) #ovpnserver_settings = ovpnuser_object.ovpnserver.ovpnserversettings_set.all()[0] ovpnserver_settings = ovpnuser_object.ovpnserver.ovpnserversettings if request.method == "POST": mail_from = 'ovpnmanager@arrive.fr' reply_to = 'noreply@noresponse.com' copy_to = request.POST['copy_to'] subject = request.POST['subject'] message = request.POST['message'] send_to = [''] send_to.append(ovpnuser_object.email) if copy_to: send_to.append(copy_to) from django.core.mail import send_mail, EmailMessage import base64 # create mail object email = EmailMessage(subject,message,mail_from,send_to,headers = {'Reply-To': reply_to}) # generate user p12 content basedir = ovpnuser_object.ovpnserver.ovpnauthority.work_dir ovpnuser_object.ovpnserver.ovpnauthority.write_authority_files() ovpntools = ovpnuser_object.ovpnserver.ovpnauthority.create_ovpntools_object() ovpntools.commonName = ovpnuser_object.ovpnserver.ovpnauthority.name ovpntools.email = ovpnuser_object.email f = open(basedir + '/' + ovpnuser_object.name + '.crt', 'w') print >> f, ovpnuser_object.user_crt_content f.close() f = open(basedir + '/' + ovpnuser_object.name + '.key', 'w') print >> f, ovpnuser_object.user_key_content f.close() ovpntools.generate_user_pkcs(ovpnuser_object.name,ovpnuser_object.password,basedir) userp12 = ovpntools.read_user_pkcs(ovpnuser_object.name,basedir).rstrip('\n') # encode userp12 to base64 encoding #userp12_b64 = base64.b64encode(str(userp12)) #userp12_b64 = base64.b64encode(userp12) # attach user p12 content to email email.attach(ovpnuser_object.name + '-' + ovpnuser_object.ovpnserver.ovpnauthority.ovpnsite.name + '-' + ovpnuser_object.ovpnserver.ovpnauthority.name + '-' + ovpnuser_object.ovpnserver.name + '.p12',userp12,'application/x-pkcs12') # generate user config ovpnuser_object.generate_user_config() ovpnuser_object.save() # attach user config to email email.attach(ovpnuser_object.name + '-' + ovpnuser_object.ovpnserver.ovpnauthority.ovpnsite.name + '-' + ovpnuser_object.ovpnserver.ovpnauthority.name + '-' + ovpnuser_object.ovpnserver.name + '.ovpn',ovpnuser_object.config_content,'application/x-ovpn') email.send() return HttpResponseRedirect('/ovpnconsole/server/' + str(ovpnuser_object.ovpnserver.id)) return render_to_response('ovpnconsole/sendmail.html',{'ovpnuser_object' : ovpnuser_object, 'ovpnserver_settings': ovpnserver_settings},context_instance=RequestContext(request)) # Apply Server Config def apply_ovpnserver_config(request, object_id): ovpnserver = OVPNServer.objects.get(pk=object_id) (result,output) = ovpnserver.submit_server_config() if result == 'OK': message = 'Server configuration apply successful : \n ' else: message = 'Error during server configuration apply : \n ' message += output return render_to_response('ovpnconsole/ovpnserver_result.html', { 'result': result, 'message': message, 'object': ovpnserver},context_instance=RequestContext(request)) # Server settings def ovpnserver_settings(request, object_id): ovpnserver_object = OVPNServer.objects.get(id=object_id) # creates ovpnserversettings object if not exists try: ovpnserver_object.ovpnserversettings except: import string import random LENGTH=24 agent_key = "".join(random.sample(string.letters+string.digits, LENGTH)) ovpnserversettings = OVPNServerSettings(ovpnserver=ovpnserver_object, ovpnserver_type='loc', connection_address='127.0.0.1',ovpnagent_key=agent_key) super(OVPNServerSettings, ovpnserversettings).save() ovpnserversettings_object = ovpnserver_object.ovpnserversettings if request.method == "POST": form = OVPNServerSettingsForm(request.POST, instance=ovpnserversettings_object) if form.is_valid(): form.save() return HttpResponseRedirect('/ovpnconsole/server/' + str(object_id)) else: form = OVPNServerSettingsForm(instance=ovpnserversettings_object) return render_to_response('ovpnconsole/ovpnserversettings_form.html', { 'form': form, 'ovpnserversettings_object': ovpnserversettings_object, 'ovpnserver_object':ovpnserver_object},context_instance=RequestContext(request)) # Authentification def logout_view(request): if request.user.is_authenticated(): logout(request) return render_to_response('ovpnconsole/logged_off.html', context_instance=RequestContext(request)) ### Admin def admin_page(request): if request.user.is_superuser == False: return render_to_response('ovpnconsole/access_denied.html',{ 'return':'/ovpnconsole/' }, context_instance=RequestContext(request)) return render_to_response('ovpnconsole/admin/index.html', { 'user_list': User.objects.all(), }, context_instance=RequestContext(request)) def add_user(request): if request.user.is_superuser == False: return render_to_response('ovpnconsole/access_denied.html',{ 'return':'/ovpnconsole/' }, context_instance=RequestContext(request)) if request.method == 'POST': form = UserForm(request.POST) if form.is_valid(): new_user = form.save() return HttpResponseRedirect("/ovpnconsole/admin/") else: form = UserForm() return render_to_response("ovpnconsole/admin/user_form.html", { 'form': form, }, context_instance=RequestContext(request)) def change_user(request,user_id): if request.user.is_superuser == False: return render_to_response('ovpnconsole/access_denied.html',{ 'return':'/ovpnconsole/' }, context_instance=RequestContext(request)) user_object = User.objects.get(id=user_id) if request.method == 'POST': form = UserForm(request.POST,instance=user_object) if form.is_valid(): change_user = form.save() return HttpResponseRedirect("/ovpnconsole/admin/") else: form = UserForm(instance=user_object) return render_to_response("ovpnconsole/admin/user_form.html", { 'user_object': user_object, 'form': form, }, context_instance=RequestContext(request)) def delete_user(request, user_id): if request.user.is_superuser == False: return render_to_response('ovpnconsole/access_denied.html',{ 'return':'/ovpnconsole/' }, context_instance=RequestContext(request)) postredirect = '/ovpnconsole/admin/' return django.views.generic.create_update.delete_object(request, User, postredirect, user_id, template_name = 'ovpnconsole/admin/user_confirm_delete.html')