UNPKG

@paroicms/server

Version:
82 lines 3.13 kB
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