@paroicms/server
Version:
The ParoiCMS server
53 lines • 2.06 kB
JavaScript
import { ApiError } from "@paroicms/public-server-lib";
import { type } from "arktype";
import { getVerifiedAccountFromToken, loginByPlatformToken, loginUser, } from "../auth/auth.service.js";
export async function loginController(siteContext, httpContext, _routeParams) {
const defaultLanguage = siteContext.status === "migration"
? (siteContext.deprecatedSiteSchema.languages[0] ?? "en")
: siteContext.siteSchema.defaultLanguage;
const loginInput = formatLoginAction(httpContext.req.body);
if (loginInput.action === "loginWithPlatformToken") {
return await loginByPlatformToken(siteContext, {
token: loginInput.token,
defaultLanguage,
});
}
if (loginInput.action === "signIn") {
return await loginUser(siteContext, {
user: {
email: loginInput.email,
password: loginInput.password,
},
defaultLanguage,
});
}
return getVerifiedAccountFromToken(siteContext, {
token: loginInput.token,
defaultLanguage,
});
}
const LoginActionUrlQuery = type({
action: "string",
"email?": "string|undefined",
"password?": "string|undefined",
"token?": "string|undefined",
"+": "reject",
});
function formatLoginAction(val) {
const validated = LoginActionUrlQuery.assert(val);
const action = validated.action;
if (action === "signIn") {
if (!validated.email || !validated.password) {
throw new ApiError("Email and password are required for signIn action", 400);
}
return { action, email: validated.email, password: validated.password };
}
if (action === "verify" || action === "loginWithPlatformToken") {
if (!validated.token) {
throw new ApiError("Token is required for verify/loginWithPlatformToken action", 400);
}
return { action, token: validated.token };
}
throw new ApiError(`Invalid login action: ${action}`, 400);
}
//# sourceMappingURL=login.controller.js.map