import { UserType } from "../../types"; import dbHandler from "./dbHandler"; import dsqlCrud from "../../utils/data-fetching/crud"; import { DSQL_DATASQUIREL_USERS, DsqlTables } from "../../types/dsql"; import decrypt from "../dsql/decrypt"; import createUserSQLUser from "../../utils/create-user-sql-user"; import grabUserMainSqlUserName from "../../utils/grab-user-main-sql-user-name"; type Params = { user: UserType; }; type Return = { fullName?: string; host?: string; username?: string; password?: string; }; export default async function grabMariadbMainUserForUser({ user, }: Params): Promise { const { fullName, host, username: mariaDBUsername, webHost, } = grabUserMainSqlUserName({ user }); const existingWebAppUser = (await dbHandler({ query: `SELECT * FROM mysql.user WHERE user=? AND host=?`, values: [mariaDBUsername, webHost], })) as any[]; if (!existingWebAppUser?.[0]) { return await createUserSQLUser(user); } else { const existingUserRecord = await dsqlCrud< DSQL_DATASQUIREL_USERS, (typeof DsqlTables)[number] >({ action: "get", table: "users", query: { query: { id: { value: String(user.id), }, }, }, }); const targetUser = ( existingUserRecord?.payload as DSQL_DATASQUIREL_USERS[] | undefined )?.[0]; if (!targetUser?.id) { return {}; } return { fullName, host, username: mariaDBUsername, password: decrypt({ encryptedString: targetUser.mariadb_pass || "", }), }; } }