diff --git a/manager/templatetags/repo.py b/manager/templatetags/repo.py index f119425..9daedd9 100644 --- a/manager/templatetags/repo.py +++ b/manager/templatetags/repo.py @@ -14,3 +14,8 @@ def isLatestCommit(): repo = Repo(settings.BASE_DIR) origin = repo.remotes[0].refs[0] return "" if origin.commit.committed_datetime <= repo.head.commit.committed_datetime else " – Update available!" + +@register.simple_tag +def isDirty(): + repo = Repo(settings.BASE_DIR) + return " – Uncommitted changes!" if repo.is_dirty() else "" diff --git a/manager/views.py b/manager/views.py index 6670997..07a7dd2 100644 --- a/manager/views.py +++ b/manager/views.py @@ -12,6 +12,7 @@ from django.db.models.signals import post_save from django.dispatch import receiver from django.conf import settings from django.contrib.auth.forms import PasswordResetForm +from django.urls import reverse from .models import Device, Organization, Network, Model, Wifi, UserStatus from .signals import * @@ -42,7 +43,7 @@ def is_staff(user): @login_required def index(request): - return redirect("/devices/") + return redirect(reverse("devices")) @csrf_exempt def heartbeat(request): @@ -174,7 +175,7 @@ def editdevice(request, device_id): device.changed = timezone.now() device.save() - return redirect("/devices/") + return redirect(reverse("devices")) return render(request, "manager/edit.html", { @@ -189,23 +190,17 @@ def editdevice(request, device_id): @user_passes_test(is_superuser) def makeuser(request): if request.POST.get("username", ""): - username = request.POST.get("username", "") - first = request.POST.get("firstname", "") - last = request.POST.get("lastname", "") - staff = request.POST.get("staff", "0") == "True" - suser = request.POST.get("superuser", "0") == "True" - orgas = set(request.POST.getlist("orga", [])) - mail = request.POST.get("email", "") user = User.objects.create_user( - username=username, + username=request.POST.get("username", ""), password=str(uuid.uuid4().hex), - first_name=first, - last_name=last, - is_staff=staff, - is_superuser=suser, - email=mail + first_name=request.POST.get("firstname", ""), + last_name=request.POST.get("lastname", ""), + is_staff=request.POST.get("staff", "0") == "True", + is_superuser=request.POST.get("superuser", "0") == "True", + email=request.POST.get("email", "") ) - user.organization_set.set(orgas) + + user.organization_set.set(set(request.POST.getlist("orga", []))) form = PasswordResetForm({"email": user.email}) @@ -213,14 +208,13 @@ def makeuser(request): form.save( request=request, use_https=True, - email_template_name='registration/password_reset_email.html') + email_template_name='registration/add_user.html') - return redirect("/users/") + return redirect(reverse("users")) else: return render(request, "manager/adduser.html", {"title": "Add User"}) - @login_required def edituser(request, user_id): if request.user.is_staff or request.user.id == user_id: @@ -228,7 +222,7 @@ def edituser(request, user_id): user = request.user if request.user.id == user_id else User.objects.distinct().get(id=user_id, organization__in=orgas) if not user: - return redirect("/users/") + return redirect(reverse("users")) if request.POST.get("form", ""): newfirst = request.POST.get("firstname", "") @@ -263,7 +257,7 @@ def edituser(request, user_id): user.save() - return redirect("/users/") + return redirect(reverse("users")) return render(request, "manager/edituser.html", { @@ -273,7 +267,7 @@ def edituser(request, user_id): ) else: - return redirect('/account/login/?next=%s' % request.path) + return redirect(reverse("two_factor:login", kwargs={'next': request.path})) @login_required def editwifi(request, wifi_id): @@ -283,7 +277,7 @@ def editwifi(request, wifi_id): wifi = wifi or Wifi.objects.filter(id=wifi_id, organization=organization) if not wifi: - return redirect("/wifi/") + return redirect(reverse("wifi")) if request.POST.get("serial", ""): newserial = request.POST.get("serial", "") @@ -303,7 +297,7 @@ def editwifi(request, wifi_id): wifi[0].save() - return redirect("/wifi/") + return redirect(reverse("wifi")) return render(request, "manager/editwifi.html", { @@ -318,7 +312,7 @@ def getconfig(request, device_id): device = get_object_or_404(Device, id=device_id) - if not mkfirmware(device, FWDIR): + if not mkfirmware.delay(device, FWDIR).get(timeout=300): return HttpResponse(status=503) sigUpdateDevice(device.serial, None, False) @@ -332,30 +326,25 @@ def getconfig(request, device_id): @login_required def rebootdevice(request, device_id): - device = None - for organization in Organization.objects.filter(users=request.user): - device = device or Device.objects.filter(id=device_id, organization=organization) + device = get_object_or_404(Device, id=device_id, organization__in=request.user.organization_set.all()) - if device and not device[0].reboot: - sigRebootDevice(device[0].serial, request.user.username, True) - device[0].reboot = True - device[0].save() + if not device.reboot: + sigRebootDevice(device.serial, request.user.username, True) + device.reboot = True + device.save() - return redirect("/devices/") + return redirect(reverse("devices")) @user_passes_test(is_staff) def updatedevice(request, device_id): - device = None + device = get_object_or_404(Device, id=device_id, organization__in=request.user.organization_set.all()) - for organization in Organization.objects.filter(users=request.user): - device = device or Device.objects.filter(id=device_id, organization=organization) + if not device.update: + sigUpdateDevice(device.serial, request.user.username, True) + device.update = True + device.save() - if device and not device[0].update: - sigUpdateDevice(device[0].serial, request.user.username, True) - device[0].update = True - device[0].save() - - return redirect("/devices/") + return redirect(reverse("devices")) @user_passes_test(is_superuser) def deletedevice(request, device_id): @@ -373,31 +362,31 @@ def deletedevice(request, device_id): device.delete() - return redirect("/devices/") + return redirect(reverse("devices")) @user_passes_test(is_staff) def deletewifi(request, wifi_id): wifi = get_object_or_404(Wifi, id=wifi_id, organization__in=request.user.organization_set.all()) wifi.delete() - return redirect("/wifi/") + return redirect(reverse("wifi")) @user_passes_test(is_superuser) def deleteuser(request, user_id): user = get_object_or_404(User, id=user_id) user.delete() - return redirect("/users/") + return redirect(reverse("users")) @user_passes_test(is_superuser) def deletenetwork(request, network_id): network = get_object_or_404(Network, id=network_id) network.delete() - return redirect("/networks/") + return redirect(reverse("networks")) @user_passes_test(is_superuser) def deleteorga(request, orga_id): orga = get_object_or_404(Organization, id=orga_id) orga.delete() - return redirect("/organizations/") + return redirect(reverse("organizations")) @user_passes_test(is_staff) def makewifi(request): @@ -420,7 +409,7 @@ def makewifi(request): organization = Organization.objects.filter(id=wifi_organization)[0] ) - return redirect("/wifi/") + return redirect(reverse("wifi")) @user_passes_test(is_superuser) def makenetwork(request): @@ -430,7 +419,7 @@ def makenetwork(request): data = form.cleaned_data network = Network.objects.create(name=data["name"], intip=data["intip"], extip=data["extip"]) network.organization.set(data["orgas"]) - return redirect("/networks/") + return redirect(reverse("networks")) else: form = NetworkForm(request.user) @@ -445,7 +434,7 @@ def makeorganization(request): data = form.cleaned_data orga = Organization.objects.create(name=data["name"], userlimit=data["users"]) request.user.organization_set.add(orga) - return redirect("/organizations/") + return redirect(reverse("organizations")) else: form = OrgaForm() @@ -462,7 +451,7 @@ def editorganization(request, orga_id): orga.name = data["name"] orga.userlimit = data["users"] orga.save() - return redirect("/organizations/") + return redirect(reverse("organizations")) else: form = OrgaForm(initial={ "name": orga.name, "users": orga.userlimit }) @@ -480,9 +469,6 @@ def makedevice(request): device_organization = request.POST.get("organization", "") device_model = request.POST.get("model", "") - if not request.user.is_superuser: - return redirect("/devices/") - if not device_serial: orga = Organization.objects.all() models = Model.objects.all() @@ -526,7 +512,7 @@ def makedevice(request): changed = timezone.now() ) - return redirect("/devices/") + return redirect(reverse("devices")) @receiver(post_save, sender=settings.AUTH_USER_MODEL) def createUserStatus(sender, instance, created, **kwargs): diff --git a/templates/base.html b/templates/base.html index 3cbb672..884f348 100644 --- a/templates/base.html +++ b/templates/base.html @@ -40,30 +40,30 @@
@@ -85,7 +85,7 @@ diff --git a/templates/registration/add_user.html b/templates/registration/add_user.html new file mode 100644 index 0000000..4de86f9 --- /dev/null +++ b/templates/registration/add_user.html @@ -0,0 +1,14 @@ +{% load i18n %}{% autoescape off %} +{% blocktrans %}You're receiving this email because a user account has been created for you at {{ site_name }}.{% endblocktrans %} + +{% trans "Please go to the following page and choose a new password:" %} +{% block reset_link %} +{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %} +{% endblock %} +{% trans "Your username is:" %} {{ user.get_username }} + +{% trans "Thanks for using our site!" %} + +{% blocktrans %}The {{ site_name }} team{% endblocktrans %} + +{% endautoescape %}