Files
linkwarden/lib/client/sendLoginRequest.ts
T
2024-01-12 15:57:49 -05:00

57 lines
1.3 KiB
TypeScript

import { Capacitor, CapacitorHttp } from "@capacitor/core";
import { signIn } from "next-auth/react";
interface FormData {
baseURL: string;
username: string;
password: string;
}
export default async function sendLoginRequest(form: FormData) {
if (Capacitor.isNativePlatform()) {
const csrfToken = await getCsrfToken(form.baseURL);
const data = {
username: form.username,
password: form.password,
redirect: false,
csrfToken: csrfToken,
callbackUrl: `${form.baseURL}/login`,
json: true,
};
const formBody = Object.entries(data)
.map(
([key, value]) =>
`${encodeURIComponent(key)}=${encodeURIComponent(value as any)}`
)
.join("&");
return await CapacitorHttp.request({
url: form.baseURL + "/api/v1/auth/callback/credentials",
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
data: formBody,
});
} else {
const response = await signIn("credentials", {
username: form.username,
password: form.password,
redirect: false,
});
return response;
}
}
export async function getCsrfToken(url: string) {
const token = await CapacitorHttp.request({
url: `${url}/api/v1/auth/csrf`,
method: "GET",
});
const { csrfToken } = token.data;
return csrfToken;
}