guest users
This commit is contained in:
parent
017410fa6b
commit
70c36a44f5
11 changed files with 114 additions and 43 deletions
|
|
@ -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/'
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
28
rc_hip/repapp/templates/repapp/guest_profile.html
Normal file
28
rc_hip/repapp/templates/repapp/guest_profile.html
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
{% extends "repapp/base.html" %}
|
||||
{% block title %}
|
||||
- Gast Daten
|
||||
{% endblock title %}
|
||||
{% block content %}
|
||||
<h1 class="mt-2">Ihre Daten</h1>
|
||||
<hr class="mt-0 mb-4">
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th scope="row">eMail Adresse</th>
|
||||
<td>{{ guest.mail }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">Name</th>
|
||||
<td>{{ guest.name }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">Wohnort</th>
|
||||
<td>{{ guest.residence }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">Telefonnummer</th>
|
||||
<td>{{ guest.phone }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{% endblock content %}
|
||||
|
|
@ -21,4 +21,6 @@ urlpatterns = [
|
|||
views.register_device_final, name="register_device_final"),
|
||||
path("device/<str:device_identifier>/",
|
||||
views.device_view, name="view_device"),
|
||||
path("guest/profile/",
|
||||
views.profile, name="guest_profile"),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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'),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
{% extends "repapp/base.html" %}
|
||||
{% block content %}
|
||||
{% if form.errors %}<p>Your username and password didn't match. Please try again.</p>{% endif %}
|
||||
{% if next %}
|
||||
{% if user.is_authenticated %}
|
||||
<p>
|
||||
Your account doesn't have access to this page. To proceed,
|
||||
please login with an account that has access.
|
||||
</p>
|
||||
{% else %}
|
||||
<p>Please login to see this page.</p>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<form method="post" action="{% url 'login' %}">
|
||||
{% csrf_token %}
|
||||
<table>
|
||||
<tr>
|
||||
<td>{{ form.username.label_tag }}</td>
|
||||
<td>{{ form.username }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ form.password.label_tag }}</td>
|
||||
<td>{{ form.password }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
<input type="submit" value="login">
|
||||
<input type="hidden" name="next" value="{{ next }}">
|
||||
</form>
|
||||
{# Assumes you setup the password_reset view in your URLconf #}
|
||||
<p>
|
||||
<a href="{% url 'password_reset' %}">Lost password?</a>
|
||||
</p>
|
||||
{% endblock %}
|
||||
13
rc_hip/repapp_users/templates/registration/login.html
Normal file
13
rc_hip/repapp_users/templates/registration/login.html
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{% extends "repapp/base.html" %}
|
||||
{% load crispy_forms_tags %}
|
||||
{% block title %}
|
||||
- Gast Login
|
||||
{% endblock title %}
|
||||
{% block content %}
|
||||
<h2>Gast Login</h2>
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
{{ form|crispy }}
|
||||
<button type="submit" class="btn btn-primary">Anmelden</button>
|
||||
</form>
|
||||
{% endblock content %}
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
from django.urls import path, include
|
||||
|
||||
urlpatterns = [
|
||||
]
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
||||
Reference in a new issue