import {action, cache, redirect} from "@solidjs/router";
import {validate} from "email-validator";
import * as db from "../../../database.js";
import * as auth from "../../../auth.js";
import {deleteCookie, getCookie} from "vinxi/http";
export const signUp = action(async (formData) => {
"use server";
const email = formData.get("email");
if (email && validate(email)) {
const user = await db.getUserByEmail(email);
if (user) {
return new Error("Email address already in use.");
} else {
const code = auth.randomCode();
// send email code
const verifyState = auth.encryptPayload({email, code, intent: "signup"});
return redirect(`/verify?state=${verifyState}`);
}
} else {
return new Error("Invalid email address.");
}
}, "sign-up");
export const checkSession = cache(async () => {
"use server";
const sessionCookie = getCookie("session");
if (sessionCookie) {
try {
const sessionData = auth.decryptPayload(sessionCookie);
if (sessionData.state === auth.SessionState.Authenticated && sessionData.userId) {
const user = await db.getUserById(sessionData.userId);
if (user) {
return redirect("/app");
}
}
throw new Error();
} catch {
deleteCookie("session");
}
}
}, "check-session");
import {action, cache, redirect} from "@solidjs/router";
import {validate} from "email-validator";
import * as db from "../../../database.js";
import * as auth from "../../../auth.js";
import {deleteCookie, getCookie} from "vinxi/http";
export const signUp = action(async (formData) => {
"use server";
const email = formData.get("email");
if (email && validate(email)) {
const user = await db.getUserByEmail(email);
if (user) {
return new Error("Email address already in use.");
} else {
const code = auth.randomCode();
// send email code
const verifyState = auth.encryptPayload({email, code, intent: "signup"});
return redirect(`/verify?state=${verifyState}`);
}
} else {
return new Error("Invalid email address.");
}
}, "sign-up");
export const checkSession = cache(async () => {
"use server";
const sessionCookie = getCookie("session");
if (sessionCookie) {
try {
const sessionData = auth.decryptPayload(sessionCookie);
if (sessionData.state === auth.SessionState.Authenticated && sessionData.userId) {
const user = await db.getUserById(sessionData.userId);
if (user) {
return redirect("/app");
}
}
throw new Error();
} catch {
deleteCookie("session");
}
}
}, "check-session");