From b7aaedba14340b1efea1812d5e8648fe196bbd8c Mon Sep 17 00:00:00 2001 From: sebivh Date: Mon, 20 Oct 2025 15:22:58 +0200 Subject: [PATCH] Added Authentication for Minecraft Server In this commit, a beautiful authentication method was added! It can be uses to authenticate SECURLY!!!! with the McFet Plugin! This is pretty USEFULL!!! --- fet2020/fet2020/settings.py | 4 +++ fet2020/fet2020/urls.py | 1 + fet2020/minecraft/__init__.py | 0 fet2020/minecraft/admin.py | 0 fet2020/minecraft/apps.py | 0 fet2020/minecraft/urls.py | 9 ++++++ fet2020/minecraft/views.py | 42 ++++++++++++++++++++++++++ fet2020/templates/minecraft/index.html | 21 +++++++++++++ 8 files changed, 77 insertions(+) create mode 100644 fet2020/minecraft/__init__.py create mode 100644 fet2020/minecraft/admin.py create mode 100644 fet2020/minecraft/apps.py create mode 100644 fet2020/minecraft/urls.py create mode 100644 fet2020/minecraft/views.py create mode 100644 fet2020/templates/minecraft/index.html diff --git a/fet2020/fet2020/settings.py b/fet2020/fet2020/settings.py index cb400926..68add289 100644 --- a/fet2020/fet2020/settings.py +++ b/fet2020/fet2020/settings.py @@ -17,6 +17,7 @@ env = environ.Env( ETHERPAD_HOST=(str, ""), ETHERPAD_GROUP=(str, ""), GALLERY_PATH=(str, "uploads/gallery"), + MC_MASTERPASSWORD=(str, ""), ) # Build paths inside the project like this: os.path.join(BASE_DIR, ...) @@ -396,3 +397,6 @@ THUMBNAIL_ALIASES = { "portrait": {"size": (200, 300), "crop": False}, }, } + +# Minecraft Auth +MC_MASTERPASSWORD = env("MC_MASTERPASSWORD") diff --git a/fet2020/fet2020/urls.py b/fet2020/fet2020/urls.py index 80df4f7e..55b2e883 100644 --- a/fet2020/fet2020/urls.py +++ b/fet2020/fet2020/urls.py @@ -40,6 +40,7 @@ urlpatterns = [ path("posts/", include("posts.urls")), path("rental/", include("rental.urls")), path("search/", include("search.urls")), + path("minecraft/", include("minecraft.urls")), path( "discord/", RedirectView.as_view(url="https://discord.com/invite/7qRuuMA"), diff --git a/fet2020/minecraft/__init__.py b/fet2020/minecraft/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/fet2020/minecraft/admin.py b/fet2020/minecraft/admin.py new file mode 100644 index 00000000..e69de29b diff --git a/fet2020/minecraft/apps.py b/fet2020/minecraft/apps.py new file mode 100644 index 00000000..e69de29b diff --git a/fet2020/minecraft/urls.py b/fet2020/minecraft/urls.py new file mode 100644 index 00000000..df72548a --- /dev/null +++ b/fet2020/minecraft/urls.py @@ -0,0 +1,9 @@ +from django.urls import path + +from . import views + +app_name = "Minecraft" + +urlpatterns = [ + path("", views.index, name="index"), +] diff --git a/fet2020/minecraft/views.py b/fet2020/minecraft/views.py new file mode 100644 index 00000000..f7b3d3ff --- /dev/null +++ b/fet2020/minecraft/views.py @@ -0,0 +1,42 @@ +import logging +from django.shortcuts import render +from authentications.decorators import authenticated_user +from django.conf import settings + + +logger = logging.getLogger(__name__) + + +# Function that generates a token depending on unsername and masterpassword +# The masterpassword must be 32 characters long! +def create_token(username, masterpassword): + + padded_username = username.ljust(32, ':') + + token = bytearray() + # xor connect with masterpassword to create token + for i in range(32): + token.append(ord(padded_username[i]) ^ ord(masterpassword[i])) + + str_token = token.hex() + return str_token + + +@authenticated_user +def index(request): + username = request.user + context = { + "mctoken": "", + "valid_master_pwd": True + } + + masterpassword = settings.MC_MASTERPASSWORD + + if len(masterpassword) != 32: + context["valid_master_pwd"] = False + logger.error("Masterpassword must be 32 characters long") + else: + token = create_token(str(username), masterpassword) + context["mctoken"] = token + + return render(request, "minecraft/index.html", context) diff --git a/fet2020/templates/minecraft/index.html b/fet2020/templates/minecraft/index.html new file mode 100644 index 00000000..4ee29a09 --- /dev/null +++ b/fet2020/templates/minecraft/index.html @@ -0,0 +1,21 @@ +{% extends 'base.html' %} + +{% load static %} + +{% block title %}Minecraft{% endblock %} + +{% block content %} +
+
+

Minecraft

+ + {% if valid_master_pwd %} +

Dein persömlicher Token für den Minecraft-Server:

+

{{ mctoken }}

+ {% else %} +

Ups... Das hat nicht geklappt!

+

Bitte informiere einen Admin!

+ {% endif %} +
+
+{% endblock %}