From d07a5bd9a84b587bb1637746f4bc5c38252c059b Mon Sep 17 00:00:00 2001
From: Sebastian
Date: Tue, 24 Feb 2026 21:27:24 +0100
Subject: [PATCH] quick fix
---
Caddyfile | 6 +-
src/Web/lan-frontend/app/register/page.tsx | 77 +++++++++++++++++-----
2 files changed, 63 insertions(+), 20 deletions(-)
diff --git a/Caddyfile b/Caddyfile
index 9103411..cbdbfcc 100644
--- a/Caddyfile
+++ b/Caddyfile
@@ -1,10 +1,6 @@
-anmalan.vbytes.se {
+anmalan.vbytes.se, xn--anmlan-dua.vbytes.se {
reverse_proxy localhost:5000
- log {
- output file /var/log/caddy/access.log
- }
-
encode gzip zstd
header {
diff --git a/src/Web/lan-frontend/app/register/page.tsx b/src/Web/lan-frontend/app/register/page.tsx
index 5ebb383..991f80e 100644
--- a/src/Web/lan-frontend/app/register/page.tsx
+++ b/src/Web/lan-frontend/app/register/page.tsx
@@ -14,8 +14,19 @@ interface EventContent {
const normalizeSsn = (value: string) =>
value.replace(/[\s\-+]/g, "").replace(/\D/g, "");
-const hasValidSsnLength = (value: string) =>
- value.length === 10 || value.length === 12;
+
+const isValidSsnFormat = (value: string) => {
+ if (!/^\d{12}$/.test(value)) return false;
+ const month = parseInt(value.substring(4, 6));
+ const day = parseInt(value.substring(6, 8));
+ return month >= 1 && month <= 12 && day >= 1 && day <= 31;
+};
+
+const getAgeFromSsn = (value: string) => {
+ const birthYear = parseInt(value.substring(0, 4));
+ const currentYear = new Date().getFullYear();
+ return currentYear - birthYear;
+};
const isValidEmail = (value: string) =>
/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
const normalizeMobileNumber = (value: string) => {
@@ -119,8 +130,15 @@ export default function RegisterPage() {
if (!normalizedSsn) {
nextFieldErrors.ssn = "Personnummer krävs för registrering.";
- } else if (!hasValidSsnLength(normalizedSsn)) {
- nextFieldErrors.ssn = "Personnummer måste vara 10 eller 12 siffror.";
+ } else if (!isValidSsnFormat(normalizedSsn)) {
+ nextFieldErrors.ssn = "Ange ett giltigt personnummer (ÅÅÅÅMMDDXXXX).";
+ } else {
+ const age = getAgeFromSsn(normalizedSsn);
+ if (age < 0) {
+ nextFieldErrors.ssn = "Personnummer kan inte vara i framtiden.";
+ } else if (age >= 100) {
+ nextFieldErrors.ssn = "Du är för gammal för att registrera dig.";
+ }
}
if (!trimmedFirstName)
@@ -155,6 +173,10 @@ export default function RegisterPage() {
nextFieldErrors.email = "Din e-postadress är ogiltig.";
}
+ if (!formData.hasApprovedGdpr) {
+ nextFieldErrors.hasApprovedGdpr = "Du måste godkänna GDPR för att anmäla dig.";
+ }
+
if (Object.keys(nextFieldErrors).length > 0) {
setFieldErrors(nextFieldErrors);
setMessage({
@@ -275,6 +297,37 @@ export default function RegisterPage() {
+ {message.type === "success" && (
+
+
+
🎉
+
Klart!
+
{message.text}
+
+
+ {showBecomeMemberCta && (
+
+ )}
+
+ )}
+