# 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.views.decorators.csrf import csrf_protect from django.core.mail import send_mail 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 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 send_mail( subject="[Hostea] Gitea admin credentials", message=f""" Congratulations on your new Gitea instance!\n You can use the following credentials to log into an admin account on your new Gitea instance. Great powers come with great responsibilities, so use the admin credentials wisely. When in doubt, consult the Gitea docs or contact support!\n - username : root - password: {gitea_password} """, from_email="No reply Hostea", # TODO read from settings.py recipient_list=[request.user.email], ) ctx = { "gitea_password": gitea_password, "gitea_uri": Infra.get_gitea_uri(instance=instance), } 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) infra = Infra() infra.remove_vm(instance=instance) # TODO: push isn't implemented yet return HttpResponse()