import os from urllib2 import urlopen from django.http import StreamingHttpResponse from django.shortcuts import render_to_response, get_object_or_404 from django.views.generic.detail import DetailView from django.views.generic.edit import UpdateView from django.conf import settings from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from coin.members.models import Member from coin.vpn.models import VPNConfiguration class VPNView(UpdateView): model = VPNConfiguration fields = ['ipv4_endpoint', 'ipv6_endpoint', 'comment'] @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(VPNView, self).dispatch(*args, **kwargs) def get_object(self): return get_object_or_404(VPNConfiguration, pk=self.kwargs.get("id"), offersubscription__member=self.request.user) def generate_password(request, id): """This generates a random password, saves it in hashed form, and returns it to the user in cleartext. """ vpn = get_object_or_404(VPNConfiguration, pk=id, offersubscription__member=request.user) # This function has nothing to here, but it's convenient. password = Member.objects.make_random_password() vpn.password = password # This will hash the password automatically vpn.full_clean() vpn.save() return render_to_response('vpn/password.html', {"vpn": vpn, "password": password}) class VPNGeneratePasswordView(VPNView): """This generates a random password, saves it in hashed form, and returns it to the user in cleartext. """ def get_context_data(self, **kwargs): context = super(VPNGeneratePasswordView, self).get_context_data(**kwargs) # Generate a new random password and save it password = Member.objects.make_random_password() self.object.password = password # This will hash the password automatically self.object.full_clean() self.object.save() context['password'] = password return context def get_graph(request, vpn_id, period="daily"): """ This get the graph for the associated vpn_id and time period """ vpn = get_object_or_404(VPNConfiguration, pk=vpn_id, offersubscription__member__user=request.user.id) time_periods = { 'hourly': '-1hour', 'daily': '-24hours', 'weekly': '-8days', 'monthly': '-32days', 'yearly': '-13months', } if period not in time_periods: period = 'daily' graph_url = os.path.join(settings.GRAPHITE_SERVER, "render/?width=586&height=308&from=%(period)s&" \ "target=alias%%28scaleToSeconds%%28vpn1.%(login)s.downrxbytes%%2C1%%29%%2C%%20%%22Download%%22%%29&" \ "target=alias%%28scaleToSeconds%%28vpn1.%(login)s.uptxbytes%%2C1%%29%%2C%%20%%22Upload%%22%%29&" \ "title=VPN%%20Usage%%20%(login)s" % \ { 'period': time_periods[period], 'login': vpn.login }) return StreamingHttpResponse(urlopen(graph_url), content_type="image/png")