This commit is contained in:
Kruille 2026-02-23 22:09:40 +01:00
commit 0dc3d05c68
4 changed files with 33 additions and 17 deletions

17
Caddyfile Normal file
View file

@ -0,0 +1,17 @@
lan.vbytes.se {
reverse_proxy localhost:5000
log {
output file /var/log/caddy/access.log
}
encode gzip zstd
header {
Permissions-Policy interest-cohort=()
Strict-Transport-Security max-age=31536000;
X-Content-Type-Options nosniff
X-Frame-Options DENY
Referrer-Policy no-referrer-when-downgrade
}
}

View file

@ -14,7 +14,7 @@
"VbytesRelay": { "VbytesRelay": {
"BaseUrl": "https://api.lan.vbytes.se", "BaseUrl": "https://api.lan.vbytes.se",
"ParticipantRegisterPath": "/api/participant", "ParticipantRegisterPath": "/api/participant",
"VolunteerRegisterPath": "/api/volunteer/register", "VolunteerRegisterPath": "/api/volunteer",
"ApiKeyHeaderName": "X-Api-Key", "ApiKeyHeaderName": "X-Api-Key",
"ApiKey": "", "ApiKey": "",
"ClientCertificatePfxPath": "" "ClientCertificatePfxPath": ""

View file

@ -11,7 +11,7 @@
"VbytesRelay": { "VbytesRelay": {
"BaseUrl": "https://api.lan.vbytes.se", "BaseUrl": "https://api.lan.vbytes.se",
"ParticipantRegisterPath": "/api/participant", "ParticipantRegisterPath": "/api/participant",
"VolunteerRegisterPath": "/api/volunteer/register", "VolunteerRegisterPath": "/api/volunteer",
"ApiKeyHeaderName": "X-Api-Key", "ApiKeyHeaderName": "X-Api-Key",
"ApiKey": "__SET_IN_USER_SECRETS__", "ApiKey": "__SET_IN_USER_SECRETS__",
"ClientCertificatePfxPath": "__SET_IN_USER_SECRETS__" "ClientCertificatePfxPath": "__SET_IN_USER_SECRETS__"

View file

@ -4,7 +4,7 @@ import { useEffect, useState } from "react";
import Image from "next/image"; import Image from "next/image";
import Link from "next/link"; import Link from "next/link";
import { useRouter } from "next/navigation"; import router from "next/router";
interface EventContent { interface EventContent {
registrationEnabled: boolean; registrationEnabled: boolean;
@ -29,7 +29,6 @@ const isValidMobileNumber = (value: string) =>
/^07\d{8}$/.test(normalizeMobileNumber(value)); /^07\d{8}$/.test(normalizeMobileNumber(value));
export default function RegisterPage() { export default function RegisterPage() {
const router = useRouter();
const [content, setContent] = useState<EventContent | null>(null); const [content, setContent] = useState<EventContent | null>(null);
const [formData, setFormData] = useState({ const [formData, setFormData] = useState({
firstName: "", firstName: "",
@ -168,7 +167,7 @@ export default function RegisterPage() {
setShowBecomeMemberCta(false); setShowBecomeMemberCta(false);
setIsSubmitting(true); setIsSubmitting(true);
setMessage({ type: "info", text: "Processing your registration..." }); setMessage({ type: "info", text: "Behandlar din anmälan..." });
try { try {
// Returns Ok (200) if NOT registered, Conflict (409) if registered // Returns Ok (200) if NOT registered, Conflict (409) if registered
@ -179,7 +178,7 @@ export default function RegisterPage() {
if (checkRes.status === 409) { if (checkRes.status === 409) {
setMessage({ setMessage({
type: "error", type: "error",
text: "This SSN is already registered for the LAN.", text: "Detta personnummer är redan registrerat för LAN:et.",
}); });
setIsSubmitting(false); setIsSubmitting(false);
return; return;
@ -218,7 +217,7 @@ export default function RegisterPage() {
if (response.ok) { if (response.ok) {
setMessage({ setMessage({
type: "success", type: "success",
text: "Registration complete! You are now registered for the LAN.", text: "Registreringen är klar! Du är nu anmäld till LAN:et.",
}); });
setShowBecomeMemberCta(!isMember); setShowBecomeMemberCta(!isMember);
@ -229,14 +228,14 @@ export default function RegisterPage() {
const errorData = await response.json(); const errorData = await response.json();
setMessage({ setMessage({
type: "error", type: "error",
text: errorData.message || "Event registration failed.", text: errorData.message || "Registreringen misslyckades.",
}); });
} }
} catch (error) { } catch (error) {
console.error("Registration error:", error); console.error("Registration error:", error);
setMessage({ setMessage({
type: "error", type: "error",
text: "A connection error occurred. Please check your internet and try again.", text: "Ett anslutningsfel uppstod. Kontrollera internet och försök igen.",
}); });
} finally { } finally {
setIsSubmitting(false); setIsSubmitting(false);
@ -269,7 +268,7 @@ export default function RegisterPage() {
/> />
</div> </div>
<div className="text-center mb-10"> <div className="text-center mb-10">
<h1 className="text-3xl font-bold text-gray-900">Lan Registrering</h1> <h1 className="text-3xl font-bold text-gray-900">LAN-registrering</h1>
<p className="mt-2 text-gray-600"> <p className="mt-2 text-gray-600">
Vänligen fyll i detta formulär för att anmäla dig till lanet. Vänligen fyll i detta formulär för att anmäla dig till lanet.
</p> </p>
@ -399,7 +398,7 @@ export default function RegisterPage() {
htmlFor="email" htmlFor="email"
className="block text-sm font-medium text-gray-700" className="block text-sm font-medium text-gray-700"
> >
Email E-post
</label> </label>
<input <input
type="email" type="email"
@ -473,7 +472,7 @@ export default function RegisterPage() {
htmlFor="guardianEmail" htmlFor="guardianEmail"
className="block text-sm font-medium text-gray-700" className="block text-sm font-medium text-gray-700"
> >
Vårdnadshavares Email * Vårdnadshavares E-post *
</label> </label>
<input <input
type="email" type="email"
@ -493,7 +492,7 @@ export default function RegisterPage() {
<div className="sm:col-span-2 pt-4 border-t border-gray-100 mt-4"> <div className="sm:col-span-2 pt-4 border-t border-gray-100 mt-4">
<h3 className="text-lg font-medium text-gray-900 mb-4"> <h3 className="text-lg font-medium text-gray-900 mb-4">
Yttrligare uppgifter Ytterligare uppgifter
</h3> </h3>
</div> </div>
@ -575,11 +574,11 @@ export default function RegisterPage() {
htmlFor="hasApprovedGdpr" htmlFor="hasApprovedGdpr"
className="font-medium text-gray-700" className="font-medium text-gray-700"
> >
GDPR godkännande * GDPR-godkännande *
</label> </label>
<p className="text-gray-500"> <p className="text-gray-500">
Jag Godkänner att min personliga uppgifter sparas och Jag godkänner att mina personuppgifter sparas och hanteras i
hanteras i syfte för detta event. syfte för detta event.
</p> </p>
</div> </div>
</div> </div>
@ -617,7 +616,7 @@ export default function RegisterPage() {
disabled={isSubmitting} disabled={isSubmitting}
className="w-full flex justify-center py-3 px-4 border border-transparent rounded-md shadow-sm text-base font-medium text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 disabled:bg-blue-400" className="w-full flex justify-center py-3 px-4 border border-transparent rounded-md shadow-sm text-base font-medium text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 disabled:bg-blue-400"
> >
{isSubmitting ? "Registering..." : "Register for LAN"} {isSubmitting ? "Registrerar..." : "Anmäl dig till LAN"}
</button> </button>
</div> </div>
</form> </form>