dsql-admin/dsql-app/.local_dist/server/pages/api/registerUser.js
2024-11-05 12:12:42 +01:00

410 lines
18 KiB
JavaScript

"use strict";
(() => {
var exports = {};
exports.id = 2121;
exports.ids = [2121];
exports.modules = {
/***/ 2029:
/***/ ((module) => {
module.exports = require("datasquirel/functions/hashPassword");
/***/ }),
/***/ 3785:
/***/ ((module) => {
module.exports = require("generate-password");
/***/ }),
/***/ 6517:
/***/ ((module) => {
module.exports = require("lodash");
/***/ }),
/***/ 5184:
/***/ ((module) => {
module.exports = require("nodemailer");
/***/ }),
/***/ 6109:
/***/ ((module) => {
module.exports = require("sanitize-html");
/***/ }),
/***/ 2261:
/***/ ((module) => {
module.exports = require("serverless-mysql");
/***/ }),
/***/ 4300:
/***/ ((module) => {
module.exports = require("buffer");
/***/ }),
/***/ 2081:
/***/ ((module) => {
module.exports = require("child_process");
/***/ }),
/***/ 6113:
/***/ ((module) => {
module.exports = require("crypto");
/***/ }),
/***/ 7147:
/***/ ((module) => {
module.exports = require("fs");
/***/ }),
/***/ 1017:
/***/ ((module) => {
module.exports = require("path");
/***/ }),
/***/ 6142:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ handler)
/* harmony export */ });
/* harmony import */ var _package_shared_functions_backend_encrypt__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7547);
/* harmony import */ var _package_shared_functions_backend_encrypt__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_package_shared_functions_backend_encrypt__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _functions_backend_handleNodemailer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6926);
/* harmony import */ var _functions_backend_handleNodemailer__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_functions_backend_handleNodemailer__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var datasquirel_functions_hashPassword__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2029);
/* harmony import */ var datasquirel_functions_hashPassword__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(datasquirel_functions_hashPassword__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _functions_backend_serverError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2163);
/* harmony import */ var _functions_backend_serverError__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_functions_backend_serverError__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1017);
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var child_process__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(2081);
/* harmony import */ var child_process__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(child_process__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _package_shared_functions_backend_addMariadbUser__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4294);
/* harmony import */ var _package_shared_functions_backend_addMariadbUser__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_package_shared_functions_backend_addMariadbUser__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var _package_shared_utils_backend_global_db_DB_HANDLER__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(2224);
/* harmony import */ var _package_shared_utils_backend_global_db_DB_HANDLER__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_package_shared_utils_backend_global_db_DB_HANDLER__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var _package_shared_functions_backend_db_addDbEntry__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(5338);
/* harmony import */ var _package_shared_functions_backend_db_addDbEntry__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_package_shared_functions_backend_db_addDbEntry__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var _package_shared_functions_backend_db_updateDbEntry__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(5886);
/* harmony import */ var _package_shared_functions_backend_db_updateDbEntry__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_package_shared_functions_backend_db_updateDbEntry__WEBPACK_IMPORTED_MODULE_9__);
// @ts-check
const fs = __webpack_require__(7147);
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
/** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /**
* API handler
* ==============================================================================
* @type {import("next").NextApiHandler}
*/ async function handler(req, res) {
/**
* Check method
*
* @description Check request method and return if invalid
*/ if (req.method !== "POST") return res.json({
user: null,
msg: "Registration Failed!"
});
/**
* Validate Form
*
* @description Check if request body is valid
*/ const sanitizedReqBody = req.body;
const { inviteObject } = sanitizedReqBody;
const first_name = sanitizedReqBody.first_name;
const last_name = sanitizedReqBody.last_name;
const email = sanitizedReqBody.email;
const password = sanitizedReqBody.password;
const username = sanitizedReqBody.username;
if (!email.match(/.*@.*\..*/)) return res.json({
user: null,
msg: "Invalid Email"
});
if (!first_name.match(/^[a-zA-Z]+$/) || !last_name.match(/^[a-zA-Z]+$/)) return res.json({
user: null,
msg: "Invalid Name"
});
if (password?.match(/ /)) return res.json({
user: null,
msg: "Invalid Password"
});
if (username?.match(/ /)) return res.json({
user: null,
msg: "Invalid Username"
});
/**
* Validate Form
*
* @description Check if request body is valid
*/ try {
/** ********************* Hash Password */ let hashedPassword = datasquirel_functions_hashPassword__WEBPACK_IMPORTED_MODULE_2___default()({
encryptionKey: process.env.DSQL_ENCRYPTION_PASSWORD || "",
password: password
});
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
let existingUser = await _package_shared_utils_backend_global_db_DB_HANDLER__WEBPACK_IMPORTED_MODULE_7___default()(`SELECT * FROM users WHERE email='${email}'`);
if (existingUser && existingUser[0]) return res.json({
user: null,
msg: "User Already Exists"
});
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
const newUser = await _package_shared_functions_backend_db_addDbEntry__WEBPACK_IMPORTED_MODULE_8___default()({
dbFullName: "datasquirel",
tableName: "users",
data: {
first_name,
last_name,
email,
password: hashedPassword,
username
}
});
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
// console.log(response);
if (!newUser?.insertId) return res.json({
user: null,
msg: "Adding User to Database failed"
});
/**
* Add a Mariadb User for this User
*/ await _package_shared_functions_backend_addMariadbUser__WEBPACK_IMPORTED_MODULE_6___default()({
userId: newUser.insertId
});
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
/**
* Create new Stripe customer
*
* @description Create a new stripe customer
*/ // let newStripeCustomer = await handlePayments(
// "create_customer",
// {
// email: email,
// name: first_name + " " + last_name,
// description: "Agent user",
// },
// {
// id: newUser.insertId,
// email: email,
// first_name: first_name,
// user_type: "agents",
// }
// );
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
/**
* Send email Verification
*
* @description Send verification email to newly created agent
*/ let generatedToken = _package_shared_functions_backend_encrypt__WEBPACK_IMPORTED_MODULE_0___default()(JSON.stringify({
id: newUser.insertId,
email: email,
dateCode: Date.now()
}));
_functions_backend_handleNodemailer__WEBPACK_IMPORTED_MODULE_1___default()({
to: email,
subject: "Verify Email Address",
text: "Please click the link to verify your email address",
html: fs.readFileSync("./email/send-email-verification-link.html", "utf8").replace(/{{host}}/, process.env.DSQL_HOST || "").replace(/{{token}}/, generatedToken || "")
}).then((mail)=>{
// console.log("User verification email =>", mail);
});
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
const isProduction = "production".match(/production/);
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
let userImageName = `users_${newUser.insertId}.jpg`;
let userImageTnumbnailName = `users_${newUser.insertId}_thumbnail.jpg`;
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
const STATIC_ROOT = process.env.DSQL_STATIC_SERVER_DIR;
if (!STATIC_ROOT) {
console.log("Static File ENV not Found!");
throw new Error("No Static Path");
}
/**
* Create new user folder and file
*
* @description Create new user folder and file
*/ let newUserSchemaFolderPath = `./jsonData/dbSchemas/users/user-${newUser.insertId}`;
let newUserMediaFolderPath = path__WEBPACK_IMPORTED_MODULE_4___default().join(STATIC_ROOT, `images/user-images/user-${newUser.insertId}`);
fs.mkdirSync(newUserSchemaFolderPath, {
recursive: true
});
fs.mkdirSync(newUserMediaFolderPath, {
recursive: true
});
fs.writeFileSync(`${newUserSchemaFolderPath}/main.json`, JSON.stringify([]), "utf8");
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
let imagePath = path__WEBPACK_IMPORTED_MODULE_4___default().join(STATIC_ROOT, `images/user-images/user-${newUser.insertId}/user-${newUser.insertId}-profile.jpg`);
let imageThumbnailPath = path__WEBPACK_IMPORTED_MODULE_4___default().join(STATIC_ROOT, `images/user-images/user-${newUser.insertId}/user-${newUser.insertId}-profile-thumbnail.jpg`);
let prodImageUrl = imagePath.replace(STATIC_ROOT, process.env.DSQL_STATIC_HOST || "");
let prodImageThumbnailUrl = imageThumbnailPath.replace(STATIC_ROOT, process.env.DSQL_STATIC_HOST || "");
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
fs.copyFileSync("./public/images/user_images/user-preset.png", imagePath);
fs.copyFileSync("./public/images/user_images/user-preset-thumbnail.png", imageThumbnailPath);
(0,child_process__WEBPACK_IMPORTED_MODULE_5__.execSync)(`chmod 644 ${imagePath} ${imageThumbnailPath}`);
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
const updateImages = await _package_shared_functions_backend_db_updateDbEntry__WEBPACK_IMPORTED_MODULE_9___default()({
dbFullName: "datasquirel",
tableName: "users",
identifierColumnName: "id",
identifierValue: newUser.insertId,
data: {
image: prodImageUrl,
image_thumbnail: prodImageThumbnailUrl
}
});
// await global.DB_HANDLER(`
// UPDATE
// users
// SET
// image='${isProduction ? prodImageUrl : imagePath.replace(/^\.\/public/, "")}',
// image_thumbnail='${isProduction ? prodImageThumbnailUrl : imageThumbnailPath.replace(/^\.\/public/, "")}'
// WHERE
// id='${newUser.insertId}'
// `);
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
if (inviteObject) {
const newUserUser = await _package_shared_functions_backend_db_addDbEntry__WEBPACK_IMPORTED_MODULE_8___default()({
dbFullName: "datasquirel",
tableName: "user_users",
data: {
user_id: inviteObject.invite,
invited_user_id: newUser.insertId,
database_access: inviteObject.database_access,
user_priviledge: inviteObject.priviledge,
user_type: "admin",
first_name,
last_name,
email,
username,
image: prodImageUrl,
image_thumbnail: prodImageThumbnailUrl
}
});
const inviteAccepted = await _package_shared_utils_backend_global_db_DB_HANDLER__WEBPACK_IMPORTED_MODULE_7___default()(`UPDATE invitations SET invitation_status='Accepted' WHERE inviting_user_id=? AND invited_user_email=?`, [
inviteObject.invite,
email
]);
const dbTableData = await _package_shared_utils_backend_global_db_DB_HANDLER__WEBPACK_IMPORTED_MODULE_7___default()(`SELECT db_tables_data FROM invitations WHERE inviting_user_id=? AND invited_user_email=?`, [
inviteObject.invite,
email
]);
const clearEntries = await _package_shared_utils_backend_global_db_DB_HANDLER__WEBPACK_IMPORTED_MODULE_7___default()(`DELETE FROM delegated_user_tables WHERE root_user_id=? AND delegated_user_id=?`, [
inviteObject.invite,
newUserUser.insertId
]);
if (dbTableData && dbTableData[0]) {
const dbTableEntries = dbTableData[0].db_tables_data.split("|");
for(let i = 0; i < dbTableEntries.length; i++){
const dbTableEntry = dbTableEntries[i];
const dbTableEntryArray = dbTableEntry.split("-");
const [db_slug, table_slug] = dbTableEntryArray;
const newEntry = await _package_shared_functions_backend_db_addDbEntry__WEBPACK_IMPORTED_MODULE_8___default()({
dbFullName: "datasquirel",
tableName: "delegated_user_tables",
data: {
delegated_user_id: newUserUser.insertId,
root_user_id: inviteObject.invite,
database: db_slug,
table: table_slug,
priviledge: inviteObject.priviledge
}
});
}
}
}
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
res.json(newUser);
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
} catch (/** @type {any} */ error) {
console.log(`Error in creating user => ${error.message}`);
_functions_backend_serverError__WEBPACK_IMPORTED_MODULE_3___default()({
component: "/api/registerUser/main-catch-error",
message: error.message,
user: {
first_name,
last_name,
email
}
});
res.json({
user: null
});
}
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
}
/***/ })
};
;
// load runtime
var __webpack_require__ = require("../../webpack-api-runtime.js");
__webpack_require__.C(exports);
var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
var __webpack_exports__ = __webpack_require__.X(0, [2224,2163,3017,3403,7547,5886,5338,6926,7487,4294], () => (__webpack_exec__(6142)));
module.exports = __webpack_exports__;
})();