This commit is contained in:
Benjamin Toby
2024-11-06 13:06:51 +01:00
parent 06ff13c653
commit eb341a7845
276 changed files with 4197 additions and 510 deletions
+3 -3
View File
@@ -3,9 +3,9 @@
const fs = require("fs");
const decrypt = require("./decrypt");
/** @type {import("@/package-shared/types").CheckApiCredentialsFn} */
/** @type {import("../../types").CheckApiCredentialsFn} */
const grabApiCred = ({ key, database, table }) => {
if (!key) return undefined;
if (!key) return null;
try {
const allowedKeysPath = process.env.DSQL_API_KEYS_PATH;
@@ -16,7 +16,7 @@ const grabApiCred = ({ key, database, table }) => {
);
const ApiJSON = decrypt(key);
/** @type {import("@/package-shared/types").ApiKeyObject} */
/** @type {import("../../types").ApiKeyObject} */
const ApiObject = JSON.parse(ApiJSON || "");
const isApiKeyValid = fs.existsSync(
`${allowedKeysPath}/${ApiObject.sign}`
+17 -5
View File
@@ -18,6 +18,8 @@ const serverError = require("../serverError");
const addDbEntry = require("./addDbEntry");
const updateDbEntry = require("./updateDbEntry");
const deleteDbEntry = require("./deleteDbEntry");
const DB_HANDLER = require("../../../utils/backend/global-db/DB_HANDLER");
const parseDbResults = require("../parseDbResults");
/** ****************************************************************************** */
/** ****************************************************************************** */
@@ -31,8 +33,9 @@ const deleteDbEntry = require("./deleteDbEntry");
* ==============================================================================
* @param {object} params - An object containing the function parameters.
* @param {string} params.dbFullName - Database full name. Eg. "datasquire_user_2_test"
* @param {string|any} params.query - Query string or object
* @param {string | any} params.query - Query string or object
* @param {boolean} [params.readOnly] - Is this operation read only?
* @param {boolean} [params.local] - Is this operation read only?
* @param {import("../../../types").DSQL_DatabaseSchemaType} [params.dbSchema] - Database schema
* @param {string[]} [params.queryValuesArray] - An optional array of query values if "?" is used in the query string
* @param {string} [params.tableName] - Table Name
@@ -46,6 +49,7 @@ async function runQuery({
dbSchema,
queryValuesArray,
tableName,
local,
}) {
/**
* Declare variables
@@ -85,7 +89,15 @@ async function runQuery({
*/
try {
if (typeof query === "string") {
if (readOnly) {
if (local) {
const rawResults = await DB_HANDLER(query, queryValuesArray);
result = tableSchema
? parseDbResults({
unparsedResults: rawResults,
tableSchema,
})
: rawResults;
} else if (readOnly) {
result = await varReadOnlyDatabaseDbHandler({
queryString: query,
queryValuesArray,
@@ -120,7 +132,7 @@ async function runQuery({
switch (action.toLowerCase()) {
case "insert":
result = await addDbEntry({
dbContext: "Dsql User",
dbContext: local ? "Master" : "Dsql User",
paradigm: "Full Access",
dbFullName: dbFullName,
tableName: table,
@@ -139,7 +151,7 @@ async function runQuery({
case "update":
result = await updateDbEntry({
dbContext: "Dsql User",
dbContext: local ? "Master" : "Dsql User",
paradigm: "Full Access",
dbFullName: dbFullName,
tableName: table,
@@ -153,7 +165,7 @@ async function runQuery({
case "delete":
result = await deleteDbEntry({
dbContext: "Dsql User",
dbContext: local ? "Master" : "Dsql User",
paradigm: "Full Access",
dbFullName: dbFullName,
tableName: table,
+2 -1
View File
@@ -6,7 +6,8 @@ const serverError = require("./serverError");
const mysql = require("serverless-mysql");
const path = require("path");
const SSL_DIR = "/app/ssl";
const SSL_DIR =
process.env.DSQL_SSL_DIR || path.resolve(__dirname, "../../../ssl");
const connection = mysql({
config: {
+2
View File
@@ -9,6 +9,7 @@ const serverError = require("./serverError");
* @param {object} param0
* @param {string} param0.queryString
* @param {string} param0.database
* @param {boolean} [param0.local]
* @param {import("../../types").DSQL_TableSchemaType | null} [param0.tableSchema]
* @param {string[]} [param0.queryValuesArray]
* @returns
@@ -18,6 +19,7 @@ module.exports = async function fullAccessDbHandler({
database,
tableSchema,
queryValuesArray,
local,
}) {
/**
* Declare variables
+1 -1
View File
@@ -1,8 +1,8 @@
// @ts-check
const { IncomingMessage } = require("http");
const parseCookies = require("datasquirel/utils/functions/parseCookies");
const decrypt = require("./decrypt");
const parseCookies = require("../../utils/backend/parseCookies");
/**
* @async
@@ -4,7 +4,8 @@ const fs = require("fs");
const path = require("path");
const mysql = require("serverless-mysql");
const SSL_DIR = "/app/ssl";
const SSL_DIR =
process.env.DSQL_SSL_DIR || path.resolve(__dirname, "../../../../ssl");
const MASTER = mysql({
config: {
@@ -12,7 +13,9 @@ const MASTER = mysql({
user: process.env.DSQL_DB_USERNAME,
password: process.env.DSQL_DB_PASSWORD,
database: process.env.DSQL_DB_NAME,
port: process.env.DB_PORT ? Number(process.env.DB_PORT) : undefined,
port: process.env.DSQL_DB_PORT
? Number(process.env.DSQL_DB_PORT)
: undefined,
charset: "utf8mb4",
ssl: {
ca: fs.readFileSync(`${SSL_DIR}/ca-cert.pem`),
@@ -5,7 +5,8 @@ const path = require("path");
const mysql = require("serverless-mysql");
const SSL_DIR = "/app/ssl";
const SSL_DIR =
process.env.DSQL_SSL_DIR || path.resolve(__dirname, "../../../../ssl");
let DSQL_USER = mysql({
config: {
@@ -3,18 +3,10 @@
const fs = require("fs");
const path = require("path");
// const mysql = require("mysql");
// const NO_DB = mysql.createConnection({
// host: process.env.DSQL_DB_HOST,
// user: process.env.DSQL_DB_USERNAME,
// password: process.env.DSQL_DB_PASSWORD,
// charset: "utf8mb4",
// });
const mysql = require("serverless-mysql");
const SSL_DIR = "/app/ssl";
const SSL_DIR =
process.env.DSQL_SSL_DIR || path.resolve(__dirname, "../../../../ssl");
let NO_DB = mysql({
config: {
@@ -5,7 +5,8 @@ const path = require("path");
const mysql = require("serverless-mysql");
const SSL_DIR = "/app/ssl";
const SSL_DIR =
process.env.DSQL_SSL_DIR || path.resolve(__dirname, "../../../../ssl");
let NO_DB = mysql({
config: {
+60
View File
@@ -0,0 +1,60 @@
// @ts-check
/**
* ==============================================================================
* Imports
* ==============================================================================
*/
const http = require("http");
/**
* Parse request cookies
* ==============================================================================
*
* @description This function takes in a request object and returns the cookies as a JS object
*
* @async
*
* @param {object} params - main params object
* @param {http.IncomingMessage} params.request - HTTPS request object
*
* @returns {any | null}
*/
module.exports = function ({ request }) {
/**
* Check inputs
*
* @description Check inputs
*/
/** @type {string | undefined} */
const cookieString = request.headers.cookie;
if (!cookieString || typeof cookieString !== "string") {
return null;
}
/** @type {string[]} */
const cookieSplitArray = cookieString.split(";");
/** @type {*} */
let cookieObject = {};
cookieSplitArray.forEach((keyValueString) => {
const [key, value] = keyValueString.split("=");
if (key && typeof key == "string") {
cookieObject[key.replace(/^ +| +$/, "")] =
value && typeof value == "string"
? value.replace(/^ +| +$/, "")
: null;
}
});
/**
* Make https request
*
* @description make a request to datasquirel.com
*/
return cookieObject;
};