Updates
This commit is contained in:
parent
1bad8c5705
commit
64d473e981
6
index.d.ts
vendored
6
index.d.ts
vendored
@ -31,6 +31,8 @@ export namespace sql {
|
|||||||
export { sqlDeleteGenerator };
|
export { sqlDeleteGenerator };
|
||||||
export { trimSql as trim };
|
export { trimSql as trim };
|
||||||
}
|
}
|
||||||
|
import serializeQuery = require("./package-shared/utils/serialize-query");
|
||||||
|
import serializeCookies = require("./package-shared/utils/serialize-cookies");
|
||||||
import uploadImage = require("./utils/upload-image");
|
import uploadImage = require("./utils/upload-image");
|
||||||
import uploadFile = require("./utils/upload-file");
|
import uploadFile = require("./utils/upload-file");
|
||||||
import deleteFile = require("./utils/delete-file");
|
import deleteFile = require("./utils/delete-file");
|
||||||
@ -51,7 +53,7 @@ import sqlInsertGenerator = require("./package-shared/functions/dsql/sql/sql-ins
|
|||||||
import sqlDeleteGenerator = require("./package-shared/functions/dsql/sql/sql-delete-generator");
|
import sqlDeleteGenerator = require("./package-shared/functions/dsql/sql/sql-delete-generator");
|
||||||
import trimSql = require("./package-shared/utils/trim-sql");
|
import trimSql = require("./package-shared/utils/trim-sql");
|
||||||
export declare namespace utils {
|
export declare namespace utils {
|
||||||
namespace crypto {
|
export namespace crypto {
|
||||||
let encrypt: ({ data, encryptionKey, encryptionSalt }: {
|
let encrypt: ({ data, encryptionKey, encryptionSalt }: {
|
||||||
data: string;
|
data: string;
|
||||||
encryptionKey?: string;
|
encryptionKey?: string;
|
||||||
@ -67,5 +69,7 @@ export declare namespace utils {
|
|||||||
encryptionKey?: string;
|
encryptionKey?: string;
|
||||||
}) => string;
|
}) => string;
|
||||||
}
|
}
|
||||||
|
export { serializeQuery };
|
||||||
|
export { serializeCookies };
|
||||||
}
|
}
|
||||||
export { get, post, getSchema, datasquirelClient as client };
|
export { get, post, getSchema, datasquirelClient as client };
|
||||||
|
4
index.js
4
index.js
@ -31,6 +31,8 @@ const sqlGenerator = require("./package-shared/functions/dsql/sql/sql-generator"
|
|||||||
const sqlInsertGenerator = require("./package-shared/functions/dsql/sql/sql-insert-generator");
|
const sqlInsertGenerator = require("./package-shared/functions/dsql/sql/sql-insert-generator");
|
||||||
const sqlDeleteGenerator = require("./package-shared/functions/dsql/sql/sql-delete-generator");
|
const sqlDeleteGenerator = require("./package-shared/functions/dsql/sql/sql-delete-generator");
|
||||||
const trimSql = require("./package-shared/utils/trim-sql");
|
const trimSql = require("./package-shared/utils/trim-sql");
|
||||||
|
const serializeQuery = require("./package-shared/utils/serialize-query");
|
||||||
|
const serializeCookies = require("./package-shared/utils/serialize-cookies");
|
||||||
|
|
||||||
////////////////////////////////////////
|
////////////////////////////////////////
|
||||||
////////////////////////////////////////
|
////////////////////////////////////////
|
||||||
@ -94,6 +96,8 @@ const datasquirel = {
|
|||||||
decrypt: require("./package-shared/functions/dsql/decrypt"),
|
decrypt: require("./package-shared/functions/dsql/decrypt"),
|
||||||
hash: require("./package-shared/functions/dsql/hashPassword"),
|
hash: require("./package-shared/functions/dsql/hashPassword"),
|
||||||
},
|
},
|
||||||
|
serializeQuery,
|
||||||
|
serializeCookies,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
declare function _exports({ email, database, email_login_field, mail_domain, mail_port, sender, mail_username, mail_password, html, useLocal, response, }: {
|
declare function _exports({ email, database, email_login_field, mail_domain, mail_port, sender, mail_username, mail_password, html, useLocal, response, extraCookies, }: {
|
||||||
email: string;
|
email: string;
|
||||||
database: string;
|
database: string;
|
||||||
email_login_field?: string;
|
email_login_field?: string;
|
||||||
@ -12,6 +12,7 @@ declare function _exports({ email, database, email_login_field, mail_domain, mai
|
|||||||
response?: http.ServerResponse & {
|
response?: http.ServerResponse & {
|
||||||
[x: string]: any;
|
[x: string]: any;
|
||||||
};
|
};
|
||||||
|
extraCookies?: import("../../../../package-shared/types").CookieObject[];
|
||||||
}): Promise<import("../../../types").SendOneTimeCodeEmailResponse>;
|
}): Promise<import("../../../types").SendOneTimeCodeEmailResponse>;
|
||||||
export = _exports;
|
export = _exports;
|
||||||
import http = require("http");
|
import http = require("http");
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
// @ts-check
|
// @ts-check
|
||||||
|
|
||||||
const LOCAL_DB_HANDLER = require("../../../utils/backend/global-db/LOCAL_DB_HANDLER");
|
|
||||||
const varDatabaseDbHandler = require("../../backend/varDatabaseDbHandler");
|
const varDatabaseDbHandler = require("../../backend/varDatabaseDbHandler");
|
||||||
const nodemailer = require("nodemailer");
|
const nodemailer = require("nodemailer");
|
||||||
const http = require("http");
|
const http = require("http");
|
||||||
const getAuthCookieNames = require("../../backend/cookies/get-auth-cookie-names");
|
const getAuthCookieNames = require("../../backend/cookies/get-auth-cookie-names");
|
||||||
const encrypt = require("../../dsql/encrypt");
|
const encrypt = require("../../dsql/encrypt");
|
||||||
|
const serializeCookies = require("../../../utils/serialize-cookies");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* # Send Email Login Code
|
* # Send Email Login Code
|
||||||
@ -22,6 +22,7 @@ const encrypt = require("../../dsql/encrypt");
|
|||||||
* @param {string} param.html
|
* @param {string} param.html
|
||||||
* @param {boolean} [param.useLocal]
|
* @param {boolean} [param.useLocal]
|
||||||
* @param {http.ServerResponse & Object<string,any>} [param.response]
|
* @param {http.ServerResponse & Object<string,any>} [param.response]
|
||||||
|
* @param {import("../../../../package-shared/types").CookieObject[]} [param.extraCookies]
|
||||||
*
|
*
|
||||||
* @returns {Promise<import("../../../types").SendOneTimeCodeEmailResponse>}
|
* @returns {Promise<import("../../../types").SendOneTimeCodeEmailResponse>}
|
||||||
*/
|
*/
|
||||||
@ -37,6 +38,7 @@ module.exports = async function apiSendEmailCode({
|
|||||||
html,
|
html,
|
||||||
useLocal,
|
useLocal,
|
||||||
response,
|
response,
|
||||||
|
extraCookies,
|
||||||
}) {
|
}) {
|
||||||
if (email?.match(/ /)) {
|
if (email?.match(/ /)) {
|
||||||
return {
|
return {
|
||||||
@ -123,16 +125,39 @@ module.exports = async function apiSendEmailCode({
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (response) {
|
if (response) {
|
||||||
const keyNames = getAuthCookieNames();
|
const cookieKeyNames = getAuthCookieNames();
|
||||||
const oneTimeCodeCookieName = keyNames.oneTimeCodeName;
|
const oneTimeCodeCookieName = cookieKeyNames.oneTimeCodeName;
|
||||||
|
|
||||||
const encryptedPayload = encrypt({
|
const encryptedPayload = encrypt({
|
||||||
data: JSON.stringify(resObject),
|
data: JSON.stringify(resObject),
|
||||||
});
|
});
|
||||||
|
|
||||||
response?.setHeader("Set-Cookie", [
|
if (!encryptedPayload) {
|
||||||
`${oneTimeCodeCookieName}=${encryptedPayload};samesite=strict;path=/;HttpOnly=true;Secure=true`,
|
throw new Error(
|
||||||
]);
|
"apiSendEmailCode Error: Failed to encrypt payload"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @type {import("../../../../package-shared/types").CookieObject} */
|
||||||
|
const oneTimeCookieObject = {
|
||||||
|
name: oneTimeCodeCookieName,
|
||||||
|
value: encryptedPayload,
|
||||||
|
sameSite: "Strict",
|
||||||
|
path: "/",
|
||||||
|
httpOnly: true,
|
||||||
|
secure: true,
|
||||||
|
};
|
||||||
|
|
||||||
|
/** @type {import("../../../../package-shared/types").CookieObject[]} */
|
||||||
|
const cookiesObjectArray = extraCookies
|
||||||
|
? [...extraCookies, oneTimeCookieObject]
|
||||||
|
: [oneTimeCookieObject];
|
||||||
|
|
||||||
|
const serializedCookies = serializeCookies({
|
||||||
|
cookies: cookiesObjectArray,
|
||||||
|
});
|
||||||
|
|
||||||
|
response.setHeader("Set-Cookie", serializedCookies);
|
||||||
}
|
}
|
||||||
|
|
||||||
return resObject;
|
return resObject;
|
||||||
|
12
package-shared/types/index.d.ts
vendored
12
package-shared/types/index.d.ts
vendored
@ -1199,4 +1199,16 @@ export type SendOneTimeCodeEmailResponse = {
|
|||||||
email?: string;
|
email?: string;
|
||||||
msg?: string;
|
msg?: string;
|
||||||
};
|
};
|
||||||
|
export type CookieObject = {
|
||||||
|
name: string;
|
||||||
|
value: string;
|
||||||
|
domain?: string;
|
||||||
|
path?: string;
|
||||||
|
expires?: Date;
|
||||||
|
maxAge?: number;
|
||||||
|
secure?: boolean;
|
||||||
|
httpOnly?: boolean;
|
||||||
|
sameSite?: "Strict" | "Lax" | "None";
|
||||||
|
priority?: "Low" | "Medium" | "High";
|
||||||
|
};
|
||||||
export {};
|
export {};
|
||||||
|
@ -1421,3 +1421,16 @@ export type SendOneTimeCodeEmailResponse = {
|
|||||||
email?: string;
|
email?: string;
|
||||||
msg?: string;
|
msg?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type CookieObject = {
|
||||||
|
name: string;
|
||||||
|
value: string;
|
||||||
|
domain?: string;
|
||||||
|
path?: string;
|
||||||
|
expires?: Date;
|
||||||
|
maxAge?: number;
|
||||||
|
secure?: boolean;
|
||||||
|
httpOnly?: boolean;
|
||||||
|
sameSite?: "Strict" | "Lax" | "None";
|
||||||
|
priority?: "Low" | "Medium" | "High";
|
||||||
|
};
|
||||||
|
10
package-shared/utils/serialize-cookies.d.ts
vendored
Normal file
10
package-shared/utils/serialize-cookies.d.ts
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
export = serializeCookies;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {object} params
|
||||||
|
* @param {import("../types").CookieObject[]} params.cookies
|
||||||
|
* @returns {string[]}
|
||||||
|
*/
|
||||||
|
declare function serializeCookies({ cookies }: {
|
||||||
|
cookies: import("../types").CookieObject[];
|
||||||
|
}): string[];
|
48
package-shared/utils/serialize-cookies.js
Normal file
48
package-shared/utils/serialize-cookies.js
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
// @ts-check
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {object} params
|
||||||
|
* @param {import("../types").CookieObject[]} params.cookies
|
||||||
|
* @returns {string[]}
|
||||||
|
*/
|
||||||
|
function serializeCookies({ cookies }) {
|
||||||
|
/** @type {string[]} */
|
||||||
|
let cookiesStringsArray = [];
|
||||||
|
|
||||||
|
for (let i = 0; i < cookies.length; i++) {
|
||||||
|
const cookieObject = cookies[i];
|
||||||
|
let cookieString = `${cookieObject.name}=${cookieObject.value}`;
|
||||||
|
|
||||||
|
if (cookieObject.maxAge) {
|
||||||
|
cookieString += `;Max-Age=${cookieObject.maxAge}`;
|
||||||
|
}
|
||||||
|
if (cookieObject.path) {
|
||||||
|
cookieString += `;Path=${cookieObject.path}`;
|
||||||
|
}
|
||||||
|
if (cookieObject.domain) {
|
||||||
|
cookieString += `;Domain=${cookieObject.domain}`;
|
||||||
|
}
|
||||||
|
if (cookieObject.secure) {
|
||||||
|
cookieString += ";Secure";
|
||||||
|
}
|
||||||
|
if (cookieObject.httpOnly) {
|
||||||
|
cookieString += ";HttpOnly";
|
||||||
|
}
|
||||||
|
if (cookieObject.sameSite) {
|
||||||
|
cookieString += `;SameSite=${cookieObject.sameSite}`;
|
||||||
|
}
|
||||||
|
if (cookieObject.expires) {
|
||||||
|
cookieString += `;expires=${cookieObject.expires}`;
|
||||||
|
}
|
||||||
|
if (cookieObject.priority) {
|
||||||
|
cookieString += `;priority=${cookieObject.priority}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
cookiesStringsArray.push(cookieString);
|
||||||
|
}
|
||||||
|
|
||||||
|
return cookiesStringsArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = serializeCookies;
|
@ -1,12 +1,18 @@
|
|||||||
{
|
{
|
||||||
"name": "@moduletrace/datasquirel",
|
"name": "@moduletrace/datasquirel",
|
||||||
"version": "2.9.4",
|
"version": "2.9.5",
|
||||||
"description": "Cloud-based SQL data management tool",
|
"description": "Cloud-based SQL data management tool",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"bin": {
|
"bin": {
|
||||||
"dsql-watch": "./engine/dsql.js",
|
"dsql-watch": "./engine/dsql.js",
|
||||||
"dsql-dump": "./engine/dump.js"
|
"dsql-dump": "./engine/dump.js"
|
||||||
},
|
},
|
||||||
|
"exports": {
|
||||||
|
".": "./index.js",
|
||||||
|
"./client": {
|
||||||
|
"default": "./client/index.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"delete-ts": "find . -name \"*.d.ts\" -type f -not -path \"./node_modules/*\" -delete",
|
"delete-ts": "find . -name \"*.d.ts\" -type f -not -path \"./node_modules/*\" -delete",
|
||||||
"compile": "find . -name \"*.d.ts\" -type f -not -path \"./node_modules/*\" -delete && tsc --declaration --allowJs --emitDeclarationOnly --resolveJsonModule index.js",
|
"compile": "find . -name \"*.d.ts\" -type f -not -path \"./node_modules/*\" -delete && tsc --declaration --allowJs --emitDeclarationOnly --resolveJsonModule index.js",
|
||||||
|
10
users/send-email-code.d.ts
vendored
10
users/send-email-code.d.ts
vendored
@ -1,10 +1,4 @@
|
|||||||
export = sendEmailCode;
|
export = sendEmailCode;
|
||||||
/** ****************************************************************************** */
|
|
||||||
/** ****************************************************************************** */
|
|
||||||
/** ****************************************************************************** */
|
|
||||||
/** ****************************************************************************** */
|
|
||||||
/** ****************************************************************************** */
|
|
||||||
/** ****************************************************************************** */
|
|
||||||
/**
|
/**
|
||||||
* Send Email Code to a User
|
* Send Email Code to a User
|
||||||
* ==============================================================================
|
* ==============================================================================
|
||||||
@ -23,10 +17,11 @@ export = sendEmailCode;
|
|||||||
* @param {string} [params.sender]
|
* @param {string} [params.sender]
|
||||||
* @param {boolean} [params.user_id] - User ID
|
* @param {boolean} [params.user_id] - User ID
|
||||||
* @param {boolean} [params.useLocal]
|
* @param {boolean} [params.useLocal]
|
||||||
|
* @param {import("../package-shared/types").CookieObject[]} [params.extraCookies]
|
||||||
*
|
*
|
||||||
* @returns { Promise<import("../package-shared/types").SendOneTimeCodeEmailResponse>}
|
* @returns { Promise<import("../package-shared/types").SendOneTimeCodeEmailResponse>}
|
||||||
*/
|
*/
|
||||||
declare function sendEmailCode({ key, email, database, temp_code_field_name, mail_domain, mail_password, mail_username, mail_port, sender, user_id, useLocal, response, }: {
|
declare function sendEmailCode({ key, email, database, temp_code_field_name, mail_domain, mail_password, mail_username, mail_port, sender, user_id, useLocal, response, extraCookies, }: {
|
||||||
key?: string;
|
key?: string;
|
||||||
database?: string;
|
database?: string;
|
||||||
email: string;
|
email: string;
|
||||||
@ -41,5 +36,6 @@ declare function sendEmailCode({ key, email, database, temp_code_field_name, mai
|
|||||||
sender?: string;
|
sender?: string;
|
||||||
user_id?: boolean;
|
user_id?: boolean;
|
||||||
useLocal?: boolean;
|
useLocal?: boolean;
|
||||||
|
extraCookies?: import("../package-shared/types").CookieObject[];
|
||||||
}): Promise<import("../package-shared/types").SendOneTimeCodeEmailResponse>;
|
}): Promise<import("../package-shared/types").SendOneTimeCodeEmailResponse>;
|
||||||
import http = require("http");
|
import http = require("http");
|
||||||
|
@ -1,23 +1,11 @@
|
|||||||
// @ts-check
|
// @ts-check
|
||||||
|
|
||||||
/**
|
|
||||||
* ==============================================================================
|
|
||||||
* Imports
|
|
||||||
* ==============================================================================
|
|
||||||
*/
|
|
||||||
const http = require("http");
|
const http = require("http");
|
||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
const grabHostNames = require("../package-shared/utils/grab-host-names");
|
const grabHostNames = require("../package-shared/utils/grab-host-names");
|
||||||
const apiSendEmailCode = require("../package-shared/functions/api/users/api-send-email-code");
|
const apiSendEmailCode = require("../package-shared/functions/api/users/api-send-email-code");
|
||||||
|
|
||||||
/** ****************************************************************************** */
|
|
||||||
/** ****************************************************************************** */
|
|
||||||
/** ****************************************************************************** */
|
|
||||||
/** ****************************************************************************** */
|
|
||||||
/** ****************************************************************************** */
|
|
||||||
/** ****************************************************************************** */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send Email Code to a User
|
* Send Email Code to a User
|
||||||
* ==============================================================================
|
* ==============================================================================
|
||||||
@ -36,6 +24,7 @@ const apiSendEmailCode = require("../package-shared/functions/api/users/api-send
|
|||||||
* @param {string} [params.sender]
|
* @param {string} [params.sender]
|
||||||
* @param {boolean} [params.user_id] - User ID
|
* @param {boolean} [params.user_id] - User ID
|
||||||
* @param {boolean} [params.useLocal]
|
* @param {boolean} [params.useLocal]
|
||||||
|
* @param {import("../package-shared/types").CookieObject[]} [params.extraCookies]
|
||||||
*
|
*
|
||||||
* @returns { Promise<import("../package-shared/types").SendOneTimeCodeEmailResponse>}
|
* @returns { Promise<import("../package-shared/types").SendOneTimeCodeEmailResponse>}
|
||||||
*/
|
*/
|
||||||
@ -52,6 +41,7 @@ async function sendEmailCode({
|
|||||||
user_id,
|
user_id,
|
||||||
useLocal,
|
useLocal,
|
||||||
response,
|
response,
|
||||||
|
extraCookies,
|
||||||
}) {
|
}) {
|
||||||
const grabedHostNames = grabHostNames();
|
const grabedHostNames = grabHostNames();
|
||||||
const { host, port, scheme } = grabedHostNames;
|
const { host, port, scheme } = grabedHostNames;
|
||||||
@ -104,6 +94,7 @@ async function sendEmailCode({
|
|||||||
sender,
|
sender,
|
||||||
useLocal,
|
useLocal,
|
||||||
response,
|
response,
|
||||||
|
extraCookies,
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user