# Copyright © 2022 Aravinth Manivannan # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . from django.shortcuts import render, redirect, get_object_or_404 from django.utils.http import urlencode from django.contrib.auth import authenticate, login, logout from django.contrib.auth import get_user_model from django.contrib.auth.decorators import login_required from django.http import HttpResponse from django.template.loader import render_to_string from django.views.decorators.csrf import csrf_protect from django.core.mail import send_mail from django.conf import settings from django.urls import reverse from accounts.decorators import confirm_access from dash.models import Instance from billing.utils import payment_fullfilled from .utils import create_vm_if_not_exists, Infra, delete_vm def default_ctx(title: str, username: str): """ Default context for all dashboard pages """ return { "title": title, "username": username, "open_instances": "open", } @login_required def create_instance(request, instance_name: str): """ Dashboard homepage view """ instance = get_object_or_404(Instance, name=instance_name, owned_by=request.user) if not payment_fullfilled(instance=instance): return redirect(reverse("billing.invoice.generate", args=(instance_name,))) res = create_vm_if_not_exists(instance=instance) if res is not None: (gitea_password, commit) = res ctx = { "username": request.user.username, "gitea_password": gitea_password, "gitea_uri": Infra.get_gitea_uri(instance=instance), } body = render_to_string( "infrastructure/emails/gitea-creds.txt", context=ctx, ) sender = settings.HOSTEA["EMAIL_SENDER_ADDRESS"] send_mail( subject="[Hostea] Your Hostea instance is now online!", message=body, from_email=f"No reply Hostea<{sender}>", # TODO read from settings.py recipient_list=[request.user.email], ) return render(request, "infrastructure/html/create.html", ctx) return HttpResponse() @login_required @confirm_access def delete_instance(request, instance_name: str): """ Dashboard homepage view """ instance = get_object_or_404(Instance, name=instance_name, owned_by=request.user) delete_vm(instance=instance) return redirect(reverse("dash.instances.list"))