|
|
- from datetime import timedelta as td
-
- from django.conf import settings
- from django.contrib.auth.decorators import login_required
- from django.http import HttpResponseBadRequest, HttpResponseForbidden
- from django.shortcuts import get_object_or_404, redirect, render
- from django.utils import timezone
-
- from hc.api.decorators import uuid_or_400
- from hc.api.models import Channel, Check, Ping
- from hc.front.forms import AddChannelForm, TimeoutForm
-
-
- @login_required
- def my_checks(request):
- checks = Check.objects.filter(user=request.user).order_by("created")
-
- ctx = {
- "page": "checks",
- "checks": checks,
- "now": timezone.now()
- }
-
- return render(request, "front/my_checks.html", ctx)
-
-
- def index(request):
- if request.user.is_authenticated():
- return redirect("hc-checks")
-
- if "welcome_code" not in request.session:
- check = Check()
- check.save()
- code = str(check.code)
- request.session["welcome_code"] = code
- else:
- code = request.session["welcome_code"]
- check = Check.objects.get(code=code)
-
- ctx = {
- "page": "welcome",
- "check": check,
- "ping_url": check.url()
- }
-
- return render(request, "front/welcome.html", ctx)
-
-
- def pricing(request):
- return render(request, "front/pricing.html", {"page": "pricing"})
-
-
- def docs(request):
- if "welcome_code" in request.session:
- code = request.session["welcome_code"]
- check = Check.objects.get(code=code)
- else:
- check = Check(code="uuid-goes-here")
-
- ctx = {
- "page": "docs",
- "ping_endpoint": settings.PING_ENDPOINT,
- "check": check,
- "ping_url": check.url()
- }
-
- return render(request, "front/docs.html", ctx)
-
-
- def about(request):
- return render(request, "front/about.html", {"page": "about"})
-
-
- @login_required
- def add_check(request):
- assert request.method == "POST"
-
- check = Check(user=request.user)
- check.save()
-
- check.assign_all_channels()
-
- return redirect("hc-checks")
-
-
- @login_required
- @uuid_or_400
- def update_name(request, code):
- assert request.method == "POST"
-
- check = get_object_or_404(Check, code=code)
- if check.user != request.user:
- return HttpResponseForbidden()
-
- check.name = request.POST["name"]
- check.save()
-
- return redirect("hc-checks")
-
-
- @login_required
- @uuid_or_400
- def update_timeout(request, code):
- assert request.method == "POST"
-
- check = get_object_or_404(Check, code=code)
- if check.user != request.user:
- return HttpResponseForbidden()
-
- form = TimeoutForm(request.POST)
- if form.is_valid():
- check.timeout = td(seconds=form.cleaned_data["timeout"])
- check.grace = td(seconds=form.cleaned_data["grace"])
- check.save()
-
- return redirect("hc-checks")
-
-
- @login_required
- @uuid_or_400
- def email_preview(request, code):
- """ A debug view to see how email will look.
-
- Will keep it around until I'm happy with email stying.
-
- """
-
- check = Check.objects.get(code=code)
- if check.user != request.user:
- return HttpResponseForbidden()
-
- ctx = {
- "check": check,
- "checks": check.user.check_set.all(),
- "now": timezone.now()
-
- }
-
- return render(request, "emails/alert/body.html", ctx)
-
-
- @login_required
- @uuid_or_400
- def remove_check(request, code):
- assert request.method == "POST"
-
- check = get_object_or_404(Check, code=code)
- if check.user != request.user:
- return HttpResponseForbidden()
-
- check.delete()
-
- return redirect("hc-checks")
-
-
- @login_required
- @uuid_or_400
- def log(request, code):
- check = get_object_or_404(Check, code=code)
- if check.user != request.user:
- return HttpResponseForbidden()
-
- pings = Ping.objects.filter(owner=check).order_by("-created")[:100]
-
- ctx = {
- "check": check,
- "pings": pings
-
- }
-
- return render(request, "front/log.html", ctx)
-
-
- @login_required
- def channels(request):
- if request.method == "POST":
- code = request.POST["channel"]
- try:
- channel = Channel.objects.get(code=code)
- except Channel.DoesNotExist:
- return HttpResponseBadRequest()
- if channel.user != request.user:
- return HttpResponseForbidden()
-
- new_checks = []
- for key in request.POST:
- if key.startswith("check-"):
- code = key[6:]
- try:
- check = Check.objects.get(code=code)
- except Check.DoesNotExist:
- return HttpResponseBadRequest()
- if check.user != request.user:
- return HttpResponseForbidden()
- new_checks.append(check)
-
- channel.checks = new_checks
- return redirect("hc-channels")
-
- channels = Channel.objects.filter(user=request.user).order_by("created")
- num_checks = Check.objects.filter(user=request.user).count()
-
- ctx = {
- "page": "channels",
- "channels": channels,
- "num_checks": num_checks
-
- }
- return render(request, "front/channels.html", ctx)
-
-
- @login_required
- def add_channel(request):
- assert request.method == "POST"
- form = AddChannelForm(request.POST)
- if form.is_valid():
- channel = form.save(commit=False)
- channel.user = request.user
- channel.save()
-
- checks = Check.objects.filter(user=request.user)
- channel.checks.add(*checks)
-
- if channel.kind == "email":
- channel.send_verify_link()
-
- return redirect("hc-channels")
- else:
- return HttpResponseBadRequest()
-
-
- @login_required
- @uuid_or_400
- def channel_checks(request, code):
- channel = get_object_or_404(Channel, code=code)
- if channel.user != request.user:
- return HttpResponseForbidden()
-
- assigned = set([check.code for check in channel.checks.all()])
- checks = Check.objects.filter(user=request.user).order_by("created")
-
- ctx = {
- "checks": checks,
- "assigned": assigned,
- "channel": channel
- }
-
- return render(request, "front/channel_checks.html", ctx)
-
-
- @uuid_or_400
- def verify_email(request, code, token):
- channel = get_object_or_404(Channel, code=code)
- if channel.make_token() == token:
- channel.email_verified = True
- channel.save()
- return render(request, "front/verify_email_success.html")
-
- return render(request, "bad_link.html")
-
-
- @login_required
- @uuid_or_400
- def remove_channel(request, code):
- assert request.method == "POST"
-
- channel = get_object_or_404(Channel, code=code)
- if channel.user != request.user:
- return HttpResponseForbidden()
-
- channel.delete()
-
- return redirect("hc-channels")
|