@paroicms/server
Version:
The ParoiCMS server
82 lines • 3.13 kB
JavaScript
import { ApiError } from "@paroicms/public-server-lib";
import { type } from "arktype";
import { getVerifiedAccountFromToken, loginByPlatformToken, loginLocalUser, } from "../auth/auth.service.js";
import { recordEvent } from "../event-log/event-log.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") {
const result = await loginByPlatformToken(siteContext, {
token: loginInput.token,
defaultLanguage,
});
if ("loginMethod" in result && result.loginMethod) {
recordEvent(siteContext, {
eventType: "account.login",
actorId: result.id,
targetType: "account",
targetId: result.id,
eventData: {
accountId: result.id,
email: result.email,
loginMethod: result.loginMethod,
},
});
}
return result;
}
if (loginInput.action === "signIn") {
const result = await loginLocalUser(siteContext, {
user: {
email: loginInput.email,
password: loginInput.password,
},
defaultLanguage,
});
if ("loginMethod" in result && result.loginMethod) {
recordEvent(siteContext, {
eventType: "account.login",
actorId: result.id,
targetType: "account",
targetId: result.id,
eventData: {
accountId: result.id,
email: result.email,
loginMethod: result.loginMethod,
},
});
}
return result;
}
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