Require login by default
Django CI/CD / test (push) Failing after 1m1s Details
Django CI/CD / build-and-push (push) Has been skipped Details

This commit is contained in:
Lukáš Kucharczyk 2024-02-09 22:03:18 +01:00
parent d02a60675f
commit 081b8a92de
Signed by: lukas
SSH Key Fingerprint: SHA256:vMuSwvwAvcT6htVAioMP7rzzwMQNi3roESyhv+nAxeg
6 changed files with 52 additions and 1 deletions

View File

@ -2,6 +2,7 @@
## New ## New
* Render notes as Markdown * Render notes as Markdown
* Require login by default
## Improved ## Improved
* mark refunded purchases red on game overview * mark refunded purchases red on game overview

View File

@ -866,6 +866,10 @@ select {
margin-top: 1rem; margin-top: 1rem;
} }
.mb-8 {
margin-bottom: 2rem;
}
.block { .block {
display: block; display: block;
} }

View File

@ -0,0 +1,21 @@
{% extends "base.html" %}
{% load static %}
{% block title %}
Login
{% endblock title %}
{% block content %}
<h2 class="text-3xl text-white mb-8 mx-auto text-center">Please log in to continue</h2>
<form method="post">
<table class="mx-auto">
{% csrf_token %}
{{ form.as_table }}
<tr>
<td></td>
<td>
<input type="submit" value="Login" />
</td>
</tr>
</form>
</table>
{% endblock content %}

View File

@ -1,6 +1,7 @@
from datetime import datetime from datetime import datetime
from typing import Any, Callable from typing import Any, Callable
import re
from django.contrib.auth.decorators import login_required
from django.db.models import ( from django.db.models import (
Avg, Avg,
@ -53,6 +54,7 @@ def stats_dropdown_year_range(request):
return result return result
@login_required
def add_session(request, purchase_id=None): def add_session(request, purchase_id=None):
context = {} context = {}
initial = {"timestamp_start": timezone.now()} initial = {"timestamp_start": timezone.now()}
@ -101,6 +103,7 @@ def use_custom_redirect(
return wrapper return wrapper
@login_required
@use_custom_redirect @use_custom_redirect
def edit_session(request, session_id=None): def edit_session(request, session_id=None):
context = {} context = {}
@ -114,6 +117,7 @@ def edit_session(request, session_id=None):
return render(request, "add_session.html", context) return render(request, "add_session.html", context)
@login_required
@use_custom_redirect @use_custom_redirect
def edit_purchase(request, purchase_id=None): def edit_purchase(request, purchase_id=None):
context = {} context = {}
@ -128,6 +132,7 @@ def edit_purchase(request, purchase_id=None):
return render(request, "add_purchase.html", context) return render(request, "add_purchase.html", context)
@login_required
@use_custom_redirect @use_custom_redirect
def edit_game(request, game_id=None): def edit_game(request, game_id=None):
context = {} context = {}
@ -141,6 +146,7 @@ def edit_game(request, game_id=None):
return render(request, "add.html", context) return render(request, "add.html", context)
@login_required
def view_game(request, game_id=None): def view_game(request, game_id=None):
game = Game.objects.get(id=game_id) game = Game.objects.get(id=game_id)
nongame_related_purchases_prefetch = Prefetch( nongame_related_purchases_prefetch = Prefetch(
@ -196,6 +202,7 @@ def view_game(request, game_id=None):
return render(request, "view_game.html", context) return render(request, "view_game.html", context)
@login_required
@use_custom_redirect @use_custom_redirect
def edit_platform(request, platform_id=None): def edit_platform(request, platform_id=None):
context = {} context = {}
@ -209,6 +216,7 @@ def edit_platform(request, platform_id=None):
return render(request, "add.html", context) return render(request, "add.html", context)
@login_required
@use_custom_redirect @use_custom_redirect
def edit_edition(request, edition_id=None): def edit_edition(request, edition_id=None):
context = {} context = {}
@ -233,6 +241,7 @@ def related_purchase_by_edition(request):
return render(request, "partials/related_purchase_field.html", {"form": form}) return render(request, "partials/related_purchase_field.html", {"form": form})
@login_required
def clone_session_by_id(session_id: int) -> Session: def clone_session_by_id(session_id: int) -> Session:
session = get_object_or_404(Session, id=session_id) session = get_object_or_404(Session, id=session_id)
clone = session clone = session
@ -244,6 +253,7 @@ def clone_session_by_id(session_id: int) -> Session:
return clone return clone
@login_required
@use_custom_redirect @use_custom_redirect
def new_session_from_existing_session(request, session_id: int, template: str = ""): def new_session_from_existing_session(request, session_id: int, template: str = ""):
session = clone_session_by_id(session_id) session = clone_session_by_id(session_id)
@ -256,6 +266,7 @@ def new_session_from_existing_session(request, session_id: int, template: str =
return redirect("list_sessions") return redirect("list_sessions")
@login_required
@use_custom_redirect @use_custom_redirect
def end_session(request, session_id: int, template: str = ""): def end_session(request, session_id: int, template: str = ""):
session = get_object_or_404(Session, id=session_id) session = get_object_or_404(Session, id=session_id)
@ -276,6 +287,7 @@ def end_session(request, session_id: int, template: str = ""):
# return redirect("list_sessions") # return redirect("list_sessions")
@login_required
def list_sessions( def list_sessions(
request, request,
filter="", filter="",
@ -327,6 +339,7 @@ def list_sessions(
return render(request, "list_sessions.html", context) return render(request, "list_sessions.html", context)
@login_required
def stats(request, year: int = 0): def stats(request, year: int = 0):
selected_year = request.GET.get("year") selected_year = request.GET.get("year")
if selected_year: if selected_year:
@ -544,6 +557,7 @@ def stats(request, year: int = 0):
return render(request, "stats.html", context) return render(request, "stats.html", context)
@login_required
def add_purchase(request, edition_id=None): def add_purchase(request, edition_id=None):
context = {} context = {}
initial = {"date_purchased": timezone.now()} initial = {"date_purchased": timezone.now()}
@ -579,6 +593,7 @@ def add_purchase(request, edition_id=None):
return render(request, "add_purchase.html", context) return render(request, "add_purchase.html", context)
@login_required
def add_game(request): def add_game(request):
context = {} context = {}
form = GameForm(request.POST or None) form = GameForm(request.POST or None)
@ -597,6 +612,7 @@ def add_game(request):
return render(request, "add_game.html", context) return render(request, "add_game.html", context)
@login_required
def add_edition(request, game_id=None): def add_edition(request, game_id=None):
context = {} context = {}
if request.method == "POST": if request.method == "POST":
@ -631,6 +647,7 @@ def add_edition(request, game_id=None):
return render(request, "add_edition.html", context) return render(request, "add_edition.html", context)
@login_required
def add_platform(request): def add_platform(request):
context = {} context = {}
form = PlatformForm(request.POST or None) form = PlatformForm(request.POST or None)
@ -643,6 +660,7 @@ def add_platform(request):
return render(request, "add.html", context) return render(request, "add.html", context)
@login_required
def add_device(request): def add_device(request):
context = {} context = {}
form = DeviceForm(request.POST or None) form = DeviceForm(request.POST or None)
@ -655,5 +673,6 @@ def add_device(request):
return render(request, "add.html", context) return render(request, "add.html", context)
@login_required
def index(request): def index(request):
return redirect("list_sessions_recent") return redirect("list_sessions_recent")

View File

@ -67,6 +67,9 @@ if DEBUG:
DEBUG_TOOLBAR_CONFIG = {"ROOT_TAG_EXTRA_ATTRS": "hx-preserve"} DEBUG_TOOLBAR_CONFIG = {"ROOT_TAG_EXTRA_ATTRS": "hx-preserve"}
ROOT_URLCONF = "timetracker.urls" ROOT_URLCONF = "timetracker.urls"
LOGIN_URL = "/login/"
LOGIN_REDIRECT_URL = "/"
LOGOUT_REDIRECT_URL = "/login/"
TEMPLATES = [ TEMPLATES = [
{ {

View File

@ -15,6 +15,7 @@ Including another URLconf
""" """
from django.conf import settings from django.conf import settings
from django.contrib import admin from django.contrib import admin
from django.contrib.auth import views as auth_views
from django.urls import include, path from django.urls import include, path
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from django.views.generic import RedirectView from django.views.generic import RedirectView
@ -22,6 +23,8 @@ from graphene_django.views import GraphQLView
urlpatterns = [ urlpatterns = [
path("", RedirectView.as_view(url="/tracker")), path("", RedirectView.as_view(url="/tracker")),
path("login/", auth_views.LoginView.as_view(), name="login"),
path("logout/", auth_views.LogoutView.as_view(), name="logout"),
path("tracker/", include("games.urls")), path("tracker/", include("games.urls")),
path("graphql", csrf_exempt(GraphQLView.as_view(graphiql=True))), path("graphql", csrf_exempt(GraphQLView.as_view(graphiql=True))),
] ]