quick fix

This commit is contained in:
Sebastian 2026-02-24 21:27:24 +01:00
parent cadaddca1f
commit d07a5bd9a8
2 changed files with 63 additions and 20 deletions

View file

@ -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 {

View file

@ -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() {
</p>
</div>
{message.type === "success" && (
<div className="mb-8 space-y-6">
<div className="p-6 rounded-lg text-center bg-green-50 text-green-800 border border-green-200">
<div className="text-4xl mb-4">🎉</div>
<h2 className="text-xl font-bold mb-2">Klart!</h2>
<p>{message.text}</p>
</div>
{showBecomeMemberCta && (
<div className="bg-gray-50 p-6 rounded-lg border border-gray-200">
<h3 className="text-lg font-semibold text-gray-900 mb-2">
Du är inte medlem än
</h3>
<p className="text-gray-600 mb-4">
Vi hittade dig inte i vårt medlemsregister. Genom att bli
medlem i vBytes hjälper du oss att anordna fler och bättre
LAN!
</p>
<a
href="https://ebas.sverok.se/blimedlem/22393"
target="_blank"
rel="noreferrer"
className="w-full inline-flex justify-center py-3 px-4 border border-transparent rounded-md shadow-sm text-base font-medium text-white bg-gray-800 hover:bg-black focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-700"
>
Klicka här för att bli medlem i vBytes
</a>
</div>
)}
</div>
)}
<form onSubmit={handleSubmit} className="space-y-6">
<div className="grid grid-cols-1 gap-y-6 gap-x-4 sm:grid-cols-2">
<div className="sm:col-span-2">
@ -596,6 +649,11 @@ export default function RegisterPage() {
Jag godkänner att mina personuppgifter sparas och hanteras i
syfte för detta event.
</p>
{fieldErrors.hasApprovedGdpr && (
<p className="mt-1 text-xs text-red-600">
{fieldErrors.hasApprovedGdpr}
</p>
)}
</div>
</div>
</div>
@ -615,17 +673,6 @@ export default function RegisterPage() {
</div>
)}
{showBecomeMemberCta && message.type === "success" && (
<a
href="https://ebas.sverok.se/blimedlem/22393"
target="_blank"
rel="noreferrer"
className="w-full inline-flex justify-center py-3 px-4 border border-transparent rounded-md shadow-sm text-base font-medium text-white bg-gray-800 hover:bg-black focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-700"
>
Klicka här för att bli medlem i vBytes
</a>
)}
<div className="pt-6">
<button
type="submit"