From d586de0639615c12a99b88eb4af7545f4afc38f5 Mon Sep 17 00:00:00 2001 From: Benjamin Toby Date: Tue, 14 Jan 2025 00:01:02 +0100 Subject: [PATCH] Updates --- .../package-shared/functions/api/query/get.js | 15 +- .../api/social-login/handleSocialDb.js | 8 +- .../api/social-login/loginSocialUser.js | 5 +- .../functions/api/users/api-create-user.js | 6 +- .../functions/api/users/api-delete-user.js | 2 +- .../functions/api/users/api-get-user.js | 5 +- .../functions/api/users/api-login.js | 10 +- .../functions/api/users/api-reauth-user.js | 2 +- .../api/users/api-send-email-code.js | 6 +- .../functions/api/users/api-update-user.js | 2 +- .../functions/backend/db/addDbEntry.js | 6 +- .../functions/backend/db/deleteDbEntry.js | 3 +- .../functions/backend/db/runQuery.js | 2 - .../functions/backend/db/updateDbEntry.js | 3 +- .../functions/backend/dbHandler.js | 18 +- .../backend/fullAccessDbHandler.d.ts | 3 +- .../functions/backend/fullAccessDbHandler.js | 3 +- .../functions/backend/noDatabaseDbHandler.js | 2 +- .../functions/backend/varDatabaseDbHandler.js | 4 +- .../backend/varReadOnlyDatabaseDbHandler.d.ts | 3 +- .../backend/varReadOnlyDatabaseDbHandler.js | 3 +- dist/package-shared/shell/checkDb.js | 21 +- .../shell/createDbFromSchema.d.ts | 1 + .../shell/createDbFromSchema.js | 51 +--- dist/package-shared/shell/encodingUpdate.js | 5 +- .../shell/mariadb-users/handleGrants.d.ts | 6 +- .../mariadb-users/refreshUsersAndGrants.d.ts | 4 +- .../mariadb-users/refreshUsersAndGrants.js | 78 ++++--- .../shell/recoverMainJsonFromDb.js | 2 +- dist/package-shared/shell/tailwindWatch.js | 2 +- .../shell/updateDateTimestamps.js | 7 +- .../shell/updateDbSlugsForTableRecords.js | 3 +- dist/package-shared/shell/updateSSLUsers.js | 21 +- .../shell/utils/createTable.d.ts | 11 +- .../package-shared/shell/utils/createTable.js | 22 +- .../package-shared/shell/utils/dbHandler.d.ts | 4 +- dist/package-shared/shell/utils/dbHandler.js | 58 +---- .../package-shared/shell/utils/updateTable.js | 36 +-- .../shell/utils/varDatabaseDbHandler.d.ts | 5 +- .../shell/utils/varDatabaseDbHandler.js | 4 +- dist/package-shared/types/index.d.ts | 3 - .../utils/backend/global-db/DB_HANDLER.d.ts | 1 + .../utils/backend/global-db/DB_HANDLER.js | 28 +-- .../global-db/DSQL_USER_DB_HANDLER.d.ts | 6 +- .../backend/global-db/DSQL_USER_DB_HANDLER.js | 199 ++++++++-------- .../utils/backend/global-db/NO_DB_HANDLER.js | 15 +- .../backend/global-db/ROOT_DB_HANDLER.js | 16 +- .../package-shared/utils/backend/grabDbSSL.js | 3 + dist/utils/get-schema.js | 5 +- package-shared/functions/api/query/get.ts | 22 +- .../api/social-login/handleSocialDb.ts | 8 +- .../api/social-login/loginSocialUser.ts | 6 +- .../functions/api/users/api-create-user.ts | 6 +- .../functions/api/users/api-delete-user.ts | 2 +- .../functions/api/users/api-get-user.ts | 8 +- .../functions/api/users/api-login.ts | 10 +- .../functions/api/users/api-reauth-user.ts | 2 +- .../api/users/api-send-email-code.ts | 6 +- .../functions/api/users/api-update-user.ts | 2 +- .../functions/backend/db/addDbEntry.ts | 6 +- .../functions/backend/db/deleteDbEntry.ts | 3 +- .../functions/backend/db/runQuery.ts | 2 - .../functions/backend/db/updateDbEntry.ts | 3 +- package-shared/functions/backend/dbHandler.ts | 21 +- .../functions/backend/fullAccessDbHandler.ts | 3 - .../functions/backend/noDatabaseDbHandler.ts | 2 +- .../functions/backend/varDatabaseDbHandler.ts | 4 +- .../backend/varReadOnlyDatabaseDbHandler.ts | 3 - package-shared/shell/checkDb.ts | 18 +- package-shared/shell/createDbFromSchema.ts | 60 +---- package-shared/shell/encodingUpdate.ts | 5 +- .../shell/mariadb-users/handleGrants.ts | 6 +- .../mariadb-users/refreshUsersAndGrants.ts | 99 ++++---- package-shared/shell/recoverMainJsonFromDb.ts | 2 +- package-shared/shell/tailwindWatch.ts | 2 +- package-shared/shell/updateDateTimestamps.ts | 7 +- .../shell/updateDbSlugsForTableRecords.ts | 3 +- package-shared/shell/updateSSLUsers.ts | 18 +- package-shared/shell/utils/createTable.ts | 29 +-- package-shared/shell/utils/dbHandler.ts | 61 +---- package-shared/shell/utils/updateTable.ts | 38 ++- .../shell/utils/varDatabaseDbHandler.ts | 6 - package-shared/types/index.ts | 4 - .../utils/backend/global-db/DB_HANDLER.ts | 30 +-- .../backend/global-db/DSQL_USER_DB_HANDLER.ts | 219 ++++++++++-------- .../utils/backend/global-db/NO_DB_HANDLER.ts | 12 +- .../backend/global-db/ROOT_DB_HANDLER.ts | 17 +- package-shared/utils/backend/grabDbSSL.ts | 3 + package.json | 2 +- utils/get-schema.ts | 5 +- 90 files changed, 533 insertions(+), 960 deletions(-) diff --git a/dist/package-shared/functions/api/query/get.js b/dist/package-shared/functions/api/query/get.js index 816cb2d..aef2ec3 100644 --- a/dist/package-shared/functions/api/query/get.js +++ b/dist/package-shared/functions/api/query/get.js @@ -26,11 +26,6 @@ function apiGet(_a) { query.match(/^alter|^delete|information_schema|databases|^create/i)) { return { success: false, msg: "Wrong Input." }; } - /** - * Create new user folder and file - * - * @description Create new user folder and file - */ let results; try { let { result, error } = yield (0, runQuery_1.default)({ @@ -42,7 +37,6 @@ function apiGet(_a) { tableName, local: useLocal, }); - /** @type {import("../../../types").DSQL_TableSchemaType | undefined} */ let tableSchema; if (dbSchema) { const targetTable = dbSchema.tables.find((table) => table.tableName === tableName); @@ -63,7 +57,6 @@ function apiGet(_a) { if (result.error) throw new Error(result.error); results = result; - /** @type {import("../../../types").GetReturn} */ const resObject = { success: true, payload: results, @@ -71,12 +64,16 @@ function apiGet(_a) { }; return resObject; } - catch ( /** @type {any} */error) { + catch (error) { (0, serverError_1.default)({ component: "/api/query/get/lines-85-94", message: error.message, }); - return { success: false, payload: null, error: error.message }; + return { + success: false, + payload: null, + error: error.message, + }; } }); } diff --git a/dist/package-shared/functions/api/social-login/handleSocialDb.js b/dist/package-shared/functions/api/social-login/handleSocialDb.js index 5b33a95..8082102 100644 --- a/dist/package-shared/functions/api/social-login/handleSocialDb.js +++ b/dist/package-shared/functions/api/social-login/handleSocialDb.js @@ -27,7 +27,7 @@ const loginSocialUser_1 = __importDefault(require("./loginSocialUser")); function handleSocialDb(_a) { return __awaiter(this, arguments, void 0, function* ({ database, social_id, email, social_platform, payload, invitation, supEmail, additionalFields, useLocal, }) { try { - const existingSocialIdUserQuery = `SELECT * FROM users WHERE social_id = ? AND social_login='1' AND social_platform = ? `; + const existingSocialIdUserQuery = `SELECT * FROM datasquirel.users WHERE social_id = ? AND social_login='1' AND social_platform = ? `; const existingSocialIdUserValues = [ social_id.toString(), social_platform, @@ -56,7 +56,7 @@ function handleSocialDb(_a) { msg: "No Email Present", }; } - const existingEmailOnlyQuery = `SELECT * FROM users WHERE email='${finalEmail}'`; + const existingEmailOnlyQuery = `SELECT * FROM datasquirel.users WHERE email='${finalEmail}'`; let existingEmailOnly = yield (0, varDatabaseDbHandler_1.default)({ database: database ? database : "datasquirel", queryString: existingEmailOnlyQuery, @@ -69,7 +69,7 @@ function handleSocialDb(_a) { msg: "This Email is already taken", }; } - const foundUserQuery = `SELECT * FROM users WHERE email=? AND social_login='1' AND social_platform=? AND social_id=?`; + const foundUserQuery = `SELECT * FROM datasquirel.users WHERE email=? AND social_login='1' AND social_platform=? AND social_id=?`; const foundUserQueryValues = [finalEmail, social_platform, social_id]; const foundUser = yield (0, varDatabaseDbHandler_1.default)({ database: database ? database : "datasquirel", @@ -116,7 +116,7 @@ function handleSocialDb(_a) { */ yield (0, addMariadbUser_1.default)({ userId: newUser.insertId, useLocal }); } - const newUserQueriedQuery = `SELECT * FROM users WHERE id='${newUser.insertId}'`; + const newUserQueriedQuery = `SELECT * FROM datasquirel.users WHERE id='${newUser.insertId}'`; const newUserQueried = yield (0, varDatabaseDbHandler_1.default)({ database: database ? database : "datasquirel", queryString: newUserQueriedQuery, diff --git a/dist/package-shared/functions/api/social-login/loginSocialUser.js b/dist/package-shared/functions/api/social-login/loginSocialUser.js index 89bdf8d..d863c16 100644 --- a/dist/package-shared/functions/api/social-login/loginSocialUser.js +++ b/dist/package-shared/functions/api/social-login/loginSocialUser.js @@ -23,10 +23,11 @@ const varDatabaseDbHandler_1 = __importDefault(require("../../backend/varDatabas */ function loginSocialUser(_a) { return __awaiter(this, arguments, void 0, function* ({ user, social_platform, invitation, database, additionalFields, useLocal, }) { - const foundUserQuery = `SELECT * FROM users WHERE email=? AND social_id=? AND social_platform=?`; + const finalDbName = database ? database : "datasquirel"; + const foundUserQuery = `SELECT * FROM \`${finalDbName}\`.\`users\` WHERE email=? AND social_id=? AND social_platform=?`; const foundUserValues = [user.email, user.social_id, social_platform]; const foundUser = yield (0, varDatabaseDbHandler_1.default)({ - database: database ? database : "datasquirel", + database: finalDbName, queryString: foundUserQuery, queryValuesArray: foundUserValues, useLocal, diff --git a/dist/package-shared/functions/api/users/api-create-user.js b/dist/package-shared/functions/api/users/api-create-user.js index d74fd86..b4dada7 100644 --- a/dist/package-shared/functions/api/users/api-create-user.js +++ b/dist/package-shared/functions/api/users/api-create-user.js @@ -46,7 +46,7 @@ function apiCreateUser(_a) { password: String(payload.password), }); payload.password = hashedPassword; - const fieldsQuery = `SHOW COLUMNS FROM users`; + const fieldsQuery = `SHOW COLUMNS FROM ${dbFullName}.users`; let fields = yield (0, varDatabaseDbHandler_1.default)({ queryString: fieldsQuery, database: dbFullName, @@ -91,7 +91,7 @@ function apiCreateUser(_a) { msg: `${invalidField} is not a valid field!`, }; } - const existingUserQuery = `SELECT * FROM users WHERE email = ?${payload.username ? " OR username = ?" : ""}`; + const existingUserQuery = `SELECT * FROM ${dbFullName}.users WHERE email = ?${payload.username ? " OR username = ?" : ""}`; const existingUserValues = payload.username ? [payload.email, payload.username] : [payload.email]; @@ -119,7 +119,7 @@ function apiCreateUser(_a) { useLocal, }); if (addUser === null || addUser === void 0 ? void 0 : addUser.insertId) { - const newlyAddedUserQuery = `SELECT id,first_name,last_name,email,username,phone,image,image_thumbnail,city,state,country,zip_code,address,verification_status,more_user_data FROM users WHERE id='${addUser.insertId}'`; + const newlyAddedUserQuery = `SELECT id,first_name,last_name,email,username,phone,image,image_thumbnail,city,state,country,zip_code,address,verification_status,more_user_data FROM ${dbFullName}.users WHERE id='${addUser.insertId}'`; const newlyAddedUser = yield (0, varDatabaseDbHandler_1.default)({ queryString: newlyAddedUserQuery, database: dbFullName, diff --git a/dist/package-shared/functions/api/users/api-delete-user.js b/dist/package-shared/functions/api/users/api-delete-user.js index b17bb03..35cddbe 100644 --- a/dist/package-shared/functions/api/users/api-delete-user.js +++ b/dist/package-shared/functions/api/users/api-delete-user.js @@ -20,7 +20,7 @@ const varDatabaseDbHandler_1 = __importDefault(require("../../backend/varDatabas */ function apiDeleteUser(_a) { return __awaiter(this, arguments, void 0, function* ({ dbFullName, deletedUserId, useLocal, }) { - const existingUserQuery = `SELECT * FROM users WHERE id = ?`; + const existingUserQuery = `SELECT * FROM ${dbFullName}.users WHERE id = ?`; const existingUserValues = [deletedUserId]; const existingUser = yield (0, varDatabaseDbHandler_1.default)({ queryString: existingUserQuery, diff --git a/dist/package-shared/functions/api/users/api-get-user.js b/dist/package-shared/functions/api/users/api-get-user.js index 407fac3..90c7e2d 100644 --- a/dist/package-shared/functions/api/users/api-get-user.js +++ b/dist/package-shared/functions/api/users/api-get-user.js @@ -19,12 +19,13 @@ const varDatabaseDbHandler_1 = __importDefault(require("../../backend/varDatabas */ function apiGetUser(_a) { return __awaiter(this, arguments, void 0, function* ({ fields, dbFullName, userId, useLocal, }) { - const query = `SELECT ${fields.join(",")} FROM users WHERE id=?`; + const finalDbName = dbFullName.replace(/[^a-z0-9_]/g, ""); + const query = `SELECT ${fields.join(",")} FROM ${finalDbName}.users WHERE id=?`; const API_USER_ID = userId || process.env.DSQL_API_USER_ID; let foundUser = yield (0, varDatabaseDbHandler_1.default)({ queryString: query, queryValuesArray: [API_USER_ID], - database: dbFullName.replace(/[^a-z0-9_]/g, ""), + database: finalDbName, useLocal, }); if (!foundUser || !foundUser[0]) { diff --git a/dist/package-shared/functions/api/users/api-login.js b/dist/package-shared/functions/api/users/api-login.js index 6af8b27..1158c73 100644 --- a/dist/package-shared/functions/api/users/api-login.js +++ b/dist/package-shared/functions/api/users/api-login.js @@ -20,7 +20,7 @@ const hashPassword_1 = __importDefault(require("../../dsql/hashPassword")); */ function apiLoginUser(_a) { return __awaiter(this, arguments, void 0, function* ({ encryptionKey, email, username, password, database, additionalFields, email_login, email_login_code, email_login_field, token, skipPassword, social, useLocal, }) { - const dbFullName = database; + const dbFullName = database.replace(/[^a-z0-9_]/g, ""); /** * Check input validity * @@ -46,9 +46,9 @@ function apiLoginUser(_a) { }) : null; let foundUser = yield (0, varDatabaseDbHandler_1.default)({ - queryString: `SELECT * FROM users WHERE email = ? OR username = ?`, + queryString: `SELECT * FROM ${dbFullName}.users WHERE email = ? OR username = ?`, queryValuesArray: [email, username], - database: dbFullName.replace(/[^a-z0-9_]/g, ""), + database: dbFullName, useLocal, }); if ((!foundUser || !foundUser[0]) && !social) @@ -91,9 +91,9 @@ function apiLoginUser(_a) { } if (isPasswordCorrect && email_login) { const resetTempCode = yield (0, varDatabaseDbHandler_1.default)({ - queryString: `UPDATE users SET ${email_login_field} = '' WHERE email = ? OR username = ?`, + queryString: `UPDATE ${dbFullName}.users SET ${email_login_field} = '' WHERE email = ? OR username = ?`, queryValuesArray: [email, username], - database: dbFullName.replace(/[^a-z0-9_]/g, ""), + database: dbFullName, useLocal, }); } diff --git a/dist/package-shared/functions/api/users/api-reauth-user.js b/dist/package-shared/functions/api/users/api-reauth-user.js index 56860d8..747d205 100644 --- a/dist/package-shared/functions/api/users/api-reauth-user.js +++ b/dist/package-shared/functions/api/users/api-reauth-user.js @@ -21,7 +21,7 @@ function apiReauthUser(_a) { return __awaiter(this, arguments, void 0, function* ({ existingUser, database, additionalFields, useLocal, }) { let foundUser = (existingUser === null || existingUser === void 0 ? void 0 : existingUser.id) && existingUser.id.toString().match(/./) ? yield (0, varDatabaseDbHandler_1.default)({ - queryString: `SELECT * FROM users WHERE id=?`, + queryString: `SELECT * FROM ${database}.users WHERE id=?`, queryValuesArray: [existingUser.id.toString()], database, useLocal, diff --git a/dist/package-shared/functions/api/users/api-send-email-code.js b/dist/package-shared/functions/api/users/api-send-email-code.js index 95b395a..991a645 100644 --- a/dist/package-shared/functions/api/users/api-send-email-code.js +++ b/dist/package-shared/functions/api/users/api-send-email-code.js @@ -30,7 +30,7 @@ function apiSendEmailCode(_a) { }; } const createdAt = Date.now(); - const foundUserQuery = `SELECT * FROM users WHERE email = ?`; + const foundUserQuery = `SELECT * FROM ${database}.users WHERE email = ?`; const foundUserValues = [email]; let foundUser = yield (0, varDatabaseDbHandler_1.default)({ queryString: foundUserQuery, @@ -79,12 +79,12 @@ function apiSendEmailCode(_a) { const info = yield transporter.sendMail(mailObject); if (!(info === null || info === void 0 ? void 0 : info.accepted)) throw new Error("Mail not Sent!"); - const setTempCodeQuery = `UPDATE users SET ${email_login_field} = ? WHERE email = ?`; + const setTempCodeQuery = `UPDATE ${database}.users SET ${email_login_field} = ? WHERE email = ?`; const setTempCodeValues = [tempCode + `-${createdAt}`, email]; let setTempCode = yield (0, varDatabaseDbHandler_1.default)({ queryString: setTempCodeQuery, queryValuesArray: setTempCodeValues, - database: database, + database, useLocal, }); /** @type {import("../../../types").SendOneTimeCodeEmailResponse} */ diff --git a/dist/package-shared/functions/api/users/api-update-user.js b/dist/package-shared/functions/api/users/api-update-user.js index 6dd14ff..ecfac3e 100644 --- a/dist/package-shared/functions/api/users/api-update-user.js +++ b/dist/package-shared/functions/api/users/api-update-user.js @@ -23,7 +23,7 @@ const varDatabaseDbHandler_1 = __importDefault(require("../../backend/varDatabas */ function apiUpdateUser(_a) { return __awaiter(this, arguments, void 0, function* ({ payload, dbFullName, updatedUserId, useLocal, dbSchema, }) { - const existingUserQuery = `SELECT * FROM users WHERE id = ?`; + const existingUserQuery = `SELECT * FROM ${dbFullName}.users WHERE id = ?`; const existingUserValues = [updatedUserId]; const existingUser = yield (0, varDatabaseDbHandler_1.default)({ queryString: existingUserQuery, diff --git a/dist/package-shared/functions/backend/db/addDbEntry.js b/dist/package-shared/functions/backend/db/addDbEntry.js index 3c9572f..705e363 100644 --- a/dist/package-shared/functions/backend/db/addDbEntry.js +++ b/dist/package-shared/functions/backend/db/addDbEntry.js @@ -90,8 +90,7 @@ function addDbEntry(_a) { ? yield dbHandler(`SELECT * FROM \`${tableName}\` WHERE \`${duplicateColumnName}\`=?`, [duplicateColumnValue]) : yield dbHandler({ paradigm: "Read Only", - database: dbFullName, - queryString: `SELECT * FROM \`${tableName}\` WHERE \`${duplicateColumnName}\`=?`, + queryString: `SELECT * FROM \`${dbFullName}\`.\`${tableName}\` WHERE \`${duplicateColumnName}\`=?`, queryValues: [duplicateColumnValue], }); if ((duplicateValue === null || duplicateValue === void 0 ? void 0 : duplicateValue[0]) && !update) { @@ -191,13 +190,12 @@ function addDbEntry(_a) { insertValuesArray.push(Date.now()); } //////////////////////////////////////// - const query = `INSERT INTO \`${tableName}\` (${insertKeysArray.join(",")}) VALUES (${insertValuesArray.map(() => "?").join(",")})`; + const query = `INSERT INTO \`${dbFullName}\`.\`${tableName}\` (${insertKeysArray.join(",")}) VALUES (${insertValuesArray.map(() => "?").join(",")})`; const queryValuesArray = insertValuesArray; const newInsert = isMaster ? yield dbHandler(query, queryValuesArray) : yield dbHandler({ paradigm, - database: dbFullName, queryString: query, queryValues: queryValuesArray, }); diff --git a/dist/package-shared/functions/backend/db/deleteDbEntry.js b/dist/package-shared/functions/backend/db/deleteDbEntry.js index 23e5c18..8a542f7 100644 --- a/dist/package-shared/functions/backend/db/deleteDbEntry.js +++ b/dist/package-shared/functions/backend/db/deleteDbEntry.js @@ -41,13 +41,12 @@ function deleteDbEntry(_a) { * * @description */ - const query = `DELETE FROM ${tableName} WHERE \`${identifierColumnName}\`=?`; + const query = `DELETE FROM \`${dbFullName}\`.\`${tableName}\` WHERE \`${identifierColumnName}\`=?`; const deletedEntry = isMaster ? yield dbHandler(query, [identifierValue]) : yield dbHandler({ paradigm, queryString: query, - database: dbFullName, queryValues: [identifierValue], }); /** diff --git a/dist/package-shared/functions/backend/db/runQuery.js b/dist/package-shared/functions/backend/db/runQuery.js index 3d7140a..961a2dc 100644 --- a/dist/package-shared/functions/backend/db/runQuery.js +++ b/dist/package-shared/functions/backend/db/runQuery.js @@ -71,7 +71,6 @@ function runQuery(_a) { result = yield (0, varReadOnlyDatabaseDbHandler_1.default)({ queryString: formattedQuery, queryValuesArray: queryValuesArray === null || queryValuesArray === void 0 ? void 0 : queryValuesArray.map((vl) => String(vl)), - database: dbFullName, tableSchema, useLocal: local, }); @@ -80,7 +79,6 @@ function runQuery(_a) { result = yield (0, fullAccessDbHandler_1.default)({ queryString: formattedQuery, queryValuesArray: queryValuesArray === null || queryValuesArray === void 0 ? void 0 : queryValuesArray.map((vl) => String(vl)), - database: dbFullName, tableSchema, local, }); diff --git a/dist/package-shared/functions/backend/db/updateDbEntry.js b/dist/package-shared/functions/backend/db/updateDbEntry.js index d75d57b..ca170b4 100644 --- a/dist/package-shared/functions/backend/db/updateDbEntry.js +++ b/dist/package-shared/functions/backend/db/updateDbEntry.js @@ -126,13 +126,12 @@ function updateDbEntry(_a) { updateKeyValueArray.push(`date_updated_code='${Date.now()}'`); //////////////////////////////////////// //////////////////////////////////////// - const query = `UPDATE ${tableName} SET ${updateKeyValueArray.join(",")} WHERE \`${identifierColumnName}\`=?`; + const query = `UPDATE \`${dbFullName}\`.\`${tableName}\` SET ${updateKeyValueArray.join(",")} WHERE \`${identifierColumnName}\`=?`; updateValues.push(identifierValue); const updatedEntry = isMaster ? yield dbHandler(query, updateValues) : yield dbHandler({ paradigm, - database: dbFullName, queryString: query, queryValues: updateValues, }); diff --git a/dist/package-shared/functions/backend/dbHandler.js b/dist/package-shared/functions/backend/dbHandler.js index 1af4c51..7ec0947 100644 --- a/dist/package-shared/functions/backend/dbHandler.js +++ b/dist/package-shared/functions/backend/dbHandler.js @@ -15,18 +15,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = dbHandler; const fs_1 = __importDefault(require("fs")); const serverError_1 = __importDefault(require("./serverError")); -const serverless_mysql_1 = __importDefault(require("serverless-mysql")); -const grabDbSSL_1 = __importDefault(require("../../utils/backend/grabDbSSL")); -const connection = (0, serverless_mysql_1.default)({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_USERNAME, - password: process.env.DSQL_DB_PASSWORD, - database: process.env.DSQL_DB_NAME, - charset: "utf8mb4", - ssl: (0, grabDbSSL_1.default)(), - }, -}); /** * # Main DB Handler Function */ @@ -35,11 +23,6 @@ function dbHandler(...args) { var _a; ((_a = process.env.NODE_ENV) === null || _a === void 0 ? void 0 : _a.match(/dev/)) && fs_1.default.appendFileSync("./.tmp/sqlQuery.sql", args[0] + "\n" + Date() + "\n\n\n", "utf8"); - /** - * Declare variables - * - * @description Declare "results" variable - */ let results; /** * Fetch from db @@ -47,6 +30,7 @@ function dbHandler(...args) { * @description Fetch data from db if no cache */ try { + const connection = global.DSQL_DB_CONN; results = yield new Promise((resolve, reject) => { connection.query(...args, (error, result, fields) => { if (error) { diff --git a/dist/package-shared/functions/backend/fullAccessDbHandler.d.ts b/dist/package-shared/functions/backend/fullAccessDbHandler.d.ts index eb0e480..4afb288 100644 --- a/dist/package-shared/functions/backend/fullAccessDbHandler.d.ts +++ b/dist/package-shared/functions/backend/fullAccessDbHandler.d.ts @@ -1,6 +1,5 @@ type Param = { queryString: string; - database: string; local?: boolean; tableSchema?: import("../../types").DSQL_TableSchemaType | null; queryValuesArray?: string[]; @@ -8,5 +7,5 @@ type Param = { /** * # Full Access Db Handler */ -export default function fullAccessDbHandler({ queryString, database, tableSchema, queryValuesArray, local, }: Param): Promise; +export default function fullAccessDbHandler({ queryString, tableSchema, queryValuesArray, local, }: Param): Promise; export {}; diff --git a/dist/package-shared/functions/backend/fullAccessDbHandler.js b/dist/package-shared/functions/backend/fullAccessDbHandler.js index b036ef5..c982781 100644 --- a/dist/package-shared/functions/backend/fullAccessDbHandler.js +++ b/dist/package-shared/functions/backend/fullAccessDbHandler.js @@ -22,7 +22,7 @@ const serverError_1 = __importDefault(require("./serverError")); * # Full Access Db Handler */ function fullAccessDbHandler(_a) { - return __awaiter(this, arguments, void 0, function* ({ queryString, database, tableSchema, queryValuesArray, local, }) { + return __awaiter(this, arguments, void 0, function* ({ queryString, tableSchema, queryValuesArray, local, }) { /** * Declare variables * @@ -40,7 +40,6 @@ function fullAccessDbHandler(_a) { ? yield (0, LOCAL_DB_HANDLER_1.default)(queryString, queryValuesArray) : yield (0, DSQL_USER_DB_HANDLER_1.default)({ paradigm: "Full Access", - database, queryString, queryValues: queryValuesArray, }); diff --git a/dist/package-shared/functions/backend/noDatabaseDbHandler.js b/dist/package-shared/functions/backend/noDatabaseDbHandler.js index 460f6ce..54e41cc 100644 --- a/dist/package-shared/functions/backend/noDatabaseDbHandler.js +++ b/dist/package-shared/functions/backend/noDatabaseDbHandler.js @@ -15,7 +15,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = noDatabaseDbHandler; const fs_1 = __importDefault(require("fs")); const serverError_1 = __importDefault(require("./serverError")); -const NO_DB_HANDLER_1 = __importDefault(require("../../../package-shared/utils/backend/global-db/NO_DB_HANDLER")); +const NO_DB_HANDLER_1 = __importDefault(require("@/package-shared/utils/backend/global-db/NO_DB_HANDLER")); /** * # No Database DB Handler */ diff --git a/dist/package-shared/functions/backend/varDatabaseDbHandler.js b/dist/package-shared/functions/backend/varDatabaseDbHandler.js index e3d123f..c342b44 100644 --- a/dist/package-shared/functions/backend/varDatabaseDbHandler.js +++ b/dist/package-shared/functions/backend/varDatabaseDbHandler.js @@ -33,7 +33,6 @@ function varDatabaseDbHandler(_a) { : (database === null || database === void 0 ? void 0 : database.match(/^datasquirel$/)) ? true : false; - /** @type {any} */ const FINAL_DB_HANDLER = useLocal ? LOCAL_DB_HANDLER_1.default : isMaster @@ -54,7 +53,6 @@ function varDatabaseDbHandler(_a) { ? yield FINAL_DB_HANDLER(queryString, queryValuesArray) : yield FINAL_DB_HANDLER({ paradigm: "Full Access", - database, queryString, queryValues: queryValuesArray, }); @@ -64,12 +62,12 @@ function varDatabaseDbHandler(_a) { ? yield FINAL_DB_HANDLER(queryString) : yield FINAL_DB_HANDLER({ paradigm: "Full Access", - database, queryString, }); } } catch (error) { + console.log(`varDatabaseDbHandler Error: ${error.message}`); (0, serverError_1.default)({ component: "varDatabaseDbHandler/lines-29-32", message: error.message, diff --git a/dist/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.d.ts b/dist/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.d.ts index f39b5a7..e023be9 100644 --- a/dist/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.d.ts +++ b/dist/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.d.ts @@ -1,6 +1,5 @@ type Param = { queryString: string; - database: string; queryValuesArray?: string[]; tableSchema?: import("../../types").DSQL_TableSchemaType; useLocal?: boolean; @@ -9,5 +8,5 @@ type Param = { * # Read Only Db Handler with Varaibles * @returns */ -export default function varReadOnlyDatabaseDbHandler({ queryString, database, queryValuesArray, tableSchema, useLocal, }: Param): Promise; +export default function varReadOnlyDatabaseDbHandler({ queryString, queryValuesArray, tableSchema, useLocal, }: Param): Promise; export {}; diff --git a/dist/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.js b/dist/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.js index 0d452bc..c83c499 100644 --- a/dist/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.js +++ b/dist/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.js @@ -23,7 +23,7 @@ const LOCAL_DB_HANDLER_1 = __importDefault(require("../../utils/backend/global-d * @returns */ function varReadOnlyDatabaseDbHandler(_a) { - return __awaiter(this, arguments, void 0, function* ({ queryString, database, queryValuesArray, tableSchema, useLocal, }) { + return __awaiter(this, arguments, void 0, function* ({ queryString, queryValuesArray, tableSchema, useLocal, }) { /** * Declare variables * @@ -40,7 +40,6 @@ function varReadOnlyDatabaseDbHandler(_a) { ? yield (0, LOCAL_DB_HANDLER_1.default)(queryString, queryValuesArray) : yield (0, DSQL_USER_DB_HANDLER_1.default)({ paradigm: "Read Only", - database, queryString, queryValues: queryValuesArray, }); diff --git a/dist/package-shared/shell/checkDb.js b/dist/package-shared/shell/checkDb.js index 8b72e45..23bc9dd 100644 --- a/dist/package-shared/shell/checkDb.js +++ b/dist/package-shared/shell/checkDb.js @@ -8,23 +8,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge 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 }); require("dotenv").config({ path: "./../.env" }); -const serverless_mysql_1 = __importDefault(require("serverless-mysql")); -const grabDbSSL_1 = __importDefault(require("../utils/backend/grabDbSSL")); -const connection = (0, serverless_mysql_1.default)({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_USERNAME, - password: process.env.DSQL_DB_PASSWORD, - database: process.env.DSQL_DB_NAME, - charset: "utf8mb4", - ssl: (0, grabDbSSL_1.default)(), - }, -}); /** * # Main DB Handler Function * @async @@ -37,11 +22,7 @@ const connection = (0, serverless_mysql_1.default)({ * @returns {Promise} */ (() => __awaiter(void 0, void 0, void 0, function* () { - /** - * Switch Database - * - * @description If a database is provided, switch to it - */ + const connection = global.DSQL_DB_CONN; try { const result = yield connection.query("SELECT id,first_name,last_name FROM users LIMIT 3"); console.log("Connection Query Success =>", result); diff --git a/dist/package-shared/shell/createDbFromSchema.d.ts b/dist/package-shared/shell/createDbFromSchema.d.ts index d946c66..4c2d6cb 100644 --- a/dist/package-shared/shell/createDbFromSchema.d.ts +++ b/dist/package-shared/shell/createDbFromSchema.d.ts @@ -5,6 +5,7 @@ type Param = { }; /** * # Create database from Schema Function + * @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database */ export default function createDbFromSchema({ userId, targetDatabase, dbSchemaData, }: Param): Promise; export {}; diff --git a/dist/package-shared/shell/createDbFromSchema.js b/dist/package-shared/shell/createDbFromSchema.js index 2163b29..739e13a 100644 --- a/dist/package-shared/shell/createDbFromSchema.js +++ b/dist/package-shared/shell/createDbFromSchema.js @@ -21,20 +21,13 @@ const createTable_1 = __importDefault(require("./utils/createTable")); const updateTable_1 = __importDefault(require("./utils/updateTable")); const dbHandler_1 = __importDefault(require("./utils/dbHandler")); const ejson_1 = __importDefault(require("../utils/ejson")); -const util_1 = require("util"); /** * # Create database from Schema Function + * @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database */ function createDbFromSchema(_a) { return __awaiter(this, arguments, void 0, function* ({ userId, targetDatabase, dbSchemaData, }) { var _b, _c; - console.log("///////////////////////////////"); - console.log("///////////////////////////////"); - console.log("Rebuilding Database ..."); - console.log("process.env.DSQL_DB_HOST", process.env.DSQL_DB_HOST); - console.log("process.env.DSQL_DB_USERNAME", process.env.DSQL_DB_USERNAME); - console.log("process.env.DSQL_DB_PASSWORD", process.env.DSQL_DB_PASSWORD); - console.log("process.env.DSQL_DB_NAME", process.env.DSQL_DB_NAME); const schemaPath = userId ? path_1.default.join(String(process.env.DSQL_USER_DB_SCHEMA_PATH), `/user-${userId}/main.json`) : path_1.default.resolve(__dirname, "../../jsonData/dbSchemas/main.json"); @@ -46,20 +39,14 @@ function createDbFromSchema(_a) { } // await createDatabasesFromSchema(dbSchema); for (let i = 0; i < dbSchema.length; i++) { - /** @type {import("../types").DSQL_DatabaseSchemaType} */ const database = dbSchema[i]; const { dbFullName, tables, dbName, dbSlug, childrenDatabases } = database; if (targetDatabase && dbFullName != targetDatabase) { continue; } - console.log("Checking Database ..."); /** @type {any} */ const dbCheck = yield (0, noDatabaseDbHandler_1.default)(`SELECT SCHEMA_NAME AS dbFullName FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '${dbFullName}'`); - console.log("DB Checked Success!"); - if (dbCheck && ((_b = dbCheck[0]) === null || _b === void 0 ? void 0 : _b.dbFullName)) { - // Database Exists - } - else { + if (!((_b = dbCheck === null || dbCheck === void 0 ? void 0 : dbCheck[0]) === null || _b === void 0 ? void 0 : _b.dbFullName)) { const newDatabase = yield (0, noDatabaseDbHandler_1.default)(`CREATE DATABASE IF NOT EXISTS \`${dbFullName}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`); } /** @@ -86,28 +73,24 @@ function createDbFromSchema(_a) { if (oldTableFilteredArray && oldTableFilteredArray[0]) { console.log("Renaming Table"); yield (0, varDatabaseDbHandler_1.default)({ - queryString: `RENAME TABLE \`${oldTableFilteredArray[0].tableNameOld}\` TO \`${oldTableFilteredArray[0].tableName}\``, - database: dbFullName, + queryString: `RENAME TABLE \`${dbFullName}\`.\`${oldTableFilteredArray[0].tableNameOld}\` TO \`${oldTableFilteredArray[0].tableName}\``, }); } else { console.log(`Dropping Table from ${dbFullName}`); yield (0, varDatabaseDbHandler_1.default)({ - queryString: `DROP TABLE \`${TABLE_NAME}\``, - database: dbFullName, + queryString: `DROP TABLE \`${dbFullName}\`.\`${TABLE_NAME}\``, }); const deleteTableEntry = yield (0, dbHandler_1.default)({ - query: `DELETE FROM user_database_tables WHERE user_id = ? AND db_slug = ? AND table_slug = ?`, + query: `DELETE FROM datasquirel.user_database_tables WHERE user_id = ? AND db_slug = ? AND table_slug = ?`, values: [userId, dbSlug, TABLE_NAME], - database: "datasquirel", }); } } } const recordedDbEntryArray = userId ? yield (0, varDatabaseDbHandler_1.default)({ - database: "datasquirel", - queryString: `SELECT * FROM user_databases WHERE db_full_name = ?`, + queryString: `SELECT * FROM datasquirel.user_databases WHERE db_full_name = ?`, queryValuesArray: [dbFullName], }) : undefined; @@ -134,7 +117,6 @@ function createDbFromSchema(_a) { TABLE_NAME = ? ) AS tableExists`, queryValuesArray: [dbFullName, table.tableName], - database: dbFullName, }); //////////////////////////////////////// if (tableCheck && ((_c = tableCheck[0]) === null || _c === void 0 ? void 0 : _c.tableExists) > 0) { @@ -183,7 +165,6 @@ function createDbFromSchema(_a) { tableName: tableName, tableInfoArray: fields, dbFullName: dbFullName, - dbSchema, tableSchema: table, recordedDbEntry, }); @@ -208,8 +189,7 @@ function createDbFromSchema(_a) { * @description All indexes from MYSQL db */ // @ts-ignore const allExistingIndexes = yield (0, varDatabaseDbHandler_1.default)({ - queryString: `SHOW INDEXES FROM \`${tableName}\``, - database: dbFullName, + queryString: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\``, }); const existingKeyInDb = allExistingIndexes.filter((indexObject) => indexObject.Key_name === alias); if (!existingKeyInDb[0]) @@ -223,8 +203,7 @@ function createDbFromSchema(_a) { yield (0, varDatabaseDbHandler_1.default)({ queryString: `CREATE${(indexType === null || indexType === void 0 ? void 0 : indexType.match(/fullText/i)) ? " FULLTEXT" - : ""} INDEX \`${alias}\` ON ${tableName}(${indexTableFields === null || indexTableFields === void 0 ? void 0 : indexTableFields.map((nm) => nm.value).map((nm) => `\`${nm}\``).join(",")}) COMMENT 'schema_index'`, - database: dbFullName, + : ""} INDEX \`${alias}\` ON \`${dbFullName}\`.\`${tableName}\`(${indexTableFields === null || indexTableFields === void 0 ? void 0 : indexTableFields.map((nm) => nm.value).map((nm) => `\`${nm}\``).join(",")}) COMMENT 'schema_index'`, }); } } @@ -246,19 +225,5 @@ function createDbFromSchema(_a) { } } } - console.log("Database Successfully Rebuilt!"); - console.log("///////////////////////////////"); - console.log("///////////////////////////////"); }); } -const { values } = (0, util_1.parseArgs)({ - args: process.argv, - options: { - exec: { type: "boolean" }, - }, - strict: true, - allowPositionals: true, -}); -if (values.exec) { - createDbFromSchema({}); -} diff --git a/dist/package-shared/shell/encodingUpdate.js b/dist/package-shared/shell/encodingUpdate.js index cadf5e0..c50ffb7 100644 --- a/dist/package-shared/shell/encodingUpdate.js +++ b/dist/package-shared/shell/encodingUpdate.js @@ -34,15 +34,12 @@ const varDatabaseDbHandler_1 = __importDefault(require("../functions/backend/var const { id, user_id, db_id, db_full_name, table_name, table_slug, table_description, } = table; const tableInfo = yield (0, varDatabaseDbHandler_1.default)({ queryString: `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='${db_full_name}' AND TABLE_NAME='${table_slug}'`, - database: db_full_name, }); const updateDbCharset = yield (0, varDatabaseDbHandler_1.default)({ queryString: `ALTER DATABASE ${db_full_name} CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin;`, - database: db_full_name, }); const updateEncoding = yield (0, varDatabaseDbHandler_1.default)({ - queryString: `ALTER TABLE \`${table_slug}\` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`, - database: db_full_name, + queryString: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`, }); } process.exit(); diff --git a/dist/package-shared/shell/mariadb-users/handleGrants.d.ts b/dist/package-shared/shell/mariadb-users/handleGrants.d.ts index be56951..050d8cb 100644 --- a/dist/package-shared/shell/mariadb-users/handleGrants.d.ts +++ b/dist/package-shared/shell/mariadb-users/handleGrants.d.ts @@ -4,9 +4,9 @@ export interface GrantType { privileges: string[]; } type Param = { - username: string; - host: string; - grants: GrantType[]; + username?: string; + host?: string; + grants?: GrantType[]; userId: string; }; /** diff --git a/dist/package-shared/shell/mariadb-users/refreshUsersAndGrants.d.ts b/dist/package-shared/shell/mariadb-users/refreshUsersAndGrants.d.ts index 509b2c9..99d4596 100644 --- a/dist/package-shared/shell/mariadb-users/refreshUsersAndGrants.d.ts +++ b/dist/package-shared/shell/mariadb-users/refreshUsersAndGrants.d.ts @@ -1,11 +1,11 @@ type Param = { userId?: number | string; mariadbUserHost?: string; - mariadbUser?: string; + mariadbUsername?: string; sqlUserID?: string | number; }; /** * # Refresh Mariadb User Grants */ -export default function refreshUsersAndGrants({ userId, mariadbUserHost, mariadbUser, sqlUserID, }: Param): Promise; +export default function refreshUsersAndGrants({ userId, mariadbUserHost, mariadbUsername, sqlUserID, }: Param): Promise; export {}; diff --git a/dist/package-shared/shell/mariadb-users/refreshUsersAndGrants.js b/dist/package-shared/shell/mariadb-users/refreshUsersAndGrants.js index e138f39..848c98f 100644 --- a/dist/package-shared/shell/mariadb-users/refreshUsersAndGrants.js +++ b/dist/package-shared/shell/mariadb-users/refreshUsersAndGrants.js @@ -26,26 +26,25 @@ const defaultMariadbUserHost = process.env.DSQL_DB_HOST || "127.0.0.1"; * # Refresh Mariadb User Grants */ function refreshUsersAndGrants(_a) { - return __awaiter(this, arguments, void 0, function* ({ userId, mariadbUserHost, mariadbUser, sqlUserID, }) { + return __awaiter(this, arguments, void 0, function* ({ userId, mariadbUserHost, mariadbUsername, sqlUserID, }) { var _b, _c, _d, _e; - /** - * @description Users - * @type {*[] | null} - */ // @ts-ignore - const users = yield (0, dbHandler_1.default)({ - query: `SELECT * FROM users`, - }); - if (!(users === null || users === void 0 ? void 0 : users[0])) { - process.exit(); + const mariadbUsers = (yield (0, dbHandler_1.default)({ + query: `SELECT * FROM mariadb_users`, + })); + if (!(mariadbUsers === null || mariadbUsers === void 0 ? void 0 : mariadbUsers[0])) { + return; } - for (let i = 0; i < users.length; i++) { - const user = users[i]; - if (!user) + const isRootUser = userId + ? userId == Number(process.env.DSQL_SU_USER_ID) + : false; + for (let i = 0; i < mariadbUsers.length; i++) { + const mariadbUser = mariadbUsers[i]; + if (!mariadbUser) continue; - if (userId && user.id != userId) + if (userId && mariadbUser.user_id != userId) continue; try { - const { mariadb_user, mariadb_host, mariadb_pass, id } = user; + const { mariadb_user, mariadb_host, mariadb_pass, user_id } = mariadbUser; const existingUser = yield (0, noDatabaseDbHandler_1.default)(`SELECT * FROM mysql.user WHERE User = '${mariadb_user}' AND Host = '${mariadb_host}'`); const existingMariaDBUserArray = userId && sqlUserID ? yield (0, dbHandler_1.default)({ @@ -53,9 +52,6 @@ function refreshUsersAndGrants(_a) { values: [sqlUserID, userId], }) : null; - /** - * @type {import("../../types").MYSQL_mariadb_users_table_def | undefined} - */ const activeMariadbUserObject = Array.isArray(existingMariaDBUserArray) ? existingMariaDBUserArray === null || existingMariaDBUserArray === void 0 ? void 0 : existingMariaDBUserArray[0] : undefined; @@ -66,7 +62,9 @@ function refreshUsersAndGrants(_a) { : false; const isUserExisting = Boolean((_c = existingUser === null || existingUser === void 0 ? void 0 : existingUser[0]) === null || _c === void 0 ? void 0 : _c.User); const isThisPrimaryHost = Boolean(mariadbUserHost == defaultMariadbUserHost); - const dslUsername = `dsql_user_${id}`; + const dslUsername = isRootUser + ? mariadbUsername + : `dsql_user_${user_id}`; const dsqlPassword = (activeMariadbUserObject === null || activeMariadbUserObject === void 0 ? void 0 : activeMariadbUserObject.password) ? activeMariadbUserObject.password : isUserExisting @@ -91,20 +89,23 @@ function refreshUsersAndGrants(_a) { !sqlUserID && !isPrimary && !mariadbUserHost && - !mariadbUser) { + !mariadbUsername) { const createNewUser = yield (0, noDatabaseDbHandler_1.default)(`CREATE USER IF NOT EXISTS '${dslUsername}'@'${defaultMariadbUserHost}' IDENTIFIED BY '${dsqlPassword}'`); console.log("createNewUser", createNewUser); - console.log(`User ${user.id}: ${user.first_name} ${user.last_name} SQL credentials successfully updated.`); + console.log(`User ${mariadbUser.id}: ${mariadbUser.first_name} ${mariadbUser.last_name} SQL credentials successfully updated.`); const updateUser = yield (0, dbHandler_1.default)({ query: `UPDATE users SET mariadb_user = ?, mariadb_host = ?, mariadb_pass = ? WHERE id = ?`, values: [ dslUsername, defaultMariadbUserHost, encryptedPassword, - user.id, + mariadbUser.id, ], }); } + else if (!isUserExisting && mariadbUserHost) { + const createNewUser = yield (0, noDatabaseDbHandler_1.default)(`CREATE USER IF NOT EXISTS '${dslUsername}'@'${mariadbUserHost}' IDENTIFIED BY '${dsqlPassword}'`); + } if (isPrimary) { const finalHost = mariadbUserHost ? mariadbUserHost @@ -115,7 +116,7 @@ function refreshUsersAndGrants(_a) { dslUsername, finalHost, encryptedPassword, - user.id, + mariadbUser.id, ], }); } @@ -127,7 +128,7 @@ function refreshUsersAndGrants(_a) { */ const existingMariadbPrimaryUser = yield (0, dbHandler_1.default)({ query: `SELECT * FROM mariadb_users WHERE user_id = ? AND \`primary\` = 1`, - values: [id], + values: [user_id], }); const isPrimaryUserExisting = Boolean(Array.isArray(existingMariadbPrimaryUser) && ((_d = existingMariadbPrimaryUser === null || existingMariadbPrimaryUser === void 0 ? void 0 : existingMariadbPrimaryUser[0]) === null || _d === void 0 ? void 0 : _d.user_id)); @@ -142,7 +143,7 @@ function refreshUsersAndGrants(_a) { const insertPrimaryMariadbUser = yield (0, dbHandler_1.default)({ query: `INSERT INTO mariadb_users (user_id, username, password, \`primary\`, grants) VALUES (?, ?, ?, ?, ?)`, values: [ - id, + user_id, dslUsername, encryptedPassword, "1", @@ -153,36 +154,37 @@ function refreshUsersAndGrants(_a) { ////////////////////////////////////////////// const existingExtraMariadbUsers = yield (0, dbHandler_1.default)({ query: `SELECT * FROM mariadb_users WHERE user_id = ? AND \`primary\` != '1'`, - values: [id], + values: [user_id], }); if (Array.isArray(existingExtraMariadbUsers)) { for (let i = 0; i < existingExtraMariadbUsers.length; i++) { - const mariadbUser = existingExtraMariadbUsers[i]; - const { user_id, username, host, password, primary, grants, } = mariadbUser; - if (mariadbUser && username != mariadbUser) + const _mariadbUser = existingExtraMariadbUsers[i]; + if (_mariadbUser && + _mariadbUser.username != mariadbUsername) continue; - if (mariadbUserHost && host != mariadbUserHost) + if (mariadbUserHost && _mariadbUser.host != mariadbUserHost) continue; const decrptedPassword = (0, decrypt_1.default)({ - encryptedString: password, + encryptedString: _mariadbUser.password || "", encryptionKey: process.env.DSQL_ENCRYPTION_PASSWORD, encryptionSalt: process.env.DSQL_ENCRYPTION_SALT, }); - const existingExtraMariadbUser = yield (0, noDatabaseDbHandler_1.default)(`SELECT * FROM mysql.user WHERE User = '${username}' AND Host = '${host}'`); + const existingExtraMariadbUser = yield (0, noDatabaseDbHandler_1.default)(`SELECT * FROM mysql.user WHERE User='${_mariadbUser.username}' AND Host='${_mariadbUser.host}'`); const isExtraMariadbUserExisting = Boolean((_e = existingExtraMariadbUser === null || existingExtraMariadbUser === void 0 ? void 0 : existingExtraMariadbUser[0]) === null || _e === void 0 ? void 0 : _e.User); if (!isExtraMariadbUserExisting) { - yield (0, noDatabaseDbHandler_1.default)(`CREATE USER IF NOT EXISTS '${username}'@'${host}' IDENTIFIED BY '${decrptedPassword}'`); + yield (0, noDatabaseDbHandler_1.default)(`CREATE USER IF NOT EXISTS '${_mariadbUser.username}'@'${_mariadbUser.host}' IDENTIFIED BY '${decrptedPassword}'`); } const isGrantHandled = yield (0, handleGrants_1.default)({ - username, - host, - grants: grants && typeof grants == "string" - ? JSON.parse(grants) + username: _mariadbUser.username, + host: _mariadbUser.host, + grants: _mariadbUser.grants && + typeof _mariadbUser.grants == "string" + ? JSON.parse(_mariadbUser.grants) : [], userId: String(userId), }); if (!isGrantHandled) { - console.log(`Error in handling grants for user ${username}@${host}`); + console.log(`Error in handling grants for user ${_mariadbUser.username}@${_mariadbUser.host}`); } } } diff --git a/dist/package-shared/shell/recoverMainJsonFromDb.js b/dist/package-shared/shell/recoverMainJsonFromDb.js index c7c5713..a88da32 100644 --- a/dist/package-shared/shell/recoverMainJsonFromDb.js +++ b/dist/package-shared/shell/recoverMainJsonFromDb.js @@ -53,7 +53,7 @@ function recoverMainJsonFromDb() { }; const tableFields = yield (0, varDatabaseDbHandler_1.default)({ database: db_full_name, - queryString: `SHOW COLUMNS FROM ${table_slug}`, + queryString: `SHOW COLUMNS FROM ${db_full_name}.${table_slug}`, }); for (let k = 0; k < tableFields.length; k++) { const { Field, Type, Null, Default, Key } = tableFields[k]; diff --git a/dist/package-shared/shell/tailwindWatch.js b/dist/package-shared/shell/tailwindWatch.js index 02a9f39..468871d 100644 --- a/dist/package-shared/shell/tailwindWatch.js +++ b/dist/package-shared/shell/tailwindWatch.js @@ -20,7 +20,7 @@ const destinationFile = process.argv.indexOf("--dst") >= 0 /** ****************************************************************************** */ console.log("Running Tailwind CSS compiler ..."); fs_1.default.watch("./../", (curr, prev) => { - (0, child_process_1.exec)(`npx tailwindcss -i ./tailwind/main.css -o ./styles/tailwind.css`, (error, stdout, stderr) => { + (0, child_process_1.exec)(`bunx tailwindcss -i ./tailwind/main.css -o ./styles/tailwind.css`, (error, stdout, stderr) => { if (error) { console.log("ERROR =>", error.message); return; diff --git a/dist/package-shared/shell/updateDateTimestamps.js b/dist/package-shared/shell/updateDateTimestamps.js index 4f434df..3a1d1e7 100644 --- a/dist/package-shared/shell/updateDateTimestamps.js +++ b/dist/package-shared/shell/updateDateTimestamps.js @@ -28,15 +28,12 @@ const varDatabaseDbHandler_1 = __importDefault(require("../functions/backend/var const { id, user_id, db_id, db_full_name, table_name, table_slug, table_description, } = table; const tableInfo = yield (0, varDatabaseDbHandler_1.default)({ queryString: `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='${db_full_name}' AND TABLE_NAME='${table_slug}'`, - database: db_full_name, }); const updateCreationDateTimestamp = yield (0, varDatabaseDbHandler_1.default)({ - queryString: `ALTER TABLE \`${table_slug}\` MODIFY COLUMN date_created_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP`, - database: db_full_name, + queryString: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` MODIFY COLUMN date_created_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP`, }); const updateDateTimestamp = yield (0, varDatabaseDbHandler_1.default)({ - queryString: `ALTER TABLE \`${table_slug}\` MODIFY COLUMN date_updated_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP`, - database: db_full_name, + queryString: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` MODIFY COLUMN date_updated_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP`, }); console.log("Date Updated Column updated"); } diff --git a/dist/package-shared/shell/updateDbSlugsForTableRecords.js b/dist/package-shared/shell/updateDbSlugsForTableRecords.js index 82b7028..c91c328 100644 --- a/dist/package-shared/shell/updateDbSlugsForTableRecords.js +++ b/dist/package-shared/shell/updateDbSlugsForTableRecords.js @@ -28,8 +28,7 @@ const DB_HANDLER_1 = __importDefault(require("../utils/backend/global-db/DB_HAND * @description Grab Schema */ (0, varDatabaseDbHandler_1.default)({ - queryString: `SELECT DISTINCT db_id FROM user_database_tables`, - database: "datasquirel", + queryString: `SELECT DISTINCT db_id FROM datasquirel.user_database_tables`, }).then((tables) => __awaiter(void 0, void 0, void 0, function* () { // console.log(tables); // process.exit(); diff --git a/dist/package-shared/shell/updateSSLUsers.js b/dist/package-shared/shell/updateSSLUsers.js index 7f55731..f917a99 100644 --- a/dist/package-shared/shell/updateSSLUsers.js +++ b/dist/package-shared/shell/updateSSLUsers.js @@ -8,23 +8,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge 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 }); require("dotenv").config({ path: "./../.env" }); -const grabDbSSL_1 = __importDefault(require("../utils/backend/grabDbSSL")); -const serverless_mysql_1 = __importDefault(require("serverless-mysql")); -const connection = (0, serverless_mysql_1.default)({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_USERNAME, - password: process.env.DSQL_DB_PASSWORD, - database: process.env.DSQL_DB_NAME, - charset: "utf8mb4", - ssl: (0, grabDbSSL_1.default)(), - }, -}); /** * # Main DB Handler Function * @async @@ -38,11 +23,7 @@ const connection = (0, serverless_mysql_1.default)({ */ (() => __awaiter(void 0, void 0, void 0, function* () { var _a; - /** - * Switch Database - * - * @description If a database is provided, switch to it - */ + const connection = global.DSQL_DB_CONN; try { const result = yield connection.query("SELECT user,host,ssl_type FROM mysql.user"); const parsedResults = JSON.parse(JSON.stringify(result)); diff --git a/dist/package-shared/shell/utils/createTable.d.ts b/dist/package-shared/shell/utils/createTable.d.ts index 4a587d6..8d81665 100644 --- a/dist/package-shared/shell/utils/createTable.d.ts +++ b/dist/package-shared/shell/utils/createTable.d.ts @@ -1,20 +1,13 @@ -import { DSQL_DatabaseSchemaType, DSQL_TableSchemaType } from "../../types"; +import { DSQL_TableSchemaType } from "../../types"; type Param = { dbFullName: string; tableName: string; tableInfoArray: any[]; - dbSchema?: DSQL_DatabaseSchemaType[]; tableSchema?: DSQL_TableSchemaType; recordedDbEntry?: any; - clone?: boolean; }; /** * # Create Table Functions */ -export default function createTable({ dbFullName, tableName, tableInfoArray, dbSchema, clone, tableSchema, recordedDbEntry, }: Param): Promise; +export default function createTable({ dbFullName, tableName, tableInfoArray, tableSchema, recordedDbEntry, }: Param): Promise; export {}; -/** ****************************************************************************** */ -/** ****************************************************************************** */ -/** ****************************************************************************** */ -/** ****************************************************************************** */ -/** ****************************************************************************** */ diff --git a/dist/package-shared/shell/utils/createTable.js b/dist/package-shared/shell/utils/createTable.js index d61a1e3..9ce84f5 100644 --- a/dist/package-shared/shell/utils/createTable.js +++ b/dist/package-shared/shell/utils/createTable.js @@ -21,7 +21,7 @@ const dbHandler_1 = __importDefault(require("./dbHandler")); * # Create Table Functions */ function createTable(_a) { - return __awaiter(this, arguments, void 0, function* ({ dbFullName, tableName, tableInfoArray, dbSchema, clone, tableSchema, recordedDbEntry, }) { + return __awaiter(this, arguments, void 0, function* ({ dbFullName, tableName, tableInfoArray, tableSchema, recordedDbEntry, }) { /** * Format tableInfoArray * @@ -34,7 +34,7 @@ function createTable(_a) { * @description Grab Schema */ const createTableQueryArray = []; - createTableQueryArray.push(`CREATE TABLE IF NOT EXISTS \`${tableName}\` (`); + createTableQueryArray.push(`CREATE TABLE IF NOT EXISTS \`${dbFullName}\`.\`${tableName}\` (`); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// @@ -43,15 +43,14 @@ function createTable(_a) { throw new Error("Recorded Db entry not found!"); } const existingTable = yield (0, varDatabaseDbHandler_1.default)({ - database: "datasquirel", - queryString: `SELECT * FROM user_database_tables WHERE db_id = ? AND table_slug = ?`, + queryString: `SELECT * FROM datasquirel.user_database_tables WHERE db_id = ? AND table_slug = ?`, queryValuesArray: [recordedDbEntry.id, tableSchema === null || tableSchema === void 0 ? void 0 : tableSchema.tableName], }); /** @type {import("../../types").MYSQL_user_database_tables_table_def} */ const table = existingTable === null || existingTable === void 0 ? void 0 : existingTable[0]; if (!(table === null || table === void 0 ? void 0 : table.id)) { const newTableEntry = yield (0, dbHandler_1.default)({ - query: `INSERT INTO user_database_tables SET ?`, + query: `INSERT INTO datasquirel.user_database_tables SET ?`, values: { user_id: recordedDbEntry.user_id, db_id: recordedDbEntry.id, @@ -66,7 +65,6 @@ function createTable(_a) { date_updated: Date(), date_updated_code: Date.now(), }, - database: "datasquirel", }); } } @@ -100,9 +98,6 @@ function createTable(_a) { createTableQueryArray.push(" " + fieldEntryText + comma); //////////////////////////////////////// } - //////////////////////////////////////// - //////////////////////////////////////// - //////////////////////////////////////// if (foreignKeys[0]) { foreignKeys.forEach((foreighKey, index, array) => { var _a, _b, _c, _d, _e; @@ -126,16 +121,7 @@ function createTable(_a) { //////////////////////////////////////// const newTable = yield (0, varDatabaseDbHandler_1.default)({ queryString: createTableQuery, - database: dbFullName, }); return newTable; - //////////////////////////////////////// - //////////////////////////////////////// - //////////////////////////////////////// }); } -/** ****************************************************************************** */ -/** ****************************************************************************** */ -/** ****************************************************************************** */ -/** ****************************************************************************** */ -/** ****************************************************************************** */ diff --git a/dist/package-shared/shell/utils/dbHandler.d.ts b/dist/package-shared/shell/utils/dbHandler.d.ts index 9b726b6..b8c16d4 100644 --- a/dist/package-shared/shell/utils/dbHandler.d.ts +++ b/dist/package-shared/shell/utils/dbHandler.d.ts @@ -1,10 +1,10 @@ type Param = { query: string; values?: string[] | object; - database?: string; }; /** * # Main DB Handler Function + * @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database */ -export default function dbHandler({ query, values, database, }: Param): Promise; +export default function dbHandler({ query, values, }: Param): Promise; export {}; diff --git a/dist/package-shared/shell/utils/dbHandler.js b/dist/package-shared/shell/utils/dbHandler.js index 8bf72d0..0312c76 100644 --- a/dist/package-shared/shell/utils/dbHandler.js +++ b/dist/package-shared/shell/utils/dbHandler.js @@ -15,56 +15,14 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = dbHandler; const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); -const serverless_mysql_1 = __importDefault(require("serverless-mysql")); -const grabDbSSL_1 = __importDefault(require("../../utils/backend/grabDbSSL")); -let connection = (0, serverless_mysql_1.default)({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_USERNAME, - password: process.env.DSQL_DB_PASSWORD, - database: process.env.DSQL_DB_NAME, - charset: "utf8mb4", - ssl: (0, grabDbSSL_1.default)(), - }, -}); /** * # Main DB Handler Function + * @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database */ function dbHandler(_a) { - return __awaiter(this, arguments, void 0, function* ({ query, values, database, }) { - /** - * Switch Database - * - * @description If a database is provided, switch to it - */ - let isDbCorrect = true; - if (database) { - connection = (0, serverless_mysql_1.default)({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_USERNAME, - password: process.env.DSQL_DB_PASSWORD, - database: database, - charset: "utf8mb4", - ssl: (0, grabDbSSL_1.default)(), - }, - }); - } - if (!isDbCorrect) { - console.log("Shell Db Handler ERROR in switching Database! Operation Failed!"); - return null; - } - /** - * Declare variables - * - * @description Declare "results" variable - */ + return __awaiter(this, arguments, void 0, function* ({ query, values, }) { + let connection = global.DSQL_DB_CONN; let results; - /** - * Fetch from db - * - * @description Fetch data from db if no cache - */ try { if (query && values) { results = yield connection.query(query, values); @@ -72,8 +30,6 @@ function dbHandler(_a) { else { results = yield connection.query(query); } - /** ********************* Clean up */ - yield connection.end(); } catch ( /** @type {any} */error) { if (process.env.FIRST_RUN) { @@ -85,11 +41,9 @@ function dbHandler(_a) { fs_1.default.appendFileSync(path_1.default.resolve(__dirname, "../.tmp/dbErrorLogs.txt"), JSON.stringify(error, null, 4) + "\n" + Date() + "\n\n\n", "utf8"); results = null; } - /** - * Return results - * - * @description Return results add to cache if "req" param is passed - */ + finally { + yield (connection === null || connection === void 0 ? void 0 : connection.end()); + } if (results) { return JSON.parse(JSON.stringify(results)); } diff --git a/dist/package-shared/shell/utils/updateTable.js b/dist/package-shared/shell/utils/updateTable.js index a31e302..52af123 100644 --- a/dist/package-shared/shell/utils/updateTable.js +++ b/dist/package-shared/shell/utils/updateTable.js @@ -55,22 +55,21 @@ function updateTable(_a) { /** * @description Push the query initial value */ - updateTableQueryArray.push(`ALTER TABLE \`${tableName}\``); + updateTableQueryArray.push(`ALTER TABLE \`${dbFullName}\`.\`${tableName}\``); if (childDb) { try { if (!recordedDbEntry) { throw new Error("Recorded Db entry not found!"); } const existingTable = yield (0, varDatabaseDbHandler_1.default)({ - database: "datasquirel", - queryString: `SELECT * FROM user_database_tables WHERE db_id = ? AND table_slug = ?`, + queryString: `SELECT * FROM datasquirel.user_database_tables WHERE db_id = ? AND table_slug = ?`, queryValuesArray: [recordedDbEntry.id, tableName], }); /** @type {import("../../types").MYSQL_user_database_tables_table_def} */ const table = existingTable === null || existingTable === void 0 ? void 0 : existingTable[0]; if (!(table === null || table === void 0 ? void 0 : table.id)) { const newTableEntry = yield (0, dbHandler_1.default)({ - query: `INSERT INTO user_database_tables SET ?`, + query: `INSERT INTO datasquirel.user_database_tables SET ?`, values: { user_id: recordedDbEntry.user_id, db_id: recordedDbEntry.id, @@ -85,7 +84,6 @@ function updateTable(_a) { date_updated: Date(), date_updated_code: Date.now(), }, - database: "datasquirel", }); } } @@ -96,16 +94,14 @@ function updateTable(_a) { * @description All indexes from MYSQL db */ // @ts-ignore const allExistingIndexes = yield (0, varDatabaseDbHandler_1.default)({ - queryString: `SHOW INDEXES FROM \`${tableName}\``, - database: dbFullName, + queryString: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\``, }); /** * @type {import("../../types").DSQL_MYSQL_SHOW_COLUMNS_Type[]} * @description All columns from MYSQL db */ // @ts-ignore const allExistingColumns = yield (0, varDatabaseDbHandler_1.default)({ - queryString: `SHOW COLUMNS FROM \`${tableName}\``, - database: dbFullName, + queryString: `SHOW COLUMNS FROM \`${dbFullName}\`.\`${tableName}\``, }); //////////////////////////////////////// /** @@ -133,8 +129,7 @@ function updateTable(_a) { existingEntry[0].fieldName) { updatedColumnsArray.push(existingEntry[0].fieldName); const renameColumn = yield (0, varDatabaseDbHandler_1.default)({ - queryString: `ALTER TABLE ${tableName} RENAME COLUMN \`${existingEntry[0].originName}\` TO \`${existingEntry[0].fieldName}\``, - database: dbFullName, + queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` RENAME COLUMN \`${existingEntry[0].originName}\` TO \`${existingEntry[0].fieldName}\``, }); console.log(`Column Renamed from "${existingEntry[0].originName}" to "${existingEntry[0].fieldName}"`); /** @@ -167,8 +162,7 @@ function updateTable(_a) { } else { yield (0, varDatabaseDbHandler_1.default)({ - queryString: `ALTER TABLE ${tableName} DROP COLUMN \`${Field}\``, - database: dbFullName, + queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP COLUMN \`${Field}\``, }); } } @@ -196,8 +190,7 @@ function updateTable(_a) { * present in the datasquirel DB schema */ yield (0, varDatabaseDbHandler_1.default)({ - queryString: `ALTER TABLE ${tableName} DROP INDEX \`${Key_name}\``, - database: dbFullName, + queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${Key_name}\``, }); } } @@ -227,8 +220,7 @@ function updateTable(_a) { * doesn't exist in MYSQL db */ yield (0, varDatabaseDbHandler_1.default)({ - queryString: `CREATE${(indexType === null || indexType === void 0 ? void 0 : indexType.match(/fullText/i)) ? " FULLTEXT" : ""} INDEX \`${alias}\` ON ${tableName}(${indexTableFields === null || indexTableFields === void 0 ? void 0 : indexTableFields.map((nm) => nm.value).map((nm) => `\`${nm}\``).join(",")}) COMMENT 'schema_index'`, - database: dbFullName, + queryString: `CREATE${(indexType === null || indexType === void 0 ? void 0 : indexType.match(/fullText/i)) ? " FULLTEXT" : ""} INDEX \`${alias}\` ON \`${dbFullName}\`.\`${tableName}\`(${indexTableFields === null || indexTableFields === void 0 ? void 0 : indexTableFields.map((nm) => nm.value).map((nm) => `\`${nm}\``).join(",")}) COMMENT 'schema_index'`, }); } } @@ -242,10 +234,9 @@ function updateTable(_a) { /** * @description All MSQL Foreign Keys * @type {import("../../types").DSQL_MYSQL_FOREIGN_KEYS_Type[] | null} - */ // @ts-ignore + */ const allForeignKeys = yield (0, varDatabaseDbHandler_1.default)({ queryString: `SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = '${dbFullName}' AND TABLE_NAME='${tableName}' AND CONSTRAINT_TYPE='FOREIGN KEY'`, - database: dbFullName, }); if (allForeignKeys) { for (let c = 0; c < allForeignKeys.length; c++) { @@ -260,8 +251,7 @@ function updateTable(_a) { * Foreign keys */ const dropForeignKey = yield (0, varDatabaseDbHandler_1.default)({ - queryString: `ALTER TABLE ${tableName} DROP FOREIGN KEY \`${CONSTRAINT_NAME}\``, - database: dbFullName, + queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP FOREIGN KEY \`${CONSTRAINT_NAME}\``, }); } } @@ -370,9 +360,8 @@ function updateTable(_a) { const { destinationTableName, destinationTableColumnName, cascadeDelete, cascadeUpdate, foreignKeyName, } = foreignKey; const foreinKeyText = `ADD CONSTRAINT \`${foreignKeyName}\` FOREIGN KEY (\`${fieldName}\`) REFERENCES \`${destinationTableName}\`(\`${destinationTableColumnName}\`)${cascadeDelete ? " ON DELETE CASCADE" : ""}${cascadeUpdate ? " ON UPDATE CASCADE" : ""}`; // const foreinKeyText = `ADD CONSTRAINT \`${foreignKeyName}\` FOREIGN KEY (${fieldName}) REFERENCES ${destinationTableName}(${destinationTableColumnName})${cascadeDelete ? " ON DELETE CASCADE" : ""}${cascadeUpdate ? " ON UPDATE CASCADE" : ""}` + ","; - const finalQueryString = `ALTER TABLE \`${tableName}\` ${foreinKeyText}`; + const finalQueryString = `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` ${foreinKeyText}`; const addForeignKey = yield (0, varDatabaseDbHandler_1.default)({ - database: dbFullName, queryString: finalQueryString, }); if (!(addForeignKey === null || addForeignKey === void 0 ? void 0 : addForeignKey.serverStatus)) { @@ -397,7 +386,6 @@ function updateTable(_a) { if (updateTableQueryArray.length > 1) { const updateTable = yield (0, varDatabaseDbHandler_1.default)({ queryString: updateTableQuery, - database: dbFullName, }); return updateTable; } diff --git a/dist/package-shared/shell/utils/varDatabaseDbHandler.d.ts b/dist/package-shared/shell/utils/varDatabaseDbHandler.d.ts index b8fd2c9..52ffafc 100644 --- a/dist/package-shared/shell/utils/varDatabaseDbHandler.d.ts +++ b/dist/package-shared/shell/utils/varDatabaseDbHandler.d.ts @@ -1,12 +1,9 @@ -import { DSQL_TableSchemaType } from "../../types"; type Param = { queryString: string; queryValuesArray?: string[]; - database?: string; - tableSchema?: DSQL_TableSchemaType; }; /** * # DB handler for specific database */ -export default function varDatabaseDbHandler({ queryString, queryValuesArray, database, tableSchema, }: Param): Promise; +export default function varDatabaseDbHandler({ queryString, queryValuesArray, }: Param): Promise; export {}; diff --git a/dist/package-shared/shell/utils/varDatabaseDbHandler.js b/dist/package-shared/shell/utils/varDatabaseDbHandler.js index 4ad6fe3..1a096a9 100644 --- a/dist/package-shared/shell/utils/varDatabaseDbHandler.js +++ b/dist/package-shared/shell/utils/varDatabaseDbHandler.js @@ -18,7 +18,7 @@ const dbHandler_1 = __importDefault(require("./dbHandler")); * # DB handler for specific database */ function varDatabaseDbHandler(_a) { - return __awaiter(this, arguments, void 0, function* ({ queryString, queryValuesArray, database, tableSchema, }) { + return __awaiter(this, arguments, void 0, function* ({ queryString, queryValuesArray, }) { /** * Declare variables * @@ -38,13 +38,11 @@ function varDatabaseDbHandler(_a) { results = yield (0, dbHandler_1.default)({ query: queryString, values: queryValuesArray, - database, }); } else { results = yield (0, dbHandler_1.default)({ query: queryString, - database, }); } //////////////////////////////////////// diff --git a/dist/package-shared/types/index.d.ts b/dist/package-shared/types/index.d.ts index 523b9dd..684f662 100644 --- a/dist/package-shared/types/index.d.ts +++ b/dist/package-shared/types/index.d.ts @@ -903,10 +903,7 @@ export type FetchApiOptions = RequestInit & { [key: string]: any; }; }; -export type AuthCsrfHeaderName = "x-csrf-auth"; type FetchHeader = HeadersInit & { - [key in AuthCsrfHeaderName]?: string | null; -} & { [key: string]: any; }; export type FetchApiReturn = { diff --git a/dist/package-shared/utils/backend/global-db/DB_HANDLER.d.ts b/dist/package-shared/utils/backend/global-db/DB_HANDLER.d.ts index a382337..fe0f49b 100644 --- a/dist/package-shared/utils/backend/global-db/DB_HANDLER.d.ts +++ b/dist/package-shared/utils/backend/global-db/DB_HANDLER.d.ts @@ -1,4 +1,5 @@ /** * # DSQL user read-only DB handler + * @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database */ export default function DB_HANDLER(...args: any[]): Promise; diff --git a/dist/package-shared/utils/backend/global-db/DB_HANDLER.js b/dist/package-shared/utils/backend/global-db/DB_HANDLER.js index 07ce192..424a9be 100644 --- a/dist/package-shared/utils/backend/global-db/DB_HANDLER.js +++ b/dist/package-shared/utils/backend/global-db/DB_HANDLER.js @@ -8,34 +8,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge 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 = DB_HANDLER; -const serverless_mysql_1 = __importDefault(require("serverless-mysql")); -const MASTER = (0, serverless_mysql_1.default)({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_USERNAME, - password: process.env.DSQL_DB_PASSWORD, - database: process.env.DSQL_DB_NAME, - port: process.env.DSQL_DB_PORT - ? Number(process.env.DSQL_DB_PORT) - : undefined, - charset: "utf8mb4", - // ssl: grabDbSSL(), - }, -}); /** * # DSQL user read-only DB handler + * @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database */ function DB_HANDLER(...args) { return __awaiter(this, void 0, void 0, function* () { + const CONNECTION = global.DSQL_DB_CONN; try { - const results = yield MASTER.query(...args); - /** ********************* Clean up */ - yield MASTER.end(); + if (!CONNECTION) + throw new Error("No Connection provided to DB_HANDLER function!"); + const results = yield CONNECTION.query(...args); return JSON.parse(JSON.stringify(results)); } catch (error) { @@ -45,5 +30,8 @@ function DB_HANDLER(...args) { error: error.message, }; } + finally { + yield (CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.end()); + } }); } diff --git a/dist/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.d.ts b/dist/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.d.ts index 6f4b5bf..df60927 100644 --- a/dist/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.d.ts +++ b/dist/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.d.ts @@ -1,14 +1,10 @@ type Param = { paradigm: "Full Access" | "FA" | "Read Only"; - database: string; queryString: string; queryValues?: string[]; }; /** * # DSQL user read-only DB handler */ -export default function DSQL_USER_DB_HANDLER({ paradigm, database, queryString, queryValues, }: Param): Promise | { - success: boolean; - error: any; -}; +export default function DSQL_USER_DB_HANDLER({ paradigm, queryString, queryValues, }: Param): Promise; export {}; diff --git a/dist/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.js b/dist/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.js index 3500ff9..0246a91 100644 --- a/dist/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.js +++ b/dist/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.js @@ -1,102 +1,119 @@ "use strict"; -// @ts-check +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 = DSQL_USER_DB_HANDLER; -const fs_1 = __importDefault(require("fs")); -const serverless_mysql_1 = __importDefault(require("serverless-mysql")); -const grabDbSSL_1 = __importDefault(require("../grabDbSSL")); -let DSQL_USER = (0, serverless_mysql_1.default)({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_READ_ONLY_USERNAME, - password: process.env.DSQL_DB_READ_ONLY_PASSWORD, - charset: "utf8mb4", - ssl: (0, grabDbSSL_1.default)(), - }, -}); +const conn_db_handler_1 = __importDefault(require("../../db/conn-db-handler")); /** * # DSQL user read-only DB handler */ -function DSQL_USER_DB_HANDLER({ paradigm, database, queryString, queryValues, }) { - try { - return new Promise((resolve, reject) => { - const fullAccess = (paradigm === null || paradigm === void 0 ? void 0 : paradigm.match(/full.access|^fa$/i)) - ? true - : false; - try { - if (fullAccess) { - DSQL_USER = (0, serverless_mysql_1.default)({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_FULL_ACCESS_USERNAME, - password: process.env.DSQL_DB_FULL_ACCESS_PASSWORD, - database: database, - ssl: (0, grabDbSSL_1.default)(), - }, - }); - } - else { - DSQL_USER = (0, serverless_mysql_1.default)({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_READ_ONLY_USERNAME, - password: process.env.DSQL_DB_READ_ONLY_PASSWORD, - database: database, - ssl: (0, grabDbSSL_1.default)(), - }, - }); - } - /** - * ### Run query Function - * @param {any} results - */ - function runQuery(results) { - DSQL_USER.end(); - resolve(JSON.parse(JSON.stringify(results))); - } - /** - * ### Query Error - * @param {any} err - */ - function queryError(err) { - DSQL_USER.end(); - resolve({ - error: err.message, - queryStringGenerated: queryString, - queryValuesGenerated: queryValues, - sql: err.sql, - }); - } - if (queryValues && - Array.isArray(queryValues) && - queryValues[0]) { - DSQL_USER.query(queryString, queryValues) - .then(runQuery) - .catch(queryError); - } - else { - DSQL_USER.query(queryString) - .then(runQuery) - .catch(queryError); - } - //////////////////////////////////////// +function DSQL_USER_DB_HANDLER(_a) { + return __awaiter(this, arguments, void 0, function* ({ paradigm, queryString, queryValues, }) { + try { + switch (paradigm) { + case "Read Only": + return yield (0, conn_db_handler_1.default)(global.DSQL_READ_ONLY_DB_CONN, queryString, queryValues); + case "Full Access": + return yield (0, conn_db_handler_1.default)(global.DSQL_FULL_ACCESS_DB_CONN, queryString, queryValues); + case "FA": + return yield (0, conn_db_handler_1.default)(global.DSQL_FULL_ACCESS_DB_CONN, queryString, queryValues); + default: + return null; } - catch ( /** @type {any} */error) { - //////////////////////////////////////// - fs_1.default.appendFileSync("./.tmp/dbErrorLogs.txt", error.message + "\n" + Date() + "\n\n\n", "utf8"); - resolve({ - error: error.message, - }); - } - }); - } - catch ( /** @type {any} */error) { - return { - success: false, - error: error.message, - }; - } + } + catch (error) { + console.log(`DSQL_USER_DB_HANDLER Error: ${error.message}`); + return null; + } + // try { + // return new Promise((resolve, reject) => { + // const fullAccess = paradigm?.match(/full.access|^fa$/i) + // ? true + // : false; + // try { + // if (fullAccess) { + // DSQL_USER = mysql({ + // config: { + // host: process.env.DSQL_DB_HOST, + // user: process.env.DSQL_DB_FULL_ACCESS_USERNAME, + // password: process.env.DSQL_DB_FULL_ACCESS_PASSWORD, + // database: database, + // ssl: grabDbSSL(), + // }, + // }); + // } else { + // DSQL_USER = mysql({ + // config: { + // host: process.env.DSQL_DB_HOST, + // user: process.env.DSQL_DB_READ_ONLY_USERNAME, + // password: process.env.DSQL_DB_READ_ONLY_PASSWORD, + // database: database, + // ssl: grabDbSSL(), + // }, + // }); + // } + // /** + // * ### Run query Function + // * @param {any} results + // */ + // function runQuery(results: any) { + // DSQL_USER.end(); + // resolve(JSON.parse(JSON.stringify(results))); + // } + // /** + // * ### Query Error + // * @param {any} err + // */ + // function queryError(err: any) { + // DSQL_USER.end(); + // resolve({ + // error: err.message, + // queryStringGenerated: queryString, + // queryValuesGenerated: queryValues, + // sql: err.sql, + // }); + // } + // if ( + // queryValues && + // Array.isArray(queryValues) && + // queryValues[0] + // ) { + // DSQL_USER.query(queryString, queryValues) + // .then(runQuery) + // .catch(queryError); + // } else { + // DSQL_USER.query(queryString) + // .then(runQuery) + // .catch(queryError); + // } + // //////////////////////////////////////// + // } catch (/** @type {any} */ error: any) { + // //////////////////////////////////////// + // fs.appendFileSync( + // "./.tmp/dbErrorLogs.txt", + // error.message + "\n" + Date() + "\n\n\n", + // "utf8" + // ); + // resolve({ + // error: error.message, + // }); + // } + // }); + // } catch (/** @type {any} */ error: any) { + // return { + // success: false, + // error: error.message, + // }; + // } + }); } diff --git a/dist/package-shared/utils/backend/global-db/NO_DB_HANDLER.js b/dist/package-shared/utils/backend/global-db/NO_DB_HANDLER.js index d8acf26..f4a64e0 100644 --- a/dist/package-shared/utils/backend/global-db/NO_DB_HANDLER.js +++ b/dist/package-shared/utils/backend/global-db/NO_DB_HANDLER.js @@ -1,24 +1,11 @@ "use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = NO_DB_HANDLER; -const serverless_mysql_1 = __importDefault(require("serverless-mysql")); -const grabDbSSL_1 = __importDefault(require("../grabDbSSL")); -let NO_DB = (0, serverless_mysql_1.default)({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_USERNAME, - password: process.env.DSQL_DB_PASSWORD, - charset: "utf8mb4", - ssl: (0, grabDbSSL_1.default)(), - }, -}); /** * # DSQL user read-only DB handler */ function NO_DB_HANDLER(...args) { + const NO_DB = global.DSQL_DB_CONN; try { return new Promise((resolve, reject) => { NO_DB.query(...args) diff --git a/dist/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.js b/dist/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.js index 2c0d27d..0454d4f 100644 --- a/dist/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.js +++ b/dist/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.js @@ -1,25 +1,11 @@ "use strict"; -// @ts-check -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = ROOT_DB_HANDLER; -const serverless_mysql_1 = __importDefault(require("serverless-mysql")); -const grabDbSSL_1 = __importDefault(require("../grabDbSSL")); -let NO_DB = (0, serverless_mysql_1.default)({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_USERNAME, - password: process.env.DSQL_DB_PASSWORD, - charset: "utf8mb4", - ssl: (0, grabDbSSL_1.default)(), - }, -}); /** * # Root DB handler */ function ROOT_DB_HANDLER(...args) { + const NO_DB = global.DSQL_DB_CONN; try { return new Promise((resolve, reject) => { NO_DB.query(...args) diff --git a/dist/package-shared/utils/backend/grabDbSSL.js b/dist/package-shared/utils/backend/grabDbSSL.js index f17481a..2663703 100644 --- a/dist/package-shared/utils/backend/grabDbSSL.js +++ b/dist/package-shared/utils/backend/grabDbSSL.js @@ -20,5 +20,8 @@ function grabDbSSL() { } return { ca: fs_1.default.readFileSync(`${SSL_DIR}/ca-cert.pem`), + // key: fs.readFileSync(`${SSL_DIR}/client-key.pem`), + // cert: fs.readFileSync(`${SSL_DIR}/client-cert.pem`), + rejectUnauthorized: false, }; } diff --git a/dist/utils/get-schema.js b/dist/utils/get-schema.js index 34ad679..09673a5 100644 --- a/dist/utils/get-schema.js +++ b/dist/utils/get-schema.js @@ -65,9 +65,6 @@ function getSchema(_a) { }) .end(); }); - return { - success: true, - payload: httpResponse, - }; + return httpResponse; }); } diff --git a/package-shared/functions/api/query/get.ts b/package-shared/functions/api/query/get.ts index f121159..678071b 100644 --- a/package-shared/functions/api/query/get.ts +++ b/package-shared/functions/api/query/get.ts @@ -3,6 +3,7 @@ import _ from "lodash"; import serverError from "../../backend/serverError"; import runQuery from "../../backend/db/runQuery"; +import { DSQL_TableSchemaType, GetReturn } from "../../../types"; type Param = { query: string; @@ -31,11 +32,6 @@ export default async function apiGet({ return { success: false, msg: "Wrong Input." }; } - /** - * Create new user folder and file - * - * @description Create new user folder and file - */ let results; try { @@ -49,10 +45,7 @@ export default async function apiGet({ local: useLocal, }); - /** @type {import("../../../types").DSQL_TableSchemaType | undefined} */ - let tableSchema: - | import("../../../types").DSQL_TableSchemaType - | undefined; + let tableSchema: DSQL_TableSchemaType | undefined; if (dbSchema) { const targetTable = dbSchema.tables.find( @@ -77,20 +70,23 @@ export default async function apiGet({ results = result; - /** @type {import("../../../types").GetReturn} */ - const resObject: import("../../../types").GetReturn = { + const resObject: GetReturn = { success: true, payload: results, schema: tableName && tableSchema ? tableSchema : undefined, }; return resObject; - } catch (/** @type {any} */ error: any) { + } catch (error: any) { serverError({ component: "/api/query/get/lines-85-94", message: error.message, }); - return { success: false, payload: null, error: error.message }; + return { + success: false, + payload: null, + error: error.message, + }; } } diff --git a/package-shared/functions/api/social-login/handleSocialDb.ts b/package-shared/functions/api/social-login/handleSocialDb.ts index 0121703..ada0e15 100755 --- a/package-shared/functions/api/social-login/handleSocialDb.ts +++ b/package-shared/functions/api/social-login/handleSocialDb.ts @@ -26,7 +26,7 @@ export default async function handleSocialDb({ useLocal, }: HandleSocialDbFunctionParams): Promise { try { - const existingSocialIdUserQuery = `SELECT * FROM users WHERE social_id = ? AND social_login='1' AND social_platform = ? `; + const existingSocialIdUserQuery = `SELECT * FROM datasquirel.users WHERE social_id = ? AND social_login='1' AND social_platform = ? `; const existingSocialIdUserValues = [ social_id.toString(), social_platform, @@ -60,7 +60,7 @@ export default async function handleSocialDb({ }; } - const existingEmailOnlyQuery = `SELECT * FROM users WHERE email='${finalEmail}'`; + const existingEmailOnlyQuery = `SELECT * FROM datasquirel.users WHERE email='${finalEmail}'`; let existingEmailOnly = await varDatabaseDbHandler({ database: database ? database : "datasquirel", @@ -76,7 +76,7 @@ export default async function handleSocialDb({ }; } - const foundUserQuery = `SELECT * FROM users WHERE email=? AND social_login='1' AND social_platform=? AND social_id=?`; + const foundUserQuery = `SELECT * FROM datasquirel.users WHERE email=? AND social_login='1' AND social_platform=? AND social_id=?`; const foundUserQueryValues = [finalEmail, social_platform, social_id]; const foundUser = await varDatabaseDbHandler({ @@ -134,7 +134,7 @@ export default async function handleSocialDb({ await addMariadbUser({ userId: newUser.insertId, useLocal }); } - const newUserQueriedQuery = `SELECT * FROM users WHERE id='${newUser.insertId}'`; + const newUserQueriedQuery = `SELECT * FROM datasquirel.users WHERE id='${newUser.insertId}'`; const newUserQueried = await varDatabaseDbHandler({ database: database ? database : "datasquirel", diff --git a/package-shared/functions/api/social-login/loginSocialUser.ts b/package-shared/functions/api/social-login/loginSocialUser.ts index b45d380..9d71f3d 100755 --- a/package-shared/functions/api/social-login/loginSocialUser.ts +++ b/package-shared/functions/api/social-login/loginSocialUser.ts @@ -30,11 +30,13 @@ export default async function loginSocialUser({ additionalFields, useLocal, }: Param): Promise { - const foundUserQuery = `SELECT * FROM users WHERE email=? AND social_id=? AND social_platform=?`; + const finalDbName = database ? database : "datasquirel"; + + const foundUserQuery = `SELECT * FROM \`${finalDbName}\`.\`users\` WHERE email=? AND social_id=? AND social_platform=?`; const foundUserValues = [user.email, user.social_id, social_platform]; const foundUser = await varDatabaseDbHandler({ - database: database ? database : "datasquirel", + database: finalDbName, queryString: foundUserQuery, queryValuesArray: foundUserValues, useLocal, diff --git a/package-shared/functions/api/users/api-create-user.ts b/package-shared/functions/api/users/api-create-user.ts index 224da0c..938b1ef 100644 --- a/package-shared/functions/api/users/api-create-user.ts +++ b/package-shared/functions/api/users/api-create-user.ts @@ -46,7 +46,7 @@ export default async function apiCreateUser({ payload.password = hashedPassword; - const fieldsQuery = `SHOW COLUMNS FROM users`; + const fieldsQuery = `SHOW COLUMNS FROM ${dbFullName}.users`; let fields = await varDatabaseDbHandler({ queryString: fieldsQuery, @@ -100,7 +100,7 @@ export default async function apiCreateUser({ }; } - const existingUserQuery = `SELECT * FROM users WHERE email = ?${ + const existingUserQuery = `SELECT * FROM ${dbFullName}.users WHERE email = ?${ payload.username ? " OR username = ?" : "" }`; const existingUserValues = payload.username @@ -140,7 +140,7 @@ export default async function apiCreateUser({ }); if (addUser?.insertId) { - const newlyAddedUserQuery = `SELECT id,first_name,last_name,email,username,phone,image,image_thumbnail,city,state,country,zip_code,address,verification_status,more_user_data FROM users WHERE id='${addUser.insertId}'`; + const newlyAddedUserQuery = `SELECT id,first_name,last_name,email,username,phone,image,image_thumbnail,city,state,country,zip_code,address,verification_status,more_user_data FROM ${dbFullName}.users WHERE id='${addUser.insertId}'`; const newlyAddedUser = await varDatabaseDbHandler({ queryString: newlyAddedUserQuery, diff --git a/package-shared/functions/api/users/api-delete-user.ts b/package-shared/functions/api/users/api-delete-user.ts index d1dc8bd..7a051c7 100644 --- a/package-shared/functions/api/users/api-delete-user.ts +++ b/package-shared/functions/api/users/api-delete-user.ts @@ -16,7 +16,7 @@ export default async function apiDeleteUser({ deletedUserId, useLocal, }: Param): Promise { - const existingUserQuery = `SELECT * FROM users WHERE id = ?`; + const existingUserQuery = `SELECT * FROM ${dbFullName}.users WHERE id = ?`; const existingUserValues = [deletedUserId]; const existingUser = await varDatabaseDbHandler({ diff --git a/package-shared/functions/api/users/api-get-user.ts b/package-shared/functions/api/users/api-get-user.ts index 07d1250..c7c308b 100644 --- a/package-shared/functions/api/users/api-get-user.ts +++ b/package-shared/functions/api/users/api-get-user.ts @@ -13,13 +13,17 @@ export default async function apiGetUser({ userId, useLocal, }: APIGetUserFunctionParams): Promise { - const query = `SELECT ${fields.join(",")} FROM users WHERE id=?`; + const finalDbName = dbFullName.replace(/[^a-z0-9_]/g, ""); + + const query = `SELECT ${fields.join( + "," + )} FROM ${finalDbName}.users WHERE id=?`; const API_USER_ID = userId || process.env.DSQL_API_USER_ID; let foundUser = await varDatabaseDbHandler({ queryString: query, queryValuesArray: [API_USER_ID], - database: dbFullName.replace(/[^a-z0-9_]/g, ""), + database: finalDbName, useLocal, }); diff --git a/package-shared/functions/api/users/api-login.ts b/package-shared/functions/api/users/api-login.ts index 3bd729f..fb7c851 100644 --- a/package-shared/functions/api/users/api-login.ts +++ b/package-shared/functions/api/users/api-login.ts @@ -24,7 +24,7 @@ export default async function apiLoginUser({ social, useLocal, }: APILoginFunctionParams): Promise { - const dbFullName = database; + const dbFullName = database.replace(/[^a-z0-9_]/g, ""); /** * Check input validity @@ -55,9 +55,9 @@ export default async function apiLoginUser({ : null; let foundUser = await varDatabaseDbHandler({ - queryString: `SELECT * FROM users WHERE email = ? OR username = ?`, + queryString: `SELECT * FROM ${dbFullName}.users WHERE email = ? OR username = ?`, queryValuesArray: [email, username], - database: dbFullName.replace(/[^a-z0-9_]/g, ""), + database: dbFullName, useLocal, }); @@ -108,9 +108,9 @@ export default async function apiLoginUser({ if (isPasswordCorrect && email_login) { const resetTempCode = await varDatabaseDbHandler({ - queryString: `UPDATE users SET ${email_login_field} = '' WHERE email = ? OR username = ?`, + queryString: `UPDATE ${dbFullName}.users SET ${email_login_field} = '' WHERE email = ? OR username = ?`, queryValuesArray: [email, username], - database: dbFullName.replace(/[^a-z0-9_]/g, ""), + database: dbFullName, useLocal, }); } diff --git a/package-shared/functions/api/users/api-reauth-user.ts b/package-shared/functions/api/users/api-reauth-user.ts index 3ab3d60..c142e8a 100644 --- a/package-shared/functions/api/users/api-reauth-user.ts +++ b/package-shared/functions/api/users/api-reauth-user.ts @@ -20,7 +20,7 @@ export default async function apiReauthUser({ let foundUser = existingUser?.id && existingUser.id.toString().match(/./) ? await varDatabaseDbHandler({ - queryString: `SELECT * FROM users WHERE id=?`, + queryString: `SELECT * FROM ${database}.users WHERE id=?`, queryValuesArray: [existingUser.id.toString()], database, useLocal, diff --git a/package-shared/functions/api/users/api-send-email-code.ts b/package-shared/functions/api/users/api-send-email-code.ts index 3426edb..965153d 100644 --- a/package-shared/functions/api/users/api-send-email-code.ts +++ b/package-shared/functions/api/users/api-send-email-code.ts @@ -46,7 +46,7 @@ export default async function apiSendEmailCode({ } const createdAt = Date.now(); - const foundUserQuery = `SELECT * FROM users WHERE email = ?`; + const foundUserQuery = `SELECT * FROM ${database}.users WHERE email = ?`; const foundUserValues = [email]; let foundUser = await varDatabaseDbHandler({ @@ -107,13 +107,13 @@ export default async function apiSendEmailCode({ if (!info?.accepted) throw new Error("Mail not Sent!"); - const setTempCodeQuery = `UPDATE users SET ${email_login_field} = ? WHERE email = ?`; + const setTempCodeQuery = `UPDATE ${database}.users SET ${email_login_field} = ? WHERE email = ?`; const setTempCodeValues = [tempCode + `-${createdAt}`, email]; let setTempCode = await varDatabaseDbHandler({ queryString: setTempCodeQuery, queryValuesArray: setTempCodeValues, - database: database, + database, useLocal, }); diff --git a/package-shared/functions/api/users/api-update-user.ts b/package-shared/functions/api/users/api-update-user.ts index a6641ce..f9ebbbb 100644 --- a/package-shared/functions/api/users/api-update-user.ts +++ b/package-shared/functions/api/users/api-update-user.ts @@ -25,7 +25,7 @@ export default async function apiUpdateUser({ useLocal, dbSchema, }: Param): Promise { - const existingUserQuery = `SELECT * FROM users WHERE id = ?`; + const existingUserQuery = `SELECT * FROM ${dbFullName}.users WHERE id = ?`; const existingUserValues = [updatedUserId]; const existingUser = await varDatabaseDbHandler({ diff --git a/package-shared/functions/backend/db/addDbEntry.ts b/package-shared/functions/backend/db/addDbEntry.ts index 4d9c6bd..0ea3a18 100644 --- a/package-shared/functions/backend/db/addDbEntry.ts +++ b/package-shared/functions/backend/db/addDbEntry.ts @@ -107,8 +107,7 @@ export default async function addDbEntry({ ) : await dbHandler({ paradigm: "Read Only", - database: dbFullName, - queryString: `SELECT * FROM \`${tableName}\` WHERE \`${duplicateColumnName}\`=?`, + queryString: `SELECT * FROM \`${dbFullName}\`.\`${tableName}\` WHERE \`${duplicateColumnName}\`=?`, queryValues: [duplicateColumnValue], }); @@ -234,7 +233,7 @@ export default async function addDbEntry({ //////////////////////////////////////// - const query = `INSERT INTO \`${tableName}\` (${insertKeysArray.join( + const query = `INSERT INTO \`${dbFullName}\`.\`${tableName}\` (${insertKeysArray.join( "," )}) VALUES (${insertValuesArray.map(() => "?").join(",")})`; const queryValuesArray = insertValuesArray; @@ -243,7 +242,6 @@ export default async function addDbEntry({ ? await dbHandler(query, queryValuesArray) : await dbHandler({ paradigm, - database: dbFullName, queryString: query, queryValues: queryValuesArray, }); diff --git a/package-shared/functions/backend/db/deleteDbEntry.ts b/package-shared/functions/backend/db/deleteDbEntry.ts index 2c9df39..391f34b 100644 --- a/package-shared/functions/backend/db/deleteDbEntry.ts +++ b/package-shared/functions/backend/db/deleteDbEntry.ts @@ -47,14 +47,13 @@ export default async function deleteDbEntry({ * * @description */ - const query = `DELETE FROM ${tableName} WHERE \`${identifierColumnName}\`=?`; + const query = `DELETE FROM \`${dbFullName}\`.\`${tableName}\` WHERE \`${identifierColumnName}\`=?`; const deletedEntry = isMaster ? await dbHandler(query, [identifierValue]) : await dbHandler({ paradigm, queryString: query, - database: dbFullName, queryValues: [identifierValue], }); diff --git a/package-shared/functions/backend/db/runQuery.ts b/package-shared/functions/backend/db/runQuery.ts index 8d47274..d7101a6 100644 --- a/package-shared/functions/backend/db/runQuery.ts +++ b/package-shared/functions/backend/db/runQuery.ts @@ -84,7 +84,6 @@ export default async function runQuery({ result = await varReadOnlyDatabaseDbHandler({ queryString: formattedQuery, queryValuesArray: queryValuesArray?.map((vl) => String(vl)), - database: dbFullName, tableSchema, useLocal: local, }); @@ -92,7 +91,6 @@ export default async function runQuery({ result = await fullAccessDbHandler({ queryString: formattedQuery, queryValuesArray: queryValuesArray?.map((vl) => String(vl)), - database: dbFullName, tableSchema, local, }); diff --git a/package-shared/functions/backend/db/updateDbEntry.ts b/package-shared/functions/backend/db/updateDbEntry.ts index 25186cd..b405e97 100644 --- a/package-shared/functions/backend/db/updateDbEntry.ts +++ b/package-shared/functions/backend/db/updateDbEntry.ts @@ -164,7 +164,7 @@ export default async function updateDbEntry({ //////////////////////////////////////// //////////////////////////////////////// - const query = `UPDATE ${tableName} SET ${updateKeyValueArray.join( + const query = `UPDATE \`${dbFullName}\`.\`${tableName}\` SET ${updateKeyValueArray.join( "," )} WHERE \`${identifierColumnName}\`=?`; @@ -174,7 +174,6 @@ export default async function updateDbEntry({ ? await dbHandler(query, updateValues) : await dbHandler({ paradigm, - database: dbFullName, queryString: query, queryValues: updateValues, }); diff --git a/package-shared/functions/backend/dbHandler.ts b/package-shared/functions/backend/dbHandler.ts index 8dd3df8..f2281ea 100644 --- a/package-shared/functions/backend/dbHandler.ts +++ b/package-shared/functions/backend/dbHandler.ts @@ -1,20 +1,6 @@ import fs from "fs"; import serverError from "./serverError"; -import mysql from "serverless-mysql"; -import grabDbSSL from "../../utils/backend/grabDbSSL"; - -const connection = mysql({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_USERNAME, - password: process.env.DSQL_DB_PASSWORD, - database: process.env.DSQL_DB_NAME, - charset: "utf8mb4", - ssl: grabDbSSL(), - }, -}); - /** * # Main DB Handler Function */ @@ -26,11 +12,6 @@ export default async function dbHandler(...args: any[]) { "utf8" ); - /** - * Declare variables - * - * @description Declare "results" variable - */ let results; /** @@ -39,6 +20,8 @@ export default async function dbHandler(...args: any[]) { * @description Fetch data from db if no cache */ try { + const connection = global.DSQL_DB_CONN; + results = await new Promise((resolve, reject) => { connection.query( ...args, diff --git a/package-shared/functions/backend/fullAccessDbHandler.ts b/package-shared/functions/backend/fullAccessDbHandler.ts index 7d4a026..17e9309 100644 --- a/package-shared/functions/backend/fullAccessDbHandler.ts +++ b/package-shared/functions/backend/fullAccessDbHandler.ts @@ -7,7 +7,6 @@ import serverError from "./serverError"; type Param = { queryString: string; - database: string; local?: boolean; tableSchema?: import("../../types").DSQL_TableSchemaType | null; queryValuesArray?: string[]; @@ -18,7 +17,6 @@ type Param = { */ export default async function fullAccessDbHandler({ queryString, - database, tableSchema, queryValuesArray, local, @@ -42,7 +40,6 @@ export default async function fullAccessDbHandler({ ? await LOCAL_DB_HANDLER(queryString, queryValuesArray) : await DSQL_USER_DB_HANDLER({ paradigm: "Full Access", - database, queryString, queryValues: queryValuesArray, }); diff --git a/package-shared/functions/backend/noDatabaseDbHandler.ts b/package-shared/functions/backend/noDatabaseDbHandler.ts index a4efb55..37d4bc7 100644 --- a/package-shared/functions/backend/noDatabaseDbHandler.ts +++ b/package-shared/functions/backend/noDatabaseDbHandler.ts @@ -1,6 +1,6 @@ import fs from "fs"; import serverError from "./serverError"; -import NO_DB_HANDLER from "../../../package-shared/utils/backend/global-db/NO_DB_HANDLER"; +import NO_DB_HANDLER from "@/package-shared/utils/backend/global-db/NO_DB_HANDLER"; /** * # No Database DB Handler diff --git a/package-shared/functions/backend/varDatabaseDbHandler.ts b/package-shared/functions/backend/varDatabaseDbHandler.ts index dbda796..acb0bcf 100644 --- a/package-shared/functions/backend/varDatabaseDbHandler.ts +++ b/package-shared/functions/backend/varDatabaseDbHandler.ts @@ -33,7 +33,6 @@ export default async function varDatabaseDbHandler({ ? true : false; - /** @type {any} */ const FINAL_DB_HANDLER: any = useLocal ? LOCAL_DB_HANDLER : isMaster @@ -58,7 +57,6 @@ export default async function varDatabaseDbHandler({ ? await FINAL_DB_HANDLER(queryString, queryValuesArray) : await FINAL_DB_HANDLER({ paradigm: "Full Access", - database, queryString, queryValues: queryValuesArray, }); @@ -67,11 +65,11 @@ export default async function varDatabaseDbHandler({ ? await FINAL_DB_HANDLER(queryString) : await FINAL_DB_HANDLER({ paradigm: "Full Access", - database, queryString, }); } } catch (error: any) { + console.log(`varDatabaseDbHandler Error: ${error.message}`); serverError({ component: "varDatabaseDbHandler/lines-29-32", message: error.message, diff --git a/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.ts b/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.ts index f3d2787..dc36456 100644 --- a/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.ts +++ b/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.ts @@ -8,7 +8,6 @@ import LOCAL_DB_HANDLER from "../../utils/backend/global-db/LOCAL_DB_HANDLER"; type Param = { queryString: string; - database: string; queryValuesArray?: string[]; tableSchema?: import("../../types").DSQL_TableSchemaType; useLocal?: boolean; @@ -20,7 +19,6 @@ type Param = { */ export default async function varReadOnlyDatabaseDbHandler({ queryString, - database, queryValuesArray, tableSchema, useLocal, @@ -42,7 +40,6 @@ export default async function varReadOnlyDatabaseDbHandler({ ? await LOCAL_DB_HANDLER(queryString, queryValuesArray) : await DSQL_USER_DB_HANDLER({ paradigm: "Read Only", - database, queryString, queryValues: queryValuesArray, }); diff --git a/package-shared/shell/checkDb.ts b/package-shared/shell/checkDb.ts index 58bf4c6..f29a7a9 100755 --- a/package-shared/shell/checkDb.ts +++ b/package-shared/shell/checkDb.ts @@ -2,17 +2,6 @@ require("dotenv").config({ path: "./../.env" }); import mysql from "serverless-mysql"; import grabDbSSL from "../utils/backend/grabDbSSL"; -const connection = mysql({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_USERNAME, - password: process.env.DSQL_DB_PASSWORD, - database: process.env.DSQL_DB_NAME, - charset: "utf8mb4", - ssl: grabDbSSL(), - }, -}); - /** * # Main DB Handler Function * @async @@ -25,11 +14,8 @@ const connection = mysql({ * @returns {Promise} */ (async () => { - /** - * Switch Database - * - * @description If a database is provided, switch to it - */ + const connection = global.DSQL_DB_CONN; + try { const result = await connection.query( "SELECT id,first_name,last_name FROM users LIMIT 3" diff --git a/package-shared/shell/createDbFromSchema.ts b/package-shared/shell/createDbFromSchema.ts index b8c2314..b21c76b 100755 --- a/package-shared/shell/createDbFromSchema.ts +++ b/package-shared/shell/createDbFromSchema.ts @@ -8,7 +8,6 @@ import updateTable from "./utils/updateTable"; import dbHandler from "./utils/dbHandler"; import EJSON from "../utils/ejson"; import { DSQL_DatabaseSchemaType } from "../types"; -import { parseArgs } from "util"; type Param = { userId?: number | string | null; @@ -18,20 +17,13 @@ type Param = { /** * # Create database from Schema Function + * @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database */ export default async function createDbFromSchema({ userId, targetDatabase, dbSchemaData, }: Param) { - console.log("///////////////////////////////"); - console.log("///////////////////////////////"); - console.log("Rebuilding Database ..."); - console.log("process.env.DSQL_DB_HOST", process.env.DSQL_DB_HOST); - console.log("process.env.DSQL_DB_USERNAME", process.env.DSQL_DB_USERNAME); - console.log("process.env.DSQL_DB_PASSWORD", process.env.DSQL_DB_PASSWORD); - console.log("process.env.DSQL_DB_NAME", process.env.DSQL_DB_NAME); - const schemaPath = userId ? path.join( String(process.env.DSQL_USER_DB_SCHEMA_PATH), @@ -53,9 +45,8 @@ export default async function createDbFromSchema({ // await createDatabasesFromSchema(dbSchema); for (let i = 0; i < dbSchema.length; i++) { - /** @type {import("../types").DSQL_DatabaseSchemaType} */ - const database: import("../types").DSQL_DatabaseSchemaType = - dbSchema[i]; + const database: DSQL_DatabaseSchemaType = dbSchema[i]; + const { dbFullName, tables, dbName, dbSlug, childrenDatabases } = database; @@ -63,18 +54,12 @@ export default async function createDbFromSchema({ continue; } - console.log("Checking Database ..."); - /** @type {any} */ const dbCheck: any = await noDatabaseDbHandler( `SELECT SCHEMA_NAME AS dbFullName FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '${dbFullName}'` ); - console.log("DB Checked Success!"); - - if (dbCheck && dbCheck[0]?.dbFullName) { - // Database Exists - } else { + if (!dbCheck?.[0]?.dbFullName) { const newDatabase = await noDatabaseDbHandler( `CREATE DATABASE IF NOT EXISTS \`${dbFullName}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin` ); @@ -115,20 +100,17 @@ export default async function createDbFromSchema({ if (oldTableFilteredArray && oldTableFilteredArray[0]) { console.log("Renaming Table"); await varDatabaseDbHandler({ - queryString: `RENAME TABLE \`${oldTableFilteredArray[0].tableNameOld}\` TO \`${oldTableFilteredArray[0].tableName}\``, - database: dbFullName, + queryString: `RENAME TABLE \`${dbFullName}\`.\`${oldTableFilteredArray[0].tableNameOld}\` TO \`${oldTableFilteredArray[0].tableName}\``, }); } else { console.log(`Dropping Table from ${dbFullName}`); await varDatabaseDbHandler({ - queryString: `DROP TABLE \`${TABLE_NAME}\``, - database: dbFullName, + queryString: `DROP TABLE \`${dbFullName}\`.\`${TABLE_NAME}\``, }); const deleteTableEntry = await dbHandler({ - query: `DELETE FROM user_database_tables WHERE user_id = ? AND db_slug = ? AND table_slug = ?`, + query: `DELETE FROM datasquirel.user_database_tables WHERE user_id = ? AND db_slug = ? AND table_slug = ?`, values: [userId, dbSlug, TABLE_NAME], - database: "datasquirel", }); } } @@ -136,8 +118,7 @@ export default async function createDbFromSchema({ const recordedDbEntryArray = userId ? await varDatabaseDbHandler({ - database: "datasquirel", - queryString: `SELECT * FROM user_databases WHERE db_full_name = ?`, + queryString: `SELECT * FROM datasquirel.user_databases WHERE db_full_name = ?`, queryValuesArray: [dbFullName], }) : undefined; @@ -168,7 +149,6 @@ export default async function createDbFromSchema({ TABLE_NAME = ? ) AS tableExists`, queryValuesArray: [dbFullName, table.tableName], - database: dbFullName, }); //////////////////////////////////////// @@ -222,7 +202,6 @@ export default async function createDbFromSchema({ tableName: tableName, tableInfoArray: fields, dbFullName: dbFullName, - dbSchema, tableSchema: table, recordedDbEntry, }); @@ -255,8 +234,7 @@ export default async function createDbFromSchema({ */ // @ts-ignore const allExistingIndexes: import("../types").DSQL_MYSQL_SHOW_INDEXES_Type[] = await varDatabaseDbHandler({ - queryString: `SHOW INDEXES FROM \`${tableName}\``, - database: dbFullName, + queryString: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\``, }); const existingKeyInDb = @@ -278,11 +256,10 @@ export default async function createDbFromSchema({ indexType?.match(/fullText/i) ? " FULLTEXT" : "" - } INDEX \`${alias}\` ON ${tableName}(${indexTableFields + } INDEX \`${alias}\` ON \`${dbFullName}\`.\`${tableName}\`(${indexTableFields ?.map((nm) => nm.value) .map((nm) => `\`${nm}\``) .join(",")}) COMMENT 'schema_index'`, - database: dbFullName, }); } } @@ -306,21 +283,4 @@ export default async function createDbFromSchema({ } } } - - console.log("Database Successfully Rebuilt!"); - console.log("///////////////////////////////"); - console.log("///////////////////////////////"); -} - -const { values } = parseArgs({ - args: process.argv, - options: { - exec: { type: "boolean" }, - }, - strict: true, - allowPositionals: true, -}); - -if (values.exec) { - createDbFromSchema({}); } diff --git a/package-shared/shell/encodingUpdate.ts b/package-shared/shell/encodingUpdate.ts index 6ddce06..c7a3850 100755 --- a/package-shared/shell/encodingUpdate.ts +++ b/package-shared/shell/encodingUpdate.ts @@ -32,17 +32,14 @@ varDatabaseDbHandler({ const tableInfo = await varDatabaseDbHandler({ queryString: `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='${db_full_name}' AND TABLE_NAME='${table_slug}'`, - database: db_full_name, }); const updateDbCharset = await varDatabaseDbHandler({ queryString: `ALTER DATABASE ${db_full_name} CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin;`, - database: db_full_name, }); const updateEncoding = await varDatabaseDbHandler({ - queryString: `ALTER TABLE \`${table_slug}\` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`, - database: db_full_name, + queryString: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`, }); } diff --git a/package-shared/shell/mariadb-users/handleGrants.ts b/package-shared/shell/mariadb-users/handleGrants.ts index 8ae5e6a..4240a94 100755 --- a/package-shared/shell/mariadb-users/handleGrants.ts +++ b/package-shared/shell/mariadb-users/handleGrants.ts @@ -7,9 +7,9 @@ export interface GrantType { } type Param = { - username: string; - host: string; - grants: GrantType[]; + username?: string; + host?: string; + grants?: GrantType[]; userId: string; }; diff --git a/package-shared/shell/mariadb-users/refreshUsersAndGrants.ts b/package-shared/shell/mariadb-users/refreshUsersAndGrants.ts index 455e1b9..8e29dc9 100755 --- a/package-shared/shell/mariadb-users/refreshUsersAndGrants.ts +++ b/package-shared/shell/mariadb-users/refreshUsersAndGrants.ts @@ -7,13 +7,14 @@ import dbHandler from "../utils/dbHandler"; import handleGrants, { GrantType } from "./handleGrants"; import encrypt from "../../functions/dsql/encrypt"; import decrypt from "../../functions/dsql/decrypt"; +import { MYSQL_mariadb_users_table_def } from "../../types"; const defaultMariadbUserHost = process.env.DSQL_DB_HOST || "127.0.0.1"; type Param = { userId?: number | string; mariadbUserHost?: string; - mariadbUser?: string; + mariadbUsername?: string; sqlUserID?: string | number; }; @@ -23,29 +24,30 @@ type Param = { export default async function refreshUsersAndGrants({ userId, mariadbUserHost, - mariadbUser, + mariadbUsername, sqlUserID, }: Param) { - /** - * @description Users - * @type {*[] | null} - */ // @ts-ignore - const users: any[] | null = await dbHandler({ - query: `SELECT * FROM users`, - }); + const mariadbUsers = (await dbHandler({ + query: `SELECT * FROM mariadb_users`, + })) as any[] | null; - if (!users?.[0]) { - process.exit(); + if (!mariadbUsers?.[0]) { + return; } - for (let i = 0; i < users.length; i++) { - const user = users[i]; + const isRootUser = userId + ? userId == Number(process.env.DSQL_SU_USER_ID) + : false; - if (!user) continue; - if (userId && user.id != userId) continue; + for (let i = 0; i < mariadbUsers.length; i++) { + const mariadbUser = mariadbUsers[i]; + + if (!mariadbUser) continue; + if (userId && mariadbUser.user_id != userId) continue; try { - const { mariadb_user, mariadb_host, mariadb_pass, id } = user; + const { mariadb_user, mariadb_host, mariadb_pass, user_id } = + mariadbUser; const existingUser = await noDatabaseDbHandler( `SELECT * FROM mysql.user WHERE User = '${mariadb_user}' AND Host = '${mariadb_host}'` ); @@ -58,9 +60,6 @@ export default async function refreshUsersAndGrants({ }) : null; - /** - * @type {import("../../types").MYSQL_mariadb_users_table_def | undefined} - */ const activeMariadbUserObject: | import("../../types").MYSQL_mariadb_users_table_def | undefined = Array.isArray(existingMariaDBUserArray) @@ -79,7 +78,10 @@ export default async function refreshUsersAndGrants({ mariadbUserHost == defaultMariadbUserHost ); - const dslUsername = `dsql_user_${id}`; + const dslUsername = isRootUser + ? mariadbUsername + : `dsql_user_${user_id}`; + const dsqlPassword = activeMariadbUserObject?.password ? activeMariadbUserObject.password : isUserExisting @@ -101,12 +103,13 @@ export default async function refreshUsersAndGrants({ encryptionKey: process.env.DSQL_ENCRYPTION_PASSWORD, encryptionSalt: process.env.DSQL_ENCRYPTION_SALT, }); + if ( !isUserExisting && !sqlUserID && !isPrimary && !mariadbUserHost && - !mariadbUser + !mariadbUsername ) { const createNewUser = await noDatabaseDbHandler( `CREATE USER IF NOT EXISTS '${dslUsername}'@'${defaultMariadbUserHost}' IDENTIFIED BY '${dsqlPassword}'` @@ -115,7 +118,7 @@ export default async function refreshUsersAndGrants({ console.log("createNewUser", createNewUser); console.log( - `User ${user.id}: ${user.first_name} ${user.last_name} SQL credentials successfully updated.` + `User ${mariadbUser.id}: ${mariadbUser.first_name} ${mariadbUser.last_name} SQL credentials successfully updated.` ); const updateUser = await dbHandler({ @@ -124,9 +127,13 @@ export default async function refreshUsersAndGrants({ dslUsername, defaultMariadbUserHost, encryptedPassword, - user.id, + mariadbUser.id, ], }); + } else if (!isUserExisting && mariadbUserHost) { + const createNewUser = await noDatabaseDbHandler( + `CREATE USER IF NOT EXISTS '${dslUsername}'@'${mariadbUserHost}' IDENTIFIED BY '${dsqlPassword}'` + ); } if (isPrimary) { @@ -140,7 +147,7 @@ export default async function refreshUsersAndGrants({ dslUsername, finalHost, encryptedPassword, - user.id, + mariadbUser.id, ], }); } @@ -154,7 +161,7 @@ export default async function refreshUsersAndGrants({ */ const existingMariadbPrimaryUser = await dbHandler({ query: `SELECT * FROM mariadb_users WHERE user_id = ? AND \`primary\` = 1`, - values: [id], + values: [user_id], }); const isPrimaryUserExisting = Boolean( @@ -174,7 +181,7 @@ export default async function refreshUsersAndGrants({ const insertPrimaryMariadbUser = await dbHandler({ query: `INSERT INTO mariadb_users (user_id, username, password, \`primary\`, grants) VALUES (?, ?, ?, ?, ?)`, values: [ - id, + user_id, dslUsername, encryptedPassword, "1", @@ -187,32 +194,31 @@ export default async function refreshUsersAndGrants({ const existingExtraMariadbUsers = await dbHandler({ query: `SELECT * FROM mariadb_users WHERE user_id = ? AND \`primary\` != '1'`, - values: [id], + values: [user_id], }); if (Array.isArray(existingExtraMariadbUsers)) { for (let i = 0; i < existingExtraMariadbUsers.length; i++) { - const mariadbUser = existingExtraMariadbUsers[i]; - const { - user_id, - username, - host, - password, - primary, - grants, - } = mariadbUser; + const _mariadbUser = existingExtraMariadbUsers[ + i + ] as MYSQL_mariadb_users_table_def; - if (mariadbUser && username != mariadbUser) continue; - if (mariadbUserHost && host != mariadbUserHost) continue; + if ( + _mariadbUser && + _mariadbUser.username != mariadbUsername + ) + continue; + if (mariadbUserHost && _mariadbUser.host != mariadbUserHost) + continue; const decrptedPassword = decrypt({ - encryptedString: password, + encryptedString: _mariadbUser.password || "", encryptionKey: process.env.DSQL_ENCRYPTION_PASSWORD, encryptionSalt: process.env.DSQL_ENCRYPTION_SALT, }); const existingExtraMariadbUser = await noDatabaseDbHandler( - `SELECT * FROM mysql.user WHERE User = '${username}' AND Host = '${host}'` + `SELECT * FROM mysql.user WHERE User='${_mariadbUser.username}' AND Host='${_mariadbUser.host}'` ); const isExtraMariadbUserExisting = Boolean( @@ -221,23 +227,24 @@ export default async function refreshUsersAndGrants({ if (!isExtraMariadbUserExisting) { await noDatabaseDbHandler( - `CREATE USER IF NOT EXISTS '${username}'@'${host}' IDENTIFIED BY '${decrptedPassword}'` + `CREATE USER IF NOT EXISTS '${_mariadbUser.username}'@'${_mariadbUser.host}' IDENTIFIED BY '${decrptedPassword}'` ); } const isGrantHandled = await handleGrants({ - username, - host, + username: _mariadbUser.username, + host: _mariadbUser.host, grants: - grants && typeof grants == "string" - ? JSON.parse(grants) + _mariadbUser.grants && + typeof _mariadbUser.grants == "string" + ? JSON.parse(_mariadbUser.grants) : [], userId: String(userId), }); if (!isGrantHandled) { console.log( - `Error in handling grants for user ${username}@${host}` + `Error in handling grants for user ${_mariadbUser.username}@${_mariadbUser.host}` ); } } diff --git a/package-shared/shell/recoverMainJsonFromDb.ts b/package-shared/shell/recoverMainJsonFromDb.ts index 3fe8f88..3355a9f 100755 --- a/package-shared/shell/recoverMainJsonFromDb.ts +++ b/package-shared/shell/recoverMainJsonFromDb.ts @@ -54,7 +54,7 @@ async function recoverMainJsonFromDb() { const tableFields = await varDatabaseDbHandler({ database: db_full_name, - queryString: `SHOW COLUMNS FROM ${table_slug}`, + queryString: `SHOW COLUMNS FROM ${db_full_name}.${table_slug}`, }); for (let k = 0; k < tableFields.length; k++) { diff --git a/package-shared/shell/tailwindWatch.ts b/package-shared/shell/tailwindWatch.ts index d16d92e..7f15c5b 100755 --- a/package-shared/shell/tailwindWatch.ts +++ b/package-shared/shell/tailwindWatch.ts @@ -23,7 +23,7 @@ console.log("Running Tailwind CSS compiler ..."); fs.watch("./../", (curr, prev) => { exec( - `npx tailwindcss -i ./tailwind/main.css -o ./styles/tailwind.css`, + `bunx tailwindcss -i ./tailwind/main.css -o ./styles/tailwind.css`, (error, stdout, stderr) => { if (error) { console.log("ERROR =>", error.message); diff --git a/package-shared/shell/updateDateTimestamps.ts b/package-shared/shell/updateDateTimestamps.ts index 1a4c7af..c35ef25 100755 --- a/package-shared/shell/updateDateTimestamps.ts +++ b/package-shared/shell/updateDateTimestamps.ts @@ -24,17 +24,14 @@ varDatabaseDbHandler({ const tableInfo = await varDatabaseDbHandler({ queryString: `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='${db_full_name}' AND TABLE_NAME='${table_slug}'`, - database: db_full_name, }); const updateCreationDateTimestamp = await varDatabaseDbHandler({ - queryString: `ALTER TABLE \`${table_slug}\` MODIFY COLUMN date_created_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP`, - database: db_full_name, + queryString: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` MODIFY COLUMN date_created_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP`, }); const updateDateTimestamp = await varDatabaseDbHandler({ - queryString: `ALTER TABLE \`${table_slug}\` MODIFY COLUMN date_updated_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP`, - database: db_full_name, + queryString: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` MODIFY COLUMN date_updated_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP`, }); console.log("Date Updated Column updated"); diff --git a/package-shared/shell/updateDbSlugsForTableRecords.ts b/package-shared/shell/updateDbSlugsForTableRecords.ts index 022f3b6..4e8217f 100755 --- a/package-shared/shell/updateDbSlugsForTableRecords.ts +++ b/package-shared/shell/updateDbSlugsForTableRecords.ts @@ -17,8 +17,7 @@ import DB_HANDLER from "../utils/backend/global-db/DB_HANDLER"; * @description Grab Schema */ varDatabaseDbHandler({ - queryString: `SELECT DISTINCT db_id FROM user_database_tables`, - database: "datasquirel", + queryString: `SELECT DISTINCT db_id FROM datasquirel.user_database_tables`, }).then(async (tables) => { // console.log(tables); // process.exit(); diff --git a/package-shared/shell/updateSSLUsers.ts b/package-shared/shell/updateSSLUsers.ts index ff1aa01..2f2a3c4 100755 --- a/package-shared/shell/updateSSLUsers.ts +++ b/package-shared/shell/updateSSLUsers.ts @@ -2,17 +2,6 @@ require("dotenv").config({ path: "./../.env" }); import grabDbSSL from "../utils/backend/grabDbSSL"; import mysql from "serverless-mysql"; -const connection = mysql({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_USERNAME, - password: process.env.DSQL_DB_PASSWORD, - database: process.env.DSQL_DB_NAME, - charset: "utf8mb4", - ssl: grabDbSSL(), - }, -}); - /** * # Main DB Handler Function * @async @@ -25,11 +14,8 @@ const connection = mysql({ * @returns {Promise} */ (async () => { - /** - * Switch Database - * - * @description If a database is provided, switch to it - */ + const connection = global.DSQL_DB_CONN; + try { const result = await connection.query( "SELECT user,host,ssl_type FROM mysql.user" diff --git a/package-shared/shell/utils/createTable.ts b/package-shared/shell/utils/createTable.ts index 55be093..14959db 100755 --- a/package-shared/shell/utils/createTable.ts +++ b/package-shared/shell/utils/createTable.ts @@ -8,10 +8,8 @@ type Param = { dbFullName: string; tableName: string; tableInfoArray: any[]; - dbSchema?: DSQL_DatabaseSchemaType[]; tableSchema?: DSQL_TableSchemaType; recordedDbEntry?: any; - clone?: boolean; }; /** @@ -21,8 +19,6 @@ export default async function createTable({ dbFullName, tableName, tableInfoArray, - dbSchema, - clone, tableSchema, recordedDbEntry, }: Param) { @@ -40,7 +36,9 @@ export default async function createTable({ */ const createTableQueryArray = []; - createTableQueryArray.push(`CREATE TABLE IF NOT EXISTS \`${tableName}\` (`); + createTableQueryArray.push( + `CREATE TABLE IF NOT EXISTS \`${dbFullName}\`.\`${tableName}\` (` + ); //////////////////////////////////////// //////////////////////////////////////// @@ -52,8 +50,7 @@ export default async function createTable({ } const existingTable = await varDatabaseDbHandler({ - database: "datasquirel", - queryString: `SELECT * FROM user_database_tables WHERE db_id = ? AND table_slug = ?`, + queryString: `SELECT * FROM datasquirel.user_database_tables WHERE db_id = ? AND table_slug = ?`, queryValuesArray: [recordedDbEntry.id, tableSchema?.tableName], }); @@ -63,7 +60,7 @@ export default async function createTable({ if (!table?.id) { const newTableEntry = await dbHandler({ - query: `INSERT INTO user_database_tables SET ?`, + query: `INSERT INTO datasquirel.user_database_tables SET ?`, values: { user_id: recordedDbEntry.user_id, db_id: recordedDbEntry.id, @@ -80,7 +77,6 @@ export default async function createTable({ date_updated: Date(), date_updated_code: Date.now(), }, - database: "datasquirel", }); } } catch (error) {} @@ -150,10 +146,6 @@ export default async function createTable({ //////////////////////////////////////// } - //////////////////////////////////////// - //////////////////////////////////////// - //////////////////////////////////////// - if (foreignKeys[0]) { foreignKeys.forEach((foreighKey, index, array) => { const fieldName = foreighKey.fieldName; @@ -190,18 +182,7 @@ export default async function createTable({ const newTable = await varDatabaseDbHandler({ queryString: createTableQuery, - database: dbFullName, }); return newTable; - - //////////////////////////////////////// - //////////////////////////////////////// - //////////////////////////////////////// } - -/** ****************************************************************************** */ -/** ****************************************************************************** */ -/** ****************************************************************************** */ -/** ****************************************************************************** */ -/** ****************************************************************************** */ diff --git a/package-shared/shell/utils/dbHandler.ts b/package-shared/shell/utils/dbHandler.ts index 8a15e15..f81b4d3 100755 --- a/package-shared/shell/utils/dbHandler.ts +++ b/package-shared/shell/utils/dbHandler.ts @@ -4,79 +4,29 @@ import path from "path"; import mysql from "serverless-mysql"; import grabDbSSL from "../../utils/backend/grabDbSSL"; -let connection = mysql({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_USERNAME, - password: process.env.DSQL_DB_PASSWORD, - database: process.env.DSQL_DB_NAME, - charset: "utf8mb4", - ssl: grabDbSSL(), - }, -}); - type Param = { query: string; values?: string[] | object; - database?: string; }; /** * # Main DB Handler Function + * @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database */ export default async function dbHandler({ query, values, - database, }: Param): Promise { - /** - * Switch Database - * - * @description If a database is provided, switch to it - */ - let isDbCorrect = true; + let connection = global.DSQL_DB_CONN; - if (database) { - connection = mysql({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_USERNAME, - password: process.env.DSQL_DB_PASSWORD, - database: database, - charset: "utf8mb4", - ssl: grabDbSSL(), - }, - }); - } - - if (!isDbCorrect) { - console.log( - "Shell Db Handler ERROR in switching Database! Operation Failed!" - ); - return null; - } - - /** - * Declare variables - * - * @description Declare "results" variable - */ let results; - /** - * Fetch from db - * - * @description Fetch data from db if no cache - */ try { if (query && values) { results = await connection.query(query, values); } else { results = await connection.query(query); } - - /** ********************* Clean up */ - await connection.end(); } catch (/** @type {any} */ error: any) { if (process.env.FIRST_RUN) { return null; @@ -92,13 +42,10 @@ export default async function dbHandler({ "utf8" ); results = null; + } finally { + await connection?.end(); } - /** - * Return results - * - * @description Return results add to cache if "req" param is passed - */ if (results) { return JSON.parse(JSON.stringify(results)); } else { diff --git a/package-shared/shell/utils/updateTable.ts b/package-shared/shell/utils/updateTable.ts index 9e7c0b1..eb0aaf5 100755 --- a/package-shared/shell/utils/updateTable.ts +++ b/package-shared/shell/utils/updateTable.ts @@ -75,7 +75,9 @@ export default async function updateTable({ /** * @description Push the query initial value */ - updateTableQueryArray.push(`ALTER TABLE \`${tableName}\``); + updateTableQueryArray.push( + `ALTER TABLE \`${dbFullName}\`.\`${tableName}\`` + ); if (childDb) { try { @@ -84,8 +86,7 @@ export default async function updateTable({ } const existingTable = await varDatabaseDbHandler({ - database: "datasquirel", - queryString: `SELECT * FROM user_database_tables WHERE db_id = ? AND table_slug = ?`, + queryString: `SELECT * FROM datasquirel.user_database_tables WHERE db_id = ? AND table_slug = ?`, queryValuesArray: [recordedDbEntry.id, tableName], }); @@ -95,7 +96,7 @@ export default async function updateTable({ if (!table?.id) { const newTableEntry = await dbHandler({ - query: `INSERT INTO user_database_tables SET ?`, + query: `INSERT INTO datasquirel.user_database_tables SET ?`, values: { user_id: recordedDbEntry.user_id, db_id: recordedDbEntry.id, @@ -112,7 +113,6 @@ export default async function updateTable({ date_updated: Date(), date_updated_code: Date.now(), }, - database: "datasquirel", }); } } catch (error) {} @@ -124,8 +124,7 @@ export default async function updateTable({ */ // @ts-ignore const allExistingIndexes: import("../../types").DSQL_MYSQL_SHOW_INDEXES_Type[] = await varDatabaseDbHandler({ - queryString: `SHOW INDEXES FROM \`${tableName}\``, - database: dbFullName, + queryString: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\``, }); /** @@ -134,8 +133,7 @@ export default async function updateTable({ */ // @ts-ignore const allExistingColumns: import("../../types").DSQL_MYSQL_SHOW_COLUMNS_Type[] = await varDatabaseDbHandler({ - queryString: `SHOW COLUMNS FROM \`${tableName}\``, - database: dbFullName, + queryString: `SHOW COLUMNS FROM \`${dbFullName}\`.\`${tableName}\``, }); //////////////////////////////////////// @@ -174,8 +172,7 @@ export default async function updateTable({ updatedColumnsArray.push(existingEntry[0].fieldName); const renameColumn = await varDatabaseDbHandler({ - queryString: `ALTER TABLE ${tableName} RENAME COLUMN \`${existingEntry[0].originName}\` TO \`${existingEntry[0].fieldName}\``, - database: dbFullName, + queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` RENAME COLUMN \`${existingEntry[0].originName}\` TO \`${existingEntry[0].fieldName}\``, }); console.log( @@ -241,8 +238,7 @@ export default async function updateTable({ //////////////////////////////////////// } else { await varDatabaseDbHandler({ - queryString: `ALTER TABLE ${tableName} DROP COLUMN \`${Field}\``, - database: dbFullName, + queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP COLUMN \`${Field}\``, }); } } @@ -275,8 +271,7 @@ export default async function updateTable({ * present in the datasquirel DB schema */ await varDatabaseDbHandler({ - queryString: `ALTER TABLE ${tableName} DROP INDEX \`${Key_name}\``, - database: dbFullName, + queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${Key_name}\``, }); } } @@ -312,11 +307,10 @@ export default async function updateTable({ await varDatabaseDbHandler({ queryString: `CREATE${ indexType?.match(/fullText/i) ? " FULLTEXT" : "" - } INDEX \`${alias}\` ON ${tableName}(${indexTableFields + } INDEX \`${alias}\` ON \`${dbFullName}\`.\`${tableName}\`(${indexTableFields ?.map((nm) => nm.value) .map((nm) => `\`${nm}\``) .join(",")}) COMMENT 'schema_index'`, - database: dbFullName, }); } } @@ -332,12 +326,11 @@ export default async function updateTable({ /** * @description All MSQL Foreign Keys * @type {import("../../types").DSQL_MYSQL_FOREIGN_KEYS_Type[] | null} - */ // @ts-ignore + */ const allForeignKeys: | import("../../types").DSQL_MYSQL_FOREIGN_KEYS_Type[] | null = await varDatabaseDbHandler({ queryString: `SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = '${dbFullName}' AND TABLE_NAME='${tableName}' AND CONSTRAINT_TYPE='FOREIGN KEY'`, - database: dbFullName, }); if (allForeignKeys) { @@ -354,8 +347,7 @@ export default async function updateTable({ * Foreign keys */ const dropForeignKey = await varDatabaseDbHandler({ - queryString: `ALTER TABLE ${tableName} DROP FOREIGN KEY \`${CONSTRAINT_NAME}\``, - database: dbFullName, + queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP FOREIGN KEY \`${CONSTRAINT_NAME}\``, }); } } @@ -500,10 +492,9 @@ export default async function updateTable({ }${cascadeUpdate ? " ON UPDATE CASCADE" : ""}`; // const foreinKeyText = `ADD CONSTRAINT \`${foreignKeyName}\` FOREIGN KEY (${fieldName}) REFERENCES ${destinationTableName}(${destinationTableColumnName})${cascadeDelete ? " ON DELETE CASCADE" : ""}${cascadeUpdate ? " ON UPDATE CASCADE" : ""}` + ","; - const finalQueryString = `ALTER TABLE \`${tableName}\` ${foreinKeyText}`; + const finalQueryString = `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` ${foreinKeyText}`; const addForeignKey = await varDatabaseDbHandler({ - database: dbFullName, queryString: finalQueryString, }); @@ -533,7 +524,6 @@ export default async function updateTable({ if (updateTableQueryArray.length > 1) { const updateTable = await varDatabaseDbHandler({ queryString: updateTableQuery, - database: dbFullName, }); return updateTable; diff --git a/package-shared/shell/utils/varDatabaseDbHandler.ts b/package-shared/shell/utils/varDatabaseDbHandler.ts index 3652727..054d086 100755 --- a/package-shared/shell/utils/varDatabaseDbHandler.ts +++ b/package-shared/shell/utils/varDatabaseDbHandler.ts @@ -4,8 +4,6 @@ import { DSQL_TableSchemaType } from "../../types"; type Param = { queryString: string; queryValuesArray?: string[]; - database?: string; - tableSchema?: DSQL_TableSchemaType; }; /** @@ -14,8 +12,6 @@ type Param = { export default async function varDatabaseDbHandler({ queryString, queryValuesArray, - database, - tableSchema, }: Param): Promise { /** * Declare variables @@ -39,12 +35,10 @@ export default async function varDatabaseDbHandler({ results = await dbHandler({ query: queryString, values: queryValuesArray, - database, }); } else { results = await dbHandler({ query: queryString, - database, }); } diff --git a/package-shared/types/index.ts b/package-shared/types/index.ts index b9763c5..768623d 100644 --- a/package-shared/types/index.ts +++ b/package-shared/types/index.ts @@ -1067,11 +1067,7 @@ export type FetchApiOptions = RequestInit & { query?: { [key: string]: any }; }; -export type AuthCsrfHeaderName = "x-csrf-auth"; - type FetchHeader = HeadersInit & { - [key in AuthCsrfHeaderName]?: string | null; -} & { [key: string]: any; }; diff --git a/package-shared/utils/backend/global-db/DB_HANDLER.ts b/package-shared/utils/backend/global-db/DB_HANDLER.ts index 92380f8..6f32d13 100644 --- a/package-shared/utils/backend/global-db/DB_HANDLER.ts +++ b/package-shared/utils/backend/global-db/DB_HANDLER.ts @@ -1,29 +1,15 @@ -import mysql from "serverless-mysql"; -import grabDbSSL from "../grabDbSSL"; - -const MASTER = mysql({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_USERNAME, - password: process.env.DSQL_DB_PASSWORD, - database: process.env.DSQL_DB_NAME, - port: process.env.DSQL_DB_PORT - ? Number(process.env.DSQL_DB_PORT) - : undefined, - charset: "utf8mb4", - // ssl: grabDbSSL(), - }, -}); - /** * # DSQL user read-only DB handler + * @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database */ export default async function DB_HANDLER(...args: any[]) { - try { - const results = await MASTER.query(...args); + const CONNECTION = global.DSQL_DB_CONN; - /** ********************* Clean up */ - await MASTER.end(); + try { + if (!CONNECTION) + throw new Error("No Connection provided to DB_HANDLER function!"); + + const results = await CONNECTION.query(...args); return JSON.parse(JSON.stringify(results)); } catch (error: any) { @@ -32,5 +18,7 @@ export default async function DB_HANDLER(...args: any[]) { success: false, error: error.message, }; + } finally { + await CONNECTION?.end(); } } diff --git a/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.ts b/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.ts index c4fbcbd..f0659f1 100644 --- a/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.ts +++ b/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.ts @@ -1,24 +1,7 @@ -// @ts-check - -import fs from "fs"; -import path from "path"; - -import mysql from "serverless-mysql"; -import grabDbSSL from "../grabDbSSL"; - -let DSQL_USER = mysql({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_READ_ONLY_USERNAME, - password: process.env.DSQL_DB_READ_ONLY_PASSWORD, - charset: "utf8mb4", - ssl: grabDbSSL(), - }, -}); +import connDbHandler from "../../db/conn-db-handler"; type Param = { paradigm: "Full Access" | "FA" | "Read Only"; - database: string; queryString: string; queryValues?: string[]; }; @@ -26,97 +9,127 @@ type Param = { /** * # DSQL user read-only DB handler */ -export default function DSQL_USER_DB_HANDLER({ +export default async function DSQL_USER_DB_HANDLER({ paradigm, - database, queryString, queryValues, }: Param) { try { - return new Promise((resolve, reject) => { - const fullAccess = paradigm?.match(/full.access|^fa$/i) - ? true - : false; - - try { - if (fullAccess) { - DSQL_USER = mysql({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_FULL_ACCESS_USERNAME, - password: process.env.DSQL_DB_FULL_ACCESS_PASSWORD, - database: database, - ssl: grabDbSSL(), - }, - }); - } else { - DSQL_USER = mysql({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_READ_ONLY_USERNAME, - password: process.env.DSQL_DB_READ_ONLY_PASSWORD, - database: database, - ssl: grabDbSSL(), - }, - }); - } - - /** - * ### Run query Function - * @param {any} results - */ - function runQuery(results: any) { - DSQL_USER.end(); - resolve(JSON.parse(JSON.stringify(results))); - } - - /** - * ### Query Error - * @param {any} err - */ - function queryError(err: any) { - DSQL_USER.end(); - resolve({ - error: err.message, - queryStringGenerated: queryString, - queryValuesGenerated: queryValues, - sql: err.sql, - }); - } - - if ( - queryValues && - Array.isArray(queryValues) && - queryValues[0] - ) { - DSQL_USER.query(queryString, queryValues) - .then(runQuery) - .catch(queryError); - } else { - DSQL_USER.query(queryString) - .then(runQuery) - .catch(queryError); - } - - //////////////////////////////////////// - } catch (/** @type {any} */ error: any) { - //////////////////////////////////////// - - fs.appendFileSync( - "./.tmp/dbErrorLogs.txt", - error.message + "\n" + Date() + "\n\n\n", - "utf8" + switch (paradigm) { + case "Read Only": + return await connDbHandler( + global.DSQL_READ_ONLY_DB_CONN, + queryString, + queryValues ); - resolve({ - error: error.message, - }); - } - }); - } catch (/** @type {any} */ error: any) { - return { - success: false, - error: error.message, - }; + case "Full Access": + return await connDbHandler( + global.DSQL_FULL_ACCESS_DB_CONN, + queryString, + queryValues + ); + + case "FA": + return await connDbHandler( + global.DSQL_FULL_ACCESS_DB_CONN, + queryString, + queryValues + ); + + default: + return null; + } + } catch (error: any) { + console.log(`DSQL_USER_DB_HANDLER Error: ${error.message}`); + return null; } + + // try { + // return new Promise((resolve, reject) => { + // const fullAccess = paradigm?.match(/full.access|^fa$/i) + // ? true + // : false; + + // try { + // if (fullAccess) { + // DSQL_USER = mysql({ + // config: { + // host: process.env.DSQL_DB_HOST, + // user: process.env.DSQL_DB_FULL_ACCESS_USERNAME, + // password: process.env.DSQL_DB_FULL_ACCESS_PASSWORD, + // database: database, + // ssl: grabDbSSL(), + // }, + // }); + // } else { + // DSQL_USER = mysql({ + // config: { + // host: process.env.DSQL_DB_HOST, + // user: process.env.DSQL_DB_READ_ONLY_USERNAME, + // password: process.env.DSQL_DB_READ_ONLY_PASSWORD, + // database: database, + // ssl: grabDbSSL(), + // }, + // }); + // } + + // /** + // * ### Run query Function + // * @param {any} results + // */ + // function runQuery(results: any) { + // DSQL_USER.end(); + // resolve(JSON.parse(JSON.stringify(results))); + // } + + // /** + // * ### Query Error + // * @param {any} err + // */ + // function queryError(err: any) { + // DSQL_USER.end(); + // resolve({ + // error: err.message, + // queryStringGenerated: queryString, + // queryValuesGenerated: queryValues, + // sql: err.sql, + // }); + // } + + // if ( + // queryValues && + // Array.isArray(queryValues) && + // queryValues[0] + // ) { + // DSQL_USER.query(queryString, queryValues) + // .then(runQuery) + // .catch(queryError); + // } else { + // DSQL_USER.query(queryString) + // .then(runQuery) + // .catch(queryError); + // } + + // //////////////////////////////////////// + // } catch (/** @type {any} */ error: any) { + // //////////////////////////////////////// + + // fs.appendFileSync( + // "./.tmp/dbErrorLogs.txt", + // error.message + "\n" + Date() + "\n\n\n", + // "utf8" + // ); + + // resolve({ + // error: error.message, + // }); + // } + // }); + // } catch (/** @type {any} */ error: any) { + // return { + // success: false, + // error: error.message, + // }; + // } } diff --git a/package-shared/utils/backend/global-db/NO_DB_HANDLER.ts b/package-shared/utils/backend/global-db/NO_DB_HANDLER.ts index 27b397e..c1569e8 100644 --- a/package-shared/utils/backend/global-db/NO_DB_HANDLER.ts +++ b/package-shared/utils/backend/global-db/NO_DB_HANDLER.ts @@ -1,20 +1,12 @@ import mysql from "serverless-mysql"; import grabDbSSL from "../grabDbSSL"; -let NO_DB = mysql({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_USERNAME, - password: process.env.DSQL_DB_PASSWORD, - charset: "utf8mb4", - ssl: grabDbSSL(), - }, -}); - /** * # DSQL user read-only DB handler */ export default function NO_DB_HANDLER(...args: any[]) { + const NO_DB = global.DSQL_DB_CONN; + try { return new Promise((resolve, reject) => { NO_DB.query(...args) diff --git a/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.ts b/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.ts index cd56728..1bff67a 100644 --- a/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.ts +++ b/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.ts @@ -1,22 +1,9 @@ -// @ts-check - -import mysql from "serverless-mysql"; -import grabDbSSL from "../grabDbSSL"; - -let NO_DB = mysql({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_USERNAME, - password: process.env.DSQL_DB_PASSWORD, - charset: "utf8mb4", - ssl: grabDbSSL(), - }, -}); - /** * # Root DB handler */ export default function ROOT_DB_HANDLER(...args: any[]) { + const NO_DB = global.DSQL_DB_CONN; + try { return new Promise((resolve, reject) => { NO_DB.query(...args) diff --git a/package-shared/utils/backend/grabDbSSL.ts b/package-shared/utils/backend/grabDbSSL.ts index e94c28f..f0d8b06 100644 --- a/package-shared/utils/backend/grabDbSSL.ts +++ b/package-shared/utils/backend/grabDbSSL.ts @@ -25,5 +25,8 @@ export default function grabDbSSL(): Return { return { ca: fs.readFileSync(`${SSL_DIR}/ca-cert.pem`), + // key: fs.readFileSync(`${SSL_DIR}/client-key.pem`), + // cert: fs.readFileSync(`${SSL_DIR}/client-cert.pem`), + rejectUnauthorized: false, }; } diff --git a/package.json b/package.json index 4778185..fcc2844 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@moduletrace/datasquirel", - "version": "3.4.2", + "version": "3.4.3", "description": "Cloud-based SQL data management tool", "main": "dist/index.js", "bin": { diff --git a/utils/get-schema.ts b/utils/get-schema.ts index 023adb9..e85ef4a 100644 --- a/utils/get-schema.ts +++ b/utils/get-schema.ts @@ -91,8 +91,5 @@ export default async function getSchema({ .end(); }); - return { - success: true, - payload: httpResponse as any, - }; + return httpResponse as GetSchemaReturn; }