|
@@ -1,11 +1,17 @@
|
|
|
+import os
|
|
|
+from urllib2 import urlopen
|
|
|
+
|
|
|
from django.contrib.auth.models import User
|
|
|
+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.conf import settings
|
|
|
|
|
|
from coin.vpn.models import VPNConfiguration
|
|
|
|
|
|
|
|
|
class VPNView(DetailView):
|
|
|
+
|
|
|
def get_object(self):
|
|
|
return get_object_or_404(VPNConfiguration, pk=self.kwargs.get("id"),
|
|
|
offersubscription__member__user=self.request.user)
|
|
@@ -24,3 +30,39 @@ def generate_password(request, id):
|
|
|
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 = User.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")
|