Updates
This commit is contained in:
@@ -1,27 +1,19 @@
|
||||
import https from "node:https";
|
||||
import path from "path";
|
||||
import fs from "fs";
|
||||
import grabHostNames from "../utils/grab-host-names";
|
||||
import apiGet from "../functions/api/query/get";
|
||||
import serializeQuery from "../utils/serialize-query";
|
||||
import {
|
||||
ApiGetQueryObject,
|
||||
DSQL_DatabaseSchemaType,
|
||||
GetReqQueryObject,
|
||||
GetReturn,
|
||||
} from "../types";
|
||||
import apiGetGrabQueryAndValues from "../utils/grab-query-and-values";
|
||||
import { APIResponseObject, DsqlCrudQueryObject } from "../types";
|
||||
import debugLog from "../utils/logging/debug-log";
|
||||
import dsqlCrud from "../utils/data-fetching/crud";
|
||||
import grabAPIKey from "../utils/grab-api-key";
|
||||
|
||||
type Param<T extends { [k: string]: any } = { [k: string]: any }> = {
|
||||
key?: string;
|
||||
db?: string;
|
||||
query: string | ApiGetQueryObject<T>;
|
||||
queryValues?: string[];
|
||||
tableName?: string;
|
||||
user_id?: string | number;
|
||||
database: string;
|
||||
query: DsqlCrudQueryObject<T>;
|
||||
table?: string;
|
||||
debug?: boolean;
|
||||
forceLocal?: boolean;
|
||||
useLocal?: boolean;
|
||||
apiVersion?: string;
|
||||
};
|
||||
|
||||
export type ApiGetParams = Param;
|
||||
@@ -34,14 +26,13 @@ export default async function get<
|
||||
R extends any = any
|
||||
>({
|
||||
key,
|
||||
db,
|
||||
database,
|
||||
query,
|
||||
queryValues,
|
||||
tableName,
|
||||
user_id,
|
||||
table,
|
||||
debug,
|
||||
forceLocal,
|
||||
}: Param<T>): Promise<GetReturn<R>> {
|
||||
useLocal,
|
||||
apiVersion = "v1",
|
||||
}: Param<T>): Promise<APIResponseObject<R>> {
|
||||
const grabedHostNames = grabHostNames();
|
||||
const { host, port, scheme } = grabedHostNames;
|
||||
|
||||
@@ -56,30 +47,15 @@ export default async function get<
|
||||
*/
|
||||
const { DSQL_DB_NAME } = process.env;
|
||||
|
||||
if (DSQL_DB_NAME?.match(/./) && global.DSQL_USE_LOCAL) {
|
||||
let dbSchema: DSQL_DatabaseSchemaType | undefined;
|
||||
|
||||
try {
|
||||
const localDbSchemaPath = path.resolve(
|
||||
process.cwd(),
|
||||
"dsql.schema.json"
|
||||
);
|
||||
dbSchema = JSON.parse(fs.readFileSync(localDbSchemaPath, "utf8"));
|
||||
} catch (error) {}
|
||||
|
||||
if (debug) {
|
||||
debugFn("Running Locally ...");
|
||||
}
|
||||
|
||||
return await apiGet({
|
||||
dbFullName: DSQL_DB_NAME,
|
||||
if (useLocal) {
|
||||
const result = await dsqlCrud({
|
||||
action: "get",
|
||||
table: table || "",
|
||||
dbFullName: database,
|
||||
query,
|
||||
queryValues,
|
||||
tableName,
|
||||
dbSchema,
|
||||
debug,
|
||||
forceLocal,
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -88,32 +64,13 @@ export default async function get<
|
||||
* @description make a request to datasquirel.com
|
||||
*/
|
||||
const httpResponse = await new Promise((resolve, reject) => {
|
||||
const queryAndValues = apiGetGrabQueryAndValues({
|
||||
query,
|
||||
values: queryValues,
|
||||
});
|
||||
|
||||
const queryObject: GetReqQueryObject = {
|
||||
db: process.env.DSQL_API_DB_NAME || String(db),
|
||||
query: queryAndValues.query,
|
||||
queryValues: queryAndValues.valuesString,
|
||||
tableName,
|
||||
debug,
|
||||
};
|
||||
|
||||
if (debug) {
|
||||
debugFn(queryObject, "queryObject");
|
||||
}
|
||||
|
||||
const queryString = serializeQuery({ ...queryObject });
|
||||
const queryString = serializeQuery(query);
|
||||
|
||||
if (debug) {
|
||||
debugFn(queryString, "queryString");
|
||||
}
|
||||
|
||||
let path = `/api/query/${
|
||||
user_id || grabedHostNames.user_id
|
||||
}/get${queryString}`;
|
||||
let path = `/api/${apiVersion}/crud/${database}/${table}`;
|
||||
|
||||
if (debug) {
|
||||
debugFn(path, "path");
|
||||
@@ -123,11 +80,7 @@ export default async function get<
|
||||
method: "GET",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
Authorization:
|
||||
key ||
|
||||
process.env.DSQL_READ_ONLY_API_KEY ||
|
||||
process.env.DSQL_FULL_ACCESS_API_KEY ||
|
||||
process.env.DSQL_API_KEY,
|
||||
Authorization: grabAPIKey(key),
|
||||
},
|
||||
port,
|
||||
hostname: host,
|
||||
@@ -152,8 +105,8 @@ export default async function get<
|
||||
|
||||
response.on("end", function () {
|
||||
try {
|
||||
resolve(JSON.parse(str) as GetReturn);
|
||||
} catch (/** @type {any} */ error: any) {
|
||||
resolve(JSON.parse(str) as APIResponseObject);
|
||||
} catch (error: any) {
|
||||
reject({
|
||||
error: error.message,
|
||||
result: str,
|
||||
@@ -170,5 +123,5 @@ export default async function get<
|
||||
.end();
|
||||
});
|
||||
|
||||
return httpResponse as GetReturn;
|
||||
return httpResponse as APIResponseObject<R>;
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ type Param = {
|
||||
queryValues?: any[];
|
||||
tableName?: string;
|
||||
user_id?: boolean;
|
||||
forceLocal?: boolean;
|
||||
useLocal?: boolean;
|
||||
debug?: boolean;
|
||||
};
|
||||
|
||||
@@ -28,7 +28,7 @@ export default async function post({
|
||||
database,
|
||||
tableName,
|
||||
user_id,
|
||||
forceLocal,
|
||||
useLocal,
|
||||
debug,
|
||||
}: Param): Promise<PostReturn> {
|
||||
const grabedHostNames = grabHostNames();
|
||||
@@ -50,24 +50,7 @@ export default async function post({
|
||||
const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME } =
|
||||
process.env;
|
||||
|
||||
if (
|
||||
DSQL_DB_HOST?.match(/./) &&
|
||||
DSQL_DB_USERNAME?.match(/./) &&
|
||||
DSQL_DB_PASSWORD?.match(/./) &&
|
||||
DSQL_DB_NAME?.match(/./) &&
|
||||
global.DSQL_USE_LOCAL
|
||||
) {
|
||||
/** @type {import("../types").DSQL_DatabaseSchemaType | undefined} */
|
||||
let dbSchema: import("../types").DSQL_DatabaseSchemaType | undefined;
|
||||
|
||||
try {
|
||||
const localDbSchemaPath = path.resolve(
|
||||
process.cwd(),
|
||||
"dsql.schema.json"
|
||||
);
|
||||
dbSchema = JSON.parse(fs.readFileSync(localDbSchemaPath, "utf8"));
|
||||
} catch (error) {}
|
||||
|
||||
if (useLocal) {
|
||||
if (debug) {
|
||||
debugLog({
|
||||
log: "Using Local DB ...",
|
||||
@@ -76,12 +59,10 @@ export default async function post({
|
||||
}
|
||||
|
||||
return await apiPost({
|
||||
dbFullName: database || DSQL_DB_NAME,
|
||||
dbFullName: database || "",
|
||||
query,
|
||||
dbSchema,
|
||||
queryValues,
|
||||
tableName,
|
||||
forceLocal,
|
||||
debug,
|
||||
});
|
||||
}
|
||||
@@ -101,10 +82,10 @@ export default async function post({
|
||||
|
||||
try {
|
||||
JSON.parse(reqPayloadString);
|
||||
} catch (error) {
|
||||
global.ERROR_CALLBACK?.(
|
||||
`Error Parsing HTTP response for post action`,
|
||||
error as Error
|
||||
} catch (error: any) {
|
||||
console.log(
|
||||
"Error Parsing HTTP response for post action: ",
|
||||
error.message
|
||||
);
|
||||
|
||||
return {
|
||||
|
||||
@@ -89,7 +89,6 @@ export default async function uploadImage({
|
||||
return httpResponse as Return;
|
||||
} catch (error: any) {
|
||||
console.log("Error in uploading file: ", error.message);
|
||||
global.ERROR_CALLBACK?.(`Error Uploading File`, error as Error);
|
||||
|
||||
return {
|
||||
success: false,
|
||||
|
||||
@@ -93,7 +93,6 @@ export default async function uploadImage({
|
||||
return httpResponse as DSQLUploadImageFunctionReturn;
|
||||
} catch (error: any) {
|
||||
console.log("Error in uploading image: ", error.message);
|
||||
global.ERROR_CALLBACK?.(`Error Uploading Image`, error as Error);
|
||||
|
||||
return {
|
||||
success: false,
|
||||
|
||||
@@ -6,12 +6,11 @@ import { AddUserFunctionReturn, UserDataPayload } from "../../types";
|
||||
|
||||
type Param = {
|
||||
key?: string;
|
||||
database?: string;
|
||||
database: string;
|
||||
payload: UserDataPayload;
|
||||
encryptionKey?: string;
|
||||
encryptionSalt?: string;
|
||||
user_id?: string | number;
|
||||
apiUserId?: string | number;
|
||||
useLocal?: boolean;
|
||||
verify?: boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -22,48 +21,18 @@ export default async function addUser({
|
||||
payload,
|
||||
database,
|
||||
encryptionKey,
|
||||
user_id,
|
||||
apiUserId,
|
||||
useLocal,
|
||||
verify,
|
||||
}: Param): Promise<AddUserFunctionReturn> {
|
||||
/**
|
||||
* Check for local DB settings
|
||||
*
|
||||
* @description Look for local db settings in `.env` file and by pass the http request if available
|
||||
*/
|
||||
const {
|
||||
DSQL_DB_HOST,
|
||||
DSQL_DB_USERNAME,
|
||||
DSQL_DB_PASSWORD,
|
||||
DSQL_DB_NAME,
|
||||
DSQL_API_USER_ID,
|
||||
} = process.env;
|
||||
|
||||
const grabedHostNames = grabHostNames();
|
||||
const { host, port, scheme } = grabedHostNames;
|
||||
|
||||
if (
|
||||
DSQL_DB_HOST?.match(/./) &&
|
||||
DSQL_DB_USERNAME?.match(/./) &&
|
||||
DSQL_DB_PASSWORD?.match(/./) &&
|
||||
DSQL_DB_NAME?.match(/./) &&
|
||||
global.DSQL_USE_LOCAL
|
||||
) {
|
||||
/** @type {import("../../types").DSQL_DatabaseSchemaType | undefined} */
|
||||
let dbSchema: import("../../types").DSQL_DatabaseSchemaType | undefined;
|
||||
|
||||
try {
|
||||
const localDbSchemaPath = path.resolve(
|
||||
process.cwd(),
|
||||
"dsql.schema.json"
|
||||
);
|
||||
dbSchema = JSON.parse(fs.readFileSync(localDbSchemaPath, "utf8"));
|
||||
} catch (error) {}
|
||||
|
||||
if (useLocal) {
|
||||
return await apiCreateUser({
|
||||
database: DSQL_DB_NAME,
|
||||
database,
|
||||
encryptionKey,
|
||||
payload,
|
||||
userId: apiUserId,
|
||||
verify,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -92,9 +61,7 @@ export default async function addUser({
|
||||
},
|
||||
port,
|
||||
hostname: host,
|
||||
path: `/api/user/${
|
||||
user_id || grabedHostNames.user_id
|
||||
}/add-user`,
|
||||
path: ``,
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
import path from "path";
|
||||
import fs from "fs";
|
||||
import grabHostNames from "../../utils/grab-host-names";
|
||||
import apiDeleteUser from "../../functions/api/users/api-delete-user";
|
||||
import { UpdateUserFunctionReturn } from "../../types";
|
||||
|
||||
type Param = {
|
||||
key?: string;
|
||||
database?: string;
|
||||
database: string;
|
||||
deletedUserId: string | number;
|
||||
user_id?: boolean;
|
||||
useLocal?: boolean;
|
||||
apiVersion?: string;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -17,40 +16,16 @@ type Param = {
|
||||
export default async function deleteUser({
|
||||
key,
|
||||
database,
|
||||
user_id,
|
||||
deletedUserId,
|
||||
useLocal,
|
||||
apiVersion = "v1",
|
||||
}: Param): Promise<UpdateUserFunctionReturn> {
|
||||
/**
|
||||
* Check for local DB settings
|
||||
*
|
||||
* @description Look for local db settings in `.env` file and by pass the http request if available
|
||||
*/
|
||||
const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME } =
|
||||
process.env;
|
||||
|
||||
const grabedHostNames = grabHostNames();
|
||||
const { host, port, scheme } = grabedHostNames;
|
||||
|
||||
if (
|
||||
DSQL_DB_HOST?.match(/./) &&
|
||||
DSQL_DB_USERNAME?.match(/./) &&
|
||||
DSQL_DB_PASSWORD?.match(/./) &&
|
||||
DSQL_DB_NAME?.match(/./) &&
|
||||
global.DSQL_USE_LOCAL
|
||||
) {
|
||||
/** @type {import("../../types").DSQL_DatabaseSchemaType | undefined} */
|
||||
let dbSchema: import("../../types").DSQL_DatabaseSchemaType | undefined;
|
||||
|
||||
try {
|
||||
const localDbSchemaPath = path.resolve(
|
||||
process.cwd(),
|
||||
"dsql.schema.json"
|
||||
);
|
||||
dbSchema = JSON.parse(fs.readFileSync(localDbSchemaPath, "utf8"));
|
||||
} catch (error) {}
|
||||
|
||||
if (useLocal) {
|
||||
return await apiDeleteUser({
|
||||
dbFullName: DSQL_DB_NAME,
|
||||
dbFullName: database,
|
||||
deletedUserId,
|
||||
});
|
||||
}
|
||||
@@ -79,9 +54,7 @@ export default async function deleteUser({
|
||||
},
|
||||
port,
|
||||
hostname: host,
|
||||
path: `/api/user/${
|
||||
user_id || grabedHostNames.user_id
|
||||
}/delete-user`,
|
||||
path: `/api/${apiVersion}/users/${database}/${deletedUserId}`,
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
@@ -79,8 +79,8 @@ export default function getToken({
|
||||
* @description Return User Object
|
||||
*/
|
||||
return { key, csrf };
|
||||
} catch (error) {
|
||||
global.ERROR_CALLBACK?.(`Error Getting Token`, error as Error);
|
||||
} catch (error: any) {
|
||||
console.log("Error Getting Token:", error.message);
|
||||
|
||||
/**
|
||||
* Return User Object
|
||||
|
||||
@@ -9,7 +9,8 @@ type Param = {
|
||||
database: string;
|
||||
userId: number;
|
||||
fields?: string[];
|
||||
apiUserId?: boolean;
|
||||
useLocal?: boolean;
|
||||
apiVersion?: string;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -20,7 +21,8 @@ export default async function getUser({
|
||||
userId,
|
||||
database,
|
||||
fields,
|
||||
apiUserId,
|
||||
useLocal,
|
||||
apiVersion = "v1",
|
||||
}: Param): Promise<GetUserFunctionReturn> {
|
||||
/**
|
||||
* Initialize
|
||||
@@ -54,36 +56,11 @@ export default async function getUser({
|
||||
const grabedHostNames = grabHostNames();
|
||||
const { host, port, scheme } = grabedHostNames;
|
||||
|
||||
/**
|
||||
* Check for local DB settings
|
||||
*
|
||||
* @description Look for local db settings in `.env` file and by pass the http request if available
|
||||
*/
|
||||
const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME } =
|
||||
process.env;
|
||||
|
||||
if (
|
||||
DSQL_DB_HOST?.match(/./) &&
|
||||
DSQL_DB_USERNAME?.match(/./) &&
|
||||
DSQL_DB_PASSWORD?.match(/./) &&
|
||||
DSQL_DB_NAME?.match(/./) &&
|
||||
global.DSQL_USE_LOCAL
|
||||
) {
|
||||
/** @type {import("../../types").DSQL_DatabaseSchemaType | undefined} */
|
||||
let dbSchema: import("../../types").DSQL_DatabaseSchemaType | undefined;
|
||||
|
||||
try {
|
||||
const localDbSchemaPath = path.resolve(
|
||||
process.cwd(),
|
||||
"dsql.schema.json"
|
||||
);
|
||||
dbSchema = JSON.parse(fs.readFileSync(localDbSchemaPath, "utf8"));
|
||||
} catch (error) {}
|
||||
|
||||
if (useLocal) {
|
||||
return await apiGetUser({
|
||||
userId,
|
||||
fields: [...new Set(updatedFields)],
|
||||
dbFullName: DSQL_DB_NAME,
|
||||
dbFullName: database,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -106,9 +83,7 @@ export default async function getUser({
|
||||
},
|
||||
port,
|
||||
hostname: host,
|
||||
path: `/api/user/${
|
||||
apiUserId || grabedHostNames.user_id
|
||||
}/get-user`,
|
||||
path: `/api/${apiVersion}/users/${database}/${userId}`,
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -137,9 +112,5 @@ export default async function getUser({
|
||||
httpsRequest.end();
|
||||
});
|
||||
|
||||
/** ********************************************** */
|
||||
/** ********************************************** */
|
||||
/** ********************************************** */
|
||||
|
||||
return httpResponse as GetUserFunctionReturn;
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ export default async function loginUser({
|
||||
*/
|
||||
if (useLocal) {
|
||||
httpResponse = await apiLoginUser({
|
||||
database: database || process.env.DSQL_DB_NAME || "",
|
||||
database,
|
||||
email: payload.email,
|
||||
username: payload.username,
|
||||
password: payload.password,
|
||||
@@ -193,11 +193,8 @@ export default async function loginUser({
|
||||
try {
|
||||
if (token && encryptedPayload)
|
||||
httpResponse["token"] = encryptedPayload;
|
||||
} catch (error) {
|
||||
global.ERROR_CALLBACK?.(
|
||||
`Login User HTTP Response Error`,
|
||||
error as Error
|
||||
);
|
||||
} catch (error: any) {
|
||||
console.log("Login User HTTP Response Error:", error.message);
|
||||
}
|
||||
|
||||
const cookieNames = getAuthCookieNames({
|
||||
|
||||
@@ -117,7 +117,6 @@ export default function logoutUser({
|
||||
};
|
||||
} catch (error: any) {
|
||||
console.log("Logout Error:", error.message);
|
||||
global.ERROR_CALLBACK?.(`Logout User Error`, error as Error);
|
||||
|
||||
return {
|
||||
success: false,
|
||||
|
||||
@@ -186,12 +186,8 @@ export default async function githubAuth({
|
||||
response.on("end", function () {
|
||||
try {
|
||||
resolve(JSON.parse(str));
|
||||
} catch (error) {
|
||||
global.ERROR_CALLBACK?.(
|
||||
`Github Auth Error`,
|
||||
error as Error
|
||||
);
|
||||
|
||||
} catch (error: any) {
|
||||
console.log("Github Auth Error:", error.message);
|
||||
resolve({
|
||||
success: false,
|
||||
user: null,
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
import path from "path";
|
||||
import fs from "fs";
|
||||
import grabHostNames from "../../utils/grab-host-names";
|
||||
import apiUpdateUser from "../../functions/api/users/api-update-user";
|
||||
import { UpdateUserFunctionReturn } from "../../types";
|
||||
|
||||
type Param = {
|
||||
key?: string;
|
||||
database?: string;
|
||||
database: string;
|
||||
updatedUserId: string | number;
|
||||
payload: { [s: string]: any };
|
||||
user_id?: boolean;
|
||||
useLocal?: boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -21,41 +20,16 @@ export default async function updateUser({
|
||||
database,
|
||||
user_id,
|
||||
updatedUserId,
|
||||
useLocal,
|
||||
}: Param): Promise<UpdateUserFunctionReturn> {
|
||||
/**
|
||||
* Check for local DB settings
|
||||
*
|
||||
* @description Look for local db settings in `.env` file and by pass the http request if available
|
||||
*/
|
||||
const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME } =
|
||||
process.env;
|
||||
|
||||
const grabedHostNames = grabHostNames();
|
||||
const { host, port, scheme } = grabedHostNames;
|
||||
|
||||
if (
|
||||
DSQL_DB_HOST?.match(/./) &&
|
||||
DSQL_DB_USERNAME?.match(/./) &&
|
||||
DSQL_DB_PASSWORD?.match(/./) &&
|
||||
DSQL_DB_NAME?.match(/./) &&
|
||||
global.DSQL_USE_LOCAL
|
||||
) {
|
||||
/** @type {import("../../types").DSQL_DatabaseSchemaType | undefined} */
|
||||
let dbSchema: import("../../types").DSQL_DatabaseSchemaType | undefined;
|
||||
|
||||
try {
|
||||
const localDbSchemaPath = path.resolve(
|
||||
process.cwd(),
|
||||
"dsql.schema.json"
|
||||
);
|
||||
dbSchema = JSON.parse(fs.readFileSync(localDbSchemaPath, "utf8"));
|
||||
} catch (error) {}
|
||||
|
||||
if (useLocal) {
|
||||
return await apiUpdateUser({
|
||||
payload: payload,
|
||||
dbFullName: DSQL_DB_NAME,
|
||||
dbFullName: database,
|
||||
updatedUserId,
|
||||
dbSchema,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -215,8 +215,6 @@ export default function userAuth({
|
||||
payload: userObject,
|
||||
};
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(`User Auth Error`, error as Error);
|
||||
|
||||
/**
|
||||
* Return User Object
|
||||
*
|
||||
|
||||
@@ -44,10 +44,6 @@ export default async function validateTempEmailCode({
|
||||
|
||||
return null;
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(
|
||||
`Validate Temp Email Code Error`,
|
||||
error as Error
|
||||
);
|
||||
console.log("validateTempEmailCode error:", error.message);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -66,7 +66,6 @@ export default function validateToken({
|
||||
*/
|
||||
return userObject;
|
||||
} catch (error) {
|
||||
global.ERROR_CALLBACK?.(`Validate Token Error`, error as Error);
|
||||
/**
|
||||
* Return User Object
|
||||
*
|
||||
|
||||
@@ -5,4 +5,5 @@ export const AppNames = {
|
||||
PrivateMediaProceedureName: "dsql_UpdateUserMedia",
|
||||
PrivateMediaInsertTriggerName: "dsql_trg_user_private_folders_insert",
|
||||
PrivateMediaDeleteTriggerName: "dsql_trg_user_private_folders_delete",
|
||||
WebsocketPathname: "dsql-websocket",
|
||||
} as const;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 +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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
@@ -16,13 +16,12 @@ import grabDSQLConnection from "../utils/grab-dsql-connection";
|
||||
const CONNECTION = await grabDSQLConnection();
|
||||
|
||||
try {
|
||||
const result = await CONNECTION.query(
|
||||
const [result] = await CONNECTION.query(
|
||||
"SELECT id,first_name,last_name FROM users LIMIT 3"
|
||||
);
|
||||
console.log("Connection Query Success =>", result);
|
||||
} catch (error: any) {
|
||||
console.log("Connection query ERROR =>", error.message);
|
||||
global.ERROR_CALLBACK?.(`Error Checking DB`, error as Error);
|
||||
} finally {
|
||||
await CONNECTION?.end();
|
||||
process.exit();
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import varDatabaseDbHandler from "../utils/varDatabaseDbHandler";
|
||||
import { DSQL_DatabaseSchemaType, PostInsertReturn } from "../../types";
|
||||
import { DSQL_DatabaseSchemaType } from "../../types";
|
||||
import { DSQL_DATASQUIREL_USER_DATABASES } from "../../types/dsql";
|
||||
import numberfy from "../../utils/numberfy";
|
||||
import addDbEntry from "../../functions/backend/db/addDbEntry";
|
||||
import updateDbEntry from "../../functions/backend/db/updateDbEntry";
|
||||
import dbHandler from "../../functions/backend/dbHandler";
|
||||
|
||||
type Param = {
|
||||
userId?: number | string | null;
|
||||
@@ -35,10 +35,10 @@ export default async function checkDbRecordCreateDbSchema({
|
||||
} = dbSchema;
|
||||
|
||||
let recordedDbEntryArray = userId
|
||||
? await varDatabaseDbHandler({
|
||||
queryString: `SELECT * FROM datasquirel.user_databases WHERE db_full_name = ?`,
|
||||
queryValuesArray: [dbFullName || "NULL"],
|
||||
})
|
||||
? ((await dbHandler({
|
||||
query: `SELECT * FROM datasquirel.user_databases WHERE db_full_name = ?`,
|
||||
values: [dbFullName || "NULL"],
|
||||
})) as any[] | null)
|
||||
: undefined;
|
||||
|
||||
let recordedDbEntry: DSQL_DATASQUIREL_USER_DATABASES | undefined =
|
||||
@@ -65,10 +65,10 @@ export default async function checkDbRecordCreateDbSchema({
|
||||
});
|
||||
|
||||
if (newDbEntry.payload?.insertId) {
|
||||
recordedDbEntryArray = await varDatabaseDbHandler({
|
||||
queryString: `SELECT * FROM datasquirel.user_databases WHERE db_full_name = ?`,
|
||||
queryValuesArray: [dbFullName || "NULL"],
|
||||
});
|
||||
recordedDbEntryArray = (await dbHandler({
|
||||
query: `SELECT * FROM datasquirel.user_databases WHERE db_full_name = ?`,
|
||||
values: [dbFullName || "NULL"],
|
||||
})) as any[] | null;
|
||||
recordedDbEntry = recordedDbEntryArray?.[0];
|
||||
}
|
||||
} else if (recordedDbEntry?.id) {
|
||||
@@ -82,11 +82,8 @@ export default async function checkDbRecordCreateDbSchema({
|
||||
}
|
||||
|
||||
return recordedDbEntry;
|
||||
} catch (error) {
|
||||
global.ERROR_CALLBACK?.(
|
||||
`Error Checking DB Record on Creating Schema`,
|
||||
error as Error
|
||||
);
|
||||
} catch (error: any) {
|
||||
console.log("Error =\u003e", error.message);
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import varDatabaseDbHandler from "../utils/varDatabaseDbHandler";
|
||||
import {
|
||||
DSQL_DatabaseSchemaType,
|
||||
DSQL_TableSchemaType,
|
||||
@@ -12,6 +11,7 @@ import {
|
||||
import sqlGenerator from "../../functions/dsql/sql/sql-generator";
|
||||
import numberfy from "../../utils/numberfy";
|
||||
import addDbEntry from "../../functions/backend/db/addDbEntry";
|
||||
import dbHandler from "../../functions/backend/dbHandler";
|
||||
|
||||
type Param = {
|
||||
userId?: number | string | null;
|
||||
@@ -54,10 +54,10 @@ export default async function checkTableRecordCreateDbSchema({
|
||||
});
|
||||
|
||||
let recordedTableEntryArray = userId
|
||||
? await varDatabaseDbHandler({
|
||||
queryString: queryObj?.string || "",
|
||||
queryValuesArray: queryObj?.values,
|
||||
})
|
||||
? ((await dbHandler({
|
||||
query: queryObj?.string || "",
|
||||
values: queryObj?.values,
|
||||
})) as any[] | null)
|
||||
: undefined;
|
||||
|
||||
let recordedTableEntry:
|
||||
@@ -98,21 +98,18 @@ export default async function checkTableRecordCreateDbSchema({
|
||||
});
|
||||
|
||||
if (newTableRecordEntry.payload?.insertId) {
|
||||
recordedTableEntryArray = await varDatabaseDbHandler({
|
||||
queryString: queryObj?.string || "",
|
||||
queryValuesArray: queryObj?.values,
|
||||
});
|
||||
recordedTableEntryArray = (await dbHandler({
|
||||
query: queryObj?.string || "",
|
||||
values: queryObj?.values,
|
||||
})) as any[] | null;
|
||||
|
||||
recordedTableEntry = recordedTableEntryArray?.[0];
|
||||
}
|
||||
}
|
||||
|
||||
return recordedTableEntry;
|
||||
} catch (error) {
|
||||
global.ERROR_CALLBACK?.(
|
||||
`Error Checking Table Record on Creating Schema`,
|
||||
error as Error
|
||||
);
|
||||
} catch (error: any) {
|
||||
console.log("Error =\u003e", error.message);
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import varDatabaseDbHandler from "../utils/varDatabaseDbHandler";
|
||||
import {
|
||||
DSQL_IndexSchemaType,
|
||||
DSQL_MYSQL_SHOW_INDEXES_Type,
|
||||
} from "../../types";
|
||||
import grabDSQLSchemaIndexComment from "../utils/grab-dsql-schema-index-comment";
|
||||
import dbHandler from "../../functions/backend/dbHandler";
|
||||
|
||||
type Param = {
|
||||
tableName: string;
|
||||
@@ -22,10 +22,9 @@ export default async function handleIndexescreateDbFromSchema({
|
||||
tableName,
|
||||
indexes,
|
||||
}: Param) {
|
||||
const allExistingIndexes: DSQL_MYSQL_SHOW_INDEXES_Type[] =
|
||||
await varDatabaseDbHandler({
|
||||
queryString: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\``,
|
||||
});
|
||||
const allExistingIndexes = (await dbHandler({
|
||||
query: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\``,
|
||||
})) as DSQL_MYSQL_SHOW_INDEXES_Type[];
|
||||
|
||||
for (let g = 0; g < indexes.length; g++) {
|
||||
const { indexType, indexName, indexTableFields, alias } = indexes[g];
|
||||
@@ -56,12 +55,11 @@ export default async function handleIndexescreateDbFromSchema({
|
||||
","
|
||||
)}) COMMENT '${grabDSQLSchemaIndexComment()} ${indexName}'`;
|
||||
|
||||
const addIndex = await varDatabaseDbHandler({ queryString });
|
||||
const addIndex = await dbHandler({ query: queryString });
|
||||
}
|
||||
}
|
||||
|
||||
const allExistingIndexesAfterUpdate: DSQL_MYSQL_SHOW_INDEXES_Type[] =
|
||||
await varDatabaseDbHandler({
|
||||
queryString: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\``,
|
||||
});
|
||||
const allExistingIndexesAfterUpdate = (await dbHandler({
|
||||
query: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\``,
|
||||
})) as DSQL_MYSQL_SHOW_INDEXES_Type[];
|
||||
}
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
import noDatabaseDbHandler from "../utils/noDatabaseDbHandler";
|
||||
import varDatabaseDbHandler from "../utils/varDatabaseDbHandler";
|
||||
import createTable from "../utils/createTable";
|
||||
import updateTable from "../utils/updateTable";
|
||||
import { DSQL_DatabaseSchemaType } from "../../types";
|
||||
@@ -64,19 +62,19 @@ export default async function createDbFromSchema({
|
||||
|
||||
console.log(`Handling database => ${dbFullName}`);
|
||||
|
||||
const dbCheck: any = await noDatabaseDbHandler(
|
||||
`SELECT SCHEMA_NAME AS dbFullName FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '${dbFullName}'`
|
||||
);
|
||||
const dbCheck: any = await dbHandler({
|
||||
query: `SELECT SCHEMA_NAME AS dbFullName FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '${dbFullName}'`,
|
||||
});
|
||||
|
||||
if (!dbCheck?.[0]?.dbFullName) {
|
||||
const newDatabase = await noDatabaseDbHandler(
|
||||
`CREATE DATABASE IF NOT EXISTS \`${dbFullName}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`
|
||||
);
|
||||
const newDatabase = await dbHandler({
|
||||
query: `CREATE DATABASE IF NOT EXISTS \`${dbFullName}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`,
|
||||
});
|
||||
}
|
||||
|
||||
const allTables: any = await noDatabaseDbHandler(
|
||||
`SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='${dbFullName}'`
|
||||
);
|
||||
const allTables = (await dbHandler({
|
||||
query: `SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='${dbFullName}'`,
|
||||
})) as any[] | undefined;
|
||||
|
||||
let recordedDbEntry = await checkDbRecordCreateDbSchema({
|
||||
dbSchema: database,
|
||||
@@ -84,59 +82,32 @@ export default async function createDbFromSchema({
|
||||
isMain,
|
||||
});
|
||||
|
||||
for (let tb = 0; tb < allTables.length; tb++) {
|
||||
const { TABLE_NAME } = allTables[tb];
|
||||
if (allTables?.length) {
|
||||
for (let tb = 0; tb < allTables.length; tb++) {
|
||||
const { TABLE_NAME } = allTables[tb];
|
||||
|
||||
const targetTableSchema = tables.find(
|
||||
(_table) => _table.tableName === TABLE_NAME
|
||||
);
|
||||
|
||||
/**
|
||||
* @description Check if TABLE_NAME is part of the tables contained
|
||||
* in the user schema JSON. If it's not, the table is either deleted
|
||||
* or the table name has been recently changed
|
||||
*/
|
||||
if (!targetTableSchema) {
|
||||
console.log(
|
||||
`Dropping Table ${TABLE_NAME} from ${dbFullName}`
|
||||
const targetTableSchema = tables.find(
|
||||
(_table) => _table.tableName === TABLE_NAME
|
||||
);
|
||||
await varDatabaseDbHandler({
|
||||
queryString: `DROP TABLE \`${dbFullName}\`.\`${TABLE_NAME}\``,
|
||||
});
|
||||
|
||||
const deleteTableEntry = await dbHandler({
|
||||
query: `DELETE FROM datasquirel.user_database_tables WHERE user_id = ? AND db_slug = ? AND table_slug = ?`,
|
||||
values: [userId, dbSlug, TABLE_NAME],
|
||||
});
|
||||
/**
|
||||
* @description Check if TABLE_NAME is part of the tables contained
|
||||
* in the user schema JSON. If it's not, the table is either deleted
|
||||
* or the table name has been recently changed
|
||||
*/
|
||||
if (!targetTableSchema) {
|
||||
console.log(
|
||||
`Dropping Table ${TABLE_NAME} from ${dbFullName}`
|
||||
);
|
||||
await dbHandler({
|
||||
query: `DROP TABLE \`${dbFullName}\`.\`${TABLE_NAME}\``,
|
||||
});
|
||||
|
||||
// const oldTable = tables.find(
|
||||
// (_table) =>
|
||||
// _table.tableNameOld &&
|
||||
// _table.tableNameOld === TABLE_NAME
|
||||
// );
|
||||
|
||||
// /**
|
||||
// * @description Check if this table has been recently renamed. Rename
|
||||
// * table id true. Drop table if false
|
||||
// */
|
||||
// if (oldTable) {
|
||||
// console.log("Renaming Table");
|
||||
// await varDatabaseDbHandler({
|
||||
// queryString: `RENAME TABLE \`${dbFullName}\`.\`${oldTable.tableNameOld}\` TO \`${oldTable.tableName}\``,
|
||||
// });
|
||||
// } else {
|
||||
// console.log(
|
||||
// `Dropping Table ${TABLE_NAME} from ${dbFullName}`
|
||||
// );
|
||||
// await varDatabaseDbHandler({
|
||||
// queryString: `DROP TABLE \`${dbFullName}\`.\`${TABLE_NAME}\``,
|
||||
// });
|
||||
|
||||
// const deleteTableEntry = await dbHandler({
|
||||
// query: `DELETE FROM datasquirel.user_database_tables WHERE user_id = ? AND db_slug = ? AND table_slug = ?`,
|
||||
// values: [userId, dbSlug, TABLE_NAME],
|
||||
// });
|
||||
// }
|
||||
const deleteTableEntry = await dbHandler({
|
||||
query: `DELETE FROM datasquirel.user_database_tables WHERE user_id = ? AND db_slug = ? AND table_slug = ?`,
|
||||
values: [userId, dbSlug, TABLE_NAME],
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -156,8 +127,8 @@ export default async function createDbFromSchema({
|
||||
* @description Check if table exists
|
||||
* @type {any}
|
||||
*/
|
||||
const tableCheck: any = await varDatabaseDbHandler({
|
||||
queryString: `
|
||||
const tableCheck: any = await dbHandler({
|
||||
query: `
|
||||
SELECT EXISTS (
|
||||
SELECT
|
||||
TABLE_NAME
|
||||
@@ -167,7 +138,7 @@ export default async function createDbFromSchema({
|
||||
TABLE_SCHEMA = ? AND
|
||||
TABLE_NAME = ?
|
||||
) AS tableExists`,
|
||||
queryValuesArray: [dbFullName, table.tableName],
|
||||
values: [dbFullName, table.tableName],
|
||||
});
|
||||
|
||||
if (tableCheck && tableCheck[0]?.tableExists > 0) {
|
||||
|
||||
@@ -1,23 +1,11 @@
|
||||
require("dotenv").config({ path: "./../.env" });
|
||||
|
||||
import varDatabaseDbHandler from "../functions/backend/varDatabaseDbHandler";
|
||||
import dbHandler from "../functions/backend/dbHandler";
|
||||
|
||||
/** ****************************************************************************** */
|
||||
/** ****************************************************************************** */
|
||||
/** ****************************************************************************** */
|
||||
/** ****************************************************************************** */
|
||||
/** ****************************************************************************** */
|
||||
/** ****************************************************************************** */
|
||||
|
||||
/**
|
||||
* Grab Schema
|
||||
*
|
||||
* @description Grab Schema
|
||||
*/
|
||||
varDatabaseDbHandler({
|
||||
queryString: `SELECT user_database_tables.*,user_databases.db_full_name FROM user_database_tables JOIN user_databases ON user_database_tables.db_id=user_databases.id`,
|
||||
dbHandler({
|
||||
query: `SELECT user_database_tables.*,user_databases.db_full_name FROM user_database_tables JOIN user_databases ON user_database_tables.db_id=user_databases.id`,
|
||||
database: "datasquirel",
|
||||
}).then(async (tables) => {
|
||||
}).then(async (tables: any) => {
|
||||
for (let i = 0; i < tables.length; i++) {
|
||||
const table = tables[i];
|
||||
const {
|
||||
@@ -30,16 +18,16 @@ varDatabaseDbHandler({
|
||||
table_description,
|
||||
} = table;
|
||||
|
||||
const tableInfo = await varDatabaseDbHandler({
|
||||
queryString: `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='${db_full_name}' AND TABLE_NAME='${table_slug}'`,
|
||||
const tableInfo = await dbHandler({
|
||||
query: `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='${db_full_name}' AND TABLE_NAME='${table_slug}'`,
|
||||
});
|
||||
|
||||
const updateDbCharset = await varDatabaseDbHandler({
|
||||
queryString: `ALTER DATABASE ${db_full_name} CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin;`,
|
||||
const updateDbCharset = await dbHandler({
|
||||
query: `ALTER DATABASE ${db_full_name} CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin;`,
|
||||
});
|
||||
|
||||
const updateEncoding = await varDatabaseDbHandler({
|
||||
queryString: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`,
|
||||
const updateEncoding = await dbHandler({
|
||||
query: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
require("dotenv").config({ path: "./../.env" });
|
||||
import { AppNames } from "../dict/app-names";
|
||||
import serverError from "../functions/backend/serverError";
|
||||
import noDatabaseDbHandler from "./utils/noDatabaseDbHandler";
|
||||
|
||||
/**
|
||||
* # Create Database From Schema
|
||||
*/
|
||||
async function grantFullPrivileges({ userId }: { userId: string | null }) {
|
||||
/**
|
||||
* Grab Schema
|
||||
*
|
||||
* @description Grab Schema
|
||||
*/
|
||||
try {
|
||||
const defaultMariadbUserHost = process.env.DSQL_DB_HOST || "127.0.0.1";
|
||||
|
||||
const allDatabases = await noDatabaseDbHandler(`SHOW DATABASES`);
|
||||
|
||||
const datasquirelUserDatabases = allDatabases.filter((database: any) =>
|
||||
database.Database.match(new RegExp(`^${AppNames["DsqlDbPrefix"]}`))
|
||||
);
|
||||
|
||||
for (let i = 0; i < datasquirelUserDatabases.length; i++) {
|
||||
const datasquirelUserDatabase = datasquirelUserDatabases[i];
|
||||
const { Database } = datasquirelUserDatabase;
|
||||
}
|
||||
|
||||
const flushPriviledged = await noDatabaseDbHandler(`FLUSH PRIVILEGES`);
|
||||
} catch (error: any) {
|
||||
serverError({
|
||||
component: "shell/grantDbPriviledges/main-catch-error",
|
||||
message: error.message,
|
||||
user: { id: userId },
|
||||
});
|
||||
}
|
||||
|
||||
process.exit();
|
||||
}
|
||||
|
||||
const userArg = process.argv[process.argv.indexOf("--user")];
|
||||
const externalUser = process.argv[process.argv.indexOf("--user") + 1];
|
||||
|
||||
grantFullPrivileges({ userId: userArg ? externalUser : null });
|
||||
@@ -1,101 +0,0 @@
|
||||
import noDatabaseDbHandler from "../utils/noDatabaseDbHandler";
|
||||
|
||||
export interface GrantType {
|
||||
database: string;
|
||||
table: string;
|
||||
privileges: string[];
|
||||
}
|
||||
|
||||
type Param = {
|
||||
username?: string;
|
||||
host?: string;
|
||||
grants?: GrantType[];
|
||||
userId: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* # Handle Grants for Users
|
||||
*/
|
||||
export default async function handleGrants({
|
||||
username,
|
||||
host,
|
||||
grants,
|
||||
userId,
|
||||
}: Param): Promise<boolean> {
|
||||
let success = false;
|
||||
|
||||
console.log(`Handling Grants for User =>`, username, host);
|
||||
|
||||
if (!username) {
|
||||
console.log(`No username provided.`);
|
||||
return success;
|
||||
}
|
||||
|
||||
if (!host) {
|
||||
console.log(
|
||||
`No Host provided. \x1b[35m\`--host\`\x1b[0m flag is required`
|
||||
);
|
||||
return success;
|
||||
}
|
||||
|
||||
if (!grants) {
|
||||
console.log(`No grants Array provided.`);
|
||||
return success;
|
||||
}
|
||||
|
||||
try {
|
||||
const existingUser = await noDatabaseDbHandler(
|
||||
`SELECT * FROM mysql.user WHERE User = '${username}' AND Host = '${host}'`
|
||||
);
|
||||
|
||||
const isUserExisting = Boolean(existingUser?.[0]?.User);
|
||||
|
||||
if (isUserExisting) {
|
||||
const userGrants = await noDatabaseDbHandler(
|
||||
`SHOW GRANTS FOR '${username}'@'${host}'`
|
||||
);
|
||||
|
||||
for (let i = 0; i < userGrants.length; i++) {
|
||||
const grantObject = userGrants[i];
|
||||
const grant = grantObject?.[Object.keys(grantObject)[0]];
|
||||
|
||||
if (grant?.match(/GRANT .* PRIVILEGES ON .* TO/)) {
|
||||
const revokeGrantText = grant
|
||||
.replace(/GRANT/, "REVOKE")
|
||||
.replace(/ TO /, " FROM ");
|
||||
|
||||
const revokePrivilege = await noDatabaseDbHandler(
|
||||
revokeGrantText
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const grantsArray: GrantType[] = grants;
|
||||
|
||||
for (let i = 0; i < grantsArray.length; i++) {
|
||||
const grantObject = grantsArray[i];
|
||||
const { database, table, privileges } = grantObject;
|
||||
|
||||
const tableText = table == "*" ? "*" : `\`${table}\``;
|
||||
const databaseText =
|
||||
database == "*"
|
||||
? `\`${process.env.DSQL_USER_DB_PREFIX}${userId}_%\``
|
||||
: `\`${database}\``;
|
||||
|
||||
const privilegesText = privileges.includes("ALL")
|
||||
? "ALL PRIVILEGES"
|
||||
: privileges.join(", ");
|
||||
|
||||
const grantText = `GRANT ${privilegesText} ON ${databaseText}.${tableText} TO '${username}'@'${host}'`;
|
||||
|
||||
const grantPriviledge = await noDatabaseDbHandler(grantText);
|
||||
}
|
||||
}
|
||||
|
||||
success = true;
|
||||
} catch (/** @type {any} */ error: any) {
|
||||
console.log(`Error in adding SQL user =>`, error.message);
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
@@ -1,75 +0,0 @@
|
||||
require("dotenv").config({ path: "../../.env" });
|
||||
import generator from "generate-password";
|
||||
import noDatabaseDbHandler from "../utils/noDatabaseDbHandler";
|
||||
import dbHandler from "../../functions/backend/dbHandler";
|
||||
import encrypt from "../../functions/dsql/encrypt";
|
||||
import grabSQLKeyName from "../../utils/grab-sql-key-name";
|
||||
|
||||
/**
|
||||
* # Reset SQL Passwords
|
||||
*/
|
||||
async function resetSQLCredentialsPasswords() {
|
||||
const users = (await dbHandler({
|
||||
query: `SELECT * FROM users`,
|
||||
})) as any[];
|
||||
|
||||
if (!users) {
|
||||
process.exit();
|
||||
}
|
||||
|
||||
for (let i = 0; i < users.length; i++) {
|
||||
const user = users[i];
|
||||
|
||||
if (!user) continue;
|
||||
|
||||
try {
|
||||
const maridbUsers = (await dbHandler({
|
||||
query: `SELECT * FROM mysql.user WHERE User = '${grabSQLKeyName(
|
||||
{ type: "user", userId: user.id }
|
||||
)}'`,
|
||||
})) as any[];
|
||||
|
||||
for (let j = 0; j < maridbUsers.length; j++) {
|
||||
const { User, Host } = maridbUsers[j];
|
||||
|
||||
const password = generator.generate({
|
||||
length: 16,
|
||||
numbers: true,
|
||||
symbols: true,
|
||||
uppercase: true,
|
||||
exclude: "*#.'`\"",
|
||||
});
|
||||
|
||||
const encryptedPassword = encrypt({
|
||||
data: password,
|
||||
encryptionKey: process.env.DSQL_ENCRYPTION_PASSWORD,
|
||||
encryptionSalt: process.env.DSQL_ENCRYPTION_SALT,
|
||||
});
|
||||
|
||||
await noDatabaseDbHandler(
|
||||
`SET PASSWORD FOR '${User}'@'${Host}' = PASSWORD('${password}')`
|
||||
);
|
||||
|
||||
if (user.mariadb_user == User && user.mariadb_host == Host) {
|
||||
const updateUser = await dbHandler({
|
||||
query: `UPDATE users SET mariadb_pass = ? WHERE id = ?`,
|
||||
values: [encryptedPassword, user.id],
|
||||
});
|
||||
}
|
||||
|
||||
console.log(
|
||||
`User ${user.id}: ${user.first_name} ${user.last_name} Password Updated successfully added.`
|
||||
);
|
||||
}
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(
|
||||
`Error Resetting MariaDB User Password`,
|
||||
error as Error
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
process.exit();
|
||||
}
|
||||
|
||||
resetSQLCredentialsPasswords();
|
||||
@@ -3,7 +3,7 @@ require("dotenv").config({ path: "../../../.env" });
|
||||
import fs from "fs";
|
||||
import { execSync } from "child_process";
|
||||
import EJSON from "../../../utils/ejson";
|
||||
import DB_HANDLER from "../../../utils/backend/global-db/DB_HANDLER";
|
||||
import dbHandler from "../../../functions/backend/dbHandler";
|
||||
import addDbEntry from "../../../functions/backend/db/addDbEntry";
|
||||
import addMariadbUser from "../../../functions/backend/addMariadbUser";
|
||||
import updateDbEntry from "../../../functions/backend/db/updateDbEntry";
|
||||
@@ -63,9 +63,9 @@ async function createUser() {
|
||||
password: password,
|
||||
});
|
||||
|
||||
let existingUser = await DB_HANDLER(
|
||||
`SELECT * FROM users WHERE email='${email}'`
|
||||
);
|
||||
let existingUser = (await dbHandler({
|
||||
query: `SELECT * FROM users WHERE email='${email}'`,
|
||||
})) as any[];
|
||||
|
||||
if (existingUser?.[0]) {
|
||||
console.log("User Exists");
|
||||
@@ -170,7 +170,7 @@ async function createUser() {
|
||||
|
||||
return true;
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(`Error Creating User`, error as Error);
|
||||
console.log("Error =\u003e", error.message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ async function createUser() {
|
||||
|
||||
return true;
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(`Error Updating User`, error as Error);
|
||||
console.log("Error =\u003e", error.message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import fs from "fs";
|
||||
require("dotenv").config({ path: "./../.env" });
|
||||
import varDatabaseDbHandler from "../functions/backend/varDatabaseDbHandler";
|
||||
import DB_HANDLER from "../utils/backend/global-db/DB_HANDLER";
|
||||
import dbHandler from "../functions/backend/dbHandler";
|
||||
|
||||
const userId =
|
||||
process.argv.indexOf("--userId") >= 0
|
||||
@@ -19,9 +18,9 @@ async function recoverMainJsonFromDb() {
|
||||
return;
|
||||
}
|
||||
|
||||
const databases = await DB_HANDLER(
|
||||
`SELECT * FROM user_databases WHERE user_id='${userId}'`
|
||||
);
|
||||
const databases = (await dbHandler({
|
||||
query: `SELECT * FROM user_databases WHERE user_id='${userId}'`,
|
||||
})) as any[];
|
||||
|
||||
const dbWrite = [];
|
||||
|
||||
@@ -38,9 +37,9 @@ async function recoverMainJsonFromDb() {
|
||||
tables: [],
|
||||
};
|
||||
|
||||
const tables = await DB_HANDLER(
|
||||
`SELECT * FROM user_database_tables WHERE user_id='${userId}' AND db_id='${id}'`
|
||||
);
|
||||
const tables = (await dbHandler({
|
||||
query: `SELECT * FROM user_database_tables WHERE user_id='${userId}' AND db_id='${id}'`,
|
||||
})) as any[];
|
||||
|
||||
for (let j = 0; j < tables.length; j++) {
|
||||
const { table_name, table_slug, table_description } = tables[j];
|
||||
@@ -52,10 +51,15 @@ async function recoverMainJsonFromDb() {
|
||||
indexes: [],
|
||||
};
|
||||
|
||||
const tableFields = await varDatabaseDbHandler({
|
||||
const tableFields = (await dbHandler({
|
||||
database: db_full_name,
|
||||
queryString: `SHOW COLUMNS FROM ${db_full_name}.${table_slug}`,
|
||||
});
|
||||
query: `SHOW COLUMNS FROM ${db_full_name}.${table_slug}`,
|
||||
})) as any[] | null;
|
||||
|
||||
if (!tableFields) {
|
||||
console.log("No table fields found");
|
||||
continue;
|
||||
}
|
||||
|
||||
for (let k = 0; k < tableFields.length; k++) {
|
||||
const { Field, Type, Null, Default, Key } = tableFields[k];
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
require("dotenv").config({ path: "./../.env" });
|
||||
import generator from "generate-password";
|
||||
import noDatabaseDbHandler from "./utils/noDatabaseDbHandler";
|
||||
import dbHandler from "../functions/backend/dbHandler";
|
||||
import encrypt from "../functions/dsql/encrypt";
|
||||
import grabSQLKeyName from "../utils/grab-sql-key-name";
|
||||
@@ -35,9 +34,9 @@ async function resetSQLCredentialsPasswords() {
|
||||
});
|
||||
const encryptedPassword = encrypt({ data: password });
|
||||
|
||||
await noDatabaseDbHandler(
|
||||
`SET PASSWORD FOR '${username}'@'${defaultMariadbUserHost}' = PASSWORD('${password}')`
|
||||
);
|
||||
await dbHandler({
|
||||
query: `SET PASSWORD FOR '${username}'@'${defaultMariadbUserHost}' = PASSWORD('${password}')`,
|
||||
});
|
||||
|
||||
const updateUser = await dbHandler({
|
||||
query: `UPDATE users SET mariadb_pass = ? WHERE id = ?`,
|
||||
@@ -48,10 +47,7 @@ async function resetSQLCredentialsPasswords() {
|
||||
`User ${user.id}: ${user.first_name} ${user.last_name} Password Updated successfully added.`
|
||||
);
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(
|
||||
`Error Updating MariaDB User`,
|
||||
error as Error
|
||||
);
|
||||
console.log("Error =\u003e", error.message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
require("dotenv").config({ path: "./../.env" });
|
||||
import generator from "generate-password";
|
||||
import noDatabaseDbHandler from "./utils/noDatabaseDbHandler";
|
||||
import dbHandler from "../functions/backend/dbHandler";
|
||||
import encrypt from "../functions/dsql/encrypt";
|
||||
import grabSQLKeyName from "../utils/grab-sql-key-name";
|
||||
|
||||
/** ****************************************************************************** */
|
||||
/** ****************************************************************************** */
|
||||
/** ****************************************************************************** */
|
||||
/** ****************************************************************************** */
|
||||
/** ****************************************************************************** */
|
||||
/** ****************************************************************************** */
|
||||
|
||||
/**
|
||||
* # Set SQL Credentials
|
||||
*/
|
||||
async function setSQLCredentials() {
|
||||
const users = (await dbHandler({
|
||||
query: `SELECT * FROM users`,
|
||||
})) as any[] | null;
|
||||
|
||||
if (!users) {
|
||||
process.exit();
|
||||
}
|
||||
|
||||
for (let i = 0; i < users.length; i++) {
|
||||
const user = users[i];
|
||||
|
||||
if (!user) continue;
|
||||
if (user.mariadb_user && user.mariadb_pass) {
|
||||
continue;
|
||||
}
|
||||
|
||||
try {
|
||||
const username = grabSQLKeyName({ type: "user", userId: user.id });
|
||||
const password = generator.generate({
|
||||
length: 16,
|
||||
numbers: true,
|
||||
symbols: true,
|
||||
uppercase: true,
|
||||
exclude: "*#.'`\"",
|
||||
});
|
||||
const encryptedPassword = encrypt({ data: password });
|
||||
|
||||
await noDatabaseDbHandler(
|
||||
`CREATE USER IF NOT EXISTS '${username}'@'127.0.0.1' IDENTIFIED BY '${password}'`
|
||||
);
|
||||
|
||||
await noDatabaseDbHandler(
|
||||
`GRANT ALL PRIVILEGES ON \`datasquirel\\_user\\_${user.id}\\_%\`.* TO '${username}'@'127.0.0.1'`
|
||||
);
|
||||
await noDatabaseDbHandler(`FLUSH PRIVILEGES`);
|
||||
|
||||
const updateUser = await dbHandler({
|
||||
query: `UPDATE users SET mariadb_user = ?, mariadb_host = '127.0.0.1' mariadb_pass = ? WHERE id = ?`,
|
||||
values: [username, encryptedPassword, user.id],
|
||||
});
|
||||
|
||||
console.log(
|
||||
`User ${user.id}: ${user.first_name} ${user.last_name} SQL credentials successfully added.`
|
||||
);
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(
|
||||
`Error Setting SQL credentials`,
|
||||
error as Error
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
setSQLCredentials();
|
||||
@@ -21,16 +21,13 @@ import grabDSQLConnection from "../utils/grab-dsql-connection";
|
||||
* @description If a database is provided, switch to it
|
||||
*/
|
||||
try {
|
||||
const result = await CONNECTION.query("SHOW DATABASES");
|
||||
const [result] = await CONNECTION.query("SHOW DATABASES");
|
||||
|
||||
const parsedResults = JSON.parse(JSON.stringify(result));
|
||||
|
||||
console.log("parsedResults =>", parsedResults);
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(
|
||||
`Error Testing External Server`,
|
||||
error as Error
|
||||
);
|
||||
console.log("Error =\u003e", error.message);
|
||||
} finally {
|
||||
await CONNECTION?.end();
|
||||
process.exit();
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
require("dotenv").config({ path: "./../.env" });
|
||||
import generator from "generate-password";
|
||||
import noDatabaseDbHandler from "./utils/noDatabaseDbHandler";
|
||||
import dbHandler from "../functions/backend/dbHandler";
|
||||
import encrypt from "../functions/dsql/encrypt";
|
||||
import grabSQLKeyName from "../utils/grab-sql-key-name";
|
||||
|
||||
/**
|
||||
* # Test SQL Escape
|
||||
*/
|
||||
export default async function testSQLEscape() {
|
||||
const users = (await dbHandler({
|
||||
query: `SELECT * FROM users`,
|
||||
})) as any[];
|
||||
|
||||
if (!users) {
|
||||
process.exit();
|
||||
}
|
||||
|
||||
for (let i = 0; i < users.length; i++) {
|
||||
const user = users[i];
|
||||
|
||||
if (!user) continue;
|
||||
|
||||
const defaultMariadbUserHost = process.env.DSQL_DB_HOST || "127.0.0.1";
|
||||
|
||||
try {
|
||||
const username = grabSQLKeyName({ type: "user", userId: user.id });
|
||||
const password = generator.generate({
|
||||
length: 16,
|
||||
numbers: true,
|
||||
symbols: true,
|
||||
uppercase: true,
|
||||
exclude: "*#.'`\"",
|
||||
});
|
||||
const encryptedPassword = encrypt({ data: password });
|
||||
|
||||
await noDatabaseDbHandler(
|
||||
`DROP USER '${username}'@'${defaultMariadbUserHost}'`
|
||||
);
|
||||
|
||||
await noDatabaseDbHandler(
|
||||
`CREATE USER IF NOT EXISTS '${username}'@'${defaultMariadbUserHost}' IDENTIFIED BY '${password}'`
|
||||
);
|
||||
|
||||
await noDatabaseDbHandler(
|
||||
`GRANT ALL PRIVILEGES ON \`datasquirel\\_user\\_${user.id}\\_%\`.* TO '${username}'@'${defaultMariadbUserHost}'`
|
||||
);
|
||||
|
||||
await noDatabaseDbHandler(`FLUSH PRIVILEGES`);
|
||||
|
||||
const updateUser = await dbHandler({
|
||||
query: `UPDATE users SET mariadb_user = ?, mariadb_host = ? mariadb_pass = ? WHERE id = ?`,
|
||||
values: [
|
||||
username,
|
||||
defaultMariadbUserHost,
|
||||
encryptedPassword,
|
||||
user.id,
|
||||
],
|
||||
});
|
||||
|
||||
console.log(
|
||||
`User ${user.id}: ${user.first_name} ${user.last_name} SQL credentials successfully added.`
|
||||
);
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(`Error Testing SQL Escape`, error as Error);
|
||||
}
|
||||
}
|
||||
|
||||
process.exit();
|
||||
}
|
||||
|
||||
testSQLEscape();
|
||||
@@ -1,4 +1,4 @@
|
||||
import DB_HANDLER from "../utils/backend/global-db/DB_HANDLER";
|
||||
import dbHandler from "../functions/backend/dbHandler";
|
||||
import fs from "fs";
|
||||
require("dotenv").config({ path: "./../.env" });
|
||||
|
||||
@@ -31,25 +31,20 @@ async function updateChildrenTablesOnDb() {
|
||||
|
||||
const WHERE_CLAUSE = `WHERE user_id='${userId}' AND db_slug='${db.dbSlug}' AND table_slug='${table.tableName}'`;
|
||||
|
||||
const existingTableInDb = await DB_HANDLER(
|
||||
`SELECT * FROM user_database_tables ${WHERE_CLAUSE}`
|
||||
);
|
||||
const existingTableInDb = (await dbHandler({
|
||||
query: `SELECT * FROM user_database_tables ${WHERE_CLAUSE}`,
|
||||
})) as any[];
|
||||
|
||||
if (existingTableInDb && existingTableInDb[0]) {
|
||||
const updateChildrenTablesInfo = await DB_HANDLER(
|
||||
`UPDATE user_database_tables SET child_table='1',child_table_parent_database='${originDbName}',child_table_parent_table='${originTableName}' WHERE id='${existingTableInDb[0].id}'`
|
||||
);
|
||||
if (existingTableInDb?.[0]) {
|
||||
const updateChildrenTablesInfo = await dbHandler({
|
||||
query: `UPDATE user_database_tables SET child_table='1',child_table_parent_database='${originDbName}',child_table_parent_table='${originTableName}' WHERE id='${existingTableInDb[0].id}'`,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
global.ERROR_CALLBACK?.(
|
||||
`Error Updating Children Tables on DB`,
|
||||
error as Error
|
||||
);
|
||||
}
|
||||
} catch (error) {}
|
||||
|
||||
process.exit();
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
require("dotenv").config({ path: "./../.env" });
|
||||
import varDatabaseDbHandler from "../functions/backend/varDatabaseDbHandler";
|
||||
import dbHandler from "../functions/backend/dbHandler";
|
||||
|
||||
/**
|
||||
* Grab Schema
|
||||
*
|
||||
* @description Grab Schema
|
||||
*/
|
||||
varDatabaseDbHandler({
|
||||
queryString: `SELECT user_database_tables.*,user_databases.db_full_name FROM user_database_tables JOIN user_databases ON user_database_tables.db_id=user_databases.id`,
|
||||
dbHandler({
|
||||
query: `SELECT user_database_tables.*,user_databases.db_full_name FROM user_database_tables JOIN user_databases ON user_database_tables.db_id=user_databases.id`,
|
||||
database: "datasquirel",
|
||||
}).then(async (tables) => {
|
||||
}).then(async (tables: any) => {
|
||||
for (let i = 0; i < tables.length; i++) {
|
||||
const table = tables[i];
|
||||
const {
|
||||
@@ -22,16 +22,16 @@ varDatabaseDbHandler({
|
||||
table_description,
|
||||
} = table;
|
||||
|
||||
const tableInfo = await varDatabaseDbHandler({
|
||||
queryString: `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='${db_full_name}' AND TABLE_NAME='${table_slug}'`,
|
||||
const tableInfo = await dbHandler({
|
||||
query: `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='${db_full_name}' AND TABLE_NAME='${table_slug}'`,
|
||||
});
|
||||
|
||||
const updateCreationDateTimestamp = await varDatabaseDbHandler({
|
||||
queryString: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` MODIFY COLUMN date_created_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP`,
|
||||
const updateCreationDateTimestamp = await dbHandler({
|
||||
query: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` MODIFY COLUMN date_created_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP`,
|
||||
});
|
||||
|
||||
const updateDateTimestamp = await varDatabaseDbHandler({
|
||||
queryString: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` MODIFY COLUMN date_updated_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP`,
|
||||
const updateDateTimestamp = await dbHandler({
|
||||
query: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` MODIFY COLUMN date_updated_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP`,
|
||||
});
|
||||
|
||||
console.log("Date Updated Column updated");
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
require("dotenv").config({ path: "./../.env" });
|
||||
|
||||
import serverError from "../functions/backend/serverError";
|
||||
import varDatabaseDbHandler from "./utils/varDatabaseDbHandler";
|
||||
import DB_HANDLER from "../utils/backend/global-db/DB_HANDLER";
|
||||
import dbHandler from "../functions/backend/dbHandler";
|
||||
|
||||
/** ****************************************************************************** */
|
||||
/** ****************************************************************************** */
|
||||
@@ -16,25 +15,22 @@ import DB_HANDLER from "../utils/backend/global-db/DB_HANDLER";
|
||||
*
|
||||
* @description Grab Schema
|
||||
*/
|
||||
varDatabaseDbHandler({
|
||||
queryString: `SELECT DISTINCT db_id FROM datasquirel.user_database_tables`,
|
||||
}).then(async (tables) => {
|
||||
// console.log(tables);
|
||||
// process.exit();
|
||||
|
||||
dbHandler({
|
||||
query: `SELECT DISTINCT db_id FROM datasquirel.user_database_tables`,
|
||||
}).then(async (tables: any) => {
|
||||
for (let i = 0; i < tables.length; i++) {
|
||||
const table = tables[i];
|
||||
|
||||
try {
|
||||
const { db_id } = table;
|
||||
|
||||
const dbSlug = await DB_HANDLER(
|
||||
`SELECT db_slug FROM user_databases WHERE id='${db_id}'`
|
||||
);
|
||||
const dbSlug = (await dbHandler({
|
||||
query: `SELECT db_slug FROM user_databases WHERE id='${db_id}'`,
|
||||
})) as any;
|
||||
|
||||
const updateTableSlug = await DB_HANDLER(
|
||||
`UPDATE user_database_tables SET db_slug='${dbSlug[0].db_slug}' WHERE db_id='${db_id}'`
|
||||
);
|
||||
const updateTableSlug = await dbHandler({
|
||||
query: `UPDATE user_database_tables SET db_slug='${dbSlug[0].db_slug}' WHERE db_id='${db_id}'`,
|
||||
});
|
||||
} catch (error: any) {
|
||||
serverError({
|
||||
component:
|
||||
@@ -42,11 +38,6 @@ varDatabaseDbHandler({
|
||||
message: error.message,
|
||||
user: {},
|
||||
});
|
||||
|
||||
global.ERROR_CALLBACK?.(
|
||||
`Error Updating DB Slugs For Table Records`,
|
||||
error as Error
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,13 +17,12 @@ import grabSQLKeyName from "../utils/grab-sql-key-name";
|
||||
const CONNECTION = await grabDSQLConnection();
|
||||
|
||||
try {
|
||||
const result = await CONNECTION.query(
|
||||
const [result] = await CONNECTION.query(
|
||||
"SELECT user,host,ssl_type FROM mysql.user"
|
||||
);
|
||||
const parsedResults = JSON.parse(JSON.stringify(result));
|
||||
|
||||
for (let i = 0; i < parsedResults.length; i++) {
|
||||
const user = parsedResults[i];
|
||||
for (let i = 0; i < result.length; i++) {
|
||||
const user = result[i];
|
||||
|
||||
if (
|
||||
user.User !== process.env.DSQL_DB_READ_ONLY_USERNAME ||
|
||||
@@ -39,14 +38,14 @@ import grabSQLKeyName from "../utils/grab-sql-key-name";
|
||||
continue;
|
||||
}
|
||||
|
||||
const addUserSSL = await CONNECTION.query(
|
||||
const [addUserSSL] = await CONNECTION.query(
|
||||
`ALTER USER '${User}'@'${Host}'`
|
||||
);
|
||||
|
||||
console.log(`addUserSSL => ${User}@${Host}`, addUserSSL);
|
||||
}
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(`Error Updating SSL Users`, error as Error);
|
||||
console.log("Error =\u003e", error.message);
|
||||
} finally {
|
||||
await CONNECTION?.end();
|
||||
process.exit();
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import varDatabaseDbHandler from "./varDatabaseDbHandler";
|
||||
import { DSQL_TableSchemaType } from "../../types";
|
||||
import {
|
||||
DSQL_DATASQUIREL_USER_DATABASE_TABLES,
|
||||
@@ -10,6 +9,7 @@ import addDbEntry from "../../functions/backend/db/addDbEntry";
|
||||
import slugToNormalText from "../../utils/slug-to-normal-text";
|
||||
import debugLog from "../../utils/logging/debug-log";
|
||||
import _ from "lodash";
|
||||
import dbHandler from "../../functions/backend/dbHandler";
|
||||
|
||||
type Param = {
|
||||
tableSchema?: DSQL_TableSchemaType;
|
||||
@@ -68,13 +68,13 @@ export default async function ({
|
||||
active_data: newTableSchema.updateData ? 1 : 0,
|
||||
};
|
||||
|
||||
const existingTable = await varDatabaseDbHandler({
|
||||
queryString: `SELECT * FROM ${targetDatabase}.${targetTableName} WHERE db_id = ? AND table_slug = ?`,
|
||||
queryValuesArray: [
|
||||
const existingTable = (await dbHandler({
|
||||
query: `SELECT * FROM ${targetDatabase}.${targetTableName} WHERE db_id = ? AND table_slug = ?`,
|
||||
values: [
|
||||
String(recordedDbEntry.id),
|
||||
String(newTableSchema.tableName),
|
||||
],
|
||||
});
|
||||
})) as any;
|
||||
|
||||
const table: DSQL_DATASQUIREL_USER_DATABASE_TABLES = existingTable?.[0];
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import varDatabaseDbHandler from "./varDatabaseDbHandler";
|
||||
import generateColumnDescription from "./generateColumnDescription";
|
||||
import supplementTable from "./supplementTable";
|
||||
import { DSQL_FieldSchemaType, DSQL_TableSchemaType } from "../../types";
|
||||
import { DSQL_DATASQUIREL_USER_DATABASES } from "../../types/dsql";
|
||||
import handleTableForeignKey from "./handle-table-foreign-key";
|
||||
import createTableHandleTableRecord from "./create-table-handle-table-record";
|
||||
import dbHandler from "../../functions/backend/dbHandler";
|
||||
|
||||
type Param = {
|
||||
dbFullName: string;
|
||||
@@ -68,8 +68,8 @@ export default async function createTable({
|
||||
|
||||
const createTableQuery = createTableQueryArray.join("\n");
|
||||
|
||||
const newTable = await varDatabaseDbHandler({
|
||||
queryString: createTableQuery,
|
||||
const newTable = await dbHandler({
|
||||
query: createTableQuery,
|
||||
});
|
||||
|
||||
for (let i = 0; i < finalTable.length; i++) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import grabSQLKeyName from "../../utils/grab-sql-key-name";
|
||||
import varDatabaseDbHandler from "./varDatabaseDbHandler";
|
||||
import dbHandler from "../../functions/backend/dbHandler";
|
||||
|
||||
type Param = {
|
||||
dbFullName: string;
|
||||
@@ -29,11 +29,11 @@ export default async function dropAllForeignKeys({
|
||||
// });
|
||||
// }
|
||||
|
||||
const foreignKeys = await varDatabaseDbHandler({
|
||||
queryString: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\` WHERE Key_name LIKE '${grabSQLKeyName(
|
||||
const foreignKeys = (await dbHandler({
|
||||
query: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\` WHERE Key_name LIKE '${grabSQLKeyName(
|
||||
{ type: "foreign_key" }
|
||||
)}%'`,
|
||||
});
|
||||
})) as any;
|
||||
|
||||
for (const fk of foreignKeys) {
|
||||
if (
|
||||
@@ -41,8 +41,8 @@ export default async function dropAllForeignKeys({
|
||||
new RegExp(grabSQLKeyName({ type: "foreign_key" }))
|
||||
)
|
||||
) {
|
||||
await varDatabaseDbHandler({
|
||||
queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${fk.Key_name}\`
|
||||
await dbHandler({
|
||||
query: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${fk.Key_name}\`
|
||||
`,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import varDatabaseDbHandler from "./varDatabaseDbHandler";
|
||||
import { DSQL_ForeignKeyType } from "../../types";
|
||||
import dbHandler from "../../functions/backend/dbHandler";
|
||||
|
||||
type Param = {
|
||||
dbFullName: string;
|
||||
@@ -41,9 +41,9 @@ export default async function handleTableForeignKey({
|
||||
|
||||
// let finalQueryString = `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` ${foreinKeyText}`;
|
||||
|
||||
const addForeignKey = await varDatabaseDbHandler({
|
||||
queryString: finalQueryString,
|
||||
});
|
||||
const addForeignKey = (await dbHandler({
|
||||
query: finalQueryString,
|
||||
})) as any;
|
||||
|
||||
if (!addForeignKey?.serverStatus) {
|
||||
errorLogs?.push(addForeignKey);
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
import dbHandler from "../../functions/backend/dbHandler";
|
||||
|
||||
export default async function noDatabaseDbHandler(
|
||||
queryString: string
|
||||
): Promise<any> {
|
||||
let results;
|
||||
|
||||
try {
|
||||
results = await dbHandler({ query: queryString });
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(`No DB Handler Error`, error as Error);
|
||||
}
|
||||
|
||||
if (results) {
|
||||
return results;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,3 @@
|
||||
import varDatabaseDbHandler from "./varDatabaseDbHandler";
|
||||
|
||||
import generateColumnDescription from "./generateColumnDescription";
|
||||
import {
|
||||
DSQL_DatabaseSchemaType,
|
||||
@@ -19,6 +17,7 @@ import handleIndexescreateDbFromSchema from "../createDbFromSchema/handle-indexe
|
||||
import _ from "lodash";
|
||||
import { writeUpdatedDbSchema } from "../createDbFromSchema/grab-required-database-schemas";
|
||||
import normalizeText from "../../utils/normalize-text";
|
||||
import dbHandler from "../../functions/backend/dbHandler";
|
||||
|
||||
type Param = {
|
||||
dbFullName: string;
|
||||
@@ -105,30 +104,31 @@ export default async function updateTable({
|
||||
* @description Iterate through each table index(if available)
|
||||
* and perform operations
|
||||
*/
|
||||
const allExistingIndexes: DSQL_MYSQL_SHOW_INDEXES_Type[] =
|
||||
await varDatabaseDbHandler({
|
||||
queryString: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\` WHERE Index_comment LIKE '%schema_index%'`,
|
||||
});
|
||||
const allExistingIndexes = (await dbHandler({
|
||||
query: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\` WHERE Index_comment LIKE '%schema_index%'`,
|
||||
})) as DSQL_MYSQL_SHOW_INDEXES_Type[] | null;
|
||||
|
||||
for (let f = 0; f < allExistingIndexes.length; f++) {
|
||||
const { Key_name } = allExistingIndexes[f];
|
||||
if (allExistingIndexes) {
|
||||
for (let f = 0; f < allExistingIndexes.length; f++) {
|
||||
const { Key_name } = allExistingIndexes[f];
|
||||
|
||||
try {
|
||||
const existingKeyInSchema = tableIndexes?.find(
|
||||
(indexObject) => indexObject.alias === Key_name
|
||||
);
|
||||
if (!existingKeyInSchema)
|
||||
throw new Error(
|
||||
`This Index(${Key_name}) Has been Deleted!`
|
||||
try {
|
||||
const existingKeyInSchema = tableIndexes?.find(
|
||||
(indexObject) => indexObject.alias === Key_name
|
||||
);
|
||||
} catch (error) {
|
||||
/**
|
||||
* @description Drop Index: This happens when the MYSQL index is not
|
||||
* present in the datasquirel DB schema
|
||||
*/
|
||||
await varDatabaseDbHandler({
|
||||
queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${Key_name}\``,
|
||||
});
|
||||
if (!existingKeyInSchema)
|
||||
throw new Error(
|
||||
`This Index(${Key_name}) Has been Deleted!`
|
||||
);
|
||||
} catch (error) {
|
||||
/**
|
||||
* @description Drop Index: This happens when the MYSQL index is not
|
||||
* present in the datasquirel DB schema
|
||||
*/
|
||||
await dbHandler({
|
||||
query: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${Key_name}\``,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,10 +152,9 @@ export default async function updateTable({
|
||||
* @description Iterate through each datasquirel schema
|
||||
* table index(if available), and perform operations
|
||||
*/
|
||||
const allForeignKeys: DSQL_MYSQL_FOREIGN_KEYS_Type[] | null =
|
||||
await varDatabaseDbHandler({
|
||||
queryString: `SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = '${dbFullName}' AND TABLE_NAME='${tableName}' AND CONSTRAINT_TYPE='FOREIGN KEY'`,
|
||||
});
|
||||
const allForeignKeys = (await dbHandler({
|
||||
query: `SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = '${dbFullName}' AND TABLE_NAME='${tableName}' AND CONSTRAINT_TYPE='FOREIGN KEY'`,
|
||||
})) as DSQL_MYSQL_FOREIGN_KEYS_Type[] | null;
|
||||
|
||||
if (allForeignKeys) {
|
||||
for (let c = 0; c < allForeignKeys.length; c++) {
|
||||
@@ -170,8 +169,8 @@ export default async function updateTable({
|
||||
* @description Drop all foreign Keys to avoid MYSQL errors when adding/updating
|
||||
* Foreign keys
|
||||
*/
|
||||
const dropForeignKey = await varDatabaseDbHandler({
|
||||
queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP FOREIGN KEY \`${CONSTRAINT_NAME}\``,
|
||||
await dbHandler({
|
||||
query: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP FOREIGN KEY \`${CONSTRAINT_NAME}\``,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -182,19 +181,17 @@ export default async function updateTable({
|
||||
* @description Find all existing unique field constraints
|
||||
* and remove them
|
||||
*/
|
||||
const allUniqueConstraints: DSQL_MYSQL_FOREIGN_KEYS_Type[] | null =
|
||||
await varDatabaseDbHandler({
|
||||
queryString:
|
||||
normalizeText(`SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS \
|
||||
const allUniqueConstraints = (await dbHandler({
|
||||
query: normalizeText(`SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS \
|
||||
WHERE CONSTRAINT_SCHEMA = '${dbFullName}' AND TABLE_NAME='${tableName}' AND \
|
||||
CONSTRAINT_TYPE='UNIQUE'`),
|
||||
});
|
||||
})) as DSQL_MYSQL_FOREIGN_KEYS_Type[] | null;
|
||||
|
||||
if (allUniqueConstraints) {
|
||||
for (let c = 0; c < allUniqueConstraints.length; c++) {
|
||||
const { CONSTRAINT_NAME } = allUniqueConstraints[c];
|
||||
const dropUniqueConstraint = await varDatabaseDbHandler({
|
||||
queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${CONSTRAINT_NAME}\``,
|
||||
await dbHandler({
|
||||
query: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${CONSTRAINT_NAME}\``,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -205,9 +202,9 @@ export default async function updateTable({
|
||||
* @description Now handle all fields/columns
|
||||
*/
|
||||
let allExistingColumns: DSQL_MYSQL_SHOW_COLUMNS_Type[] =
|
||||
await varDatabaseDbHandler({
|
||||
queryString: `SHOW COLUMNS FROM \`${dbFullName}\`.\`${tableName}\``,
|
||||
});
|
||||
(await dbHandler({
|
||||
query: `SHOW COLUMNS FROM \`${dbFullName}\`.\`${tableName}\``,
|
||||
})) as DSQL_MYSQL_SHOW_COLUMNS_Type[];
|
||||
|
||||
/**
|
||||
* @type {string[]}
|
||||
@@ -239,8 +236,8 @@ export default async function updateTable({
|
||||
if (existingEntry.updatedField && existingEntry.fieldName) {
|
||||
updatedColumnsArray.push(existingEntry.fieldName);
|
||||
|
||||
const renameColumn = await varDatabaseDbHandler({
|
||||
queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` RENAME COLUMN \`${existingEntry.originName}\` TO \`${existingEntry.fieldName}\``,
|
||||
await dbHandler({
|
||||
query: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` RENAME COLUMN \`${existingEntry.originName}\` TO \`${existingEntry.fieldName}\``,
|
||||
});
|
||||
|
||||
console.log(
|
||||
@@ -284,9 +281,9 @@ export default async function updateTable({
|
||||
});
|
||||
}
|
||||
|
||||
allExistingColumns = await varDatabaseDbHandler({
|
||||
queryString: `SHOW COLUMNS FROM \`${dbFullName}\`.\`${tableName}\``,
|
||||
});
|
||||
allExistingColumns = (await dbHandler({
|
||||
query: `SHOW COLUMNS FROM \`${dbFullName}\`.\`${tableName}\``,
|
||||
})) as DSQL_MYSQL_SHOW_COLUMNS_Type[];
|
||||
} catch (error: any) {
|
||||
console.log("Update table error =>", error.message);
|
||||
}
|
||||
@@ -300,8 +297,8 @@ export default async function updateTable({
|
||||
|
||||
////////////////////////////////////////
|
||||
} else {
|
||||
await varDatabaseDbHandler({
|
||||
queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP COLUMN \`${Field}\``,
|
||||
await dbHandler({
|
||||
query: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP COLUMN \`${Field}\``,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -386,8 +383,8 @@ export default async function updateTable({
|
||||
* Alter directives like "ADD COLUMN" or "MODIFY COLUMN"
|
||||
*/
|
||||
if (updateTableQueryArray.length > 1) {
|
||||
const updateTable = await varDatabaseDbHandler({
|
||||
queryString: updateTableQuery,
|
||||
const updateTable = await dbHandler({
|
||||
query: updateTableQuery,
|
||||
});
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
import dbHandler from "../../functions/backend/dbHandler";
|
||||
|
||||
type Param = {
|
||||
queryString: string;
|
||||
queryValuesArray?: string[];
|
||||
};
|
||||
|
||||
/**
|
||||
* # DB handler for specific database
|
||||
*/
|
||||
export default async function varDatabaseDbHandler({
|
||||
queryString,
|
||||
queryValuesArray,
|
||||
}: Param): Promise<any> {
|
||||
/**
|
||||
* Declare variables
|
||||
*
|
||||
* @description Declare "results" variable
|
||||
*/
|
||||
let results;
|
||||
|
||||
/**
|
||||
* Fetch from db
|
||||
*
|
||||
* @description Fetch data from db if no cache
|
||||
*/
|
||||
try {
|
||||
if (
|
||||
queryString &&
|
||||
queryValuesArray &&
|
||||
Array.isArray(queryValuesArray) &&
|
||||
queryValuesArray[0]
|
||||
) {
|
||||
results = await dbHandler({
|
||||
query: queryString,
|
||||
values: queryValuesArray,
|
||||
});
|
||||
} else {
|
||||
results = await dbHandler({
|
||||
query: queryString,
|
||||
});
|
||||
}
|
||||
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
} catch (/** @type {any} */ error: any) {
|
||||
console.log("Shell Vardb Error =>", error.message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return results
|
||||
*
|
||||
* @description Return results add to cache if "req" param is passed
|
||||
*/
|
||||
return results;
|
||||
}
|
||||
+100
-99
@@ -1,24 +1,24 @@
|
||||
export const DsqlTables = [
|
||||
"users",
|
||||
"mariadb_users",
|
||||
"mariadb_user_databases",
|
||||
"mariadb_user_tables",
|
||||
"mariadb_user_privileges",
|
||||
"api_keys",
|
||||
"api_keys_scoped_resources",
|
||||
"invitations",
|
||||
"delegated_resources",
|
||||
"user_databases",
|
||||
"user_database_tables",
|
||||
"user_media",
|
||||
"user_private_folders",
|
||||
"delegated_users",
|
||||
"delegated_resources",
|
||||
"mariadb_user_privileges",
|
||||
"unsubscribes",
|
||||
"notifications",
|
||||
"deleted_api_keys",
|
||||
"servers",
|
||||
"process_queue",
|
||||
"backups",
|
||||
"mariadb_users",
|
||||
"mariadb_user_databases",
|
||||
"mariadb_user_tables",
|
||||
] as const
|
||||
|
||||
export type DSQL_DATASQUIREL_USERS = {
|
||||
@@ -51,79 +51,6 @@ export type DSQL_DATASQUIREL_USERS = {
|
||||
date_updated_timestamp?: string;
|
||||
}
|
||||
|
||||
export type DSQL_DATASQUIREL_MARIADB_USERS = {
|
||||
id?: number;
|
||||
uuid?: string;
|
||||
user_id?: number;
|
||||
username?: string;
|
||||
host?: string;
|
||||
password?: string;
|
||||
primary?: number;
|
||||
all_databases?: 0 | 1;
|
||||
all_grants?: 0 | 1;
|
||||
date_created?: string;
|
||||
date_created_code?: number;
|
||||
date_created_timestamp?: string;
|
||||
date_updated?: string;
|
||||
date_updated_code?: number;
|
||||
date_updated_timestamp?: string;
|
||||
}
|
||||
|
||||
export type DSQL_DATASQUIREL_MARIADB_USER_DATABASES = {
|
||||
id?: number;
|
||||
uuid?: string;
|
||||
user_id?: number;
|
||||
mariadb_user_id?: number;
|
||||
db_id?: number;
|
||||
db_schema_id?: number;
|
||||
db_slug?: string;
|
||||
all_tables?: 0 | 1;
|
||||
all_privileges?: 0 | 1;
|
||||
date_created?: string;
|
||||
date_created_code?: number;
|
||||
date_created_timestamp?: string;
|
||||
date_updated?: string;
|
||||
date_updated_code?: number;
|
||||
date_updated_timestamp?: string;
|
||||
}
|
||||
|
||||
export type DSQL_DATASQUIREL_MARIADB_USER_TABLES = {
|
||||
id?: number;
|
||||
uuid?: string;
|
||||
user_id?: number;
|
||||
mariadb_user_id?: number;
|
||||
db_id?: number;
|
||||
db_schema_id?: number;
|
||||
db_slug?: string;
|
||||
table_schema_id?: number;
|
||||
table_slug?: string;
|
||||
all_fields?: 0 | 1;
|
||||
all_privileges?: 0 | 1;
|
||||
date_created?: string;
|
||||
date_created_code?: number;
|
||||
date_created_timestamp?: string;
|
||||
date_updated?: string;
|
||||
date_updated_code?: number;
|
||||
date_updated_timestamp?: string;
|
||||
}
|
||||
|
||||
export type DSQL_DATASQUIREL_MARIADB_USER_PRIVILEGES = {
|
||||
id?: number;
|
||||
uuid?: string;
|
||||
user_id?: number;
|
||||
mariadb_user_id?: number;
|
||||
db_id?: number;
|
||||
db_schema_id?: number;
|
||||
db_slug?: string;
|
||||
privilege?: "ALTER" | "ALTER ROUTINE" | "CREATE" | "CREATE ROUTINE" | "CREATE TEMPORARY TABLES" | "CREATE VIEW" | "DELETE" | "DROP" | "EVENT" | "EXECUTE" | "FILE" | "INDEX" | "INSERT" | "LOCK TABLES" | "PROCESS" | "REFERENCES" | "RELOAD" | "SELECT" | "SHOW VIEW" | "SUPER" | "TRIGGER" | "UPDATE" | "USAGE";
|
||||
date_created?: string;
|
||||
date_created_code?: number;
|
||||
date_created_timestamp?: string;
|
||||
date_updated?: string;
|
||||
date_updated_code?: number;
|
||||
date_updated_timestamp?: string;
|
||||
}
|
||||
|
||||
export type DSQL_DATASQUIREL_API_KEYS = {
|
||||
id?: number;
|
||||
uuid?: string;
|
||||
@@ -180,27 +107,6 @@ export type DSQL_DATASQUIREL_INVITATIONS = {
|
||||
date_updated_timestamp?: string;
|
||||
}
|
||||
|
||||
export type DSQL_DATASQUIREL_DELEGATED_RESOURCES = {
|
||||
id?: number;
|
||||
uuid?: string;
|
||||
delegated_users_id?: number;
|
||||
user_id?: number;
|
||||
delegated_user_id?: number;
|
||||
db_id?: number;
|
||||
db_schema_id?: number;
|
||||
db_slug?: string;
|
||||
table_schema_id?: number;
|
||||
table_slug?: string;
|
||||
permission?: "read" | "write" | "edit" | "delete";
|
||||
all_tables?: 0 | 1;
|
||||
date_created?: string;
|
||||
date_created_code?: number;
|
||||
date_created_timestamp?: string;
|
||||
date_updated?: string;
|
||||
date_updated_code?: number;
|
||||
date_updated_timestamp?: string;
|
||||
}
|
||||
|
||||
export type DSQL_DATASQUIREL_USER_DATABASES = {
|
||||
id?: number;
|
||||
uuid?: string;
|
||||
@@ -257,6 +163,7 @@ export type DSQL_DATASQUIREL_USER_MEDIA = {
|
||||
uuid?: string;
|
||||
user_id?: number;
|
||||
media_name?: string;
|
||||
alias?: string;
|
||||
folder?: string;
|
||||
media_url?: string;
|
||||
media_thumbnail_url?: string;
|
||||
@@ -305,6 +212,44 @@ export type DSQL_DATASQUIREL_DELEGATED_USERS = {
|
||||
date_updated_timestamp?: string;
|
||||
}
|
||||
|
||||
export type DSQL_DATASQUIREL_DELEGATED_RESOURCES = {
|
||||
id?: number;
|
||||
uuid?: string;
|
||||
delegated_users_id?: number;
|
||||
user_id?: number;
|
||||
delegated_user_id?: number;
|
||||
db_id?: number;
|
||||
db_schema_id?: number;
|
||||
db_slug?: string;
|
||||
table_schema_id?: number;
|
||||
table_slug?: string;
|
||||
permission?: "read" | "write" | "edit" | "delete";
|
||||
all_tables?: 0 | 1;
|
||||
date_created?: string;
|
||||
date_created_code?: number;
|
||||
date_created_timestamp?: string;
|
||||
date_updated?: string;
|
||||
date_updated_code?: number;
|
||||
date_updated_timestamp?: string;
|
||||
}
|
||||
|
||||
export type DSQL_DATASQUIREL_MARIADB_USER_PRIVILEGES = {
|
||||
id?: number;
|
||||
uuid?: string;
|
||||
user_id?: number;
|
||||
mariadb_user_id?: number;
|
||||
db_id?: number;
|
||||
db_schema_id?: number;
|
||||
db_slug?: string;
|
||||
privilege?: "ALTER" | "ALTER ROUTINE" | "CREATE" | "CREATE ROUTINE" | "CREATE TEMPORARY TABLES" | "CREATE VIEW" | "DELETE" | "DROP" | "EVENT" | "EXECUTE" | "FILE" | "INDEX" | "INSERT" | "LOCK TABLES" | "PROCESS" | "REFERENCES" | "RELOAD" | "SELECT" | "SHOW VIEW" | "SUPER" | "TRIGGER" | "UPDATE" | "USAGE";
|
||||
date_created?: string;
|
||||
date_created_code?: number;
|
||||
date_created_timestamp?: string;
|
||||
date_updated?: string;
|
||||
date_updated_code?: number;
|
||||
date_updated_timestamp?: string;
|
||||
}
|
||||
|
||||
export type DSQL_DATASQUIREL_UNSUBSCRIBES = {
|
||||
id?: number;
|
||||
uuid?: string;
|
||||
@@ -391,4 +336,60 @@ export type DSQL_DATASQUIREL_BACKUPS = {
|
||||
date_updated?: string;
|
||||
date_updated_code?: number;
|
||||
date_updated_timestamp?: string;
|
||||
}
|
||||
|
||||
export type DSQL_DATASQUIREL_MARIADB_USERS = {
|
||||
id?: number;
|
||||
uuid?: string;
|
||||
user_id?: number;
|
||||
username?: string;
|
||||
host?: string;
|
||||
password?: string;
|
||||
primary?: number;
|
||||
all_databases?: 0 | 1;
|
||||
all_grants?: 0 | 1;
|
||||
date_created?: string;
|
||||
date_created_code?: number;
|
||||
date_created_timestamp?: string;
|
||||
date_updated?: string;
|
||||
date_updated_code?: number;
|
||||
date_updated_timestamp?: string;
|
||||
}
|
||||
|
||||
export type DSQL_DATASQUIREL_MARIADB_USER_DATABASES = {
|
||||
id?: number;
|
||||
uuid?: string;
|
||||
user_id?: number;
|
||||
mariadb_user_id?: number;
|
||||
db_id?: number;
|
||||
db_schema_id?: number;
|
||||
db_slug?: string;
|
||||
all_tables?: 0 | 1;
|
||||
all_privileges?: 0 | 1;
|
||||
date_created?: string;
|
||||
date_created_code?: number;
|
||||
date_created_timestamp?: string;
|
||||
date_updated?: string;
|
||||
date_updated_code?: number;
|
||||
date_updated_timestamp?: string;
|
||||
}
|
||||
|
||||
export type DSQL_DATASQUIREL_MARIADB_USER_TABLES = {
|
||||
id?: number;
|
||||
uuid?: string;
|
||||
user_id?: number;
|
||||
mariadb_user_id?: number;
|
||||
db_id?: number;
|
||||
db_schema_id?: number;
|
||||
db_slug?: string;
|
||||
table_schema_id?: number;
|
||||
table_slug?: string;
|
||||
all_fields?: 0 | 1;
|
||||
all_privileges?: 0 | 1;
|
||||
date_created?: string;
|
||||
date_created_code?: number;
|
||||
date_created_timestamp?: string;
|
||||
date_updated?: string;
|
||||
date_updated_code?: number;
|
||||
date_updated_timestamp?: string;
|
||||
}
|
||||
@@ -14,6 +14,7 @@ import type {
|
||||
DSQL_DATASQUIREL_USER_MEDIA,
|
||||
DSQL_DATASQUIREL_USER_PRIVATE_FOLDERS,
|
||||
DSQL_DATASQUIREL_USERS,
|
||||
DsqlTables,
|
||||
} from "./dsql";
|
||||
|
||||
import type { Editor } from "tinymce";
|
||||
@@ -1139,6 +1140,7 @@ export type APICreateUserFunctionParams = {
|
||||
payload: any;
|
||||
database: string;
|
||||
userId?: string | number;
|
||||
verify?: boolean;
|
||||
};
|
||||
|
||||
export type APICreateUserFunction = (
|
||||
@@ -1588,6 +1590,8 @@ export type PagePropsType = {
|
||||
suDatabase?: SQLShowDatabaseObject | null;
|
||||
isSuperUserPage?: boolean;
|
||||
appVersion?: (typeof AppVersions)[number];
|
||||
isMailAvailable?: boolean;
|
||||
websocketURL?: string;
|
||||
};
|
||||
|
||||
export type APIResponseObject<T extends any = any> = {
|
||||
@@ -1771,16 +1775,17 @@ export type AppRefObject = {
|
||||
};
|
||||
|
||||
export type DsqlAppData = {
|
||||
DSQL_REMOTE_SQL_HOST?: string;
|
||||
DSQL_SU_USER_ID?: string;
|
||||
DSQL_HOST_ENV?: string;
|
||||
DSQL_HOST?: string;
|
||||
DSQL_STATIC_HOST?: string;
|
||||
DSQL_GOOGLE_CLIENT_ID?: string;
|
||||
DSQL_TINY_MCE_API_KEY?: string;
|
||||
DSQL_WEBSOCKET_URL?: string;
|
||||
DSQL_FACEBOOK_APP_ID?: string;
|
||||
DSQL_GITHUB_ID?: string;
|
||||
DSQL_REMOTE_SQL_HOST?: string | null;
|
||||
DSQL_SU_USER_ID?: string | null;
|
||||
DSQL_HOST_ENV?: string | null;
|
||||
DSQL_HOST?: string | null;
|
||||
DSQL_STATIC_HOST?: string | null;
|
||||
DSQL_GOOGLE_CLIENT_ID?: string | null;
|
||||
DSQL_TINY_MCE_API_KEY?: string | null;
|
||||
DSQL_WEBSOCKET_HOST?: string | null;
|
||||
DSQL_FACEBOOK_APP_ID?: string | null;
|
||||
DSQL_GITHUB_ID?: string | null;
|
||||
DSQL_HOST_MACHINE_IP?: string | null;
|
||||
};
|
||||
|
||||
export const MediaTypes = ["image", "file", "video"] as const;
|
||||
@@ -1809,10 +1814,15 @@ export const FileMimeTypes = [
|
||||
"xlsx",
|
||||
"txt",
|
||||
"zip",
|
||||
"xz",
|
||||
"tar.xz",
|
||||
"xz",
|
||||
"yaml",
|
||||
"yml",
|
||||
"sh",
|
||||
"jsx",
|
||||
"js",
|
||||
"tsx",
|
||||
"ts",
|
||||
] as const;
|
||||
|
||||
export const VideoMimeTypes = ["mp4", "wav"] as const;
|
||||
@@ -2153,7 +2163,7 @@ export type SiteConfigMaxscale = {
|
||||
admin_port: number;
|
||||
};
|
||||
|
||||
export const APIParadigms = ["crud", "media", "sql"] as const;
|
||||
export const APIParadigms = ["crud", "media", "sql", "schema"] as const;
|
||||
|
||||
export const AppVersions = [
|
||||
{
|
||||
@@ -2246,8 +2256,8 @@ export const EnvKeys = [
|
||||
"DSQL_WEB_APP_FAIL_COUNTS",
|
||||
"NODE_ARCH",
|
||||
"DSQL_WEBSOCKET_PORT",
|
||||
"DSQL_WEBSOCKET_URL",
|
||||
"NEXT_PUBLIC_DSQL_WEBSOCKET_URL",
|
||||
"DSQL_WEBSOCKET_HOST",
|
||||
"NEXT_PUBLIC_DSQL_WEBSOCKET_HOST",
|
||||
"S3_ACCESS_KEY_ID",
|
||||
"S3_SECRET_ACCESS",
|
||||
"DSQL_ADDITIONAL_MARIADB_SERVERS",
|
||||
@@ -2291,3 +2301,21 @@ export type AddMediaAPIBody = {
|
||||
*/
|
||||
useDefault?: boolean;
|
||||
};
|
||||
|
||||
export const TargetMediaParadigms = ["info", "preview"] as const;
|
||||
|
||||
export type TargetMediaDataType = {
|
||||
media: DSQL_DATASQUIREL_USER_MEDIA;
|
||||
paradigm: (typeof TargetMediaParadigms)[number];
|
||||
};
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
import grabDSQLConnection from "../../grab-dsql-connection";
|
||||
|
||||
/**
|
||||
* # DSQL user read-only DB handler
|
||||
* @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database
|
||||
*/
|
||||
export default async function DB_HANDLER(query: string, values?: any[]) {
|
||||
const CONNECTION = await grabDSQLConnection();
|
||||
|
||||
try {
|
||||
if (!CONNECTION)
|
||||
throw new Error("No Connection provided to DB_HANDLER function!");
|
||||
|
||||
const results = await CONNECTION.query(query, values);
|
||||
|
||||
if (Array.isArray(results)) {
|
||||
return Array.from(results);
|
||||
} else {
|
||||
return results;
|
||||
}
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(`DB_HANDLER Error`, error as Error);
|
||||
return {
|
||||
success: false,
|
||||
error: error.message,
|
||||
};
|
||||
} finally {
|
||||
await CONNECTION?.end();
|
||||
}
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
import connDbHandler from "../../db/conn-db-handler";
|
||||
import grabDSQLConnection from "../../grab-dsql-connection";
|
||||
|
||||
type Param = {
|
||||
paradigm: "Full Access" | "FA" | "Read Only";
|
||||
queryString: string;
|
||||
queryValues?: string[];
|
||||
};
|
||||
|
||||
/**
|
||||
* # DSQL user read-only DB handler
|
||||
*/
|
||||
export default async function DSQL_USER_DB_HANDLER({
|
||||
paradigm,
|
||||
queryString,
|
||||
queryValues,
|
||||
}: Param) {
|
||||
const CONNECTION =
|
||||
paradigm == "Read Only"
|
||||
? await grabDSQLConnection({ ro: true })
|
||||
: await grabDSQLConnection({ fa: true });
|
||||
|
||||
try {
|
||||
return await connDbHandler(CONNECTION, queryString, queryValues);
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(`DSQL_USER_DB_HANDLER Error`, error as Error);
|
||||
return null;
|
||||
} finally {
|
||||
await CONNECTION?.end();
|
||||
}
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
import grabDSQLConnection from "../../grab-dsql-connection";
|
||||
|
||||
/**
|
||||
* # DSQL user read-only DB handler
|
||||
*/
|
||||
export default async function LOCAL_DB_HANDLER(query: string, values?: any[]) {
|
||||
const CONNECTION = await grabDSQLConnection();
|
||||
|
||||
try {
|
||||
const results = await CONNECTION.query(query, values);
|
||||
|
||||
if (Array.isArray(results)) {
|
||||
return Array.from(results);
|
||||
} else {
|
||||
return results;
|
||||
}
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(`LOCAL_DB_HANDLER Error`, error as Error);
|
||||
return {
|
||||
success: false,
|
||||
error: error.message,
|
||||
};
|
||||
} finally {
|
||||
await CONNECTION?.end();
|
||||
}
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
import grabDSQLConnection from "../../grab-dsql-connection";
|
||||
|
||||
/**
|
||||
* # DSQL user read-only DB handler
|
||||
*/
|
||||
export default async function NO_DB_HANDLER(query: string, values?: any[]) {
|
||||
const CONNECTION = await grabDSQLConnection();
|
||||
|
||||
try {
|
||||
return new Promise((resolve, reject) => {
|
||||
CONNECTION.query(query, values)
|
||||
.then(async (results) => {
|
||||
if (Array.isArray(results)) {
|
||||
resolve(Array.from(results));
|
||||
} else {
|
||||
resolve(results);
|
||||
}
|
||||
})
|
||||
.catch(async (err) => {
|
||||
resolve({
|
||||
error: err.message,
|
||||
sql: err.sql,
|
||||
});
|
||||
})
|
||||
.finally(async () => {
|
||||
await CONNECTION?.end();
|
||||
});
|
||||
});
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(`NO_DB_HANDLER Error`, error as Error);
|
||||
return {
|
||||
success: false,
|
||||
error: error.message,
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -8,20 +8,21 @@ type Return = ConnectionConfig["ssl"] | undefined;
|
||||
* # Grab SSL
|
||||
*/
|
||||
export default function grabDbSSL(): Return {
|
||||
const { maxscaleSSLDir } = grabDirNames();
|
||||
if (!maxscaleSSLDir?.match(/./)) {
|
||||
const { maxscaleSSLCaCertFile } = grabDirNames();
|
||||
|
||||
const caFilePath = process.env.DSQL_SSL_CA_CERT || maxscaleSSLCaCertFile;
|
||||
|
||||
if (!caFilePath?.match(/./)) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const caFilePath = `${maxscaleSSLDir}/ca-cert.pem`;
|
||||
|
||||
if (!fs.existsSync(caFilePath)) {
|
||||
console.log(`${caFilePath} does not exist`);
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return {
|
||||
ca: fs.readFileSync(`${maxscaleSSLDir}/ca-cert.pem`),
|
||||
ca: fs.readFileSync(caFilePath),
|
||||
rejectUnauthorized: false,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -27,10 +27,7 @@ export default async function importMariadbDatabase({
|
||||
const finalMariadbHost = mariadbHost || process.env.DSQL_DB_HOST;
|
||||
const finalMariadbPass = mariadbPass || process.env.DSQL_DB_PASSWORD;
|
||||
|
||||
await connDbHandler(
|
||||
global.DSQL_DB_CONN,
|
||||
`CREATE DATABASE IF NOT EXISTS ${dbFullName}`
|
||||
);
|
||||
await connDbHandler(null, `CREATE DATABASE IF NOT EXISTS ${dbFullName}`);
|
||||
|
||||
const cmd = `${mysqlPath} -u ${finalMariadbUser} -h ${finalMariadbHost} -p"${finalMariadbPass}" ${dbFullName} < ${targetFilePath}`;
|
||||
|
||||
|
||||
@@ -45,11 +45,43 @@ export default function grabDirNames(param?: Param) {
|
||||
const appSSLDir = path.join(appDir, "ssl");
|
||||
const mainSSLDir = path.join(DATA_DIR, "ssl");
|
||||
|
||||
const installScriptFile = path.join(
|
||||
appDir,
|
||||
"scripts",
|
||||
"shell",
|
||||
"installation",
|
||||
"install.sh"
|
||||
);
|
||||
const updateScriptFile = path.join(
|
||||
appDir,
|
||||
"scripts",
|
||||
"shell",
|
||||
"installation",
|
||||
"update.sh"
|
||||
);
|
||||
|
||||
const installTypescriptFile = path.join(
|
||||
appDir,
|
||||
"scripts",
|
||||
"shell",
|
||||
"installation",
|
||||
"install.ts"
|
||||
);
|
||||
const updateTypescriptFile = path.join(
|
||||
appDir,
|
||||
"scripts",
|
||||
"shell",
|
||||
"installation",
|
||||
"update.ts"
|
||||
);
|
||||
|
||||
const maxscaleSSLDir = path.join(mainSSLDir, "maxscale");
|
||||
const mainDBSSLDir = path.join(mainSSLDir, "main");
|
||||
const replica1DBSSLDir = path.join(mainSSLDir, "replica-1");
|
||||
const replica2DBSSLDir = path.join(mainSSLDir, "replica-2");
|
||||
|
||||
const maxscaleSSLCaCertFile = path.join(maxscaleSSLDir, "ca-cert.pem");
|
||||
|
||||
const privateDataDir = path.join(DATA_DIR, "private");
|
||||
|
||||
/**
|
||||
@@ -158,15 +190,32 @@ export default function grabDirNames(param?: Param) {
|
||||
|
||||
let dockerComposeFile = path.join(appDir, "docker-compose.yml");
|
||||
let dockerComposeFileAlt = path.join(appDir, "docker-compose.yaml");
|
||||
const dbDockerComposeFileName = "db.docker-compose.yml";
|
||||
const dbDockerComposeFileNameAlt = "db.docker-compose.yaml";
|
||||
const dsqlDockerComposeFileName = "dsql.docker-compose.yml";
|
||||
const dsqlDockerComposeFileNameAlt = "dsql.docker-compose.yaml";
|
||||
const dsqlDbDockerComposeFileName = "dsql-db.docker-compose.yml";
|
||||
const dsqlDbDockerComposeFileNameAlt = "dsql-db.docker-compose.yaml";
|
||||
|
||||
const dsqlDockerComposeFile = path.join(appDir, dsqlDockerComposeFileName);
|
||||
const dsqlDockerComposeFileAlt = path.join(
|
||||
appDir,
|
||||
dsqlDockerComposeFileNameAlt
|
||||
);
|
||||
const dbDockerComposeFile = path.join(appDir, "db.docker-compose.yml");
|
||||
const dbDockerComposeFileAlt = path.join(appDir, "db.docker-compose.yaml");
|
||||
const dbDockerComposeFile = path.join(appDir, dbDockerComposeFileName);
|
||||
const dbDockerComposeFileAlt = path.join(
|
||||
appDir,
|
||||
dbDockerComposeFileNameAlt
|
||||
);
|
||||
const dsqlDbDockerComposeFile = path.join(
|
||||
appDir,
|
||||
dsqlDbDockerComposeFileName
|
||||
);
|
||||
const dsqlDbDockerComposeFileAlt = path.join(
|
||||
appDir,
|
||||
dsqlDbDockerComposeFileNameAlt
|
||||
);
|
||||
|
||||
const extraDockerComposeFile = path.join(
|
||||
appDir,
|
||||
"extra.docker-compose.yml"
|
||||
@@ -282,6 +331,7 @@ export default function grabDirNames(param?: Param) {
|
||||
schemasBackupDirName,
|
||||
userMainShemaJSONFilePath,
|
||||
maxscaleSSLDir,
|
||||
maxscaleSSLCaCertFile,
|
||||
mainDBSSLDir,
|
||||
replica1DBSSLDir,
|
||||
replica2DBSSLDir,
|
||||
@@ -304,5 +354,13 @@ export default function grabDirNames(param?: Param) {
|
||||
distroEnterpriseExportTarName,
|
||||
communityDistroTempDir,
|
||||
communityDistroDir,
|
||||
installScriptFile,
|
||||
updateScriptFile,
|
||||
installTypescriptFile,
|
||||
updateTypescriptFile,
|
||||
dsqlDbDockerComposeFile,
|
||||
dsqlDbDockerComposeFileAlt,
|
||||
dsqlDbDockerComposeFileName,
|
||||
dsqlDbDockerComposeFileNameAlt,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ import grabDockerResourceIPNumbers from "../../grab-docker-resource-ip-numbers";
|
||||
|
||||
export default function grabIPAddresses() {
|
||||
const globalIPPrefix = process.env.DSQL_NETWORK_IP_PREFIX || "172.72.0";
|
||||
|
||||
const {
|
||||
cron,
|
||||
db,
|
||||
@@ -19,6 +20,7 @@ export default function grabIPAddresses() {
|
||||
const maxScaleIP = `${globalIPPrefix}.${maxscale}`;
|
||||
const mainDBIP = `${globalIPPrefix}.${db}`;
|
||||
const webSocketIP = `${globalIPPrefix}.${websocket}`;
|
||||
const dbCronIP = `${globalIPPrefix}.${db_cron}`;
|
||||
const localHostIP = `${globalIPPrefix}.1`;
|
||||
|
||||
return {
|
||||
@@ -29,5 +31,6 @@ export default function grabIPAddresses() {
|
||||
localHostIP,
|
||||
globalIPPrefix,
|
||||
webSocketIP,
|
||||
dbCronIP,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -45,7 +45,6 @@ export default function parseCookies({
|
||||
|
||||
return cookieObject;
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(`Parse Cookies Error`, error as Error);
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,8 +6,6 @@ type Param = {
|
||||
export default function checkIfIsMaster({ dbContext, dbFullName }: Param) {
|
||||
return dbContext?.match(/dsql.user/i)
|
||||
? false
|
||||
: global.DSQL_USE_LOCAL
|
||||
? true
|
||||
: dbFullName && !dbFullName.match(/^datasquirel$/)
|
||||
? false
|
||||
: true;
|
||||
|
||||
@@ -33,8 +33,6 @@ export default async function dsqlCrud<
|
||||
sanitize ? sanitize({ batchData }) : batchData
|
||||
) as T[];
|
||||
|
||||
const DB_CONN = global.DSQL_READ_ONLY_DB_CONN || global.DSQL_DB_CONN;
|
||||
|
||||
switch (action) {
|
||||
case "get":
|
||||
return await dsqlCrudGet(params);
|
||||
@@ -79,7 +77,7 @@ export default async function dsqlCrud<
|
||||
});
|
||||
|
||||
const res = (await connDbHandler(
|
||||
DB_CONN,
|
||||
undefined,
|
||||
deleteQuery?.query,
|
||||
deleteQuery?.values
|
||||
)) as PostInsertReturn;
|
||||
|
||||
@@ -213,7 +213,6 @@ export default async function dsqlMethodCrud<
|
||||
}
|
||||
return result;
|
||||
} catch (error) {
|
||||
global.ERROR_CALLBACK?.(`Method Crud Error`, error as Error);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ export default async function connDbHandler<ReturnType = any>(
|
||||
/**
|
||||
* MariaDB Connection
|
||||
*/
|
||||
conn?: mariadb.Connection,
|
||||
conn?: mariadb.Connection | null,
|
||||
/**
|
||||
* String Or `ConnDBHandlerQueryObject` Array
|
||||
*/
|
||||
@@ -43,21 +43,20 @@ export default async function connDbHandler<ReturnType = any>(
|
||||
let queryErrorArray: DSQLErrorObject[] = [];
|
||||
|
||||
if (typeof query == "string") {
|
||||
const res = await finalConnection.query(trimQuery(query), values);
|
||||
const [results] = await finalConnection.query(
|
||||
trimQuery(query),
|
||||
values
|
||||
);
|
||||
|
||||
if (debug) {
|
||||
debugLog({
|
||||
log: res,
|
||||
log: results,
|
||||
addTime: true,
|
||||
label: "res",
|
||||
});
|
||||
}
|
||||
|
||||
if (Array.isArray(res)) {
|
||||
return Array.from(res);
|
||||
}
|
||||
|
||||
return res;
|
||||
return results;
|
||||
} else if (typeof query == "object") {
|
||||
const resArray = [];
|
||||
|
||||
@@ -75,25 +74,18 @@ export default async function connDbHandler<ReturnType = any>(
|
||||
queryObj.values
|
||||
);
|
||||
|
||||
const results = queryObjRes[0];
|
||||
|
||||
if (debug) {
|
||||
debugLog({
|
||||
log: queryObjRes,
|
||||
log: results,
|
||||
addTime: true,
|
||||
label: "queryObjRes",
|
||||
});
|
||||
}
|
||||
|
||||
if (Array.isArray(queryObjRes)) {
|
||||
resArray.push(Array.from(queryObjRes));
|
||||
} else {
|
||||
resArray.push(queryObjRes);
|
||||
}
|
||||
resArray.push(results);
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(
|
||||
`Connection DB Handler Query Error`,
|
||||
error as Error
|
||||
);
|
||||
|
||||
console.log("query", query);
|
||||
|
||||
resArray.push(null);
|
||||
@@ -121,8 +113,6 @@ export default async function connDbHandler<ReturnType = any>(
|
||||
return null;
|
||||
}
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(`Connection DB Handler Error`, error as Error);
|
||||
|
||||
if (debug) {
|
||||
debugLog({
|
||||
log: `Connection DB Handler Error: ${error.message}`,
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
import debugLog from "./logging/debug-log";
|
||||
import mariaDBlocalQuery from "./mariadb-local-query";
|
||||
|
||||
let checkDbRetries = 0;
|
||||
const MAX_CHECK_DB_RETRIES = 10;
|
||||
const DEFAULT_SLEEP_TIME = 3000;
|
||||
|
||||
type Params = {
|
||||
maxRetries?: number;
|
||||
sleepTime?: number;
|
||||
};
|
||||
|
||||
export default async function dockerTestDbConnection(params?: Params) {
|
||||
const maxRetries = params?.maxRetries || MAX_CHECK_DB_RETRIES;
|
||||
const sleepTime = params?.sleepTime || DEFAULT_SLEEP_TIME;
|
||||
|
||||
while (true) {
|
||||
if (checkDbRetries > maxRetries) {
|
||||
debugLog({
|
||||
log: `Max Retries for checking Database. Exiting ...`,
|
||||
addTime: true,
|
||||
label: "MaxRetries",
|
||||
});
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const checkDb = mariaDBlocalQuery(`SHOW DATABASES`);
|
||||
|
||||
const isDbReady =
|
||||
typeof checkDb == "string" &&
|
||||
Boolean(checkDb.match(/\ninformation_schema\n/));
|
||||
|
||||
if (isDbReady) {
|
||||
break;
|
||||
} else {
|
||||
checkDbRetries++;
|
||||
await Bun.sleep(sleepTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
import debugLog from "./logging/debug-log";
|
||||
import mariaDBlocalQuery from "./mariadb-local-query";
|
||||
|
||||
let checkDbRetries = 0;
|
||||
const MAX_CHECK_DB_RETRIES = 10;
|
||||
const DEFAULT_SLEEP_TIME = 3000;
|
||||
|
||||
type Params = {
|
||||
maxRetries?: number;
|
||||
sleepTime?: number;
|
||||
};
|
||||
|
||||
export default async function dockerTestMaxscaleConnection(params?: Params) {
|
||||
const maxRetries = params?.maxRetries || MAX_CHECK_DB_RETRIES;
|
||||
const sleepTime = params?.sleepTime || DEFAULT_SLEEP_TIME;
|
||||
|
||||
// while (true) {
|
||||
// if (checkDbRetries > maxRetries) {
|
||||
// debugLog({
|
||||
// log: `Max Retries for checking Database. Exiting ...`,
|
||||
// addTime: true,
|
||||
// label: "MaxRetries",
|
||||
// });
|
||||
// process.exit(1);
|
||||
// }
|
||||
|
||||
// const checkDb = mariaDBlocalQuery(`SHOW DATABASES`);
|
||||
|
||||
// const isDbReady =
|
||||
// typeof checkDb == "string" &&
|
||||
// Boolean(checkDb.match(/\ninformation_schema\n/));
|
||||
|
||||
// if (isDbReady) {
|
||||
// break;
|
||||
// } else {
|
||||
// checkDbRetries++;
|
||||
// await Bun.sleep(sleepTime);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
import { ExecOptions, execSync, ExecSyncOptions } from "child_process";
|
||||
|
||||
export default function execute(
|
||||
cmd: string | string[],
|
||||
options?: ExecSyncOptions
|
||||
): string | (string | undefined)[] | undefined {
|
||||
function runCmd(cmd: string) {
|
||||
try {
|
||||
const res = execSync(cmd, {
|
||||
encoding: "utf-8",
|
||||
...options,
|
||||
});
|
||||
|
||||
if (typeof res == "string") {
|
||||
return res.trim();
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
} catch (error: any) {
|
||||
console.log(`Execute Run Error =>`, error.message);
|
||||
console.log(`Execute CMD =>`, cmd);
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
if (typeof cmd == "string") {
|
||||
return runCmd(cmd);
|
||||
} else if (Array.isArray(cmd)) {
|
||||
let resArr: (string | undefined)[] = [];
|
||||
|
||||
for (let i = 0; i < cmd.length; i++) {
|
||||
const singleCmd = cmd[i];
|
||||
const res = runCmd(singleCmd);
|
||||
resArr.push(res);
|
||||
}
|
||||
|
||||
return resArr;
|
||||
}
|
||||
} catch (error: any) {
|
||||
console.log(`Execute Error =>`, error.message);
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user