// @ts-check const generator = require("generate-password"); const DB_HANDLER = require("../../utils/backend/global-db/DB_HANDLER"); const NO_DB_HANDLER = require("../../utils/backend/global-db/NO_DB_HANDLER"); const addDbEntry = require("./db/addDbEntry"); const encrypt = require("../dsql/encrypt"); const LOCAL_DB_HANDLER = require("../../utils/backend/global-db/LOCAL_DB_HANDLER"); /** * # Add Mariadb User * * @description this function adds a Mariadb user to the database server * * @param {object} params - parameters object * * @param {number | string} params.userId - invited user object * @param {boolean} [params.useLocal] * * @returns {Promise} new user auth object payload */ module.exports = async function addMariadbUser({ userId, useLocal }) { try { const defaultMariadbUserHost = process.env.DSQL_DB_HOST || "127.0.0.1"; const username = `dsql_user_${userId}`; const password = generator.generate({ length: 16, numbers: true, symbols: true, uppercase: true, exclude: "*#.'`\"", }); const encryptedPassword = encrypt({ data: password }); const createMariadbUsersQuery = `CREATE USER IF NOT EXISTS '${username}'@'127.0.0.1' IDENTIFIED BY '${password}'`; if (useLocal) { await LOCAL_DB_HANDLER(createMariadbUsersQuery); } else { await NO_DB_HANDLER(createMariadbUsersQuery); } const updateUserQuery = `UPDATE users SET mariadb_user = ?, mariadb_host = '127.0.0.1', mariadb_pass = ? WHERE id = ?`; const updateUserValues = [username, encryptedPassword, userId]; const updateUser = useLocal ? await LOCAL_DB_HANDLER(updateUserQuery, updateUserValues) : await DB_HANDLER(updateUserQuery, updateUserValues); const addMariadbUser = await addDbEntry({ tableName: "mariadb_users", data: { user_id: userId, username, host: defaultMariadbUserHost, password: encryptedPassword, primary: "1", grants: '[{"database":"*","table":"*","privileges":["ALL"]}]', }, dbContext: "Master", useLocal, }); console.log(`User ${userId} SQL credentials successfully added.`); } catch (/** @type {any} */ error) { console.log( `Error in adding SQL user in 'addMariadbUser' function =>`, error.message ); } }; //////////////////////////////////////////////// //////////////////////////////////////////////// ////////////////////////////////////////////////