This commit is contained in:
Benjamin Toby 2025-01-14 00:01:02 +01:00
parent 8f00f333aa
commit d586de0639
90 changed files with 533 additions and 960 deletions

View File

@ -26,11 +26,6 @@ function apiGet(_a) {
query.match(/^alter|^delete|information_schema|databases|^create/i)) { query.match(/^alter|^delete|information_schema|databases|^create/i)) {
return { success: false, msg: "Wrong Input." }; return { success: false, msg: "Wrong Input." };
} }
/**
* Create new user folder and file
*
* @description Create new user folder and file
*/
let results; let results;
try { try {
let { result, error } = yield (0, runQuery_1.default)({ let { result, error } = yield (0, runQuery_1.default)({
@ -42,7 +37,6 @@ function apiGet(_a) {
tableName, tableName,
local: useLocal, local: useLocal,
}); });
/** @type {import("../../../types").DSQL_TableSchemaType | undefined} */
let tableSchema; let tableSchema;
if (dbSchema) { if (dbSchema) {
const targetTable = dbSchema.tables.find((table) => table.tableName === tableName); const targetTable = dbSchema.tables.find((table) => table.tableName === tableName);
@ -63,7 +57,6 @@ function apiGet(_a) {
if (result.error) if (result.error)
throw new Error(result.error); throw new Error(result.error);
results = result; results = result;
/** @type {import("../../../types").GetReturn} */
const resObject = { const resObject = {
success: true, success: true,
payload: results, payload: results,
@ -71,12 +64,16 @@ function apiGet(_a) {
}; };
return resObject; return resObject;
} }
catch ( /** @type {any} */error) { catch (error) {
(0, serverError_1.default)({ (0, serverError_1.default)({
component: "/api/query/get/lines-85-94", component: "/api/query/get/lines-85-94",
message: error.message, message: error.message,
}); });
return { success: false, payload: null, error: error.message }; return {
success: false,
payload: null,
error: error.message,
};
} }
}); });
} }

View File

@ -27,7 +27,7 @@ const loginSocialUser_1 = __importDefault(require("./loginSocialUser"));
function handleSocialDb(_a) { function handleSocialDb(_a) {
return __awaiter(this, arguments, void 0, function* ({ database, social_id, email, social_platform, payload, invitation, supEmail, additionalFields, useLocal, }) { return __awaiter(this, arguments, void 0, function* ({ database, social_id, email, social_platform, payload, invitation, supEmail, additionalFields, useLocal, }) {
try { 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 = [ const existingSocialIdUserValues = [
social_id.toString(), social_id.toString(),
social_platform, social_platform,
@ -56,7 +56,7 @@ function handleSocialDb(_a) {
msg: "No Email Present", 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)({ let existingEmailOnly = yield (0, varDatabaseDbHandler_1.default)({
database: database ? database : "datasquirel", database: database ? database : "datasquirel",
queryString: existingEmailOnlyQuery, queryString: existingEmailOnlyQuery,
@ -69,7 +69,7 @@ function handleSocialDb(_a) {
msg: "This Email is already taken", 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 foundUserQueryValues = [finalEmail, social_platform, social_id];
const foundUser = yield (0, varDatabaseDbHandler_1.default)({ const foundUser = yield (0, varDatabaseDbHandler_1.default)({
database: database ? database : "datasquirel", database: database ? database : "datasquirel",
@ -116,7 +116,7 @@ function handleSocialDb(_a) {
*/ */
yield (0, addMariadbUser_1.default)({ userId: newUser.insertId, useLocal }); 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)({ const newUserQueried = yield (0, varDatabaseDbHandler_1.default)({
database: database ? database : "datasquirel", database: database ? database : "datasquirel",
queryString: newUserQueriedQuery, queryString: newUserQueriedQuery,

View File

@ -23,10 +23,11 @@ const varDatabaseDbHandler_1 = __importDefault(require("../../backend/varDatabas
*/ */
function loginSocialUser(_a) { function loginSocialUser(_a) {
return __awaiter(this, arguments, void 0, function* ({ user, social_platform, invitation, database, additionalFields, useLocal, }) { 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 foundUserValues = [user.email, user.social_id, social_platform];
const foundUser = yield (0, varDatabaseDbHandler_1.default)({ const foundUser = yield (0, varDatabaseDbHandler_1.default)({
database: database ? database : "datasquirel", database: finalDbName,
queryString: foundUserQuery, queryString: foundUserQuery,
queryValuesArray: foundUserValues, queryValuesArray: foundUserValues,
useLocal, useLocal,

View File

@ -46,7 +46,7 @@ function apiCreateUser(_a) {
password: String(payload.password), password: String(payload.password),
}); });
payload.password = hashedPassword; payload.password = hashedPassword;
const fieldsQuery = `SHOW COLUMNS FROM users`; const fieldsQuery = `SHOW COLUMNS FROM ${dbFullName}.users`;
let fields = yield (0, varDatabaseDbHandler_1.default)({ let fields = yield (0, varDatabaseDbHandler_1.default)({
queryString: fieldsQuery, queryString: fieldsQuery,
database: dbFullName, database: dbFullName,
@ -91,7 +91,7 @@ function apiCreateUser(_a) {
msg: `${invalidField} is not a valid field!`, 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 const existingUserValues = payload.username
? [payload.email, payload.username] ? [payload.email, payload.username]
: [payload.email]; : [payload.email];
@ -119,7 +119,7 @@ function apiCreateUser(_a) {
useLocal, useLocal,
}); });
if (addUser === null || addUser === void 0 ? void 0 : addUser.insertId) { 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)({ const newlyAddedUser = yield (0, varDatabaseDbHandler_1.default)({
queryString: newlyAddedUserQuery, queryString: newlyAddedUserQuery,
database: dbFullName, database: dbFullName,

View File

@ -20,7 +20,7 @@ const varDatabaseDbHandler_1 = __importDefault(require("../../backend/varDatabas
*/ */
function apiDeleteUser(_a) { function apiDeleteUser(_a) {
return __awaiter(this, arguments, void 0, function* ({ dbFullName, deletedUserId, useLocal, }) { 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 existingUserValues = [deletedUserId];
const existingUser = yield (0, varDatabaseDbHandler_1.default)({ const existingUser = yield (0, varDatabaseDbHandler_1.default)({
queryString: existingUserQuery, queryString: existingUserQuery,

View File

@ -19,12 +19,13 @@ const varDatabaseDbHandler_1 = __importDefault(require("../../backend/varDatabas
*/ */
function apiGetUser(_a) { function apiGetUser(_a) {
return __awaiter(this, arguments, void 0, function* ({ fields, dbFullName, userId, useLocal, }) { 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; const API_USER_ID = userId || process.env.DSQL_API_USER_ID;
let foundUser = yield (0, varDatabaseDbHandler_1.default)({ let foundUser = yield (0, varDatabaseDbHandler_1.default)({
queryString: query, queryString: query,
queryValuesArray: [API_USER_ID], queryValuesArray: [API_USER_ID],
database: dbFullName.replace(/[^a-z0-9_]/g, ""), database: finalDbName,
useLocal, useLocal,
}); });
if (!foundUser || !foundUser[0]) { if (!foundUser || !foundUser[0]) {

View File

@ -20,7 +20,7 @@ const hashPassword_1 = __importDefault(require("../../dsql/hashPassword"));
*/ */
function apiLoginUser(_a) { 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, }) { 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 * Check input validity
* *
@ -46,9 +46,9 @@ function apiLoginUser(_a) {
}) })
: null; : null;
let foundUser = yield (0, varDatabaseDbHandler_1.default)({ 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], queryValuesArray: [email, username],
database: dbFullName.replace(/[^a-z0-9_]/g, ""), database: dbFullName,
useLocal, useLocal,
}); });
if ((!foundUser || !foundUser[0]) && !social) if ((!foundUser || !foundUser[0]) && !social)
@ -91,9 +91,9 @@ function apiLoginUser(_a) {
} }
if (isPasswordCorrect && email_login) { if (isPasswordCorrect && email_login) {
const resetTempCode = yield (0, varDatabaseDbHandler_1.default)({ 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], queryValuesArray: [email, username],
database: dbFullName.replace(/[^a-z0-9_]/g, ""), database: dbFullName,
useLocal, useLocal,
}); });
} }

View File

@ -21,7 +21,7 @@ function apiReauthUser(_a) {
return __awaiter(this, arguments, void 0, function* ({ existingUser, database, additionalFields, useLocal, }) { 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(/./) let foundUser = (existingUser === null || existingUser === void 0 ? void 0 : existingUser.id) && existingUser.id.toString().match(/./)
? yield (0, varDatabaseDbHandler_1.default)({ ? yield (0, varDatabaseDbHandler_1.default)({
queryString: `SELECT * FROM users WHERE id=?`, queryString: `SELECT * FROM ${database}.users WHERE id=?`,
queryValuesArray: [existingUser.id.toString()], queryValuesArray: [existingUser.id.toString()],
database, database,
useLocal, useLocal,

View File

@ -30,7 +30,7 @@ function apiSendEmailCode(_a) {
}; };
} }
const createdAt = Date.now(); const createdAt = Date.now();
const foundUserQuery = `SELECT * FROM users WHERE email = ?`; const foundUserQuery = `SELECT * FROM ${database}.users WHERE email = ?`;
const foundUserValues = [email]; const foundUserValues = [email];
let foundUser = yield (0, varDatabaseDbHandler_1.default)({ let foundUser = yield (0, varDatabaseDbHandler_1.default)({
queryString: foundUserQuery, queryString: foundUserQuery,
@ -79,12 +79,12 @@ function apiSendEmailCode(_a) {
const info = yield transporter.sendMail(mailObject); const info = yield transporter.sendMail(mailObject);
if (!(info === null || info === void 0 ? void 0 : info.accepted)) if (!(info === null || info === void 0 ? void 0 : info.accepted))
throw new Error("Mail not Sent!"); 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]; const setTempCodeValues = [tempCode + `-${createdAt}`, email];
let setTempCode = yield (0, varDatabaseDbHandler_1.default)({ let setTempCode = yield (0, varDatabaseDbHandler_1.default)({
queryString: setTempCodeQuery, queryString: setTempCodeQuery,
queryValuesArray: setTempCodeValues, queryValuesArray: setTempCodeValues,
database: database, database,
useLocal, useLocal,
}); });
/** @type {import("../../../types").SendOneTimeCodeEmailResponse} */ /** @type {import("../../../types").SendOneTimeCodeEmailResponse} */

View File

@ -23,7 +23,7 @@ const varDatabaseDbHandler_1 = __importDefault(require("../../backend/varDatabas
*/ */
function apiUpdateUser(_a) { function apiUpdateUser(_a) {
return __awaiter(this, arguments, void 0, function* ({ payload, dbFullName, updatedUserId, useLocal, dbSchema, }) { 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 existingUserValues = [updatedUserId];
const existingUser = yield (0, varDatabaseDbHandler_1.default)({ const existingUser = yield (0, varDatabaseDbHandler_1.default)({
queryString: existingUserQuery, queryString: existingUserQuery,

View File

@ -90,8 +90,7 @@ function addDbEntry(_a) {
? yield dbHandler(`SELECT * FROM \`${tableName}\` WHERE \`${duplicateColumnName}\`=?`, [duplicateColumnValue]) ? yield dbHandler(`SELECT * FROM \`${tableName}\` WHERE \`${duplicateColumnName}\`=?`, [duplicateColumnValue])
: yield dbHandler({ : yield dbHandler({
paradigm: "Read Only", paradigm: "Read Only",
database: dbFullName, queryString: `SELECT * FROM \`${dbFullName}\`.\`${tableName}\` WHERE \`${duplicateColumnName}\`=?`,
queryString: `SELECT * FROM \`${tableName}\` WHERE \`${duplicateColumnName}\`=?`,
queryValues: [duplicateColumnValue], queryValues: [duplicateColumnValue],
}); });
if ((duplicateValue === null || duplicateValue === void 0 ? void 0 : duplicateValue[0]) && !update) { if ((duplicateValue === null || duplicateValue === void 0 ? void 0 : duplicateValue[0]) && !update) {
@ -191,13 +190,12 @@ function addDbEntry(_a) {
insertValuesArray.push(Date.now()); 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 queryValuesArray = insertValuesArray;
const newInsert = isMaster const newInsert = isMaster
? yield dbHandler(query, queryValuesArray) ? yield dbHandler(query, queryValuesArray)
: yield dbHandler({ : yield dbHandler({
paradigm, paradigm,
database: dbFullName,
queryString: query, queryString: query,
queryValues: queryValuesArray, queryValues: queryValuesArray,
}); });

View File

@ -41,13 +41,12 @@ function deleteDbEntry(_a) {
* *
* @description * @description
*/ */
const query = `DELETE FROM ${tableName} WHERE \`${identifierColumnName}\`=?`; const query = `DELETE FROM \`${dbFullName}\`.\`${tableName}\` WHERE \`${identifierColumnName}\`=?`;
const deletedEntry = isMaster const deletedEntry = isMaster
? yield dbHandler(query, [identifierValue]) ? yield dbHandler(query, [identifierValue])
: yield dbHandler({ : yield dbHandler({
paradigm, paradigm,
queryString: query, queryString: query,
database: dbFullName,
queryValues: [identifierValue], queryValues: [identifierValue],
}); });
/** /**

View File

@ -71,7 +71,6 @@ function runQuery(_a) {
result = yield (0, varReadOnlyDatabaseDbHandler_1.default)({ result = yield (0, varReadOnlyDatabaseDbHandler_1.default)({
queryString: formattedQuery, queryString: formattedQuery,
queryValuesArray: queryValuesArray === null || queryValuesArray === void 0 ? void 0 : queryValuesArray.map((vl) => String(vl)), queryValuesArray: queryValuesArray === null || queryValuesArray === void 0 ? void 0 : queryValuesArray.map((vl) => String(vl)),
database: dbFullName,
tableSchema, tableSchema,
useLocal: local, useLocal: local,
}); });
@ -80,7 +79,6 @@ function runQuery(_a) {
result = yield (0, fullAccessDbHandler_1.default)({ result = yield (0, fullAccessDbHandler_1.default)({
queryString: formattedQuery, queryString: formattedQuery,
queryValuesArray: queryValuesArray === null || queryValuesArray === void 0 ? void 0 : queryValuesArray.map((vl) => String(vl)), queryValuesArray: queryValuesArray === null || queryValuesArray === void 0 ? void 0 : queryValuesArray.map((vl) => String(vl)),
database: dbFullName,
tableSchema, tableSchema,
local, local,
}); });

View File

@ -126,13 +126,12 @@ function updateDbEntry(_a) {
updateKeyValueArray.push(`date_updated_code='${Date.now()}'`); 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); updateValues.push(identifierValue);
const updatedEntry = isMaster const updatedEntry = isMaster
? yield dbHandler(query, updateValues) ? yield dbHandler(query, updateValues)
: yield dbHandler({ : yield dbHandler({
paradigm, paradigm,
database: dbFullName,
queryString: query, queryString: query,
queryValues: updateValues, queryValues: updateValues,
}); });

View File

@ -15,18 +15,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
exports.default = dbHandler; exports.default = dbHandler;
const fs_1 = __importDefault(require("fs")); const fs_1 = __importDefault(require("fs"));
const serverError_1 = __importDefault(require("./serverError")); 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 * # Main DB Handler Function
*/ */
@ -35,11 +23,6 @@ function dbHandler(...args) {
var _a; var _a;
((_a = process.env.NODE_ENV) === null || _a === void 0 ? void 0 : _a.match(/dev/)) && ((_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"); fs_1.default.appendFileSync("./.tmp/sqlQuery.sql", args[0] + "\n" + Date() + "\n\n\n", "utf8");
/**
* Declare variables
*
* @description Declare "results" variable
*/
let results; let results;
/** /**
* Fetch from db * Fetch from db
@ -47,6 +30,7 @@ function dbHandler(...args) {
* @description Fetch data from db if no cache * @description Fetch data from db if no cache
*/ */
try { try {
const connection = global.DSQL_DB_CONN;
results = yield new Promise((resolve, reject) => { results = yield new Promise((resolve, reject) => {
connection.query(...args, (error, result, fields) => { connection.query(...args, (error, result, fields) => {
if (error) { if (error) {

View File

@ -1,6 +1,5 @@
type Param = { type Param = {
queryString: string; queryString: string;
database: string;
local?: boolean; local?: boolean;
tableSchema?: import("../../types").DSQL_TableSchemaType | null; tableSchema?: import("../../types").DSQL_TableSchemaType | null;
queryValuesArray?: string[]; queryValuesArray?: string[];
@ -8,5 +7,5 @@ type Param = {
/** /**
* # Full Access Db Handler * # Full Access Db Handler
*/ */
export default function fullAccessDbHandler({ queryString, database, tableSchema, queryValuesArray, local, }: Param): Promise<any>; export default function fullAccessDbHandler({ queryString, tableSchema, queryValuesArray, local, }: Param): Promise<any>;
export {}; export {};

View File

@ -22,7 +22,7 @@ const serverError_1 = __importDefault(require("./serverError"));
* # Full Access Db Handler * # Full Access Db Handler
*/ */
function fullAccessDbHandler(_a) { 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 * Declare variables
* *
@ -40,7 +40,6 @@ function fullAccessDbHandler(_a) {
? yield (0, LOCAL_DB_HANDLER_1.default)(queryString, queryValuesArray) ? yield (0, LOCAL_DB_HANDLER_1.default)(queryString, queryValuesArray)
: yield (0, DSQL_USER_DB_HANDLER_1.default)({ : yield (0, DSQL_USER_DB_HANDLER_1.default)({
paradigm: "Full Access", paradigm: "Full Access",
database,
queryString, queryString,
queryValues: queryValuesArray, queryValues: queryValuesArray,
}); });

View File

@ -15,7 +15,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
exports.default = noDatabaseDbHandler; exports.default = noDatabaseDbHandler;
const fs_1 = __importDefault(require("fs")); const fs_1 = __importDefault(require("fs"));
const serverError_1 = __importDefault(require("./serverError")); 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 * # No Database DB Handler
*/ */

View File

@ -33,7 +33,6 @@ function varDatabaseDbHandler(_a) {
: (database === null || database === void 0 ? void 0 : database.match(/^datasquirel$/)) : (database === null || database === void 0 ? void 0 : database.match(/^datasquirel$/))
? true ? true
: false; : false;
/** @type {any} */
const FINAL_DB_HANDLER = useLocal const FINAL_DB_HANDLER = useLocal
? LOCAL_DB_HANDLER_1.default ? LOCAL_DB_HANDLER_1.default
: isMaster : isMaster
@ -54,7 +53,6 @@ function varDatabaseDbHandler(_a) {
? yield FINAL_DB_HANDLER(queryString, queryValuesArray) ? yield FINAL_DB_HANDLER(queryString, queryValuesArray)
: yield FINAL_DB_HANDLER({ : yield FINAL_DB_HANDLER({
paradigm: "Full Access", paradigm: "Full Access",
database,
queryString, queryString,
queryValues: queryValuesArray, queryValues: queryValuesArray,
}); });
@ -64,12 +62,12 @@ function varDatabaseDbHandler(_a) {
? yield FINAL_DB_HANDLER(queryString) ? yield FINAL_DB_HANDLER(queryString)
: yield FINAL_DB_HANDLER({ : yield FINAL_DB_HANDLER({
paradigm: "Full Access", paradigm: "Full Access",
database,
queryString, queryString,
}); });
} }
} }
catch (error) { catch (error) {
console.log(`varDatabaseDbHandler Error: ${error.message}`);
(0, serverError_1.default)({ (0, serverError_1.default)({
component: "varDatabaseDbHandler/lines-29-32", component: "varDatabaseDbHandler/lines-29-32",
message: error.message, message: error.message,

View File

@ -1,6 +1,5 @@
type Param = { type Param = {
queryString: string; queryString: string;
database: string;
queryValuesArray?: string[]; queryValuesArray?: string[];
tableSchema?: import("../../types").DSQL_TableSchemaType; tableSchema?: import("../../types").DSQL_TableSchemaType;
useLocal?: boolean; useLocal?: boolean;
@ -9,5 +8,5 @@ type Param = {
* # Read Only Db Handler with Varaibles * # Read Only Db Handler with Varaibles
* @returns * @returns
*/ */
export default function varReadOnlyDatabaseDbHandler({ queryString, database, queryValuesArray, tableSchema, useLocal, }: Param): Promise<any>; export default function varReadOnlyDatabaseDbHandler({ queryString, queryValuesArray, tableSchema, useLocal, }: Param): Promise<any>;
export {}; export {};

View File

@ -23,7 +23,7 @@ const LOCAL_DB_HANDLER_1 = __importDefault(require("../../utils/backend/global-d
* @returns * @returns
*/ */
function varReadOnlyDatabaseDbHandler(_a) { 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 * Declare variables
* *
@ -40,7 +40,6 @@ function varReadOnlyDatabaseDbHandler(_a) {
? yield (0, LOCAL_DB_HANDLER_1.default)(queryString, queryValuesArray) ? yield (0, LOCAL_DB_HANDLER_1.default)(queryString, queryValuesArray)
: yield (0, DSQL_USER_DB_HANDLER_1.default)({ : yield (0, DSQL_USER_DB_HANDLER_1.default)({
paradigm: "Read Only", paradigm: "Read Only",
database,
queryString, queryString,
queryValues: queryValuesArray, queryValues: queryValuesArray,
}); });

View File

@ -8,23 +8,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
step((generator = generator.apply(thisArg, _arguments || [])).next()); 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 }); Object.defineProperty(exports, "__esModule", { value: true });
require("dotenv").config({ path: "./../.env" }); 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 * # Main DB Handler Function
* @async * @async
@ -37,11 +22,7 @@ const connection = (0, serverless_mysql_1.default)({
* @returns {Promise<object|null>} * @returns {Promise<object|null>}
*/ */
(() => __awaiter(void 0, void 0, void 0, function* () { (() => __awaiter(void 0, void 0, void 0, function* () {
/** const connection = global.DSQL_DB_CONN;
* Switch Database
*
* @description If a database is provided, switch to it
*/
try { try {
const result = yield connection.query("SELECT id,first_name,last_name FROM users LIMIT 3"); const result = yield connection.query("SELECT id,first_name,last_name FROM users LIMIT 3");
console.log("Connection Query Success =>", result); console.log("Connection Query Success =>", result);

View File

@ -5,6 +5,7 @@ type Param = {
}; };
/** /**
* # Create database from Schema Function * # Create database from Schema Function
* @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database
*/ */
export default function createDbFromSchema({ userId, targetDatabase, dbSchemaData, }: Param): Promise<void>; export default function createDbFromSchema({ userId, targetDatabase, dbSchemaData, }: Param): Promise<void>;
export {}; export {};

View File

@ -21,20 +21,13 @@ const createTable_1 = __importDefault(require("./utils/createTable"));
const updateTable_1 = __importDefault(require("./utils/updateTable")); const updateTable_1 = __importDefault(require("./utils/updateTable"));
const dbHandler_1 = __importDefault(require("./utils/dbHandler")); const dbHandler_1 = __importDefault(require("./utils/dbHandler"));
const ejson_1 = __importDefault(require("../utils/ejson")); const ejson_1 = __importDefault(require("../utils/ejson"));
const util_1 = require("util");
/** /**
* # Create database from Schema Function * # Create database from Schema Function
* @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database
*/ */
function createDbFromSchema(_a) { function createDbFromSchema(_a) {
return __awaiter(this, arguments, void 0, function* ({ userId, targetDatabase, dbSchemaData, }) { return __awaiter(this, arguments, void 0, function* ({ userId, targetDatabase, dbSchemaData, }) {
var _b, _c; 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 const schemaPath = userId
? path_1.default.join(String(process.env.DSQL_USER_DB_SCHEMA_PATH), `/user-${userId}/main.json`) ? 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"); : path_1.default.resolve(__dirname, "../../jsonData/dbSchemas/main.json");
@ -46,20 +39,14 @@ function createDbFromSchema(_a) {
} }
// await createDatabasesFromSchema(dbSchema); // await createDatabasesFromSchema(dbSchema);
for (let i = 0; i < dbSchema.length; i++) { for (let i = 0; i < dbSchema.length; i++) {
/** @type {import("../types").DSQL_DatabaseSchemaType} */
const database = dbSchema[i]; const database = dbSchema[i];
const { dbFullName, tables, dbName, dbSlug, childrenDatabases } = database; const { dbFullName, tables, dbName, dbSlug, childrenDatabases } = database;
if (targetDatabase && dbFullName != targetDatabase) { if (targetDatabase && dbFullName != targetDatabase) {
continue; continue;
} }
console.log("Checking Database ...");
/** @type {any} */ /** @type {any} */
const dbCheck = yield (0, noDatabaseDbHandler_1.default)(`SELECT SCHEMA_NAME AS dbFullName FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '${dbFullName}'`); 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 (!((_b = dbCheck === null || dbCheck === void 0 ? void 0 : dbCheck[0]) === null || _b === void 0 ? void 0 : _b.dbFullName)) {
if (dbCheck && ((_b = dbCheck[0]) === null || _b === void 0 ? void 0 : _b.dbFullName)) {
// Database Exists
}
else {
const newDatabase = yield (0, noDatabaseDbHandler_1.default)(`CREATE DATABASE IF NOT EXISTS \`${dbFullName}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`); 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]) { if (oldTableFilteredArray && oldTableFilteredArray[0]) {
console.log("Renaming Table"); console.log("Renaming Table");
yield (0, varDatabaseDbHandler_1.default)({ yield (0, varDatabaseDbHandler_1.default)({
queryString: `RENAME TABLE \`${oldTableFilteredArray[0].tableNameOld}\` TO \`${oldTableFilteredArray[0].tableName}\``, queryString: `RENAME TABLE \`${dbFullName}\`.\`${oldTableFilteredArray[0].tableNameOld}\` TO \`${oldTableFilteredArray[0].tableName}\``,
database: dbFullName,
}); });
} }
else { else {
console.log(`Dropping Table from ${dbFullName}`); console.log(`Dropping Table from ${dbFullName}`);
yield (0, varDatabaseDbHandler_1.default)({ yield (0, varDatabaseDbHandler_1.default)({
queryString: `DROP TABLE \`${TABLE_NAME}\``, queryString: `DROP TABLE \`${dbFullName}\`.\`${TABLE_NAME}\``,
database: dbFullName,
}); });
const deleteTableEntry = yield (0, dbHandler_1.default)({ 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], values: [userId, dbSlug, TABLE_NAME],
database: "datasquirel",
}); });
} }
} }
} }
const recordedDbEntryArray = userId const recordedDbEntryArray = userId
? yield (0, varDatabaseDbHandler_1.default)({ ? yield (0, varDatabaseDbHandler_1.default)({
database: "datasquirel", queryString: `SELECT * FROM datasquirel.user_databases WHERE db_full_name = ?`,
queryString: `SELECT * FROM user_databases WHERE db_full_name = ?`,
queryValuesArray: [dbFullName], queryValuesArray: [dbFullName],
}) })
: undefined; : undefined;
@ -134,7 +117,6 @@ function createDbFromSchema(_a) {
TABLE_NAME = ? TABLE_NAME = ?
) AS tableExists`, ) AS tableExists`,
queryValuesArray: [dbFullName, table.tableName], queryValuesArray: [dbFullName, table.tableName],
database: dbFullName,
}); });
//////////////////////////////////////// ////////////////////////////////////////
if (tableCheck && ((_c = tableCheck[0]) === null || _c === void 0 ? void 0 : _c.tableExists) > 0) { if (tableCheck && ((_c = tableCheck[0]) === null || _c === void 0 ? void 0 : _c.tableExists) > 0) {
@ -183,7 +165,6 @@ function createDbFromSchema(_a) {
tableName: tableName, tableName: tableName,
tableInfoArray: fields, tableInfoArray: fields,
dbFullName: dbFullName, dbFullName: dbFullName,
dbSchema,
tableSchema: table, tableSchema: table,
recordedDbEntry, recordedDbEntry,
}); });
@ -208,8 +189,7 @@ function createDbFromSchema(_a) {
* @description All indexes from MYSQL db * @description All indexes from MYSQL db
*/ // @ts-ignore */ // @ts-ignore
const allExistingIndexes = yield (0, varDatabaseDbHandler_1.default)({ const allExistingIndexes = yield (0, varDatabaseDbHandler_1.default)({
queryString: `SHOW INDEXES FROM \`${tableName}\``, queryString: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\``,
database: dbFullName,
}); });
const existingKeyInDb = allExistingIndexes.filter((indexObject) => indexObject.Key_name === alias); const existingKeyInDb = allExistingIndexes.filter((indexObject) => indexObject.Key_name === alias);
if (!existingKeyInDb[0]) if (!existingKeyInDb[0])
@ -223,8 +203,7 @@ function createDbFromSchema(_a) {
yield (0, varDatabaseDbHandler_1.default)({ yield (0, varDatabaseDbHandler_1.default)({
queryString: `CREATE${(indexType === null || indexType === void 0 ? void 0 : indexType.match(/fullText/i)) queryString: `CREATE${(indexType === null || indexType === void 0 ? void 0 : indexType.match(/fullText/i))
? " FULLTEXT" ? " FULLTEXT"
: ""} INDEX \`${alias}\` ON ${tableName}(${indexTableFields === null || indexTableFields === void 0 ? void 0 : indexTableFields.map((nm) => nm.value).map((nm) => `\`${nm}\``).join(",")}) COMMENT 'schema_index'`, : ""} INDEX \`${alias}\` ON \`${dbFullName}\`.\`${tableName}\`(${indexTableFields === null || indexTableFields === void 0 ? void 0 : indexTableFields.map((nm) => nm.value).map((nm) => `\`${nm}\``).join(",")}) COMMENT 'schema_index'`,
database: dbFullName,
}); });
} }
} }
@ -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({});
}

View File

@ -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 { id, user_id, db_id, db_full_name, table_name, table_slug, table_description, } = table;
const tableInfo = yield (0, varDatabaseDbHandler_1.default)({ 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}'`, 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)({ const updateDbCharset = yield (0, varDatabaseDbHandler_1.default)({
queryString: `ALTER DATABASE ${db_full_name} CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin;`, queryString: `ALTER DATABASE ${db_full_name} CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin;`,
database: db_full_name,
}); });
const updateEncoding = yield (0, varDatabaseDbHandler_1.default)({ const updateEncoding = yield (0, varDatabaseDbHandler_1.default)({
queryString: `ALTER TABLE \`${table_slug}\` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`, queryString: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`,
database: db_full_name,
}); });
} }
process.exit(); process.exit();

View File

@ -4,9 +4,9 @@ export interface GrantType {
privileges: string[]; privileges: string[];
} }
type Param = { type Param = {
username: string; username?: string;
host: string; host?: string;
grants: GrantType[]; grants?: GrantType[];
userId: string; userId: string;
}; };
/** /**

View File

@ -1,11 +1,11 @@
type Param = { type Param = {
userId?: number | string; userId?: number | string;
mariadbUserHost?: string; mariadbUserHost?: string;
mariadbUser?: string; mariadbUsername?: string;
sqlUserID?: string | number; sqlUserID?: string | number;
}; };
/** /**
* # Refresh Mariadb User Grants * # Refresh Mariadb User Grants
*/ */
export default function refreshUsersAndGrants({ userId, mariadbUserHost, mariadbUser, sqlUserID, }: Param): Promise<void>; export default function refreshUsersAndGrants({ userId, mariadbUserHost, mariadbUsername, sqlUserID, }: Param): Promise<void>;
export {}; export {};

View File

@ -26,26 +26,25 @@ const defaultMariadbUserHost = process.env.DSQL_DB_HOST || "127.0.0.1";
* # Refresh Mariadb User Grants * # Refresh Mariadb User Grants
*/ */
function refreshUsersAndGrants(_a) { 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; var _b, _c, _d, _e;
/** const mariadbUsers = (yield (0, dbHandler_1.default)({
* @description Users query: `SELECT * FROM mariadb_users`,
* @type {*[] | null} }));
*/ // @ts-ignore if (!(mariadbUsers === null || mariadbUsers === void 0 ? void 0 : mariadbUsers[0])) {
const users = yield (0, dbHandler_1.default)({ return;
query: `SELECT * FROM users`,
});
if (!(users === null || users === void 0 ? void 0 : users[0])) {
process.exit();
} }
for (let i = 0; i < users.length; i++) { const isRootUser = userId
const user = users[i]; ? userId == Number(process.env.DSQL_SU_USER_ID)
if (!user) : false;
for (let i = 0; i < mariadbUsers.length; i++) {
const mariadbUser = mariadbUsers[i];
if (!mariadbUser)
continue; continue;
if (userId && user.id != userId) if (userId && mariadbUser.user_id != userId)
continue; continue;
try { 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 existingUser = yield (0, noDatabaseDbHandler_1.default)(`SELECT * FROM mysql.user WHERE User = '${mariadb_user}' AND Host = '${mariadb_host}'`);
const existingMariaDBUserArray = userId && sqlUserID const existingMariaDBUserArray = userId && sqlUserID
? yield (0, dbHandler_1.default)({ ? yield (0, dbHandler_1.default)({
@ -53,9 +52,6 @@ function refreshUsersAndGrants(_a) {
values: [sqlUserID, userId], values: [sqlUserID, userId],
}) })
: null; : null;
/**
* @type {import("../../types").MYSQL_mariadb_users_table_def | undefined}
*/
const activeMariadbUserObject = Array.isArray(existingMariaDBUserArray) const activeMariadbUserObject = Array.isArray(existingMariaDBUserArray)
? existingMariaDBUserArray === null || existingMariaDBUserArray === void 0 ? void 0 : existingMariaDBUserArray[0] ? existingMariaDBUserArray === null || existingMariaDBUserArray === void 0 ? void 0 : existingMariaDBUserArray[0]
: undefined; : undefined;
@ -66,7 +62,9 @@ function refreshUsersAndGrants(_a) {
: false; : false;
const isUserExisting = Boolean((_c = existingUser === null || existingUser === void 0 ? void 0 : existingUser[0]) === null || _c === void 0 ? void 0 : _c.User); 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 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) const dsqlPassword = (activeMariadbUserObject === null || activeMariadbUserObject === void 0 ? void 0 : activeMariadbUserObject.password)
? activeMariadbUserObject.password ? activeMariadbUserObject.password
: isUserExisting : isUserExisting
@ -91,20 +89,23 @@ function refreshUsersAndGrants(_a) {
!sqlUserID && !sqlUserID &&
!isPrimary && !isPrimary &&
!mariadbUserHost && !mariadbUserHost &&
!mariadbUser) { !mariadbUsername) {
const createNewUser = yield (0, noDatabaseDbHandler_1.default)(`CREATE USER IF NOT EXISTS '${dslUsername}'@'${defaultMariadbUserHost}' IDENTIFIED BY '${dsqlPassword}'`); const createNewUser = yield (0, noDatabaseDbHandler_1.default)(`CREATE USER IF NOT EXISTS '${dslUsername}'@'${defaultMariadbUserHost}' IDENTIFIED BY '${dsqlPassword}'`);
console.log("createNewUser", createNewUser); 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)({ const updateUser = yield (0, dbHandler_1.default)({
query: `UPDATE users SET mariadb_user = ?, mariadb_host = ?, mariadb_pass = ? WHERE id = ?`, query: `UPDATE users SET mariadb_user = ?, mariadb_host = ?, mariadb_pass = ? WHERE id = ?`,
values: [ values: [
dslUsername, dslUsername,
defaultMariadbUserHost, defaultMariadbUserHost,
encryptedPassword, 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) { if (isPrimary) {
const finalHost = mariadbUserHost const finalHost = mariadbUserHost
? mariadbUserHost ? mariadbUserHost
@ -115,7 +116,7 @@ function refreshUsersAndGrants(_a) {
dslUsername, dslUsername,
finalHost, finalHost,
encryptedPassword, encryptedPassword,
user.id, mariadbUser.id,
], ],
}); });
} }
@ -127,7 +128,7 @@ function refreshUsersAndGrants(_a) {
*/ */
const existingMariadbPrimaryUser = yield (0, dbHandler_1.default)({ const existingMariadbPrimaryUser = yield (0, dbHandler_1.default)({
query: `SELECT * FROM mariadb_users WHERE user_id = ? AND \`primary\` = 1`, query: `SELECT * FROM mariadb_users WHERE user_id = ? AND \`primary\` = 1`,
values: [id], values: [user_id],
}); });
const isPrimaryUserExisting = Boolean(Array.isArray(existingMariadbPrimaryUser) && 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)); ((_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)({ const insertPrimaryMariadbUser = yield (0, dbHandler_1.default)({
query: `INSERT INTO mariadb_users (user_id, username, password, \`primary\`, grants) VALUES (?, ?, ?, ?, ?)`, query: `INSERT INTO mariadb_users (user_id, username, password, \`primary\`, grants) VALUES (?, ?, ?, ?, ?)`,
values: [ values: [
id, user_id,
dslUsername, dslUsername,
encryptedPassword, encryptedPassword,
"1", "1",
@ -153,36 +154,37 @@ function refreshUsersAndGrants(_a) {
////////////////////////////////////////////// //////////////////////////////////////////////
const existingExtraMariadbUsers = yield (0, dbHandler_1.default)({ const existingExtraMariadbUsers = yield (0, dbHandler_1.default)({
query: `SELECT * FROM mariadb_users WHERE user_id = ? AND \`primary\` != '1'`, query: `SELECT * FROM mariadb_users WHERE user_id = ? AND \`primary\` != '1'`,
values: [id], values: [user_id],
}); });
if (Array.isArray(existingExtraMariadbUsers)) { if (Array.isArray(existingExtraMariadbUsers)) {
for (let i = 0; i < existingExtraMariadbUsers.length; i++) { for (let i = 0; i < existingExtraMariadbUsers.length; i++) {
const mariadbUser = existingExtraMariadbUsers[i]; const _mariadbUser = existingExtraMariadbUsers[i];
const { user_id, username, host, password, primary, grants, } = mariadbUser; if (_mariadbUser &&
if (mariadbUser && username != mariadbUser) _mariadbUser.username != mariadbUsername)
continue; continue;
if (mariadbUserHost && host != mariadbUserHost) if (mariadbUserHost && _mariadbUser.host != mariadbUserHost)
continue; continue;
const decrptedPassword = (0, decrypt_1.default)({ const decrptedPassword = (0, decrypt_1.default)({
encryptedString: password, encryptedString: _mariadbUser.password || "",
encryptionKey: process.env.DSQL_ENCRYPTION_PASSWORD, encryptionKey: process.env.DSQL_ENCRYPTION_PASSWORD,
encryptionSalt: process.env.DSQL_ENCRYPTION_SALT, 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); const isExtraMariadbUserExisting = Boolean((_e = existingExtraMariadbUser === null || existingExtraMariadbUser === void 0 ? void 0 : existingExtraMariadbUser[0]) === null || _e === void 0 ? void 0 : _e.User);
if (!isExtraMariadbUserExisting) { 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)({ const isGrantHandled = yield (0, handleGrants_1.default)({
username, username: _mariadbUser.username,
host, host: _mariadbUser.host,
grants: grants && typeof grants == "string" grants: _mariadbUser.grants &&
? JSON.parse(grants) typeof _mariadbUser.grants == "string"
? JSON.parse(_mariadbUser.grants)
: [], : [],
userId: String(userId), userId: String(userId),
}); });
if (!isGrantHandled) { if (!isGrantHandled) {
console.log(`Error in handling grants for user ${username}@${host}`); console.log(`Error in handling grants for user ${_mariadbUser.username}@${_mariadbUser.host}`);
} }
} }
} }

View File

@ -53,7 +53,7 @@ function recoverMainJsonFromDb() {
}; };
const tableFields = yield (0, varDatabaseDbHandler_1.default)({ const tableFields = yield (0, varDatabaseDbHandler_1.default)({
database: db_full_name, 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++) { for (let k = 0; k < tableFields.length; k++) {
const { Field, Type, Null, Default, Key } = tableFields[k]; const { Field, Type, Null, Default, Key } = tableFields[k];

View File

@ -20,7 +20,7 @@ const destinationFile = process.argv.indexOf("--dst") >= 0
/** ****************************************************************************** */ /** ****************************************************************************** */
console.log("Running Tailwind CSS compiler ..."); console.log("Running Tailwind CSS compiler ...");
fs_1.default.watch("./../", (curr, prev) => { 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) { if (error) {
console.log("ERROR =>", error.message); console.log("ERROR =>", error.message);
return; return;

View File

@ -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 { id, user_id, db_id, db_full_name, table_name, table_slug, table_description, } = table;
const tableInfo = yield (0, varDatabaseDbHandler_1.default)({ 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}'`, 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)({ const updateCreationDateTimestamp = yield (0, varDatabaseDbHandler_1.default)({
queryString: `ALTER TABLE \`${table_slug}\` MODIFY COLUMN date_created_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP`, queryString: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` MODIFY COLUMN date_created_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP`,
database: db_full_name,
}); });
const updateDateTimestamp = yield (0, varDatabaseDbHandler_1.default)({ 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`, queryString: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` MODIFY COLUMN date_updated_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP`,
database: db_full_name,
}); });
console.log("Date Updated Column updated"); console.log("Date Updated Column updated");
} }

View File

@ -28,8 +28,7 @@ const DB_HANDLER_1 = __importDefault(require("../utils/backend/global-db/DB_HAND
* @description Grab Schema * @description Grab Schema
*/ */
(0, varDatabaseDbHandler_1.default)({ (0, varDatabaseDbHandler_1.default)({
queryString: `SELECT DISTINCT db_id FROM user_database_tables`, queryString: `SELECT DISTINCT db_id FROM datasquirel.user_database_tables`,
database: "datasquirel",
}).then((tables) => __awaiter(void 0, void 0, void 0, function* () { }).then((tables) => __awaiter(void 0, void 0, void 0, function* () {
// console.log(tables); // console.log(tables);
// process.exit(); // process.exit();

View File

@ -8,23 +8,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
step((generator = generator.apply(thisArg, _arguments || [])).next()); 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 }); Object.defineProperty(exports, "__esModule", { value: true });
require("dotenv").config({ path: "./../.env" }); 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 * # Main DB Handler Function
* @async * @async
@ -38,11 +23,7 @@ const connection = (0, serverless_mysql_1.default)({
*/ */
(() => __awaiter(void 0, void 0, void 0, function* () { (() => __awaiter(void 0, void 0, void 0, function* () {
var _a; var _a;
/** const connection = global.DSQL_DB_CONN;
* Switch Database
*
* @description If a database is provided, switch to it
*/
try { try {
const result = yield connection.query("SELECT user,host,ssl_type FROM mysql.user"); const result = yield connection.query("SELECT user,host,ssl_type FROM mysql.user");
const parsedResults = JSON.parse(JSON.stringify(result)); const parsedResults = JSON.parse(JSON.stringify(result));

View File

@ -1,20 +1,13 @@
import { DSQL_DatabaseSchemaType, DSQL_TableSchemaType } from "../../types"; import { DSQL_TableSchemaType } from "../../types";
type Param = { type Param = {
dbFullName: string; dbFullName: string;
tableName: string; tableName: string;
tableInfoArray: any[]; tableInfoArray: any[];
dbSchema?: DSQL_DatabaseSchemaType[];
tableSchema?: DSQL_TableSchemaType; tableSchema?: DSQL_TableSchemaType;
recordedDbEntry?: any; recordedDbEntry?: any;
clone?: boolean;
}; };
/** /**
* # Create Table Functions * # Create Table Functions
*/ */
export default function createTable({ dbFullName, tableName, tableInfoArray, dbSchema, clone, tableSchema, recordedDbEntry, }: Param): Promise<any>; export default function createTable({ dbFullName, tableName, tableInfoArray, tableSchema, recordedDbEntry, }: Param): Promise<any>;
export {}; export {};
/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */

View File

@ -21,7 +21,7 @@ const dbHandler_1 = __importDefault(require("./dbHandler"));
* # Create Table Functions * # Create Table Functions
*/ */
function createTable(_a) { 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 * Format tableInfoArray
* *
@ -34,7 +34,7 @@ function createTable(_a) {
* @description Grab Schema * @description Grab Schema
*/ */
const createTableQueryArray = []; 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!"); throw new Error("Recorded Db entry not found!");
} }
const existingTable = yield (0, varDatabaseDbHandler_1.default)({ const existingTable = yield (0, varDatabaseDbHandler_1.default)({
database: "datasquirel", queryString: `SELECT * FROM datasquirel.user_database_tables WHERE db_id = ? AND table_slug = ?`,
queryString: `SELECT * FROM user_database_tables WHERE db_id = ? AND table_slug = ?`,
queryValuesArray: [recordedDbEntry.id, tableSchema === null || tableSchema === void 0 ? void 0 : tableSchema.tableName], queryValuesArray: [recordedDbEntry.id, tableSchema === null || tableSchema === void 0 ? void 0 : tableSchema.tableName],
}); });
/** @type {import("../../types").MYSQL_user_database_tables_table_def} */ /** @type {import("../../types").MYSQL_user_database_tables_table_def} */
const table = existingTable === null || existingTable === void 0 ? void 0 : existingTable[0]; const table = existingTable === null || existingTable === void 0 ? void 0 : existingTable[0];
if (!(table === null || table === void 0 ? void 0 : table.id)) { if (!(table === null || table === void 0 ? void 0 : table.id)) {
const newTableEntry = yield (0, dbHandler_1.default)({ const newTableEntry = yield (0, dbHandler_1.default)({
query: `INSERT INTO user_database_tables SET ?`, query: `INSERT INTO datasquirel.user_database_tables SET ?`,
values: { values: {
user_id: recordedDbEntry.user_id, user_id: recordedDbEntry.user_id,
db_id: recordedDbEntry.id, db_id: recordedDbEntry.id,
@ -66,7 +65,6 @@ function createTable(_a) {
date_updated: Date(), date_updated: Date(),
date_updated_code: Date.now(), date_updated_code: Date.now(),
}, },
database: "datasquirel",
}); });
} }
} }
@ -100,9 +98,6 @@ function createTable(_a) {
createTableQueryArray.push(" " + fieldEntryText + comma); createTableQueryArray.push(" " + fieldEntryText + comma);
//////////////////////////////////////// ////////////////////////////////////////
} }
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
if (foreignKeys[0]) { if (foreignKeys[0]) {
foreignKeys.forEach((foreighKey, index, array) => { foreignKeys.forEach((foreighKey, index, array) => {
var _a, _b, _c, _d, _e; var _a, _b, _c, _d, _e;
@ -126,16 +121,7 @@ function createTable(_a) {
//////////////////////////////////////// ////////////////////////////////////////
const newTable = yield (0, varDatabaseDbHandler_1.default)({ const newTable = yield (0, varDatabaseDbHandler_1.default)({
queryString: createTableQuery, queryString: createTableQuery,
database: dbFullName,
}); });
return newTable; return newTable;
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
}); });
} }
/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */

View File

@ -1,10 +1,10 @@
type Param = { type Param = {
query: string; query: string;
values?: string[] | object; values?: string[] | object;
database?: string;
}; };
/** /**
* # Main DB Handler Function * # Main DB Handler Function
* @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database
*/ */
export default function dbHandler({ query, values, database, }: Param): Promise<any[] | object | null>; export default function dbHandler({ query, values, }: Param): Promise<any[] | object | null>;
export {}; export {};

View File

@ -15,56 +15,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
exports.default = dbHandler; exports.default = dbHandler;
const fs_1 = __importDefault(require("fs")); const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path")); 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 * # Main DB Handler Function
* @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database
*/ */
function dbHandler(_a) { function dbHandler(_a) {
return __awaiter(this, arguments, void 0, function* ({ query, values, database, }) { return __awaiter(this, arguments, void 0, function* ({ query, values, }) {
/** let connection = global.DSQL_DB_CONN;
* 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
*/
let results; let results;
/**
* Fetch from db
*
* @description Fetch data from db if no cache
*/
try { try {
if (query && values) { if (query && values) {
results = yield connection.query(query, values); results = yield connection.query(query, values);
@ -72,8 +30,6 @@ function dbHandler(_a) {
else { else {
results = yield connection.query(query); results = yield connection.query(query);
} }
/** ********************* Clean up */
yield connection.end();
} }
catch ( /** @type {any} */error) { catch ( /** @type {any} */error) {
if (process.env.FIRST_RUN) { 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"); 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; results = null;
} }
/** finally {
* Return results yield (connection === null || connection === void 0 ? void 0 : connection.end());
* }
* @description Return results add to cache if "req" param is passed
*/
if (results) { if (results) {
return JSON.parse(JSON.stringify(results)); return JSON.parse(JSON.stringify(results));
} }

View File

@ -55,22 +55,21 @@ function updateTable(_a) {
/** /**
* @description Push the query initial value * @description Push the query initial value
*/ */
updateTableQueryArray.push(`ALTER TABLE \`${tableName}\``); updateTableQueryArray.push(`ALTER TABLE \`${dbFullName}\`.\`${tableName}\``);
if (childDb) { if (childDb) {
try { try {
if (!recordedDbEntry) { if (!recordedDbEntry) {
throw new Error("Recorded Db entry not found!"); throw new Error("Recorded Db entry not found!");
} }
const existingTable = yield (0, varDatabaseDbHandler_1.default)({ const existingTable = yield (0, varDatabaseDbHandler_1.default)({
database: "datasquirel", queryString: `SELECT * FROM datasquirel.user_database_tables WHERE db_id = ? AND table_slug = ?`,
queryString: `SELECT * FROM user_database_tables WHERE db_id = ? AND table_slug = ?`,
queryValuesArray: [recordedDbEntry.id, tableName], queryValuesArray: [recordedDbEntry.id, tableName],
}); });
/** @type {import("../../types").MYSQL_user_database_tables_table_def} */ /** @type {import("../../types").MYSQL_user_database_tables_table_def} */
const table = existingTable === null || existingTable === void 0 ? void 0 : existingTable[0]; const table = existingTable === null || existingTable === void 0 ? void 0 : existingTable[0];
if (!(table === null || table === void 0 ? void 0 : table.id)) { if (!(table === null || table === void 0 ? void 0 : table.id)) {
const newTableEntry = yield (0, dbHandler_1.default)({ const newTableEntry = yield (0, dbHandler_1.default)({
query: `INSERT INTO user_database_tables SET ?`, query: `INSERT INTO datasquirel.user_database_tables SET ?`,
values: { values: {
user_id: recordedDbEntry.user_id, user_id: recordedDbEntry.user_id,
db_id: recordedDbEntry.id, db_id: recordedDbEntry.id,
@ -85,7 +84,6 @@ function updateTable(_a) {
date_updated: Date(), date_updated: Date(),
date_updated_code: Date.now(), date_updated_code: Date.now(),
}, },
database: "datasquirel",
}); });
} }
} }
@ -96,16 +94,14 @@ function updateTable(_a) {
* @description All indexes from MYSQL db * @description All indexes from MYSQL db
*/ // @ts-ignore */ // @ts-ignore
const allExistingIndexes = yield (0, varDatabaseDbHandler_1.default)({ const allExistingIndexes = yield (0, varDatabaseDbHandler_1.default)({
queryString: `SHOW INDEXES FROM \`${tableName}\``, queryString: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\``,
database: dbFullName,
}); });
/** /**
* @type {import("../../types").DSQL_MYSQL_SHOW_COLUMNS_Type[]} * @type {import("../../types").DSQL_MYSQL_SHOW_COLUMNS_Type[]}
* @description All columns from MYSQL db * @description All columns from MYSQL db
*/ // @ts-ignore */ // @ts-ignore
const allExistingColumns = yield (0, varDatabaseDbHandler_1.default)({ const allExistingColumns = yield (0, varDatabaseDbHandler_1.default)({
queryString: `SHOW COLUMNS FROM \`${tableName}\``, queryString: `SHOW COLUMNS FROM \`${dbFullName}\`.\`${tableName}\``,
database: dbFullName,
}); });
//////////////////////////////////////// ////////////////////////////////////////
/** /**
@ -133,8 +129,7 @@ function updateTable(_a) {
existingEntry[0].fieldName) { existingEntry[0].fieldName) {
updatedColumnsArray.push(existingEntry[0].fieldName); updatedColumnsArray.push(existingEntry[0].fieldName);
const renameColumn = yield (0, varDatabaseDbHandler_1.default)({ const renameColumn = yield (0, varDatabaseDbHandler_1.default)({
queryString: `ALTER TABLE ${tableName} RENAME COLUMN \`${existingEntry[0].originName}\` TO \`${existingEntry[0].fieldName}\``, queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` RENAME COLUMN \`${existingEntry[0].originName}\` TO \`${existingEntry[0].fieldName}\``,
database: dbFullName,
}); });
console.log(`Column Renamed from "${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 { else {
yield (0, varDatabaseDbHandler_1.default)({ yield (0, varDatabaseDbHandler_1.default)({
queryString: `ALTER TABLE ${tableName} DROP COLUMN \`${Field}\``, queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP COLUMN \`${Field}\``,
database: dbFullName,
}); });
} }
} }
@ -196,8 +190,7 @@ function updateTable(_a) {
* present in the datasquirel DB schema * present in the datasquirel DB schema
*/ */
yield (0, varDatabaseDbHandler_1.default)({ yield (0, varDatabaseDbHandler_1.default)({
queryString: `ALTER TABLE ${tableName} DROP INDEX \`${Key_name}\``, queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${Key_name}\``,
database: dbFullName,
}); });
} }
} }
@ -227,8 +220,7 @@ function updateTable(_a) {
* doesn't exist in MYSQL db * doesn't exist in MYSQL db
*/ */
yield (0, varDatabaseDbHandler_1.default)({ 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'`, 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'`,
database: dbFullName,
}); });
} }
} }
@ -242,10 +234,9 @@ function updateTable(_a) {
/** /**
* @description All MSQL Foreign Keys * @description All MSQL Foreign Keys
* @type {import("../../types").DSQL_MYSQL_FOREIGN_KEYS_Type[] | null} * @type {import("../../types").DSQL_MYSQL_FOREIGN_KEYS_Type[] | null}
*/ // @ts-ignore */
const allForeignKeys = yield (0, varDatabaseDbHandler_1.default)({ 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'`, 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) { if (allForeignKeys) {
for (let c = 0; c < allForeignKeys.length; c++) { for (let c = 0; c < allForeignKeys.length; c++) {
@ -260,8 +251,7 @@ function updateTable(_a) {
* Foreign keys * Foreign keys
*/ */
const dropForeignKey = yield (0, varDatabaseDbHandler_1.default)({ const dropForeignKey = yield (0, varDatabaseDbHandler_1.default)({
queryString: `ALTER TABLE ${tableName} DROP FOREIGN KEY \`${CONSTRAINT_NAME}\``, queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP FOREIGN KEY \`${CONSTRAINT_NAME}\``,
database: dbFullName,
}); });
} }
} }
@ -370,9 +360,8 @@ function updateTable(_a) {
const { destinationTableName, destinationTableColumnName, cascadeDelete, cascadeUpdate, foreignKeyName, } = foreignKey; 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 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)({ const addForeignKey = yield (0, varDatabaseDbHandler_1.default)({
database: dbFullName,
queryString: finalQueryString, queryString: finalQueryString,
}); });
if (!(addForeignKey === null || addForeignKey === void 0 ? void 0 : addForeignKey.serverStatus)) { if (!(addForeignKey === null || addForeignKey === void 0 ? void 0 : addForeignKey.serverStatus)) {
@ -397,7 +386,6 @@ function updateTable(_a) {
if (updateTableQueryArray.length > 1) { if (updateTableQueryArray.length > 1) {
const updateTable = yield (0, varDatabaseDbHandler_1.default)({ const updateTable = yield (0, varDatabaseDbHandler_1.default)({
queryString: updateTableQuery, queryString: updateTableQuery,
database: dbFullName,
}); });
return updateTable; return updateTable;
} }

View File

@ -1,12 +1,9 @@
import { DSQL_TableSchemaType } from "../../types";
type Param = { type Param = {
queryString: string; queryString: string;
queryValuesArray?: string[]; queryValuesArray?: string[];
database?: string;
tableSchema?: DSQL_TableSchemaType;
}; };
/** /**
* # DB handler for specific database * # DB handler for specific database
*/ */
export default function varDatabaseDbHandler({ queryString, queryValuesArray, database, tableSchema, }: Param): Promise<any>; export default function varDatabaseDbHandler({ queryString, queryValuesArray, }: Param): Promise<any>;
export {}; export {};

View File

@ -18,7 +18,7 @@ const dbHandler_1 = __importDefault(require("./dbHandler"));
* # DB handler for specific database * # DB handler for specific database
*/ */
function varDatabaseDbHandler(_a) { 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 * Declare variables
* *
@ -38,13 +38,11 @@ function varDatabaseDbHandler(_a) {
results = yield (0, dbHandler_1.default)({ results = yield (0, dbHandler_1.default)({
query: queryString, query: queryString,
values: queryValuesArray, values: queryValuesArray,
database,
}); });
} }
else { else {
results = yield (0, dbHandler_1.default)({ results = yield (0, dbHandler_1.default)({
query: queryString, query: queryString,
database,
}); });
} }
//////////////////////////////////////// ////////////////////////////////////////

View File

@ -903,10 +903,7 @@ export type FetchApiOptions = RequestInit & {
[key: string]: any; [key: string]: any;
}; };
}; };
export type AuthCsrfHeaderName = "x-csrf-auth";
type FetchHeader = HeadersInit & { type FetchHeader = HeadersInit & {
[key in AuthCsrfHeaderName]?: string | null;
} & {
[key: string]: any; [key: string]: any;
}; };
export type FetchApiReturn = { export type FetchApiReturn = {

View File

@ -1,4 +1,5 @@
/** /**
* # DSQL user read-only DB handler * # DSQL user read-only DB handler
* @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database
*/ */
export default function DB_HANDLER(...args: any[]): Promise<any>; export default function DB_HANDLER(...args: any[]): Promise<any>;

View File

@ -8,34 +8,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
step((generator = generator.apply(thisArg, _arguments || [])).next()); 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 }); Object.defineProperty(exports, "__esModule", { value: true });
exports.default = DB_HANDLER; 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 * # DSQL user read-only DB handler
* @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database
*/ */
function DB_HANDLER(...args) { function DB_HANDLER(...args) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
const CONNECTION = global.DSQL_DB_CONN;
try { try {
const results = yield MASTER.query(...args); if (!CONNECTION)
/** ********************* Clean up */ throw new Error("No Connection provided to DB_HANDLER function!");
yield MASTER.end(); const results = yield CONNECTION.query(...args);
return JSON.parse(JSON.stringify(results)); return JSON.parse(JSON.stringify(results));
} }
catch (error) { catch (error) {
@ -45,5 +30,8 @@ function DB_HANDLER(...args) {
error: error.message, error: error.message,
}; };
} }
finally {
yield (CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.end());
}
}); });
} }

View File

@ -1,14 +1,10 @@
type Param = { type Param = {
paradigm: "Full Access" | "FA" | "Read Only"; paradigm: "Full Access" | "FA" | "Read Only";
database: string;
queryString: string; queryString: string;
queryValues?: string[]; queryValues?: string[];
}; };
/** /**
* # DSQL user read-only DB handler * # DSQL user read-only DB handler
*/ */
export default function DSQL_USER_DB_HANDLER({ paradigm, database, queryString, queryValues, }: Param): Promise<unknown> | { export default function DSQL_USER_DB_HANDLER({ paradigm, queryString, queryValues, }: Param): Promise<any>;
success: boolean;
error: any;
};
export {}; export {};

View File

@ -1,102 +1,119 @@
"use strict"; "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) { var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod }; return (mod && mod.__esModule) ? mod : { "default": mod };
}; };
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.default = DSQL_USER_DB_HANDLER; exports.default = DSQL_USER_DB_HANDLER;
const fs_1 = __importDefault(require("fs")); const conn_db_handler_1 = __importDefault(require("../../db/conn-db-handler"));
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)(),
},
});
/** /**
* # DSQL user read-only DB handler * # DSQL user read-only DB handler
*/ */
function DSQL_USER_DB_HANDLER({ paradigm, database, queryString, queryValues, }) { function DSQL_USER_DB_HANDLER(_a) {
try { return __awaiter(this, arguments, void 0, function* ({ paradigm, queryString, queryValues, }) {
return new Promise((resolve, reject) => { try {
const fullAccess = (paradigm === null || paradigm === void 0 ? void 0 : paradigm.match(/full.access|^fa$/i)) switch (paradigm) {
? true case "Read Only":
: false; return yield (0, conn_db_handler_1.default)(global.DSQL_READ_ONLY_DB_CONN, queryString, queryValues);
try { case "Full Access":
if (fullAccess) { return yield (0, conn_db_handler_1.default)(global.DSQL_FULL_ACCESS_DB_CONN, queryString, queryValues);
DSQL_USER = (0, serverless_mysql_1.default)({ case "FA":
config: { return yield (0, conn_db_handler_1.default)(global.DSQL_FULL_ACCESS_DB_CONN, queryString, queryValues);
host: process.env.DSQL_DB_HOST, default:
user: process.env.DSQL_DB_FULL_ACCESS_USERNAME, return null;
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);
}
////////////////////////////////////////
} }
catch ( /** @type {any} */error) { }
//////////////////////////////////////// catch (error) {
fs_1.default.appendFileSync("./.tmp/dbErrorLogs.txt", error.message + "\n" + Date() + "\n\n\n", "utf8"); console.log(`DSQL_USER_DB_HANDLER Error: ${error.message}`);
resolve({ return null;
error: error.message, }
}); // try {
} // return new Promise((resolve, reject) => {
}); // const fullAccess = paradigm?.match(/full.access|^fa$/i)
} // ? true
catch ( /** @type {any} */error) { // : false;
return { // try {
success: false, // if (fullAccess) {
error: error.message, // 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,
// };
// }
});
} }

View File

@ -1,24 +1,11 @@
"use strict"; "use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.default = NO_DB_HANDLER; 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 * # DSQL user read-only DB handler
*/ */
function NO_DB_HANDLER(...args) { function NO_DB_HANDLER(...args) {
const NO_DB = global.DSQL_DB_CONN;
try { try {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
NO_DB.query(...args) NO_DB.query(...args)

View File

@ -1,25 +1,11 @@
"use strict"; "use strict";
// @ts-check
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.default = ROOT_DB_HANDLER; 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 * # Root DB handler
*/ */
function ROOT_DB_HANDLER(...args) { function ROOT_DB_HANDLER(...args) {
const NO_DB = global.DSQL_DB_CONN;
try { try {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
NO_DB.query(...args) NO_DB.query(...args)

View File

@ -20,5 +20,8 @@ function grabDbSSL() {
} }
return { return {
ca: fs_1.default.readFileSync(`${SSL_DIR}/ca-cert.pem`), 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,
}; };
} }

View File

@ -65,9 +65,6 @@ function getSchema(_a) {
}) })
.end(); .end();
}); });
return { return httpResponse;
success: true,
payload: httpResponse,
};
}); });
} }

View File

@ -3,6 +3,7 @@
import _ from "lodash"; import _ from "lodash";
import serverError from "../../backend/serverError"; import serverError from "../../backend/serverError";
import runQuery from "../../backend/db/runQuery"; import runQuery from "../../backend/db/runQuery";
import { DSQL_TableSchemaType, GetReturn } from "../../../types";
type Param = { type Param = {
query: string; query: string;
@ -31,11 +32,6 @@ export default async function apiGet({
return { success: false, msg: "Wrong Input." }; return { success: false, msg: "Wrong Input." };
} }
/**
* Create new user folder and file
*
* @description Create new user folder and file
*/
let results; let results;
try { try {
@ -49,10 +45,7 @@ export default async function apiGet({
local: useLocal, local: useLocal,
}); });
/** @type {import("../../../types").DSQL_TableSchemaType | undefined} */ let tableSchema: DSQL_TableSchemaType | undefined;
let tableSchema:
| import("../../../types").DSQL_TableSchemaType
| undefined;
if (dbSchema) { if (dbSchema) {
const targetTable = dbSchema.tables.find( const targetTable = dbSchema.tables.find(
@ -77,20 +70,23 @@ export default async function apiGet({
results = result; results = result;
/** @type {import("../../../types").GetReturn} */ const resObject: GetReturn = {
const resObject: import("../../../types").GetReturn = {
success: true, success: true,
payload: results, payload: results,
schema: tableName && tableSchema ? tableSchema : undefined, schema: tableName && tableSchema ? tableSchema : undefined,
}; };
return resObject; return resObject;
} catch (/** @type {any} */ error: any) { } catch (error: any) {
serverError({ serverError({
component: "/api/query/get/lines-85-94", component: "/api/query/get/lines-85-94",
message: error.message, message: error.message,
}); });
return { success: false, payload: null, error: error.message }; return {
success: false,
payload: null,
error: error.message,
};
} }
} }

View File

@ -26,7 +26,7 @@ export default async function handleSocialDb({
useLocal, useLocal,
}: HandleSocialDbFunctionParams): Promise<APILoginFunctionReturn> { }: HandleSocialDbFunctionParams): Promise<APILoginFunctionReturn> {
try { 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 = [ const existingSocialIdUserValues = [
social_id.toString(), social_id.toString(),
social_platform, 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({ let existingEmailOnly = await varDatabaseDbHandler({
database: database ? database : "datasquirel", 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 foundUserQueryValues = [finalEmail, social_platform, social_id];
const foundUser = await varDatabaseDbHandler({ const foundUser = await varDatabaseDbHandler({
@ -134,7 +134,7 @@ export default async function handleSocialDb({
await addMariadbUser({ userId: newUser.insertId, useLocal }); 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({ const newUserQueried = await varDatabaseDbHandler({
database: database ? database : "datasquirel", database: database ? database : "datasquirel",

View File

@ -30,11 +30,13 @@ export default async function loginSocialUser({
additionalFields, additionalFields,
useLocal, useLocal,
}: Param): Promise<APILoginFunctionReturn> { }: Param): Promise<APILoginFunctionReturn> {
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 foundUserValues = [user.email, user.social_id, social_platform];
const foundUser = await varDatabaseDbHandler({ const foundUser = await varDatabaseDbHandler({
database: database ? database : "datasquirel", database: finalDbName,
queryString: foundUserQuery, queryString: foundUserQuery,
queryValuesArray: foundUserValues, queryValuesArray: foundUserValues,
useLocal, useLocal,

View File

@ -46,7 +46,7 @@ export default async function apiCreateUser({
payload.password = hashedPassword; payload.password = hashedPassword;
const fieldsQuery = `SHOW COLUMNS FROM users`; const fieldsQuery = `SHOW COLUMNS FROM ${dbFullName}.users`;
let fields = await varDatabaseDbHandler({ let fields = await varDatabaseDbHandler({
queryString: fieldsQuery, 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 = ?" : "" payload.username ? " OR username = ?" : ""
}`; }`;
const existingUserValues = payload.username const existingUserValues = payload.username
@ -140,7 +140,7 @@ export default async function apiCreateUser({
}); });
if (addUser?.insertId) { 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({ const newlyAddedUser = await varDatabaseDbHandler({
queryString: newlyAddedUserQuery, queryString: newlyAddedUserQuery,

View File

@ -16,7 +16,7 @@ export default async function apiDeleteUser({
deletedUserId, deletedUserId,
useLocal, useLocal,
}: Param): Promise<Return> { }: Param): Promise<Return> {
const existingUserQuery = `SELECT * FROM users WHERE id = ?`; const existingUserQuery = `SELECT * FROM ${dbFullName}.users WHERE id = ?`;
const existingUserValues = [deletedUserId]; const existingUserValues = [deletedUserId];
const existingUser = await varDatabaseDbHandler({ const existingUser = await varDatabaseDbHandler({

View File

@ -13,13 +13,17 @@ export default async function apiGetUser({
userId, userId,
useLocal, useLocal,
}: APIGetUserFunctionParams): Promise<GetUserFunctionReturn> { }: APIGetUserFunctionParams): Promise<GetUserFunctionReturn> {
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; const API_USER_ID = userId || process.env.DSQL_API_USER_ID;
let foundUser = await varDatabaseDbHandler({ let foundUser = await varDatabaseDbHandler({
queryString: query, queryString: query,
queryValuesArray: [API_USER_ID], queryValuesArray: [API_USER_ID],
database: dbFullName.replace(/[^a-z0-9_]/g, ""), database: finalDbName,
useLocal, useLocal,
}); });

View File

@ -24,7 +24,7 @@ export default async function apiLoginUser({
social, social,
useLocal, useLocal,
}: APILoginFunctionParams): Promise<APILoginFunctionReturn> { }: APILoginFunctionParams): Promise<APILoginFunctionReturn> {
const dbFullName = database; const dbFullName = database.replace(/[^a-z0-9_]/g, "");
/** /**
* Check input validity * Check input validity
@ -55,9 +55,9 @@ export default async function apiLoginUser({
: null; : null;
let foundUser = await varDatabaseDbHandler({ let foundUser = await varDatabaseDbHandler({
queryString: `SELECT * FROM users WHERE email = ? OR username = ?`, queryString: `SELECT * FROM ${dbFullName}.users WHERE email = ? OR username = ?`,
queryValuesArray: [email, username], queryValuesArray: [email, username],
database: dbFullName.replace(/[^a-z0-9_]/g, ""), database: dbFullName,
useLocal, useLocal,
}); });
@ -108,9 +108,9 @@ export default async function apiLoginUser({
if (isPasswordCorrect && email_login) { if (isPasswordCorrect && email_login) {
const resetTempCode = await varDatabaseDbHandler({ 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], queryValuesArray: [email, username],
database: dbFullName.replace(/[^a-z0-9_]/g, ""), database: dbFullName,
useLocal, useLocal,
}); });
} }

View File

@ -20,7 +20,7 @@ export default async function apiReauthUser({
let foundUser = let foundUser =
existingUser?.id && existingUser.id.toString().match(/./) existingUser?.id && existingUser.id.toString().match(/./)
? await varDatabaseDbHandler({ ? await varDatabaseDbHandler({
queryString: `SELECT * FROM users WHERE id=?`, queryString: `SELECT * FROM ${database}.users WHERE id=?`,
queryValuesArray: [existingUser.id.toString()], queryValuesArray: [existingUser.id.toString()],
database, database,
useLocal, useLocal,

View File

@ -46,7 +46,7 @@ export default async function apiSendEmailCode({
} }
const createdAt = Date.now(); const createdAt = Date.now();
const foundUserQuery = `SELECT * FROM users WHERE email = ?`; const foundUserQuery = `SELECT * FROM ${database}.users WHERE email = ?`;
const foundUserValues = [email]; const foundUserValues = [email];
let foundUser = await varDatabaseDbHandler({ let foundUser = await varDatabaseDbHandler({
@ -107,13 +107,13 @@ export default async function apiSendEmailCode({
if (!info?.accepted) throw new Error("Mail not Sent!"); 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]; const setTempCodeValues = [tempCode + `-${createdAt}`, email];
let setTempCode = await varDatabaseDbHandler({ let setTempCode = await varDatabaseDbHandler({
queryString: setTempCodeQuery, queryString: setTempCodeQuery,
queryValuesArray: setTempCodeValues, queryValuesArray: setTempCodeValues,
database: database, database,
useLocal, useLocal,
}); });

View File

@ -25,7 +25,7 @@ export default async function apiUpdateUser({
useLocal, useLocal,
dbSchema, dbSchema,
}: Param): Promise<Return> { }: Param): Promise<Return> {
const existingUserQuery = `SELECT * FROM users WHERE id = ?`; const existingUserQuery = `SELECT * FROM ${dbFullName}.users WHERE id = ?`;
const existingUserValues = [updatedUserId]; const existingUserValues = [updatedUserId];
const existingUser = await varDatabaseDbHandler({ const existingUser = await varDatabaseDbHandler({

View File

@ -107,8 +107,7 @@ export default async function addDbEntry({
) )
: await dbHandler({ : await dbHandler({
paradigm: "Read Only", paradigm: "Read Only",
database: dbFullName, queryString: `SELECT * FROM \`${dbFullName}\`.\`${tableName}\` WHERE \`${duplicateColumnName}\`=?`,
queryString: `SELECT * FROM \`${tableName}\` WHERE \`${duplicateColumnName}\`=?`,
queryValues: [duplicateColumnValue], 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(",")})`; )}) VALUES (${insertValuesArray.map(() => "?").join(",")})`;
const queryValuesArray = insertValuesArray; const queryValuesArray = insertValuesArray;
@ -243,7 +242,6 @@ export default async function addDbEntry({
? await dbHandler(query, queryValuesArray) ? await dbHandler(query, queryValuesArray)
: await dbHandler({ : await dbHandler({
paradigm, paradigm,
database: dbFullName,
queryString: query, queryString: query,
queryValues: queryValuesArray, queryValues: queryValuesArray,
}); });

View File

@ -47,14 +47,13 @@ export default async function deleteDbEntry({
* *
* @description * @description
*/ */
const query = `DELETE FROM ${tableName} WHERE \`${identifierColumnName}\`=?`; const query = `DELETE FROM \`${dbFullName}\`.\`${tableName}\` WHERE \`${identifierColumnName}\`=?`;
const deletedEntry = isMaster const deletedEntry = isMaster
? await dbHandler(query, [identifierValue]) ? await dbHandler(query, [identifierValue])
: await dbHandler({ : await dbHandler({
paradigm, paradigm,
queryString: query, queryString: query,
database: dbFullName,
queryValues: [identifierValue], queryValues: [identifierValue],
}); });

View File

@ -84,7 +84,6 @@ export default async function runQuery({
result = await varReadOnlyDatabaseDbHandler({ result = await varReadOnlyDatabaseDbHandler({
queryString: formattedQuery, queryString: formattedQuery,
queryValuesArray: queryValuesArray?.map((vl) => String(vl)), queryValuesArray: queryValuesArray?.map((vl) => String(vl)),
database: dbFullName,
tableSchema, tableSchema,
useLocal: local, useLocal: local,
}); });
@ -92,7 +91,6 @@ export default async function runQuery({
result = await fullAccessDbHandler({ result = await fullAccessDbHandler({
queryString: formattedQuery, queryString: formattedQuery,
queryValuesArray: queryValuesArray?.map((vl) => String(vl)), queryValuesArray: queryValuesArray?.map((vl) => String(vl)),
database: dbFullName,
tableSchema, tableSchema,
local, local,
}); });

View File

@ -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}\`=?`; )} WHERE \`${identifierColumnName}\`=?`;
@ -174,7 +174,6 @@ export default async function updateDbEntry({
? await dbHandler(query, updateValues) ? await dbHandler(query, updateValues)
: await dbHandler({ : await dbHandler({
paradigm, paradigm,
database: dbFullName,
queryString: query, queryString: query,
queryValues: updateValues, queryValues: updateValues,
}); });

View File

@ -1,20 +1,6 @@
import fs from "fs"; import fs from "fs";
import serverError from "./serverError"; 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 * # Main DB Handler Function
*/ */
@ -26,11 +12,6 @@ export default async function dbHandler(...args: any[]) {
"utf8" "utf8"
); );
/**
* Declare variables
*
* @description Declare "results" variable
*/
let results; let results;
/** /**
@ -39,6 +20,8 @@ export default async function dbHandler(...args: any[]) {
* @description Fetch data from db if no cache * @description Fetch data from db if no cache
*/ */
try { try {
const connection = global.DSQL_DB_CONN;
results = await new Promise((resolve, reject) => { results = await new Promise((resolve, reject) => {
connection.query( connection.query(
...args, ...args,

View File

@ -7,7 +7,6 @@ import serverError from "./serverError";
type Param = { type Param = {
queryString: string; queryString: string;
database: string;
local?: boolean; local?: boolean;
tableSchema?: import("../../types").DSQL_TableSchemaType | null; tableSchema?: import("../../types").DSQL_TableSchemaType | null;
queryValuesArray?: string[]; queryValuesArray?: string[];
@ -18,7 +17,6 @@ type Param = {
*/ */
export default async function fullAccessDbHandler({ export default async function fullAccessDbHandler({
queryString, queryString,
database,
tableSchema, tableSchema,
queryValuesArray, queryValuesArray,
local, local,
@ -42,7 +40,6 @@ export default async function fullAccessDbHandler({
? await LOCAL_DB_HANDLER(queryString, queryValuesArray) ? await LOCAL_DB_HANDLER(queryString, queryValuesArray)
: await DSQL_USER_DB_HANDLER({ : await DSQL_USER_DB_HANDLER({
paradigm: "Full Access", paradigm: "Full Access",
database,
queryString, queryString,
queryValues: queryValuesArray, queryValues: queryValuesArray,
}); });

View File

@ -1,6 +1,6 @@
import fs from "fs"; import fs from "fs";
import serverError from "./serverError"; 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 * # No Database DB Handler

View File

@ -33,7 +33,6 @@ export default async function varDatabaseDbHandler({
? true ? true
: false; : false;
/** @type {any} */
const FINAL_DB_HANDLER: any = useLocal const FINAL_DB_HANDLER: any = useLocal
? LOCAL_DB_HANDLER ? LOCAL_DB_HANDLER
: isMaster : isMaster
@ -58,7 +57,6 @@ export default async function varDatabaseDbHandler({
? await FINAL_DB_HANDLER(queryString, queryValuesArray) ? await FINAL_DB_HANDLER(queryString, queryValuesArray)
: await FINAL_DB_HANDLER({ : await FINAL_DB_HANDLER({
paradigm: "Full Access", paradigm: "Full Access",
database,
queryString, queryString,
queryValues: queryValuesArray, queryValues: queryValuesArray,
}); });
@ -67,11 +65,11 @@ export default async function varDatabaseDbHandler({
? await FINAL_DB_HANDLER(queryString) ? await FINAL_DB_HANDLER(queryString)
: await FINAL_DB_HANDLER({ : await FINAL_DB_HANDLER({
paradigm: "Full Access", paradigm: "Full Access",
database,
queryString, queryString,
}); });
} }
} catch (error: any) { } catch (error: any) {
console.log(`varDatabaseDbHandler Error: ${error.message}`);
serverError({ serverError({
component: "varDatabaseDbHandler/lines-29-32", component: "varDatabaseDbHandler/lines-29-32",
message: error.message, message: error.message,

View File

@ -8,7 +8,6 @@ import LOCAL_DB_HANDLER from "../../utils/backend/global-db/LOCAL_DB_HANDLER";
type Param = { type Param = {
queryString: string; queryString: string;
database: string;
queryValuesArray?: string[]; queryValuesArray?: string[];
tableSchema?: import("../../types").DSQL_TableSchemaType; tableSchema?: import("../../types").DSQL_TableSchemaType;
useLocal?: boolean; useLocal?: boolean;
@ -20,7 +19,6 @@ type Param = {
*/ */
export default async function varReadOnlyDatabaseDbHandler({ export default async function varReadOnlyDatabaseDbHandler({
queryString, queryString,
database,
queryValuesArray, queryValuesArray,
tableSchema, tableSchema,
useLocal, useLocal,
@ -42,7 +40,6 @@ export default async function varReadOnlyDatabaseDbHandler({
? await LOCAL_DB_HANDLER(queryString, queryValuesArray) ? await LOCAL_DB_HANDLER(queryString, queryValuesArray)
: await DSQL_USER_DB_HANDLER({ : await DSQL_USER_DB_HANDLER({
paradigm: "Read Only", paradigm: "Read Only",
database,
queryString, queryString,
queryValues: queryValuesArray, queryValues: queryValuesArray,
}); });

View File

@ -2,17 +2,6 @@ require("dotenv").config({ path: "./../.env" });
import mysql from "serverless-mysql"; import mysql from "serverless-mysql";
import grabDbSSL from "../utils/backend/grabDbSSL"; 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 * # Main DB Handler Function
* @async * @async
@ -25,11 +14,8 @@ const connection = mysql({
* @returns {Promise<object|null>} * @returns {Promise<object|null>}
*/ */
(async () => { (async () => {
/** const connection = global.DSQL_DB_CONN;
* Switch Database
*
* @description If a database is provided, switch to it
*/
try { try {
const result = await connection.query( const result = await connection.query(
"SELECT id,first_name,last_name FROM users LIMIT 3" "SELECT id,first_name,last_name FROM users LIMIT 3"

View File

@ -8,7 +8,6 @@ import updateTable from "./utils/updateTable";
import dbHandler from "./utils/dbHandler"; import dbHandler from "./utils/dbHandler";
import EJSON from "../utils/ejson"; import EJSON from "../utils/ejson";
import { DSQL_DatabaseSchemaType } from "../types"; import { DSQL_DatabaseSchemaType } from "../types";
import { parseArgs } from "util";
type Param = { type Param = {
userId?: number | string | null; userId?: number | string | null;
@ -18,20 +17,13 @@ type Param = {
/** /**
* # Create database from Schema Function * # Create database from Schema Function
* @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database
*/ */
export default async function createDbFromSchema({ export default async function createDbFromSchema({
userId, userId,
targetDatabase, targetDatabase,
dbSchemaData, dbSchemaData,
}: Param) { }: 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 const schemaPath = userId
? path.join( ? path.join(
String(process.env.DSQL_USER_DB_SCHEMA_PATH), String(process.env.DSQL_USER_DB_SCHEMA_PATH),
@ -53,9 +45,8 @@ export default async function createDbFromSchema({
// await createDatabasesFromSchema(dbSchema); // await createDatabasesFromSchema(dbSchema);
for (let i = 0; i < dbSchema.length; i++) { for (let i = 0; i < dbSchema.length; i++) {
/** @type {import("../types").DSQL_DatabaseSchemaType} */ const database: DSQL_DatabaseSchemaType = dbSchema[i];
const database: import("../types").DSQL_DatabaseSchemaType =
dbSchema[i];
const { dbFullName, tables, dbName, dbSlug, childrenDatabases } = const { dbFullName, tables, dbName, dbSlug, childrenDatabases } =
database; database;
@ -63,18 +54,12 @@ export default async function createDbFromSchema({
continue; continue;
} }
console.log("Checking Database ...");
/** @type {any} */ /** @type {any} */
const dbCheck: any = await noDatabaseDbHandler( const dbCheck: any = await noDatabaseDbHandler(
`SELECT SCHEMA_NAME AS dbFullName FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '${dbFullName}'` `SELECT SCHEMA_NAME AS dbFullName FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '${dbFullName}'`
); );
console.log("DB Checked Success!"); if (!dbCheck?.[0]?.dbFullName) {
if (dbCheck && dbCheck[0]?.dbFullName) {
// Database Exists
} else {
const newDatabase = await noDatabaseDbHandler( const newDatabase = await noDatabaseDbHandler(
`CREATE DATABASE IF NOT EXISTS \`${dbFullName}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin` `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]) { if (oldTableFilteredArray && oldTableFilteredArray[0]) {
console.log("Renaming Table"); console.log("Renaming Table");
await varDatabaseDbHandler({ await varDatabaseDbHandler({
queryString: `RENAME TABLE \`${oldTableFilteredArray[0].tableNameOld}\` TO \`${oldTableFilteredArray[0].tableName}\``, queryString: `RENAME TABLE \`${dbFullName}\`.\`${oldTableFilteredArray[0].tableNameOld}\` TO \`${oldTableFilteredArray[0].tableName}\``,
database: dbFullName,
}); });
} else { } else {
console.log(`Dropping Table from ${dbFullName}`); console.log(`Dropping Table from ${dbFullName}`);
await varDatabaseDbHandler({ await varDatabaseDbHandler({
queryString: `DROP TABLE \`${TABLE_NAME}\``, queryString: `DROP TABLE \`${dbFullName}\`.\`${TABLE_NAME}\``,
database: dbFullName,
}); });
const deleteTableEntry = await dbHandler({ 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], values: [userId, dbSlug, TABLE_NAME],
database: "datasquirel",
}); });
} }
} }
@ -136,8 +118,7 @@ export default async function createDbFromSchema({
const recordedDbEntryArray = userId const recordedDbEntryArray = userId
? await varDatabaseDbHandler({ ? await varDatabaseDbHandler({
database: "datasquirel", queryString: `SELECT * FROM datasquirel.user_databases WHERE db_full_name = ?`,
queryString: `SELECT * FROM user_databases WHERE db_full_name = ?`,
queryValuesArray: [dbFullName], queryValuesArray: [dbFullName],
}) })
: undefined; : undefined;
@ -168,7 +149,6 @@ export default async function createDbFromSchema({
TABLE_NAME = ? TABLE_NAME = ?
) AS tableExists`, ) AS tableExists`,
queryValuesArray: [dbFullName, table.tableName], queryValuesArray: [dbFullName, table.tableName],
database: dbFullName,
}); });
//////////////////////////////////////// ////////////////////////////////////////
@ -222,7 +202,6 @@ export default async function createDbFromSchema({
tableName: tableName, tableName: tableName,
tableInfoArray: fields, tableInfoArray: fields,
dbFullName: dbFullName, dbFullName: dbFullName,
dbSchema,
tableSchema: table, tableSchema: table,
recordedDbEntry, recordedDbEntry,
}); });
@ -255,8 +234,7 @@ export default async function createDbFromSchema({
*/ // @ts-ignore */ // @ts-ignore
const allExistingIndexes: import("../types").DSQL_MYSQL_SHOW_INDEXES_Type[] = const allExistingIndexes: import("../types").DSQL_MYSQL_SHOW_INDEXES_Type[] =
await varDatabaseDbHandler({ await varDatabaseDbHandler({
queryString: `SHOW INDEXES FROM \`${tableName}\``, queryString: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\``,
database: dbFullName,
}); });
const existingKeyInDb = const existingKeyInDb =
@ -278,11 +256,10 @@ export default async function createDbFromSchema({
indexType?.match(/fullText/i) indexType?.match(/fullText/i)
? " FULLTEXT" ? " FULLTEXT"
: "" : ""
} INDEX \`${alias}\` ON ${tableName}(${indexTableFields } INDEX \`${alias}\` ON \`${dbFullName}\`.\`${tableName}\`(${indexTableFields
?.map((nm) => nm.value) ?.map((nm) => nm.value)
.map((nm) => `\`${nm}\``) .map((nm) => `\`${nm}\``)
.join(",")}) COMMENT 'schema_index'`, .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({});
} }

View File

@ -32,17 +32,14 @@ varDatabaseDbHandler({
const tableInfo = await varDatabaseDbHandler({ const tableInfo = await varDatabaseDbHandler({
queryString: `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='${db_full_name}' AND TABLE_NAME='${table_slug}'`, 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({ const updateDbCharset = await varDatabaseDbHandler({
queryString: `ALTER DATABASE ${db_full_name} CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin;`, queryString: `ALTER DATABASE ${db_full_name} CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin;`,
database: db_full_name,
}); });
const updateEncoding = await varDatabaseDbHandler({ const updateEncoding = await varDatabaseDbHandler({
queryString: `ALTER TABLE \`${table_slug}\` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`, queryString: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`,
database: db_full_name,
}); });
} }

View File

@ -7,9 +7,9 @@ export interface GrantType {
} }
type Param = { type Param = {
username: string; username?: string;
host: string; host?: string;
grants: GrantType[]; grants?: GrantType[];
userId: string; userId: string;
}; };

View File

@ -7,13 +7,14 @@ import dbHandler from "../utils/dbHandler";
import handleGrants, { GrantType } from "./handleGrants"; import handleGrants, { GrantType } from "./handleGrants";
import encrypt from "../../functions/dsql/encrypt"; import encrypt from "../../functions/dsql/encrypt";
import decrypt from "../../functions/dsql/decrypt"; 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"; const defaultMariadbUserHost = process.env.DSQL_DB_HOST || "127.0.0.1";
type Param = { type Param = {
userId?: number | string; userId?: number | string;
mariadbUserHost?: string; mariadbUserHost?: string;
mariadbUser?: string; mariadbUsername?: string;
sqlUserID?: string | number; sqlUserID?: string | number;
}; };
@ -23,29 +24,30 @@ type Param = {
export default async function refreshUsersAndGrants({ export default async function refreshUsersAndGrants({
userId, userId,
mariadbUserHost, mariadbUserHost,
mariadbUser, mariadbUsername,
sqlUserID, sqlUserID,
}: Param) { }: Param) {
/** const mariadbUsers = (await dbHandler({
* @description Users query: `SELECT * FROM mariadb_users`,
* @type {*[] | null} })) as any[] | null;
*/ // @ts-ignore
const users: any[] | null = await dbHandler({
query: `SELECT * FROM users`,
});
if (!users?.[0]) { if (!mariadbUsers?.[0]) {
process.exit(); return;
} }
for (let i = 0; i < users.length; i++) { const isRootUser = userId
const user = users[i]; ? userId == Number(process.env.DSQL_SU_USER_ID)
: false;
if (!user) continue; for (let i = 0; i < mariadbUsers.length; i++) {
if (userId && user.id != userId) continue; const mariadbUser = mariadbUsers[i];
if (!mariadbUser) continue;
if (userId && mariadbUser.user_id != userId) continue;
try { try {
const { mariadb_user, mariadb_host, mariadb_pass, id } = user; const { mariadb_user, mariadb_host, mariadb_pass, user_id } =
mariadbUser;
const existingUser = await noDatabaseDbHandler( const existingUser = await noDatabaseDbHandler(
`SELECT * FROM mysql.user WHERE User = '${mariadb_user}' AND Host = '${mariadb_host}'` `SELECT * FROM mysql.user WHERE User = '${mariadb_user}' AND Host = '${mariadb_host}'`
); );
@ -58,9 +60,6 @@ export default async function refreshUsersAndGrants({
}) })
: null; : null;
/**
* @type {import("../../types").MYSQL_mariadb_users_table_def | undefined}
*/
const activeMariadbUserObject: const activeMariadbUserObject:
| import("../../types").MYSQL_mariadb_users_table_def | import("../../types").MYSQL_mariadb_users_table_def
| undefined = Array.isArray(existingMariaDBUserArray) | undefined = Array.isArray(existingMariaDBUserArray)
@ -79,7 +78,10 @@ export default async function refreshUsersAndGrants({
mariadbUserHost == defaultMariadbUserHost mariadbUserHost == defaultMariadbUserHost
); );
const dslUsername = `dsql_user_${id}`; const dslUsername = isRootUser
? mariadbUsername
: `dsql_user_${user_id}`;
const dsqlPassword = activeMariadbUserObject?.password const dsqlPassword = activeMariadbUserObject?.password
? activeMariadbUserObject.password ? activeMariadbUserObject.password
: isUserExisting : isUserExisting
@ -101,12 +103,13 @@ export default async function refreshUsersAndGrants({
encryptionKey: process.env.DSQL_ENCRYPTION_PASSWORD, encryptionKey: process.env.DSQL_ENCRYPTION_PASSWORD,
encryptionSalt: process.env.DSQL_ENCRYPTION_SALT, encryptionSalt: process.env.DSQL_ENCRYPTION_SALT,
}); });
if ( if (
!isUserExisting && !isUserExisting &&
!sqlUserID && !sqlUserID &&
!isPrimary && !isPrimary &&
!mariadbUserHost && !mariadbUserHost &&
!mariadbUser !mariadbUsername
) { ) {
const createNewUser = await noDatabaseDbHandler( const createNewUser = await noDatabaseDbHandler(
`CREATE USER IF NOT EXISTS '${dslUsername}'@'${defaultMariadbUserHost}' IDENTIFIED BY '${dsqlPassword}'` `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("createNewUser", createNewUser);
console.log( 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({ const updateUser = await dbHandler({
@ -124,9 +127,13 @@ export default async function refreshUsersAndGrants({
dslUsername, dslUsername,
defaultMariadbUserHost, defaultMariadbUserHost,
encryptedPassword, 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) { if (isPrimary) {
@ -140,7 +147,7 @@ export default async function refreshUsersAndGrants({
dslUsername, dslUsername,
finalHost, finalHost,
encryptedPassword, encryptedPassword,
user.id, mariadbUser.id,
], ],
}); });
} }
@ -154,7 +161,7 @@ export default async function refreshUsersAndGrants({
*/ */
const existingMariadbPrimaryUser = await dbHandler({ const existingMariadbPrimaryUser = await dbHandler({
query: `SELECT * FROM mariadb_users WHERE user_id = ? AND \`primary\` = 1`, query: `SELECT * FROM mariadb_users WHERE user_id = ? AND \`primary\` = 1`,
values: [id], values: [user_id],
}); });
const isPrimaryUserExisting = Boolean( const isPrimaryUserExisting = Boolean(
@ -174,7 +181,7 @@ export default async function refreshUsersAndGrants({
const insertPrimaryMariadbUser = await dbHandler({ const insertPrimaryMariadbUser = await dbHandler({
query: `INSERT INTO mariadb_users (user_id, username, password, \`primary\`, grants) VALUES (?, ?, ?, ?, ?)`, query: `INSERT INTO mariadb_users (user_id, username, password, \`primary\`, grants) VALUES (?, ?, ?, ?, ?)`,
values: [ values: [
id, user_id,
dslUsername, dslUsername,
encryptedPassword, encryptedPassword,
"1", "1",
@ -187,32 +194,31 @@ export default async function refreshUsersAndGrants({
const existingExtraMariadbUsers = await dbHandler({ const existingExtraMariadbUsers = await dbHandler({
query: `SELECT * FROM mariadb_users WHERE user_id = ? AND \`primary\` != '1'`, query: `SELECT * FROM mariadb_users WHERE user_id = ? AND \`primary\` != '1'`,
values: [id], values: [user_id],
}); });
if (Array.isArray(existingExtraMariadbUsers)) { if (Array.isArray(existingExtraMariadbUsers)) {
for (let i = 0; i < existingExtraMariadbUsers.length; i++) { for (let i = 0; i < existingExtraMariadbUsers.length; i++) {
const mariadbUser = existingExtraMariadbUsers[i]; const _mariadbUser = existingExtraMariadbUsers[
const { i
user_id, ] as MYSQL_mariadb_users_table_def;
username,
host,
password,
primary,
grants,
} = mariadbUser;
if (mariadbUser && username != mariadbUser) continue; if (
if (mariadbUserHost && host != mariadbUserHost) continue; _mariadbUser &&
_mariadbUser.username != mariadbUsername
)
continue;
if (mariadbUserHost && _mariadbUser.host != mariadbUserHost)
continue;
const decrptedPassword = decrypt({ const decrptedPassword = decrypt({
encryptedString: password, encryptedString: _mariadbUser.password || "",
encryptionKey: process.env.DSQL_ENCRYPTION_PASSWORD, encryptionKey: process.env.DSQL_ENCRYPTION_PASSWORD,
encryptionSalt: process.env.DSQL_ENCRYPTION_SALT, encryptionSalt: process.env.DSQL_ENCRYPTION_SALT,
}); });
const existingExtraMariadbUser = await noDatabaseDbHandler( 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( const isExtraMariadbUserExisting = Boolean(
@ -221,23 +227,24 @@ export default async function refreshUsersAndGrants({
if (!isExtraMariadbUserExisting) { if (!isExtraMariadbUserExisting) {
await noDatabaseDbHandler( 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({ const isGrantHandled = await handleGrants({
username, username: _mariadbUser.username,
host, host: _mariadbUser.host,
grants: grants:
grants && typeof grants == "string" _mariadbUser.grants &&
? JSON.parse(grants) typeof _mariadbUser.grants == "string"
? JSON.parse(_mariadbUser.grants)
: [], : [],
userId: String(userId), userId: String(userId),
}); });
if (!isGrantHandled) { if (!isGrantHandled) {
console.log( console.log(
`Error in handling grants for user ${username}@${host}` `Error in handling grants for user ${_mariadbUser.username}@${_mariadbUser.host}`
); );
} }
} }

View File

@ -54,7 +54,7 @@ async function recoverMainJsonFromDb() {
const tableFields = await varDatabaseDbHandler({ const tableFields = await varDatabaseDbHandler({
database: db_full_name, 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++) { for (let k = 0; k < tableFields.length; k++) {

View File

@ -23,7 +23,7 @@ console.log("Running Tailwind CSS compiler ...");
fs.watch("./../", (curr, prev) => { fs.watch("./../", (curr, prev) => {
exec( exec(
`npx tailwindcss -i ./tailwind/main.css -o ./styles/tailwind.css`, `bunx tailwindcss -i ./tailwind/main.css -o ./styles/tailwind.css`,
(error, stdout, stderr) => { (error, stdout, stderr) => {
if (error) { if (error) {
console.log("ERROR =>", error.message); console.log("ERROR =>", error.message);

View File

@ -24,17 +24,14 @@ varDatabaseDbHandler({
const tableInfo = await varDatabaseDbHandler({ const tableInfo = await varDatabaseDbHandler({
queryString: `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='${db_full_name}' AND TABLE_NAME='${table_slug}'`, 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({ const updateCreationDateTimestamp = await varDatabaseDbHandler({
queryString: `ALTER TABLE \`${table_slug}\` MODIFY COLUMN date_created_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP`, queryString: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` MODIFY COLUMN date_created_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP`,
database: db_full_name,
}); });
const updateDateTimestamp = await varDatabaseDbHandler({ const updateDateTimestamp = await varDatabaseDbHandler({
queryString: `ALTER TABLE \`${table_slug}\` MODIFY COLUMN date_updated_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP`, queryString: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` MODIFY COLUMN date_updated_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP`,
database: db_full_name,
}); });
console.log("Date Updated Column updated"); console.log("Date Updated Column updated");

View File

@ -17,8 +17,7 @@ import DB_HANDLER from "../utils/backend/global-db/DB_HANDLER";
* @description Grab Schema * @description Grab Schema
*/ */
varDatabaseDbHandler({ varDatabaseDbHandler({
queryString: `SELECT DISTINCT db_id FROM user_database_tables`, queryString: `SELECT DISTINCT db_id FROM datasquirel.user_database_tables`,
database: "datasquirel",
}).then(async (tables) => { }).then(async (tables) => {
// console.log(tables); // console.log(tables);
// process.exit(); // process.exit();

View File

@ -2,17 +2,6 @@ require("dotenv").config({ path: "./../.env" });
import grabDbSSL from "../utils/backend/grabDbSSL"; import grabDbSSL from "../utils/backend/grabDbSSL";
import mysql from "serverless-mysql"; 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 * # Main DB Handler Function
* @async * @async
@ -25,11 +14,8 @@ const connection = mysql({
* @returns {Promise<object|null>} * @returns {Promise<object|null>}
*/ */
(async () => { (async () => {
/** const connection = global.DSQL_DB_CONN;
* Switch Database
*
* @description If a database is provided, switch to it
*/
try { try {
const result = await connection.query( const result = await connection.query(
"SELECT user,host,ssl_type FROM mysql.user" "SELECT user,host,ssl_type FROM mysql.user"

View File

@ -8,10 +8,8 @@ type Param = {
dbFullName: string; dbFullName: string;
tableName: string; tableName: string;
tableInfoArray: any[]; tableInfoArray: any[];
dbSchema?: DSQL_DatabaseSchemaType[];
tableSchema?: DSQL_TableSchemaType; tableSchema?: DSQL_TableSchemaType;
recordedDbEntry?: any; recordedDbEntry?: any;
clone?: boolean;
}; };
/** /**
@ -21,8 +19,6 @@ export default async function createTable({
dbFullName, dbFullName,
tableName, tableName,
tableInfoArray, tableInfoArray,
dbSchema,
clone,
tableSchema, tableSchema,
recordedDbEntry, recordedDbEntry,
}: Param) { }: Param) {
@ -40,7 +36,9 @@ export default async function createTable({
*/ */
const createTableQueryArray = []; 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({ const existingTable = await varDatabaseDbHandler({
database: "datasquirel", queryString: `SELECT * FROM datasquirel.user_database_tables WHERE db_id = ? AND table_slug = ?`,
queryString: `SELECT * FROM user_database_tables WHERE db_id = ? AND table_slug = ?`,
queryValuesArray: [recordedDbEntry.id, tableSchema?.tableName], queryValuesArray: [recordedDbEntry.id, tableSchema?.tableName],
}); });
@ -63,7 +60,7 @@ export default async function createTable({
if (!table?.id) { if (!table?.id) {
const newTableEntry = await dbHandler({ const newTableEntry = await dbHandler({
query: `INSERT INTO user_database_tables SET ?`, query: `INSERT INTO datasquirel.user_database_tables SET ?`,
values: { values: {
user_id: recordedDbEntry.user_id, user_id: recordedDbEntry.user_id,
db_id: recordedDbEntry.id, db_id: recordedDbEntry.id,
@ -80,7 +77,6 @@ export default async function createTable({
date_updated: Date(), date_updated: Date(),
date_updated_code: Date.now(), date_updated_code: Date.now(),
}, },
database: "datasquirel",
}); });
} }
} catch (error) {} } catch (error) {}
@ -150,10 +146,6 @@ export default async function createTable({
//////////////////////////////////////// ////////////////////////////////////////
} }
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
if (foreignKeys[0]) { if (foreignKeys[0]) {
foreignKeys.forEach((foreighKey, index, array) => { foreignKeys.forEach((foreighKey, index, array) => {
const fieldName = foreighKey.fieldName; const fieldName = foreighKey.fieldName;
@ -190,18 +182,7 @@ export default async function createTable({
const newTable = await varDatabaseDbHandler({ const newTable = await varDatabaseDbHandler({
queryString: createTableQuery, queryString: createTableQuery,
database: dbFullName,
}); });
return newTable; return newTable;
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
} }
/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */

View File

@ -4,79 +4,29 @@ import path from "path";
import mysql from "serverless-mysql"; import mysql from "serverless-mysql";
import grabDbSSL from "../../utils/backend/grabDbSSL"; 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 = { type Param = {
query: string; query: string;
values?: string[] | object; values?: string[] | object;
database?: string;
}; };
/** /**
* # Main DB Handler Function * # Main DB Handler Function
* @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database
*/ */
export default async function dbHandler({ export default async function dbHandler({
query, query,
values, values,
database,
}: Param): Promise<any[] | object | null> { }: Param): Promise<any[] | object | null> {
/** let connection = global.DSQL_DB_CONN;
* Switch Database
*
* @description If a database is provided, switch to it
*/
let isDbCorrect = true;
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; let results;
/**
* Fetch from db
*
* @description Fetch data from db if no cache
*/
try { try {
if (query && values) { if (query && values) {
results = await connection.query(query, values); results = await connection.query(query, values);
} else { } else {
results = await connection.query(query); results = await connection.query(query);
} }
/** ********************* Clean up */
await connection.end();
} catch (/** @type {any} */ error: any) { } catch (/** @type {any} */ error: any) {
if (process.env.FIRST_RUN) { if (process.env.FIRST_RUN) {
return null; return null;
@ -92,13 +42,10 @@ export default async function dbHandler({
"utf8" "utf8"
); );
results = null; results = null;
} finally {
await connection?.end();
} }
/**
* Return results
*
* @description Return results add to cache if "req" param is passed
*/
if (results) { if (results) {
return JSON.parse(JSON.stringify(results)); return JSON.parse(JSON.stringify(results));
} else { } else {

View File

@ -75,7 +75,9 @@ export default async function updateTable({
/** /**
* @description Push the query initial value * @description Push the query initial value
*/ */
updateTableQueryArray.push(`ALTER TABLE \`${tableName}\``); updateTableQueryArray.push(
`ALTER TABLE \`${dbFullName}\`.\`${tableName}\``
);
if (childDb) { if (childDb) {
try { try {
@ -84,8 +86,7 @@ export default async function updateTable({
} }
const existingTable = await varDatabaseDbHandler({ const existingTable = await varDatabaseDbHandler({
database: "datasquirel", queryString: `SELECT * FROM datasquirel.user_database_tables WHERE db_id = ? AND table_slug = ?`,
queryString: `SELECT * FROM user_database_tables WHERE db_id = ? AND table_slug = ?`,
queryValuesArray: [recordedDbEntry.id, tableName], queryValuesArray: [recordedDbEntry.id, tableName],
}); });
@ -95,7 +96,7 @@ export default async function updateTable({
if (!table?.id) { if (!table?.id) {
const newTableEntry = await dbHandler({ const newTableEntry = await dbHandler({
query: `INSERT INTO user_database_tables SET ?`, query: `INSERT INTO datasquirel.user_database_tables SET ?`,
values: { values: {
user_id: recordedDbEntry.user_id, user_id: recordedDbEntry.user_id,
db_id: recordedDbEntry.id, db_id: recordedDbEntry.id,
@ -112,7 +113,6 @@ export default async function updateTable({
date_updated: Date(), date_updated: Date(),
date_updated_code: Date.now(), date_updated_code: Date.now(),
}, },
database: "datasquirel",
}); });
} }
} catch (error) {} } catch (error) {}
@ -124,8 +124,7 @@ export default async function updateTable({
*/ // @ts-ignore */ // @ts-ignore
const allExistingIndexes: import("../../types").DSQL_MYSQL_SHOW_INDEXES_Type[] = const allExistingIndexes: import("../../types").DSQL_MYSQL_SHOW_INDEXES_Type[] =
await varDatabaseDbHandler({ await varDatabaseDbHandler({
queryString: `SHOW INDEXES FROM \`${tableName}\``, queryString: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\``,
database: dbFullName,
}); });
/** /**
@ -134,8 +133,7 @@ export default async function updateTable({
*/ // @ts-ignore */ // @ts-ignore
const allExistingColumns: import("../../types").DSQL_MYSQL_SHOW_COLUMNS_Type[] = const allExistingColumns: import("../../types").DSQL_MYSQL_SHOW_COLUMNS_Type[] =
await varDatabaseDbHandler({ await varDatabaseDbHandler({
queryString: `SHOW COLUMNS FROM \`${tableName}\``, queryString: `SHOW COLUMNS FROM \`${dbFullName}\`.\`${tableName}\``,
database: dbFullName,
}); });
//////////////////////////////////////// ////////////////////////////////////////
@ -174,8 +172,7 @@ export default async function updateTable({
updatedColumnsArray.push(existingEntry[0].fieldName); updatedColumnsArray.push(existingEntry[0].fieldName);
const renameColumn = await varDatabaseDbHandler({ const renameColumn = await varDatabaseDbHandler({
queryString: `ALTER TABLE ${tableName} RENAME COLUMN \`${existingEntry[0].originName}\` TO \`${existingEntry[0].fieldName}\``, queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` RENAME COLUMN \`${existingEntry[0].originName}\` TO \`${existingEntry[0].fieldName}\``,
database: dbFullName,
}); });
console.log( console.log(
@ -241,8 +238,7 @@ export default async function updateTable({
//////////////////////////////////////// ////////////////////////////////////////
} else { } else {
await varDatabaseDbHandler({ await varDatabaseDbHandler({
queryString: `ALTER TABLE ${tableName} DROP COLUMN \`${Field}\``, queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP COLUMN \`${Field}\``,
database: dbFullName,
}); });
} }
} }
@ -275,8 +271,7 @@ export default async function updateTable({
* present in the datasquirel DB schema * present in the datasquirel DB schema
*/ */
await varDatabaseDbHandler({ await varDatabaseDbHandler({
queryString: `ALTER TABLE ${tableName} DROP INDEX \`${Key_name}\``, queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${Key_name}\``,
database: dbFullName,
}); });
} }
} }
@ -312,11 +307,10 @@ export default async function updateTable({
await varDatabaseDbHandler({ await varDatabaseDbHandler({
queryString: `CREATE${ queryString: `CREATE${
indexType?.match(/fullText/i) ? " FULLTEXT" : "" indexType?.match(/fullText/i) ? " FULLTEXT" : ""
} INDEX \`${alias}\` ON ${tableName}(${indexTableFields } INDEX \`${alias}\` ON \`${dbFullName}\`.\`${tableName}\`(${indexTableFields
?.map((nm) => nm.value) ?.map((nm) => nm.value)
.map((nm) => `\`${nm}\``) .map((nm) => `\`${nm}\``)
.join(",")}) COMMENT 'schema_index'`, .join(",")}) COMMENT 'schema_index'`,
database: dbFullName,
}); });
} }
} }
@ -332,12 +326,11 @@ export default async function updateTable({
/** /**
* @description All MSQL Foreign Keys * @description All MSQL Foreign Keys
* @type {import("../../types").DSQL_MYSQL_FOREIGN_KEYS_Type[] | null} * @type {import("../../types").DSQL_MYSQL_FOREIGN_KEYS_Type[] | null}
*/ // @ts-ignore */
const allForeignKeys: const allForeignKeys:
| import("../../types").DSQL_MYSQL_FOREIGN_KEYS_Type[] | import("../../types").DSQL_MYSQL_FOREIGN_KEYS_Type[]
| null = await varDatabaseDbHandler({ | 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'`, 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) { if (allForeignKeys) {
@ -354,8 +347,7 @@ export default async function updateTable({
* Foreign keys * Foreign keys
*/ */
const dropForeignKey = await varDatabaseDbHandler({ const dropForeignKey = await varDatabaseDbHandler({
queryString: `ALTER TABLE ${tableName} DROP FOREIGN KEY \`${CONSTRAINT_NAME}\``, queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP FOREIGN KEY \`${CONSTRAINT_NAME}\``,
database: dbFullName,
}); });
} }
} }
@ -500,10 +492,9 @@ export default async function updateTable({
}${cascadeUpdate ? " ON UPDATE 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 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({ const addForeignKey = await varDatabaseDbHandler({
database: dbFullName,
queryString: finalQueryString, queryString: finalQueryString,
}); });
@ -533,7 +524,6 @@ export default async function updateTable({
if (updateTableQueryArray.length > 1) { if (updateTableQueryArray.length > 1) {
const updateTable = await varDatabaseDbHandler({ const updateTable = await varDatabaseDbHandler({
queryString: updateTableQuery, queryString: updateTableQuery,
database: dbFullName,
}); });
return updateTable; return updateTable;

View File

@ -4,8 +4,6 @@ import { DSQL_TableSchemaType } from "../../types";
type Param = { type Param = {
queryString: string; queryString: string;
queryValuesArray?: string[]; queryValuesArray?: string[];
database?: string;
tableSchema?: DSQL_TableSchemaType;
}; };
/** /**
@ -14,8 +12,6 @@ type Param = {
export default async function varDatabaseDbHandler({ export default async function varDatabaseDbHandler({
queryString, queryString,
queryValuesArray, queryValuesArray,
database,
tableSchema,
}: Param): Promise<any> { }: Param): Promise<any> {
/** /**
* Declare variables * Declare variables
@ -39,12 +35,10 @@ export default async function varDatabaseDbHandler({
results = await dbHandler({ results = await dbHandler({
query: queryString, query: queryString,
values: queryValuesArray, values: queryValuesArray,
database,
}); });
} else { } else {
results = await dbHandler({ results = await dbHandler({
query: queryString, query: queryString,
database,
}); });
} }

View File

@ -1067,11 +1067,7 @@ export type FetchApiOptions = RequestInit & {
query?: { [key: string]: any }; query?: { [key: string]: any };
}; };
export type AuthCsrfHeaderName = "x-csrf-auth";
type FetchHeader = HeadersInit & { type FetchHeader = HeadersInit & {
[key in AuthCsrfHeaderName]?: string | null;
} & {
[key: string]: any; [key: string]: any;
}; };

View File

@ -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 * # DSQL user read-only DB handler
* @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database
*/ */
export default async function DB_HANDLER(...args: any[]) { export default async function DB_HANDLER(...args: any[]) {
try { const CONNECTION = global.DSQL_DB_CONN;
const results = await MASTER.query(...args);
/** ********************* Clean up */ try {
await MASTER.end(); if (!CONNECTION)
throw new Error("No Connection provided to DB_HANDLER function!");
const results = await CONNECTION.query(...args);
return JSON.parse(JSON.stringify(results)); return JSON.parse(JSON.stringify(results));
} catch (error: any) { } catch (error: any) {
@ -32,5 +18,7 @@ export default async function DB_HANDLER(...args: any[]) {
success: false, success: false,
error: error.message, error: error.message,
}; };
} finally {
await CONNECTION?.end();
} }
} }

View File

@ -1,24 +1,7 @@
// @ts-check import connDbHandler from "../../db/conn-db-handler";
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(),
},
});
type Param = { type Param = {
paradigm: "Full Access" | "FA" | "Read Only"; paradigm: "Full Access" | "FA" | "Read Only";
database: string;
queryString: string; queryString: string;
queryValues?: string[]; queryValues?: string[];
}; };
@ -26,97 +9,127 @@ type Param = {
/** /**
* # DSQL user read-only DB handler * # DSQL user read-only DB handler
*/ */
export default function DSQL_USER_DB_HANDLER({ export default async function DSQL_USER_DB_HANDLER({
paradigm, paradigm,
database,
queryString, queryString,
queryValues, queryValues,
}: Param) { }: Param) {
try { try {
return new Promise((resolve, reject) => { switch (paradigm) {
const fullAccess = paradigm?.match(/full.access|^fa$/i) case "Read Only":
? true return await connDbHandler(
: false; global.DSQL_READ_ONLY_DB_CONN,
queryString,
try { queryValues
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({ case "Full Access":
error: error.message, return await connDbHandler(
}); global.DSQL_FULL_ACCESS_DB_CONN,
} queryString,
}); queryValues
} catch (/** @type {any} */ error: any) { );
return {
success: false, case "FA":
error: error.message, 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,
// };
// }
} }

View File

@ -1,20 +1,12 @@
import mysql from "serverless-mysql"; import mysql from "serverless-mysql";
import grabDbSSL from "../grabDbSSL"; 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 * # DSQL user read-only DB handler
*/ */
export default function NO_DB_HANDLER(...args: any[]) { export default function NO_DB_HANDLER(...args: any[]) {
const NO_DB = global.DSQL_DB_CONN;
try { try {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
NO_DB.query(...args) NO_DB.query(...args)

View File

@ -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 * # Root DB handler
*/ */
export default function ROOT_DB_HANDLER(...args: any[]) { export default function ROOT_DB_HANDLER(...args: any[]) {
const NO_DB = global.DSQL_DB_CONN;
try { try {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
NO_DB.query(...args) NO_DB.query(...args)

View File

@ -25,5 +25,8 @@ export default function grabDbSSL(): Return {
return { return {
ca: fs.readFileSync(`${SSL_DIR}/ca-cert.pem`), 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,
}; };
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "@moduletrace/datasquirel", "name": "@moduletrace/datasquirel",
"version": "3.4.2", "version": "3.4.3",
"description": "Cloud-based SQL data management tool", "description": "Cloud-based SQL data management tool",
"main": "dist/index.js", "main": "dist/index.js",
"bin": { "bin": {

View File

@ -91,8 +91,5 @@ export default async function getSchema({
.end(); .end();
}); });
return { return httpResponse as GetSchemaReturn;
success: true,
payload: httpResponse as any,
};
} }