// @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"); /** * # 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 * * @returns {Promise} new user auth object payload */ module.exports = async function addMariadbUser({ userId }) { 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 }); await NO_DB_HANDLER( `CREATE USER IF NOT EXISTS '${username}'@'127.0.0.1' IDENTIFIED BY '${password}' REQUIRE SSL` ); const updateUser = await DB_HANDLER( `UPDATE users SET mariadb_user = ?, mariadb_host = '127.0.0.1', mariadb_pass = ? WHERE id = ?`, [username, encryptedPassword, userId] ); 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", }); console.log(`User ${userId} SQL credentials successfully added.`); } catch (/** @type {any} */ error) { console.log( `Error in adding SQL user in 'addMariadbUser' function =>`, error.message ); } }; //////////////////////////////////////////////// //////////////////////////////////////////////// ////////////////////////////////////////////////