@opengis/fastify-table
Version:
core-plugins
47 lines (46 loc) • 1.92 kB
JavaScript
import config from "../../../../config.js";
import pgClients from "../../pg/pgClients.js";
import logger from "../../logger/getLogger.js";
import verifyPassword from "./verifyPassword.js";
import authorizeUser from "./authorizeUser.js";
export default async function loginUser(req, reply) {
const { username, password } = (req.method === "POST" ? req.body : req.query) || {};
const { pg = pgClients.client } = req;
if (!config.pg) {
return req.method === "GET"
? reply.status(302).redirect("/login?confirm=wrong_pass&message=empty pg")
: reply.status(400).send({ error: "empty pg", code: 400 });
}
if (!config.redis) {
return req.method === "GET"
? reply
.status(302)
.redirect("/login?confirm=wrong_pass&message=empty redis")
: reply.status(400).send({ error: "empty redis", code: 400 });
}
const { user, message = "invalid user" } = (await verifyPassword({
pg,
username,
password,
})) || {};
if (!user) {
return req.method === "GET"
? reply
.status(302)
.redirect(`/login?confirm=wrong_pass&message=${message}`)
: reply.status(400).send({ error: message, code: 400 });
}
if (!user && (req.query?.username || req.body?.username)) {
return req.method === "GET"
? reply
.status(302)
.redirect(`/login?confirm=wrong_pass&message=${message}`)
: reply.status(400).send({ error: message, code: 400 });
}
logger.metrics("user.login");
const authType = "creds-" + (user.user_type === "admin" ? "admin" : "user");
const result = await authorizeUser(user, req, authType); // creds-admin / creds-admin
return req.method === "GET"
? reply.status(302).redirect(result)
: reply.status(200).send(result);
}