This commit is contained in:
Benjamin Toby
2025-07-09 20:30:45 +01:00
parent ccb5605b58
commit c37d105dee
264 changed files with 2389 additions and 3743 deletions
+15 -1
View File
@@ -94,7 +94,21 @@ export default async function queryDSQLAPI<
response.on("end", function () {
try {
resolve(JSON.parse(str));
const responseObj = JSON.parse(
str
) as APIResponseObject;
if (!responseObj.success) {
// console.log("responseObj", responseObj);
// console.log(
// "response.headers",
// response.headers
// );
// console.log(
// "httpsRequest.headers",
// httpsRequest.getHeaders()
// );
}
resolve(responseObj);
} catch (error: any) {
resolve({
success: false,
+20 -88
View File
@@ -1,22 +1,20 @@
import _ from "lodash";
import serverError from "../../backend/serverError";
import runQuery, { DbContextsArray } from "../../backend/db/runQuery";
import { DbContextsArray } from "../../backend/db/runQuery";
import {
ApiGetQueryObject,
DSQL_TableSchemaType,
DSQL_DatabaseSchemaType,
DsqlCrudQueryObject,
GetReturn,
} from "../../../types";
import apiGetGrabQueryAndValues from "../../../utils/grab-query-and-values";
import sqlGenerator from "../../dsql/sql/sql-generator";
import dsqlCrud from "../../../utils/data-fetching/crud";
type Param<T extends { [key: string]: any } = { [key: string]: any }> = {
query: string | ApiGetQueryObject<T>;
queryValues?: (string | number)[];
query: DsqlCrudQueryObject<T>;
dbFullName: string;
tableName?: string;
dbSchema?: import("../../../types").DSQL_DatabaseSchemaType;
tableName: string;
dbSchema?: DSQL_DatabaseSchemaType;
debug?: boolean;
dbContext?: (typeof DbContextsArray)[number];
forceLocal?: boolean;
};
/**
@@ -27,88 +25,22 @@ export default async function apiGet<
>({
query,
dbFullName,
queryValues,
tableName,
dbSchema,
debug,
dbContext,
forceLocal,
}: Param<T>): Promise<import("../../../types").GetReturn> {
const queryAndValues = apiGetGrabQueryAndValues({
query,
values: queryValues,
}: Param<T>): Promise<GetReturn> {
const queryAndValues = sqlGenerator({
tableName,
genObject: query,
dbFullName,
});
if (typeof query == "string" && query.match(/^alter|^delete|^create/i)) {
return { success: false, msg: "Wrong Input." };
}
const result = await dsqlCrud({
action: "get",
table: tableName,
dbFullName,
query,
});
let results;
try {
let { result, error } = await runQuery({
dbFullName: dbFullName,
query: queryAndValues.query,
queryValuesArray: queryAndValues.values,
readOnly: true,
dbSchema,
tableName,
dbContext,
debug,
forceLocal,
});
if (debug && global.DSQL_USE_LOCAL) {
console.log("apiGet:result", result);
console.log("apiGet:error", error);
}
let tableSchema: DSQL_TableSchemaType | undefined;
if (dbSchema) {
const targetTable = dbSchema.tables?.find(
(table) => table.tableName === tableName
);
if (targetTable) {
const clonedTargetTable = _.cloneDeep(targetTable);
delete clonedTargetTable.childTable;
delete clonedTargetTable.childrenTables;
delete clonedTargetTable.updateData;
delete clonedTargetTable.indexes;
tableSchema = clonedTargetTable;
}
}
if (error) throw error;
if (result.error) throw new Error(result.error);
results = result;
const resObject: GetReturn = {
success: true,
payload: results,
schema: tableName && tableSchema ? tableSchema : undefined,
};
return resObject;
} catch (error: any) {
serverError({
component: "/api/query/get/lines-85-94",
message: error.message,
});
global.ERROR_CALLBACK?.(`API Get Error`, error as Error);
if (debug && global.DSQL_USE_LOCAL) {
console.log("apiGet:error", error.message);
console.log("queryAndValues", queryAndValues);
}
return {
success: false,
payload: null,
error: error.message,
};
}
return result;
}
@@ -11,7 +11,6 @@ type Param = {
tableName?: string;
dbSchema?: DSQL_DatabaseSchemaType;
dbContext?: (typeof DbContextsArray)[number];
forceLocal?: boolean;
debug?: boolean;
};
@@ -25,7 +24,6 @@ export default async function apiPost({
tableName,
dbSchema,
dbContext,
forceLocal,
debug,
}: Param): Promise<PostReturn> {
if (typeof query === "string" && query?.match(/^create |^alter |^drop /i)) {
@@ -54,7 +52,6 @@ export default async function apiPost({
queryValuesArray: queryValues,
tableName,
dbContext,
forceLocal,
debug,
});
@@ -109,8 +106,6 @@ export default async function apiPost({
message: error.message,
});
global.ERROR_CALLBACK?.(`API Post Error`, error as Error);
return {
success: false,
payload: results,
@@ -1,6 +1,5 @@
import { UserType } from "../../../types";
import DB_HANDLER from "../../../utils/backend/global-db/DB_HANDLER";
import handleNodemailer from "../../backend/handleNodemailer";
import { PostInsertReturn, UserType } from "../../../types";
import dbHandler from "../../backend/dbHandler";
import serverError from "../../backend/serverError";
import hashPassword from "../../dsql/hashPassword";
@@ -15,9 +14,10 @@ export default async function facebookLogin({
usertype: UserType;
}) {
try {
const foundUser = await DB_HANDLER(
`SELECT * FROM users WHERE email='${body.facebookUserEmail}' AND social_login='1'`
);
const foundUser = (await dbHandler({
query: `SELECT * FROM users WHERE email='${body.facebookUserEmail}' AND social_login='1'`,
values: [body.facebookUserEmail],
})) as any[];
if (foundUser && foundUser[0]) {
return foundUser[0];
@@ -27,7 +27,8 @@ export default async function facebookLogin({
password: body.facebookUserId,
});
let newUser = await DB_HANDLER(`INSERT INTO ${usertype} (
let newUser = (await dbHandler({
query: `INSERT INTO ${usertype} (
first_name,
last_name,
social_platform,
@@ -61,11 +62,21 @@ export default async function facebookLogin({
'1',
'${Date()}',
'${Date.now()}'
)`);
)`,
values: [
body.facebookUserFirstName,
body.facebookUserLastName,
body.facebookUserEmail,
body.facebookUserImage,
socialHashedPassword,
body.facebookUserId,
],
})) as PostInsertReturn;
const newFoundUser = await DB_HANDLER(
`SELECT * FROM ${usertype} WHERE id='${newUser.insertId}'`
);
const newFoundUser = (await dbHandler({
query: `SELECT * FROM ${usertype} WHERE id=?`,
values: newUser?.insertId ? [newUser?.insertId] : [],
})) as any[];
} catch (/** @type {any} */ error: any) {
serverError({
component: "functions/backend/facebookLogin",
@@ -1,4 +1,4 @@
import DB_HANDLER from "../../../utils/backend/global-db/DB_HANDLER";
import dbHandler from "../../backend/dbHandler";
import httpsRequest from "../../backend/httpsRequest";
export interface GithubUserPayload {
@@ -83,9 +83,10 @@ export default async function githubLogin({
gitHubUser = JSON.parse(userDataResponse as string);
if (!gitHubUser?.email && gitHubUser) {
const existingGithubUser = await DB_HANDLER(
`SELECT email FROM users WHERE social_login='1' AND social_platform='github' AND social_id='${gitHubUser.id}'`
);
const existingGithubUser = (await dbHandler({
query: `SELECT email FROM users WHERE social_login='1' AND social_platform='github' AND social_id='${gitHubUser.id}'`,
values: [gitHubUser.id],
})) as any[];
if (existingGithubUser && existingGithubUser[0]) {
gitHubUser.email = existingGithubUser[0].email;
@@ -1,8 +1,9 @@
import fs from "fs";
import { OAuth2Client } from "google-auth-library";
import serverError from "../../backend/serverError";
import DB_HANDLER from "../../../utils/backend/global-db/DB_HANDLER";
import dbHandler from "../../backend/dbHandler";
import hashPassword from "../../dsql/hashPassword";
import { PostInsertReturn } from "../../../types";
type Param = {
usertype: string;
@@ -66,11 +67,12 @@ export default async function googleLogin({
////////////////////////////////////////////////
////////////////////////////////////////////////
let existinEmail = await DB_HANDLER(
`SELECT * FROM ${usertype} WHERE email='${payload.email}' AND social_login!='1' AND social_platform!='google'`
);
let existinEmail = (await dbHandler({
query: `SELECT * FROM ${usertype} WHERE email='${payload.email}' AND social_login!='1' AND social_platform!='google'`,
values: [payload.email],
})) as any[];
if (existinEmail && existinEmail[0]) {
if (existinEmail?.[0]) {
loginFailureReason = "Email Exists Already";
isGoogleAuthValid = false;
return {
@@ -82,11 +84,12 @@ export default async function googleLogin({
////////////////////////////////////////
foundUser = await DB_HANDLER(
`SELECT * FROM ${usertype} WHERE email='${payload.email}' AND social_login='1' AND social_platform='google'`
);
foundUser = (await dbHandler({
query: `SELECT * FROM ${usertype} WHERE email=? AND social_login='1' AND social_platform='google'`,
values: [payload.email],
})) as any[];
if (foundUser && foundUser[0]) {
if (foundUser?.[0]) {
newFoundUser = foundUser;
return {
isGoogleAuthValid: isGoogleAuthValid,
@@ -98,9 +101,10 @@ export default async function googleLogin({
////////////////////////////////////////////////
////////////////////////////////////////////////
let newUser = await DB_HANDLER(`INSERT INTO ${usertype} (
let newUser = (await dbHandler({
query: `INSERT INTO ${usertype} (
first_name,
last_name,
last_name,
social_platform,
social_name,
social_id,
@@ -128,19 +132,19 @@ export default async function googleLogin({
'1',
'${Date()}',
'${Date.now()}'
)`);
)`,
})) as PostInsertReturn;
newFoundUser = await DB_HANDLER(
`SELECT * FROM ${usertype} WHERE id='${newUser.insertId}'`
);
newFoundUser = (await dbHandler({
query: `SELECT * FROM ${usertype} WHERE id=?`,
values: [newUser.insertId],
})) as any[];
} catch (error: any) {
serverError({
component: "googleLogin",
message: error.message,
});
global.ERROR_CALLBACK?.(`Google Login Error`, error as Error);
loginFailureReason = error;
isUserValid = false;
@@ -2,7 +2,7 @@ import fs from "fs";
import handleNodemailer from "../../backend/handleNodemailer";
import path from "path";
import addMariadbUser from "../../backend/addMariadbUser";
import varDatabaseDbHandler from "../../backend/varDatabaseDbHandler";
import dbHandler from "../../backend/dbHandler";
import encrypt from "../../dsql/encrypt";
import addDbEntry from "../../backend/db/addDbEntry";
import loginSocialUser from "./loginSocialUser";
@@ -27,14 +27,9 @@ export default async function handleSocialDb({
loginOnly,
}: HandleSocialDbFunctionParams): Promise<APILoginFunctionReturn> {
try {
const finalDbName = global.DSQL_USE_LOCAL
? undefined
: database
? database
: "datasquirel";
const dbAppend = global.DSQL_USE_LOCAL ? "" : `${finalDbName}.`;
const finalDbName = database ? database : "datasquirel";
const existingSocialUserQUery = `SELECT * FROM ${dbAppend}users WHERE email = ? AND social_login='1' AND social_platform = ? `;
const existingSocialUserQUery = `SELECT * FROM users WHERE email = ? AND social_login='1' AND social_platform = ? `;
const existingSocialUserValues = [email, social_platform];
if (debug) {
@@ -48,12 +43,11 @@ export default async function handleSocialDb({
);
}
let existingSocialUser = await varDatabaseDbHandler({
let existingSocialUser = (await dbHandler({
database: finalDbName,
queryString: existingSocialUserQUery,
queryValuesArray: existingSocialUserValues,
debug,
});
query: existingSocialUserQUery,
values: existingSocialUserValues,
})) as any[];
if (debug) {
console.log(
@@ -89,7 +83,7 @@ export default async function handleSocialDb({
};
}
const existingEmailOnlyQuery = `SELECT * FROM ${dbAppend}users WHERE email='${finalEmail}'`;
const existingEmailOnlyQuery = `SELECT * FROM users WHERE email='${finalEmail}'`;
if (debug) {
console.log(
@@ -98,11 +92,10 @@ export default async function handleSocialDb({
);
}
let existingEmailOnly = await varDatabaseDbHandler({
let existingEmailOnly = (await dbHandler({
database: finalDbName,
queryString: existingEmailOnlyQuery,
debug,
});
query: existingEmailOnlyQuery,
})) as any[];
if (debug) {
console.log("handleSocialDb:existingEmailOnly", existingEmailOnly);
@@ -160,13 +153,12 @@ export default async function handleSocialDb({
await addMariadbUser({ userId: newUser.payload.insertId });
}
const newUserQueriedQuery = `SELECT * FROM ${dbAppend}users WHERE id='${newUser.payload.insertId}'`;
const newUserQueriedQuery = `SELECT * FROM users WHERE id='${newUser.payload.insertId}'`;
const newUserQueried = await varDatabaseDbHandler({
const newUserQueried = (await dbHandler({
database: finalDbName,
queryString: newUserQueriedQuery,
debug,
});
query: newUserQueriedQuery,
})) as any[];
if (!newUserQueried || !newUserQueried[0])
return {
@@ -263,8 +255,6 @@ export default async function handleSocialDb({
error.message
);
global.ERROR_CALLBACK?.(`Handle Social DB Error`, error as Error);
return {
success: false,
payload: null,
@@ -1,5 +1,5 @@
import addAdminUserOnLogin from "../../backend/addAdminUserOnLogin";
import varDatabaseDbHandler from "../../backend/varDatabaseDbHandler";
import dbHandler from "../../backend/dbHandler";
import {
APILoginFunctionReturn,
DATASQUIREL_LoggedInUser,
@@ -39,12 +39,11 @@ export default async function loginSocialUser({
const foundUserQuery = `SELECT * FROM ${dbAppend}\`users\` WHERE email=?`;
const foundUserValues = [user.email];
const foundUser = await varDatabaseDbHandler({
const foundUser = (await dbHandler({
query: foundUserQuery,
values: foundUserValues,
database: finalDbName,
queryString: foundUserQuery,
queryValuesArray: foundUserValues,
debug,
});
})) as any[];
if (!foundUser?.[0])
return {
@@ -1,11 +1,12 @@
import { findDbNameInSchemaDir } from "../../../shell/createDbFromSchema/grab-required-database-schemas";
import { grabPrimaryRequiredDbSchema } from "../../../shell/createDbFromSchema/grab-required-database-schemas";
import { APICreateUserFunctionParams } from "../../../types";
import addUsersTableToDb from "../../backend/addUsersTableToDb";
import addDbEntry from "../../backend/db/addDbEntry";
import updateUsersTableSchema from "../../backend/updateUsersTableSchema";
import varDatabaseDbHandler from "../../backend/varDatabaseDbHandler";
import dbHandler from "../../backend/dbHandler";
import hashPassword from "../../dsql/hashPassword";
import validateEmail from "../../email/fns/validate-email";
import { DSQL_DATASQUIREL_USERS } from "@/package-shared/types/dsql";
/**
* # API Create User
@@ -15,10 +16,8 @@ export default async function apiCreateUser({
payload,
database,
userId,
verify,
}: APICreateUserFunctionParams) {
const dbFullName = database;
const API_USER_ID = userId || process.env.DSQL_API_USER_ID;
const finalEncryptionKey =
encryptionKey || process.env.DSQL_ENCRYPTION_PASSWORD;
@@ -38,9 +37,10 @@ export default async function apiCreateUser({
};
}
const targetDbSchema = findDbNameInSchemaDir({
dbName: dbFullName,
const targetDbSchema = grabPrimaryRequiredDbSchema({
dbSlug: database,
userId,
dbId: userId ? undefined : 1,
});
if (!targetDbSchema?.id) {
@@ -51,6 +51,16 @@ export default async function apiCreateUser({
};
}
const dbFullName = targetDbSchema.dbFullName;
if (!dbFullName) {
return {
success: false,
msg: "dbFullName not found",
payload: null,
};
}
const hashedPassword = hashPassword({
encryptionKey: finalEncryptionKey,
password: String(payload.password),
@@ -60,23 +70,23 @@ export default async function apiCreateUser({
const fieldsQuery = `SHOW COLUMNS FROM ${dbFullName}.users`;
let fields = await varDatabaseDbHandler({
queryString: fieldsQuery,
let fields = (await dbHandler({
query: fieldsQuery,
database: dbFullName,
});
})) as any[];
if (!fields?.[0]) {
const newTable = await addUsersTableToDb({
userId: Number(API_USER_ID),
userId,
database: dbFullName,
payload: payload,
dbId: targetDbSchema.id,
});
fields = await varDatabaseDbHandler({
queryString: fieldsQuery,
fields = (await dbHandler({
query: fieldsQuery,
database: dbFullName,
});
})) as any[];
}
if (!fields?.[0]) {
@@ -94,7 +104,7 @@ export default async function apiCreateUser({
const key = Object.keys(payload)[i];
if (!fieldsTitles.includes(key)) {
await updateUsersTableSchema({
userId: Number(API_USER_ID),
userId,
database: dbFullName,
newPayload: {
[key]: payload[key],
@@ -118,11 +128,11 @@ export default async function apiCreateUser({
? [payload.email, payload.username]
: [payload.email];
const existingUser = await varDatabaseDbHandler({
queryString: existingUserQuery,
queryValuesArray: existingUserValues,
const existingUser = (await dbHandler({
query: existingUserQuery,
values: existingUserValues,
database: dbFullName,
});
})) as any[];
if (existingUser?.[0]) {
return {
@@ -142,7 +152,7 @@ export default async function apiCreateUser({
};
}
const addUser = await addDbEntry({
const addUser = await addDbEntry<DSQL_DATASQUIREL_USERS>({
dbFullName: dbFullName,
tableName: "users",
data: {
@@ -153,16 +163,18 @@ export default async function apiCreateUser({
image_thumbnail:
process.env.DSQL_DEFAULT_USER_IMAGE ||
"/images/user-preset-thumbnail.png",
verification_status: verify ? 1 : 0,
},
});
if (addUser?.payload?.insertId) {
const newlyAddedUserQuery = `SELECT id,uuid,first_name,last_name,email,username,image,image_thumbnail,verification_status FROM ${dbFullName}.users WHERE id='${addUser.payload.insertId}'`;
const newlyAddedUser = await varDatabaseDbHandler({
queryString: newlyAddedUserQuery,
const newlyAddedUser = (await dbHandler({
query: newlyAddedUserQuery,
values: [],
database: dbFullName,
});
})) as any[];
return {
success: true,
@@ -1,5 +1,5 @@
import deleteDbEntry from "../../backend/db/deleteDbEntry";
import varDatabaseDbHandler from "../../backend/varDatabaseDbHandler";
import dbHandler from "../../backend/dbHandler";
type Param = {
dbFullName: string;
@@ -17,11 +17,11 @@ export default async function apiDeleteUser({
const existingUserQuery = `SELECT * FROM ${dbFullName}.users WHERE id = ?`;
const existingUserValues = [deletedUserId];
const existingUser = await varDatabaseDbHandler({
queryString: existingUserQuery,
queryValuesArray: existingUserValues,
const existingUser = (await dbHandler({
query: existingUserQuery,
values: existingUserValues,
database: dbFullName,
});
})) as any[];
if (!existingUser?.[0]) {
return {
@@ -2,7 +2,7 @@ import {
APIGetUserFunctionParams,
GetUserFunctionReturn,
} from "../../../types";
import varDatabaseDbHandler from "../../backend/varDatabaseDbHandler";
import dbHandler from "../../backend/dbHandler";
/**
* # API Get User
@@ -19,11 +19,11 @@ export default async function apiGetUser({
)} FROM ${finalDbName}.users WHERE id=?`;
const API_USER_ID = userId || process.env.DSQL_API_USER_ID;
let foundUser = await varDatabaseDbHandler({
queryString: query,
queryValuesArray: [API_USER_ID],
let foundUser = (await dbHandler({
query,
values: [API_USER_ID],
database: finalDbName,
});
})) as any[];
if (!foundUser || !foundUser[0]) {
return {
@@ -4,7 +4,7 @@ import {
DATASQUIREL_LoggedInUser,
} from "../../../types";
import grabDbFullName from "../../../utils/grab-db-full-name";
import varDatabaseDbHandler from "../../backend/varDatabaseDbHandler";
import dbHandler from "../../backend/dbHandler";
import hashPassword from "../../dsql/hashPassword";
/**
@@ -34,7 +34,6 @@ export default async function apiLoginUser({
msg: `Database Full Name couldn't be grabbed`,
};
}
const dbAppend = global.DSQL_USE_LOCAL ? "" : `${dbFullName}.`;
/**
* Check input validity
@@ -69,13 +68,11 @@ export default async function apiLoginUser({
console.log("apiLoginUser:Finding User ...");
}
let foundUser = await varDatabaseDbHandler({
queryString: `SELECT * FROM ${dbAppend}users WHERE email = ? OR username = ?`,
queryValuesArray: [email, username],
let foundUser = (await dbHandler({
query: `SELECT * FROM users WHERE email = ? OR username = ?`,
values: [email, username],
database: dbFullName,
debug,
});
})) as any[];
if (debug) {
console.log("apiLoginUser:foundUser:", foundUser);
@@ -146,9 +143,9 @@ export default async function apiLoginUser({
}
if (isPasswordCorrect && email_login) {
const resetTempCode = await varDatabaseDbHandler({
queryString: `UPDATE ${dbAppend}users SET ${email_login_field} = '' WHERE email = ? OR username = ?`,
queryValuesArray: [email, username],
await dbHandler({
query: `UPDATE users SET ${email_login_field} = '' WHERE email = ? OR username = ?`,
values: [email, username],
database: dbFullName,
});
}
@@ -1,5 +1,5 @@
import { APILoginFunctionReturn } from "../../../types";
import varDatabaseDbHandler from "../../backend/varDatabaseDbHandler";
import dbHandler from "../../backend/dbHandler";
type Param = {
existingUser: { [s: string]: any };
@@ -15,19 +15,13 @@ export default async function apiReauthUser({
database,
additionalFields,
}: Param): Promise<APILoginFunctionReturn> {
const dbAppend = global.DSQL_USE_LOCAL
? ""
: database
? `${database}.`
: "";
let foundUser =
existingUser?.id && existingUser.id.toString().match(/./)
? await varDatabaseDbHandler({
queryString: `SELECT * FROM ${dbAppend}users WHERE id=?`,
queryValuesArray: [existingUser.id.toString()],
? ((await dbHandler({
query: `SELECT * FROM users WHERE id=?`,
values: [existingUser.id.toString()],
database,
})
})) as any[])
: null;
if (!foundUser || !foundUser[0])
@@ -1,10 +1,10 @@
import varDatabaseDbHandler from "../../backend/varDatabaseDbHandler";
import dbHandler from "../../backend/dbHandler";
import nodemailer, { SendMailOptions } from "nodemailer";
import http from "http";
import getAuthCookieNames from "../../backend/cookies/get-auth-cookie-names";
import encrypt from "../../dsql/encrypt";
import serializeCookies from "../../../utils/serialize-cookies";
import { SendOneTimeCodeEmailResponse } from "../../../types";
import { CookieObject, SendOneTimeCodeEmailResponse } from "../../../types";
type Param = {
email: string;
@@ -17,7 +17,7 @@ type Param = {
mail_password?: string;
html: string;
response?: http.ServerResponse & { [s: string]: any };
extraCookies?: import("../../../../package-shared/types").CookieObject[];
extraCookies?: CookieObject[];
};
/**
@@ -47,15 +47,11 @@ export default async function apiSendEmailCode({
const foundUserQuery = `SELECT * FROM ${database}.users WHERE email = ?`;
const foundUserValues = [email];
let foundUser = await varDatabaseDbHandler({
queryString: foundUserQuery,
queryValuesArray: foundUserValues,
let foundUser = (await dbHandler({
query: foundUserQuery,
values: foundUserValues,
database,
});
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
})) as any[];
if (!foundUser || !foundUser[0]) {
return {
@@ -107,13 +103,12 @@ export default async function apiSendEmailCode({
const setTempCodeQuery = `UPDATE ${database}.users SET ${email_login_field} = ? WHERE email = ?`;
const setTempCodeValues = [tempCode + `-${createdAt}`, email];
let setTempCode = await varDatabaseDbHandler({
queryString: setTempCodeQuery,
queryValuesArray: setTempCodeValues,
await dbHandler({
query: setTempCodeQuery,
values: setTempCodeValues,
database,
});
/** @type {import("../../../types").SendOneTimeCodeEmailResponse} */
const resObject: import("../../../types").SendOneTimeCodeEmailResponse =
{
success: true,
@@ -137,22 +132,18 @@ export default async function apiSendEmailCode({
);
}
/** @type {import("../../../../package-shared/types").CookieObject} */
const oneTimeCookieObject: import("../../../../package-shared/types").CookieObject =
{
name: oneTimeCodeCookieName,
value: encryptedPayload,
sameSite: "Strict",
path: "/",
httpOnly: true,
secure: true,
};
const oneTimeCookieObject: CookieObject = {
name: oneTimeCodeCookieName,
value: encryptedPayload,
sameSite: "Strict",
path: "/",
httpOnly: true,
secure: true,
};
/** @type {import("../../../../package-shared/types").CookieObject[]} */
const cookiesObjectArray: import("../../../../package-shared/types").CookieObject[] =
extraCookies
? [...extraCookies, oneTimeCookieObject]
: [oneTimeCookieObject];
const cookiesObjectArray: CookieObject[] = extraCookies
? [...extraCookies, oneTimeCookieObject]
: [oneTimeCookieObject];
const serializedCookies = serializeCookies({
cookies: cookiesObjectArray,
@@ -3,7 +3,7 @@
import updateDbEntry from "../../backend/db/updateDbEntry";
import encrypt from "../../dsql/encrypt";
import hashPassword from "../../dsql/hashPassword";
import varDatabaseDbHandler from "../../backend/varDatabaseDbHandler";
import dbHandler from "../../backend/dbHandler";
type Param = {
payload: { [s: string]: any };
@@ -26,11 +26,11 @@ export default async function apiUpdateUser({
const existingUserQuery = `SELECT * FROM ${dbFullName}.users WHERE id = ?`;
const existingUserValues = [updatedUserId];
const existingUser = await varDatabaseDbHandler({
queryString: existingUserQuery,
queryValuesArray: existingUserValues,
const existingUser = (await dbHandler({
query: existingUserQuery,
values: existingUserValues,
database: dbFullName,
});
})) as any[];
if (!existingUser?.[0]) {
return {
@@ -1,6 +1,6 @@
import { DSQL_MYSQL_user_databases_Type } from "../../../../types";
import grabDbFullName from "../../../../utils/grab-db-full-name";
import varDatabaseDbHandler from "../../../backend/varDatabaseDbHandler";
import dbHandler from "../../../backend/dbHandler";
type Return = {
success: boolean;
@@ -44,12 +44,11 @@ export default async function apiSendResetPasswordLink({
};
}
let foundUser = await varDatabaseDbHandler({
queryString: `SELECT * FROM ${dbFullName}.users WHERE email = ? OR username = ?`,
queryValuesArray: [email, email],
let foundUser = (await dbHandler({
query: `SELECT * FROM ${dbFullName}.users WHERE email = ? OR username = ?`,
values: [email, email],
database: dbFullName,
debug,
});
})) as any[];
if (debug) {
console.log("apiSendResetPassword:foundUser:", foundUser);
@@ -1,8 +1,7 @@
import serverError from "./serverError";
import DB_HANDLER from "../../utils/backend/global-db/DB_HANDLER";
import addDbEntry from "./db/addDbEntry";
import LOCAL_DB_HANDLER from "../../utils/backend/global-db/LOCAL_DB_HANDLER";
import { DATASQUIREL_LoggedInUser } from "../../types";
import dbHandler from "./dbHandler";
type Param = {
query: {
@@ -27,18 +26,15 @@ export default async function addAdminUserOnLogin({
user,
}: Param): Promise<any> {
try {
const finalDbHandler = global.DSQL_USE_LOCAL
? LOCAL_DB_HANDLER
: DB_HANDLER;
const { invite, database_access, priviledge, email } = query;
const lastInviteTimeQuery = `SELECT date_created_code FROM invitations WHERE inviting_user_id=? AND invited_user_email=?`;
const lastInviteTimeValues = [invite, email];
const lastInviteTimeArray = await finalDbHandler(
lastInviteTimeQuery,
lastInviteTimeValues
);
const lastInviteTimeArray = (await dbHandler({
query: lastInviteTimeQuery,
values: lastInviteTimeValues,
})) as any[];
if (!lastInviteTimeArray || !lastInviteTimeArray[0]) {
throw new Error("No Invitation Found");
@@ -51,16 +47,16 @@ export default async function addAdminUserOnLogin({
const invitingUserDbQuery = `SELECT first_name,last_name,email FROM users WHERE id=?`;
const invitingUserDbValues = [invite];
const invitingUserDb = await finalDbHandler(
invitingUserDbQuery,
invitingUserDbValues
);
const invitingUserDb = (await dbHandler({
query: invitingUserDbQuery,
values: invitingUserDbValues,
})) as any[];
if (invitingUserDb?.[0]) {
const existingUserUser = await finalDbHandler(
`SELECT email FROM user_users WHERE user_id=? AND invited_user_id=? AND user_type='admin' AND email=?`,
[invite, user.id, email]
);
const existingUserUser = (await dbHandler({
query: `SELECT email FROM user_users WHERE user_id=? AND invited_user_id=? AND user_type='admin' AND email=?`,
values: [invite, user.id, email],
})) as any[];
if (existingUserUser?.[0]) {
console.log("User already added");
@@ -88,15 +84,15 @@ export default async function addAdminUserOnLogin({
////////////////////////////////////////////////
////////////////////////////////////////////////
const dbTableData = await finalDbHandler(
`SELECT db_tables_data FROM invitations WHERE inviting_user_id=? AND invited_user_email=?`,
[invite, email]
);
const dbTableData = (await dbHandler({
query: `SELECT db_tables_data FROM invitations WHERE inviting_user_id=? AND invited_user_email=?`,
values: [invite, email],
})) as any[];
const clearEntries = await finalDbHandler(
`DELETE FROM delegated_user_tables WHERE root_user_id=? AND delegated_user_id=?`,
[invite, user.id]
);
const clearEntries = (await dbHandler({
query: `DELETE FROM delegated_user_tables WHERE root_user_id=? AND delegated_user_id=?`,
values: [invite, user.id],
})) as any[];
////////////////////////////////////////////////
////////////////////////////////////////////////
@@ -126,17 +122,12 @@ export default async function addAdminUserOnLogin({
}
}
const inviteAccepted = await finalDbHandler(
`UPDATE invitations SET invitation_status='Accepted' WHERE inviting_user_id=? AND invited_user_email=?`,
[invite, email]
);
const inviteAccepted = (await dbHandler({
query: `UPDATE invitations SET invitation_status='Accepted' WHERE inviting_user_id=? AND invited_user_email=?`,
values: [invite, email],
})) as any[];
}
} catch (error: any) {
global.ERROR_CALLBACK?.(
`Add Admin User On Login Error`,
error as Error
);
serverError({
component: "addAdminUserOnLogin",
message: error.message,
@@ -1,10 +1,8 @@
import generator from "generate-password";
import DB_HANDLER from "../../utils/backend/global-db/DB_HANDLER";
import NO_DB_HANDLER from "../../utils/backend/global-db/NO_DB_HANDLER";
import addDbEntry from "./db/addDbEntry";
import encrypt from "../dsql/encrypt";
import LOCAL_DB_HANDLER from "../../utils/backend/global-db/LOCAL_DB_HANDLER";
import grabSQLKeyName from "../../utils/grab-sql-key-name";
import dbHandler from "./dbHandler";
type Param = {
userId: number | string;
@@ -29,18 +27,17 @@ export default async function addMariadbUser({ userId }: Param): Promise<any> {
const createMariadbUsersQuery = `CREATE USER IF NOT EXISTS '${username}'@'127.0.0.1' IDENTIFIED BY '${password}'`;
if (global.DSQL_USE_LOCAL) {
await LOCAL_DB_HANDLER(createMariadbUsersQuery);
} else {
await NO_DB_HANDLER(createMariadbUsersQuery);
}
await dbHandler({
query: createMariadbUsersQuery,
});
const updateUserQuery = `UPDATE users SET mariadb_user = ?, mariadb_host = '127.0.0.1', mariadb_pass = ? WHERE id = ?`;
const updateUserValues = [username, encryptedPassword, userId];
const updateUser = global.DSQL_USE_LOCAL
? await LOCAL_DB_HANDLER(updateUserQuery, updateUserValues)
: await DB_HANDLER(updateUserQuery, updateUserValues);
await dbHandler({
query: updateUserQuery,
values: updateUserValues,
});
const addMariadbUser = await addDbEntry({
tableName: "mariadb_users",
@@ -1,16 +1,15 @@
import serverError from "./serverError";
import DB_HANDLER from "../../utils/backend/global-db/DB_HANDLER";
import addDbEntry from "./db/addDbEntry";
import createDbFromSchema from "../../shell/createDbFromSchema";
import LOCAL_DB_HANDLER from "../../utils/backend/global-db/LOCAL_DB_HANDLER";
import grabNewUsersTableSchema from "./grabNewUsersTableSchema";
import {
grabPrimaryRequiredDbSchema,
writeUpdatedDbSchema,
} from "../../shell/createDbFromSchema/grab-required-database-schemas";
import dbHandler from "./dbHandler";
type Param = {
userId: number;
userId?: number | string;
database: string;
payload?: { [s: string]: any };
dbId: string | number;
@@ -52,15 +51,10 @@ export default async function addUsersTableToDb({
writeUpdatedDbSchema({ dbSchema: targetDatabase, userId });
const targetDb: any[] | null = global.DSQL_USE_LOCAL
? await LOCAL_DB_HANDLER(
`SELECT id FROM user_databases WHERE user_id=? AND db_slug=?`,
[userId, database]
)
: await DB_HANDLER(
`SELECT id FROM user_databases WHERE user_id=? AND db_slug=?`,
[userId, database]
);
const targetDb = (await dbHandler({
query: `SELECT id FROM user_databases WHERE user_id=? AND db_slug=?`,
values: [userId, database],
})) as any[];
if (targetDb?.[0]) {
const newTableEntry = await addDbEntry({
@@ -29,10 +29,6 @@ export const initAuthFiles = () => {
return true;
} catch (error: any) {
console.log(`Error initializing Auth Files: ${error.message}`);
global.ERROR_CALLBACK?.(
`Error Initializing Auth Files`,
error as Error
);
return false;
}
};
@@ -1,4 +1,4 @@
import varDatabaseDbHandler from "../../functions/backend/varDatabaseDbHandler";
import dbHandler from "../../functions/backend/dbHandler";
import addDbEntry from "../../functions/backend/db/addDbEntry";
import slugToCamelTitle from "../../shell/utils/slugToCamelTitle";
import {
@@ -44,10 +44,10 @@ export default async function createDbSchemaFromDb({
if (!targetDb) throw new Error(`Target Db not found!`);
const existingTables = await varDatabaseDbHandler({
const existingTables = (await dbHandler({
database: database.db_full_name,
queryString: `SHOW TABLES FROM ${database.db_full_name}`,
});
query: `SHOW TABLES FROM ${database.db_full_name}`,
})) as any[];
if (!existingTables) throw new Error("No Existing Tables");
@@ -74,11 +74,10 @@ export default async function createDbSchemaFromDb({
indexes: [],
};
const tableColumns: DSQL_MYSQL_SHOW_COLUMNS_Type[] =
await varDatabaseDbHandler({
database: database.db_full_name,
queryString: `SHOW COLUMNS FROM ${database.db_full_name}.${tableName}`,
});
const tableColumns = (await dbHandler({
database: database.db_full_name,
query: `SHOW COLUMNS FROM ${database.db_full_name}.${tableName}`,
})) as DSQL_MYSQL_SHOW_COLUMNS_Type[] | null;
if (tableColumns) {
for (let k = 0; k < tableColumns.length; k++) {
@@ -112,10 +111,10 @@ export default async function createDbSchemaFromDb({
}
}
const tableIndexes = await varDatabaseDbHandler({
const tableIndexes = (await dbHandler({
database: database.db_full_name,
queryString: `SHOW INDEXES FROM ${database.db_full_name}.${tableName}`,
});
query: `SHOW INDEXES FROM ${database.db_full_name}.${tableName}`,
})) as any[] | null;
if (tableIndexes) {
for (let m = 0; m < tableIndexes.length; m++) {
@@ -148,6 +147,8 @@ export default async function createDbSchemaFromDb({
(col) => col.Field === Column_name
)[0];
if (!targetTableFieldObject) continue;
const existingIndexField = tableObject.indexes?.filter(
(indx) => indx.indexName == Key_name
);
@@ -72,13 +72,6 @@ export default async function addDbEntry<
});
}
const DB_CONN = isMaster
? global.DSQL_DB_CONN
: global.DSQL_FULL_ACCESS_DB_CONN || global.DSQL_DB_CONN;
const DB_RO_CONN = isMaster
? global.DSQL_DB_CONN
: global.DSQL_READ_ONLY_DB_CONN || global.DSQL_DB_CONN;
let newData = _.cloneDeep(data);
if (newData) {
newData = purgeDefaultFields(newData);
@@ -98,11 +91,9 @@ export default async function addDbEntry<
isMaster ? "" : `\`${dbFullName}\`.`
}\`${tableName}\` WHERE \`${duplicateColumnName}\`=?`;
const duplicateValue = await connDbHandler(
DB_RO_CONN,
checkDuplicateQuery,
[duplicateColumnValue]
);
const duplicateValue = await connDbHandler(null, checkDuplicateQuery, [
duplicateColumnValue,
]);
if (duplicateValue?.[0] && !update) {
return {
@@ -200,10 +191,6 @@ export default async function addDbEntry<
"DSQL: Error in parsing data keys =>",
error.message
);
global.ERROR_CALLBACK?.(
`Error parsing Data Keys`,
error as Error
);
continue;
}
}
@@ -236,7 +223,7 @@ export default async function addDbEntry<
)}) VALUES (${insertValuesArray.map(() => "?").join(",")})`;
const newInsert = await connDbHandler(
DB_CONN,
null,
query,
queryValuesArray,
debug
@@ -280,7 +267,7 @@ export default async function addDbEntry<
console.log("batchQueryValuesArray", batchQueryValuesArray);
const newInsert = await connDbHandler(
DB_CONN,
null,
query,
batchQueryValuesArray.flat(),
debug
@@ -33,10 +33,6 @@ export default async function deleteDbEntry<
? true
: checkIfIsMaster({ dbContext, dbFullName });
const DB_CONN = isMaster
? global.DSQL_DB_CONN
: global.DSQL_FULL_ACCESS_DB_CONN || global.DSQL_DB_CONN;
/**
* Execution
*
@@ -46,7 +42,7 @@ export default async function deleteDbEntry<
isMaster && !dbFullName ? "" : `\`${dbFullName}\`.`
}\`${tableName}\` WHERE \`${identifierColumnName.toString()}\`=?`;
const deletedEntry = await connDbHandler(DB_CONN, query, [
const deletedEntry = await connDbHandler(null, query, [
identifierValue,
]);
@@ -54,8 +50,8 @@ export default async function deleteDbEntry<
* Return statement
*/
return deletedEntry;
} catch (error) {
global.ERROR_CALLBACK?.(`Error Deleting Entry`, error as Error);
} catch (error: any) {
console.log("Error Deleting Entry =>", error.message);
return null;
}
}
@@ -1,5 +1,5 @@
import fullAccessDbHandler from "../fullAccessDbHandler";
import varReadOnlyDatabaseDbHandler from "../varReadOnlyDatabaseDbHandler";
import dbHandler from "../dbHandler";
import serverError from "../serverError";
import addDbEntry from "./addDbEntry";
import updateDbEntry from "./updateDbEntry";
@@ -18,7 +18,6 @@ type Param = {
dbSchema?: import("../../../types").DSQL_DatabaseSchemaType;
queryValuesArray?: (string | number)[];
tableName?: string;
forceLocal?: boolean;
};
type Return = {
@@ -38,7 +37,6 @@ export default async function runQuery({
tableName,
debug,
dbContext,
forceLocal,
}: Param): Promise<Return> {
/**
* Declare variables
@@ -77,7 +75,7 @@ export default async function runQuery({
if (typeof query === "string") {
const formattedQuery = trimSql(query);
if (debug && global.DSQL_USE_LOCAL) {
if (debug) {
console.log("runQuery:formattedQuery", formattedQuery);
}
@@ -91,18 +89,15 @@ export default async function runQuery({
}
if (readOnly) {
result = await varReadOnlyDatabaseDbHandler({
queryString: formattedQuery,
queryValuesArray: queryValuesArray?.map((vl) => String(vl)),
tableSchema,
forceLocal,
result = await dbHandler({
query: formattedQuery,
values: queryValuesArray?.map((vl) => String(vl)),
});
} else {
result = await fullAccessDbHandler({
queryString: formattedQuery,
queryValuesArray: queryValuesArray?.map((vl) => String(vl)),
tableSchema,
forceLocal,
});
}
} else if (typeof query === "object") {
@@ -178,7 +173,7 @@ export default async function runQuery({
message: err.message,
});
if (debug && global.DSQL_USE_LOCAL) {
if (debug) {
console.log("runQuery:error", err.message);
}
@@ -60,10 +60,6 @@ export default async function updateDbEntry<
? true
: checkIfIsMaster({ dbContext, dbFullName });
const DB_CONN = isMaster
? global.DSQL_DB_CONN
: global.DSQL_FULL_ACCESS_DB_CONN || global.DSQL_DB_CONN;
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
@@ -182,7 +178,7 @@ export default async function updateDbEntry<
updateValues.push(identifierValue);
const updatedEntry = await connDbHandler(DB_CONN, query, updateValues);
const updatedEntry = await connDbHandler(null, query, updateValues);
/**
* Return statement
+28 -18
View File
@@ -1,39 +1,53 @@
import fs from "fs";
import path from "path";
import grabDSQLConnection from "../../utils/grab-dsql-connection";
import { DSQL_TableSchemaType } from "../../types";
import { Connection, ConnectionConfig } from "mariadb";
type Param = {
type Param<T extends { [k: string]: any } = { [k: string]: any }> = {
query: string;
values?: string[] | object;
noErrorLogs?: boolean;
database?: string;
tableSchema?: DSQL_TableSchemaType;
config?: ConnectionConfig;
};
/**
* # Main DB Handler Function
* @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database
*/
export default async function dbHandler({
export default async function dbHandler<
T extends { [k: string]: any } = { [k: string]: any }
>({
query,
values,
noErrorLogs,
}: Param): Promise<any[] | object | null> {
const CONNECTION = await grabDSQLConnection();
let results;
database,
config,
}: Param<T>): Promise<T[] | T | null> {
let CONNECTION: Connection | undefined;
let results: T[] | T | null;
try {
CONNECTION = await grabDSQLConnection({ database, config });
if (query && values) {
results = await CONNECTION.query(query, values);
const queryResults = await CONNECTION.query(query, values);
results = queryResults[0];
} else {
results = await CONNECTION.query(query);
const queryResults = await CONNECTION.query(query);
results = queryResults[0];
}
} catch (error: any) {
if (!noErrorLogs) {
global.ERROR_CALLBACK?.(`DB Handler Error...`, error as Error);
}
console.log("Connection Info =>", CONNECTION?.info);
if (process.env.FIRST_RUN) {
return null;
if (
error.message &&
typeof error.message == "string" &&
error.message.match(/Access denied for user.*password/i)
) {
throw new Error("Authentication Failed!");
}
if (!noErrorLogs) {
@@ -58,11 +72,7 @@ export default async function dbHandler({
}
if (results) {
if (Array.isArray(results)) {
return Array.from(results);
} else {
return results;
}
return results;
} else {
return null;
}
@@ -6,7 +6,6 @@ type Param = {
queryString: string;
tableSchema?: import("../../types").DSQL_TableSchemaType | null;
queryValuesArray?: string[];
forceLocal?: boolean;
};
/**
@@ -16,7 +15,6 @@ export default async function fullAccessDbHandler({
queryString,
tableSchema,
queryValuesArray,
forceLocal,
}: Param) {
/**
* Declare variables
@@ -25,23 +23,19 @@ export default async function fullAccessDbHandler({
*/
let results;
const DB_CONN = forceLocal
? global.DSQL_DB_CONN
: global.DSQL_FULL_ACCESS_DB_CONN || global.DSQL_DB_CONN;
/**
* Fetch from db
*
* @description Fetch data from db if no cache
*/
try {
results = await connDbHandler(DB_CONN, queryString, queryValuesArray);
results = await connDbHandler(null, queryString, queryValuesArray);
////////////////////////////////////////
} catch (error: any) {
////////////////////////////////////////
global.ERROR_CALLBACK?.(`Full Access DB Handler Error`, error as Error);
console.log("Full Access DB Handler Error =>", error.message);
serverError({
component: "fullAccessDbHandler",
@@ -0,0 +1,61 @@
import dbGrabUserResource from "@/src/functions/db/grab-user-resource";
import { DSQL_DATASQUIREL_BACKUPS } from "@/package-shared/types/dsql";
import suAddBackup from "@/src/functions/api/su/add-backup";
import grabConfig from "@/package-shared/utils/backend/config/grab-config";
import deleteBackup from "@/src/functions/api/su/add-backup/delete-backup";
type HandleBackupParams = {
appBackup?: boolean;
userId?: string | number;
};
export default async function handleBackup({
appBackup,
userId,
}: HandleBackupParams) {
const { appConfig } = grabConfig();
const maxBackups = appConfig.main.max_backups?.value || 20;
const { count: existingAppBackupsCount } =
await dbGrabUserResource<DSQL_DATASQUIREL_BACKUPS>({
tableName: "backups",
isSuperUser: true,
query: {
query: {
user_id: {
nullValue: appBackup ? true : undefined,
value: appBackup ? undefined : String(userId),
},
},
},
countOnly: true,
});
if (existingAppBackupsCount && existingAppBackupsCount >= maxBackups) {
const { single: oldestAppBackup } =
await dbGrabUserResource<DSQL_DATASQUIREL_BACKUPS>({
tableName: "backups",
isSuperUser: true,
query: {
query: {
user_id: {
nullValue: appBackup ? true : undefined,
value: appBackup ? undefined : String(userId),
},
},
order: {
field: "id",
strategy: "ASC",
},
limit: 1,
},
});
if (oldestAppBackup?.id) {
await deleteBackup({ backup: oldestAppBackup });
}
}
await suAddBackup({ targetUserId: userId });
}
@@ -8,6 +8,7 @@ export type HandleNodemailerParam = Mail.Options & {
senderName?: string;
alias?: string | null;
options?: SMTPTransport.Options;
verifyOnly?: boolean;
};
/**
@@ -15,7 +16,7 @@ export type HandleNodemailerParam = Mail.Options & {
*/
export default async function handleNodemailer(
params: HandleNodemailerParam
): Promise<SMTPTransport.SentMessageInfo | undefined> {
): Promise<SMTPTransport.SentMessageInfo | boolean | undefined> {
if (
!process.env.DSQL_MAIL_HOST ||
!process.env.DSQL_MAIL_EMAIL ||
@@ -28,13 +29,24 @@ export default async function handleNodemailer(
host: process.env.DSQL_MAIL_HOST,
port: 465,
secure: true,
...params.options,
auth: {
user: process.env.DSQL_MAIL_EMAIL,
pass: process.env.DSQL_MAIL_PASSWORD,
...params.options?.auth,
},
...params.options,
});
if (params.verifyOnly) {
const isMailServerValid = await transporter.verify();
if (!isMailServerValid) {
return false;
}
return true;
}
const sender = (() => {
if (params.alias?.match(/support/i)) return process.env.DSQL_MAIL_EMAIL;
return process.env.DSQL_MAIL_EMAIL;
@@ -26,6 +26,8 @@ export default async function suDbHandler({
supportBigNumbers: true,
bigNumberStrings: false,
dateStrings: true,
bigIntAsNumber: true,
metaAsArray: true,
});
// const connection = mariadb.createPool({
@@ -7,7 +7,7 @@ import {
} from "../../shell/createDbFromSchema/grab-required-database-schemas";
type Param = {
userId: number | string;
userId?: number | string;
database: string;
newFields?: string[];
newPayload?: { [s: string]: any };
@@ -66,11 +66,7 @@ export default async function updateUsersTableSchema({
return `Done!`;
} catch (error: any) {
global.ERROR_CALLBACK?.(
`Error Updating User Table Schema`,
error as Error
);
console.log("Error Updating User Table Schema =>", error.message);
serverError({
component: "addUsersTableToDb",
message: error.message,
@@ -34,6 +34,8 @@ export default async function userDbHandler({
supportBigNumbers: true,
bigNumberStrings: false,
dateStrings: true,
bigIntAsNumber: true,
metaAsArray: true,
});
const results = await connDbHandler(connection, query);
@@ -1,74 +0,0 @@
import parseDbResults from "./parseDbResults";
import serverError from "./serverError";
import grabDSQLConnection from "../../utils/grab-dsql-connection";
import connDbHandler from "../../utils/db/conn-db-handler";
import { DSQL_TableSchemaType } from "../../types";
type Param = {
queryString: string;
queryValuesArray?: any[];
database?: string;
tableSchema?: DSQL_TableSchemaType;
debug?: boolean;
};
/**
* # DB handler for specific database
*/
export default async function varDatabaseDbHandler({
queryString,
queryValuesArray,
database,
tableSchema,
debug,
}: Param): Promise<any> {
let CONNECTION = await grabDSQLConnection({ fa: true });
if (global.DSQL_USE_LOCAL)
CONNECTION = await grabDSQLConnection({ local: true });
if (database?.match(/^datasquirel$/))
CONNECTION = await grabDSQLConnection();
if (debug) {
console.log(`varDatabaseDbHandler:query:`, queryString);
console.log(`varDatabaseDbHandler:values:`, queryValuesArray);
}
let results = await connDbHandler(
CONNECTION,
queryString,
queryValuesArray
);
if (debug) {
console.log(`varDatabaseDbHandler:results:`, results);
}
if (results && tableSchema) {
try {
const unparsedResults = results;
const parsedResults = await parseDbResults({
unparsedResults: unparsedResults,
tableSchema: tableSchema,
});
return parsedResults;
} catch (error: any) {
console.log(
"\x1b[31mvarDatabaseDbHandler ERROR\x1b[0m =>",
database,
error
);
global.ERROR_CALLBACK?.(`VarDb Handler Error`, error as Error);
serverError({
component: "varDatabaseDbHandler/lines-52-53",
message: error.message,
});
return null;
}
} else if (results) {
return results;
} else {
return null;
}
}
@@ -1,53 +0,0 @@
import serverError from "./serverError";
import parseDbResults from "./parseDbResults";
import connDbHandler from "../../utils/db/conn-db-handler";
type Param = {
queryString: string;
queryValuesArray?: string[];
tableSchema?: import("../../types").DSQL_TableSchemaType;
forceLocal?: boolean;
};
/**
* # Read Only Db Handler with Varaibles
* @returns
*/
export default async function varReadOnlyDatabaseDbHandler({
queryString,
queryValuesArray,
tableSchema,
forceLocal,
}: Param) {
let results;
const DB_CONN = forceLocal
? global.DSQL_DB_CONN
: global.DSQL_READ_ONLY_DB_CONN || global.DSQL_DB_CONN;
try {
results = await connDbHandler(DB_CONN, queryString, queryValuesArray);
} catch (error: any) {
serverError({
component: "varReadOnlyDatabaseDbHandler",
message: error.message,
noMail: true,
});
global.ERROR_CALLBACK?.(`VarReadOnlyDB Handler Error`, error as Error);
return error.message;
} finally {
}
if (results) {
const unparsedResults = results;
const parsedResults = await parseDbResults({
unparsedResults: unparsedResults,
tableSchema: tableSchema,
});
return parsedResults;
} else {
return null;
}
}
+8 -6
View File
@@ -8,6 +8,7 @@ type Param = {
encryptedString: string;
encryptionKey?: string;
encryptionSalt?: string;
debug?: boolean;
};
/**
@@ -17,9 +18,10 @@ export default function decrypt({
encryptedString,
encryptionKey,
encryptionSalt,
debug,
}: Param) {
if (!encryptedString?.match(/./)) {
console.log("Encrypted string is invalid");
if (debug) console.log("Encrypted string is invalid");
return encryptedString;
}
@@ -32,12 +34,12 @@ export default function decrypt({
} = grabKeys({ encryptionKey });
if (!encrptKey?.match(/.{8,}/)) {
console.log("Decrption key is invalid");
if (debug) console.log("Decrption key is invalid");
return encryptedString;
}
if (!salt?.match(/.{8,}/)) {
console.log("Decrption salt is invalid");
if (debug) console.log("Decrption salt is invalid");
return encryptedString;
}
@@ -51,9 +53,9 @@ export default function decrypt({
decrypted += decipher.final("utf8");
return decrypted;
} catch (error: any) {
console.log("Error in decrypting =>", error.message);
console.log("encryptedString =>", encryptedString);
global.ERROR_CALLBACK?.(`Error Decrypting data`, error as Error);
if (debug) {
console.log("Error Decrypting data", error as Error);
}
return encryptedString;
}
}
-1
View File
@@ -53,7 +53,6 @@ export default function encrypt({
return encrypted;
} catch (error: any) {
console.log("Error in encrypting =>", error.message);
global.ERROR_CALLBACK?.(`Error Encrypting Data`, error as Error);
return data;
}
}
@@ -37,6 +37,13 @@ export default async function validateEmail({
if (welcomeEmailOptions) {
const welcomeEmail = await handleNodemailer(welcomeEmailOptions);
if (typeof welcomeEmail == "boolean") {
return {
isValid: false,
message: "Email verification failed.",
};
}
if (!welcomeEmail?.accepted?.[0]) {
return {
isValid: false,
@@ -1,21 +1,9 @@
import { DsqlCrudQueryObject } from "../../../../types";
import { DsqlTables } from "../../../../types/dsql";
import { GrabUserResourceParams } from "../../../../types";
import dsqlCrud from "../../../../utils/data-fetching/crud";
import query from "./query";
import _ from "lodash";
import _n from "../../../../utils/numberfy";
export type GrabUserResourceParams<T extends { [k: string]: any } = any> = {
query?: DsqlCrudQueryObject<T>;
userId?: string | number;
tableName: (typeof DsqlTables)[number];
count?: boolean;
countOnly?: boolean;
noLimit?: boolean;
isSuperUser?: boolean;
targetID?: string | number;
};
export default async function dbGrabUserResource<
T extends { [k: string]: any } = any
>(params: GrabUserResourceParams<T>) {
@@ -39,6 +27,6 @@ export default async function dbGrabUserResource<
error: result?.error,
msg: result?.msg,
},
count: _n(result?.count),
count: typeof result?.count == "number" ? result.count : undefined,
};
}
@@ -1,6 +1,5 @@
import { GrabUserResourceParams } from ".";
import _ from "lodash";
import { DsqlCrudQueryObject } from "../../../../types";
import { DsqlCrudQueryObject, GrabUserResourceParams } from "../../../../types";
import ResourceLimits from "../../../../dict/resource-limits";
import _n from "../../../../utils/numberfy";