"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = handleMariadbUserGrants; const types_1 = require("../../../types"); const crud_1 = __importDefault(require("../../../utils/data-fetching/crud")); const grab_db_names_1 = __importDefault(require("../../../utils/grab-db-names")); const normalize_text_1 = __importDefault(require("../../../utils/normalize-text")); const dbHandler_1 = __importDefault(require("../../backend/dbHandler")); const handle_mariadb_user_grants_for_databases_1 = __importDefault(require("./handle-mariadb-user-grants-for-databases")); const revoke_all_existing_grants_1 = __importDefault(require("./revoke-all-existing-grants")); function handleMariadbUserGrants(_a) { return __awaiter(this, arguments, void 0, function* ({ accessedDatabases, grants, isAllDbsAccess, isAllGrants, user, updatedRecord, }) { const { userDbPrefix } = (0, grab_db_names_1.default)({ user }); /** * # Revoke All Existing Grants */ yield (0, revoke_all_existing_grants_1.default)({ updatedRecord, user }); /** * # Recreate Grants */ if (isAllGrants && isAllDbsAccess) { const grantAllPrivileges = yield (0, dbHandler_1.default)({ query: (0, normalize_text_1.default)(` GRANT ALL PRIVILEGES ON \ \`${userDbPrefix.replace(/\_/g, "\\_")}%\`.* TO \ '${updatedRecord.username}'@'${updatedRecord.host}' `), }); return { success: true }; } if (isAllDbsAccess && grants) { const isGrantsInalid = grants.find((g) => !types_1.UserSQLPermissions.includes(g)); if (isGrantsInalid) { return { msg: `grants is/are invalid!` }; } const grantQuery = (0, normalize_text_1.default)(` GRANT ${grants.join(",")} ON \`${userDbPrefix}%\`.* TO \ '${updatedRecord.username}'@'${updatedRecord.host}' `); const grantSpecificPrivilegesToAllDbs = yield (0, dbHandler_1.default)({ query: grantQuery, }); for (let t = 0; t < grants.length; t++) { const grant = grants[t]; const addGrant = yield (0, crud_1.default)({ action: "insert", table: "mariadb_user_privileges", data: { user_id: user.id, mariadb_user_id: updatedRecord.id, privilege: grant, }, }); } return { success: true }; } if (accessedDatabases === null || accessedDatabases === void 0 ? void 0 : accessedDatabases[0]) { const res = yield (0, handle_mariadb_user_grants_for_databases_1.default)({ accessedDatabases, updatedRecord, user, }); return res; } return {}; }); }