Merge branch 'main' of https://git.vbytes.se/PmP/vbytes-lan-registration
This commit is contained in:
commit
0dc3d05c68
4 changed files with 33 additions and 17 deletions
17
Caddyfile
Normal file
17
Caddyfile
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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": ""
|
||||||
|
|
|
||||||
|
|
@ -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__"
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue