diff --git a/rc_hip/rc_hip/settings.py b/rc_hip/rc_hip/settings.py index c602302..54412c7 100644 --- a/rc_hip/rc_hip/settings.py +++ b/rc_hip/rc_hip/settings.py @@ -155,3 +155,5 @@ EMAIL_USE_TLS = os.getenv("DJANGO_EMAIL_USE_TLS", 'true') in ('true', '1', 't') AUTH_USER_MODEL = "repapp_users.CustomUser" AUTHENTICATION_BACKENDS = [ "repapp_users.backends.EmailBackend", "django.contrib.auth.backends.ModelBackend"] + +LOGIN_REDIRECT_URL = '/guest/profile/' diff --git a/rc_hip/rc_hip/urls.py b/rc_hip/rc_hip/urls.py index e83b2f9..b0ce1c6 100644 --- a/rc_hip/rc_hip/urls.py +++ b/rc_hip/rc_hip/urls.py @@ -22,7 +22,6 @@ from django.conf.urls.static import static urlpatterns = [ path("", include("repapp.urls")), - path("", include("repapp_users.urls")), - path('users/', include('django.contrib.auth.urls')), + path('accounts/', include('django.contrib.auth.urls')), path('admin/', admin.site.urls), ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/rc_hip/repapp/templates/repapp/guest_profile.html b/rc_hip/repapp/templates/repapp/guest_profile.html new file mode 100644 index 0000000..b4d4bbc --- /dev/null +++ b/rc_hip/repapp/templates/repapp/guest_profile.html @@ -0,0 +1,28 @@ +{% extends "repapp/base.html" %} +{% block title %} + - Gast Daten +{% endblock title %} +{% block content %} +

Ihre Daten

+
+ + + + + + + + + + + + + + + + + + + +
eMail Adresse{{ guest.mail }}
Name{{ guest.name }}
Wohnort{{ guest.residence }}
Telefonnummer{{ guest.phone }}
+{% endblock content %} diff --git a/rc_hip/repapp/urls.py b/rc_hip/repapp/urls.py index f56ab76..5cddc8e 100644 --- a/rc_hip/repapp/urls.py +++ b/rc_hip/repapp/urls.py @@ -21,4 +21,6 @@ urlpatterns = [ views.register_device_final, name="register_device_final"), path("device//", views.device_view, name="view_device"), + path("guest/profile/", + views.profile, name="guest_profile"), ] diff --git a/rc_hip/repapp/views.py b/rc_hip/repapp/views.py index 1a4b75a..209e7fb 100644 --- a/rc_hip/repapp/views.py +++ b/rc_hip/repapp/views.py @@ -3,14 +3,19 @@ Views of RepApp. """ import datetime import os +import random +import string from hashlib import sha256 from django.views import generic from django.urls import reverse_lazy from django.shortcuts import get_object_or_404, render from django.http import HttpResponseRedirect +from django.core.exceptions import PermissionDenied from django.contrib import messages from django.core.mail import send_mail from django.template.loader import render_to_string +from django.contrib.auth.decorators import login_required +from repapp_users.models import CustomUser from .models import Cafe, Device, Guest, Organisator from .forms import RegisterDevice, RegisterGuest @@ -156,6 +161,7 @@ class RegisterGuestFormView(generic.edit.FormView): device = get_object_or_404(Device, identifier=device_identifier) name = form.cleaned_data['name'] + mail = self.kwargs['mail'] residence = form.cleaned_data['residence'] identifier = sha256( f'{name}{residence}{datetime.datetime.now()}'.encode('utf-8') @@ -165,13 +171,25 @@ class RegisterGuestFormView(generic.edit.FormView): name=name, phone=form.cleaned_data['phone'], residence=residence, - mail=self.kwargs['mail'], + mail=mail, ) guest.save() device.guest = guest device.save() + if not CustomUser.objects.filter(email=mail).exists(): + password = ''.join(random.choice(string.ascii_letters) + for i in range(10)) + user = CustomUser.objects.create_user( + username=name, + email=mail, + password=password) + user.save() + + print(f'{mail} {password}') + # TODO: send account creation email + send_confirmation_mails(device, guest, cafe, self.request) return HttpResponseRedirect( @@ -208,11 +226,38 @@ def register_device_final(request, cafe, device_identifier): ) +@login_required def device_view(request, device_identifier): + user = request.user + if not user: + raise PermissionDenied() + device = get_object_or_404(Device, identifier=device_identifier) + if not device.guest: + raise PermissionDenied() + + # TODO: Guests can only view their devices, Reparateur and Orga can view all devices. return render( request, "repapp/device_view.html", {"device": device}, ) + + +@login_required +def profile(request): + user = request.user + if not user: + raise PermissionDenied() + + guest = get_object_or_404(Guest, mail=user.email) + + return render( + request, + "repapp/guest_profile.html", + { + 'user': user, + 'guest': guest + } + ) diff --git a/rc_hip/repapp_users/forms.py b/rc_hip/repapp_users/forms.py deleted file mode 100644 index e69de29..0000000 diff --git a/rc_hip/repapp_users/migrations/0002_alter_customuser_options_alter_customuser_email.py b/rc_hip/repapp_users/migrations/0002_alter_customuser_options_alter_customuser_email.py new file mode 100644 index 0000000..bb1e189 --- /dev/null +++ b/rc_hip/repapp_users/migrations/0002_alter_customuser_options_alter_customuser_email.py @@ -0,0 +1,22 @@ +# Generated by Django 4.2 on 2023-04-23 11:56 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('repapp_users', '0001_initial'), + ] + + operations = [ + migrations.AlterModelOptions( + name='customuser', + options={'verbose_name': 'Benutzer', 'verbose_name_plural': 'Benutzer'}, + ), + migrations.AlterField( + model_name='customuser', + name='email', + field=models.EmailField(max_length=254, unique=True, verbose_name='eMail Adresse'), + ), + ] diff --git a/rc_hip/repapp_users/templates/login.html b/rc_hip/repapp_users/templates/login.html deleted file mode 100644 index f2307c7..0000000 --- a/rc_hip/repapp_users/templates/login.html +++ /dev/null @@ -1,33 +0,0 @@ -{% extends "repapp/base.html" %} -{% block content %} - {% if form.errors %}

Your username and password didn't match. Please try again.

{% endif %} - {% if next %} - {% if user.is_authenticated %} -

- Your account doesn't have access to this page. To proceed, - please login with an account that has access. -

- {% else %} -

Please login to see this page.

- {% endif %} - {% endif %} -
- {% csrf_token %} - - - - - - - - - -
{{ form.username.label_tag }}{{ form.username }}
{{ form.password.label_tag }}{{ form.password }}
- - -
- {# Assumes you setup the password_reset view in your URLconf #} -

- Lost password? -

-{% endblock %} diff --git a/rc_hip/repapp_users/templates/registration/login.html b/rc_hip/repapp_users/templates/registration/login.html new file mode 100644 index 0000000..c292974 --- /dev/null +++ b/rc_hip/repapp_users/templates/registration/login.html @@ -0,0 +1,13 @@ +{% extends "repapp/base.html" %} +{% load crispy_forms_tags %} +{% block title %} + - Gast Login +{% endblock title %} +{% block content %} +

Gast Login

+
+ {% csrf_token %} + {{ form|crispy }} + +
+{% endblock content %} diff --git a/rc_hip/repapp_users/urls.py b/rc_hip/repapp_users/urls.py deleted file mode 100644 index ad783e1..0000000 --- a/rc_hip/repapp_users/urls.py +++ /dev/null @@ -1,4 +0,0 @@ -from django.urls import path, include - -urlpatterns = [ -] diff --git a/rc_hip/repapp_users/views.py b/rc_hip/repapp_users/views.py deleted file mode 100644 index 91ea44a..0000000 --- a/rc_hip/repapp_users/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here.