quick fix
This commit is contained in:
parent
cadaddca1f
commit
d07a5bd9a8
2 changed files with 63 additions and 20 deletions
|
|
@ -1,10 +1,6 @@
|
||||||
anmalan.vbytes.se {
|
anmalan.vbytes.se, xn--anmlan-dua.vbytes.se {
|
||||||
reverse_proxy localhost:5000
|
reverse_proxy localhost:5000
|
||||||
|
|
||||||
log {
|
|
||||||
output file /var/log/caddy/access.log
|
|
||||||
}
|
|
||||||
|
|
||||||
encode gzip zstd
|
encode gzip zstd
|
||||||
|
|
||||||
header {
|
header {
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,19 @@ interface EventContent {
|
||||||
|
|
||||||
const normalizeSsn = (value: string) =>
|
const normalizeSsn = (value: string) =>
|
||||||
value.replace(/[\s\-+]/g, "").replace(/\D/g, "");
|
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) =>
|
const isValidEmail = (value: string) =>
|
||||||
/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
|
/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
|
||||||
const normalizeMobileNumber = (value: string) => {
|
const normalizeMobileNumber = (value: string) => {
|
||||||
|
|
@ -119,8 +130,15 @@ export default function RegisterPage() {
|
||||||
|
|
||||||
if (!normalizedSsn) {
|
if (!normalizedSsn) {
|
||||||
nextFieldErrors.ssn = "Personnummer krävs för registrering.";
|
nextFieldErrors.ssn = "Personnummer krävs för registrering.";
|
||||||
} else if (!hasValidSsnLength(normalizedSsn)) {
|
} else if (!isValidSsnFormat(normalizedSsn)) {
|
||||||
nextFieldErrors.ssn = "Personnummer måste vara 10 eller 12 siffror.";
|
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)
|
if (!trimmedFirstName)
|
||||||
|
|
@ -155,6 +173,10 @@ export default function RegisterPage() {
|
||||||
nextFieldErrors.email = "Din e-postadress är ogiltig.";
|
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) {
|
if (Object.keys(nextFieldErrors).length > 0) {
|
||||||
setFieldErrors(nextFieldErrors);
|
setFieldErrors(nextFieldErrors);
|
||||||
setMessage({
|
setMessage({
|
||||||
|
|
@ -275,6 +297,37 @@ export default function RegisterPage() {
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</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">
|
<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="grid grid-cols-1 gap-y-6 gap-x-4 sm:grid-cols-2">
|
||||||
<div className="sm:col-span-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
|
Jag godkänner att mina personuppgifter sparas och hanteras i
|
||||||
syfte för detta event.
|
syfte för detta event.
|
||||||
</p>
|
</p>
|
||||||
|
{fieldErrors.hasApprovedGdpr && (
|
||||||
|
<p className="mt-1 text-xs text-red-600">
|
||||||
|
{fieldErrors.hasApprovedGdpr}
|
||||||
|
</p>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -615,17 +673,6 @@ export default function RegisterPage() {
|
||||||
</div>
|
</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">
|
<div className="pt-6">
|
||||||
<button
|
<button
|
||||||
type="submit"
|
type="submit"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue