"use strict"; (() => { var exports = {}; exports.id = 8006; exports.ids = [8006]; exports.modules = { /***/ 5082: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "ResetPasswordContext": () => (/* binding */ ResetPasswordContext), /* harmony export */ "default": () => (/* binding */ ResetPasswordPage), /* harmony export */ "getServerSideProps": () => (/* binding */ getServerSideProps) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(997); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6689); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _layouts_GeneralLayout__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6217); /* harmony import */ var _components_general_PageHeadTags__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4097); /* harmony import */ var _components_general_LoadingBlock__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(5264); /* harmony import */ var _functions_backend_userAuth__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(370); /* harmony import */ var _functions_backend_userAuth__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_functions_backend_userAuth__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _functions_frontend_fetchApi__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(6729); /* harmony import */ var _components_general_FormSuccessBlock__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2186); /* harmony import */ var _package_shared_functions_backend_decrypt__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(5304); /* harmony import */ var _package_shared_functions_backend_decrypt__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_package_shared_functions_backend_decrypt__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _functions_backend_serverError__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(2317); /* harmony import */ var _functions_backend_serverError__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_functions_backend_serverError__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(6517); /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_9__); // @ts-check /** * ============================================================================== * Imports * ============================================================================== */ //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** ****************************************************************************** */ /** @type {{ user: import("@/package-shared/types").UserType | null }} */ // @ts-ignore const init = {}; const ResetPasswordContext = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1___default().createContext(init); /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** * ============================================================================== * Main Component { Functional } * ============================================================================== * @param {Object} props - Server props * @param {string} props.email * @param {import("@/package-shared/types").UserType} props.user */ function ResetPasswordPage(props) { /** * Get Contexts * * @abstract { React.useContext } */ const { email } = props; //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * Javascript Variables * * @abstract Non hook variables and functions */ const pageTitle = "Reset Password | Datasquirel"; const pageDescription = "Set a new password"; let head = /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [ /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("title", { children: pageTitle }), /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("meta", { name: "description", content: pageDescription }), /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_components_general_PageHeadTags__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z, { pageTitle: pageTitle, pageDescription: pageDescription, pagePathname: "/" }) ] }); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * React Hooks * * @abstract { useState, useEffect, useRef, etc ... } */ const [loading, setLoading] = react__WEBPACK_IMPORTED_MODULE_1___default().useState(false); const [passwordReset, setPasswordReset] = react__WEBPACK_IMPORTED_MODULE_1___default().useState(false); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * Function Return * * @abstract Main Function Return */ return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_layouts_GeneralLayout__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z, { head: head, user: props.user, children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(ResetPasswordContext.Provider, { value: { user: props.user }, children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("main", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("section", { children: [ loading && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_components_general_LoadingBlock__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z, {}), /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", { className: "main-container flex-col items-start", children: passwordReset ? /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_components_general_FormSuccessBlock__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z, { message: "Password Updated Sucessfully. Redirecting you ..." }) : /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)((react__WEBPACK_IMPORTED_MODULE_1___default().Fragment), { children: [ /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("h1", { className: "m-0 text-4xl", children: "Reset Password" }), /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("span", { children: "Please enter new passord and confirm it" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("form", { className: "max-w-xl w-full flex flex-col items-stretch gap-4", onSubmit: (e)=>{ setLoading(true); e.preventDefault(); /** @type {HTMLFormElement} */ // @ts-ignore const formEl = e.target; const password = formEl["password"].value; const passwordConfirmationFailed = formEl["confirm-password"].classList.contains("warning"); if (password?.length < 8) { window.alert("Password must be at least 8 characters"); setTimeout(()=>{ setLoading(false); }, 500); return; } if (passwordConfirmationFailed) { window.alert("Passwords don't match"); setTimeout(()=>{ setLoading(false); }, 500); return; } (0,_functions_frontend_fetchApi__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .Z)(`/api/resetPassword?email=${email}&password=${password}`).then((res)=>{ setTimeout(()=>{ setLoading(false); }, 500); setTimeout(()=>{ window.location.href = `/logout?login=true`; }, 1000); if (res.success) { setPasswordReset(true); } }); }, children: [ /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("input", { type: "password", name: "password", id: "password", className: "w-full", placeholder: "New Password", required: true }), /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("input", { type: "password", name: "confirm-password", id: "confirm-password", className: "w-full", placeholder: "Confirm New Password", required: true, onInput: (e)=>{ let match = false; /** @type {HTMLInputElement} */ // @ts-ignore const inputEl = e.target; /** @type {HTMLFormElement} */ // @ts-ignore const form = inputEl.closest("form"); try { const password = form["password"].value; if (password.match(new RegExp(`^${lodash__WEBPACK_IMPORTED_MODULE_9___default().escapeRegExp(inputEl.value)}$`))) { inputEl.classList.remove("warning"); match = true; } else { inputEl.classList.add("warning"); } } catch (/** @type {any} */ error) { (0,_functions_frontend_fetchApi__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .Z)("/api/admin/clientError", { method: "post", body: { component: "reset-password-page-component/lines-170-177", message: error.message, user: {} } }); // @ts-ignore e.target.classList.add("warning"); } } }), /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("button", { children: "Reset Password" }) ] }) ] }) }) ] }) }) }) }); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// } /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** * ============================================================================== * Server Side Props or Static Props * ============================================================================== * @type {import("next").GetServerSideProps} */ async function getServerSideProps({ req , res , query }) { /** * User Auth * * @description User Auth */ const user = await _functions_backend_userAuth__WEBPACK_IMPORTED_MODULE_5___default()(req, res); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * User Auth * * @description User Auth */ if (!query?.token?.toString()?.match(/./)) { return { redirect: { destination: "/", permanent: false } }; } let email = null; try { const decryptedPayload = _package_shared_functions_backend_decrypt__WEBPACK_IMPORTED_MODULE_7___default()(query.token.toString()); const payloadObject = JSON.parse(decryptedPayload || ""); const hourInMilliseconds = 1000 * 60 * 60; if (Date.now() - payloadObject.dateCode > hourInMilliseconds) { return { redirect: { destination: "/", permanent: false } }; } email = payloadObject.email; } catch (/** @type {any} */ error) { _functions_backend_serverError__WEBPACK_IMPORTED_MODULE_8___default()({ component: "reset-password-page-component/getServersideProps/lines-251-260", message: error.message, user: user }); return { redirect: { destination: "/", permanent: false } }; } if (!email?.match(/./)) { return { redirect: { destination: "/", permanent: false } }; } //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * Server props return * * @description Return data fetched on the server side */ return { props: { user: user, email: email } }; //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// } /***/ }), /***/ 386: /***/ ((module) => { module.exports = require("@mui/icons-material/CottageTwoTone"); /***/ }), /***/ 5557: /***/ ((module) => { module.exports = require("@mui/icons-material/MenuBookTwoTone"); /***/ }), /***/ 6517: /***/ ((module) => { module.exports = require("lodash"); /***/ }), /***/ 2423: /***/ ((module) => { module.exports = require("lucide-react"); /***/ }), /***/ 968: /***/ ((module) => { module.exports = require("next/head"); /***/ }), /***/ 6689: /***/ ((module) => { module.exports = require("react"); /***/ }), /***/ 997: /***/ ((module) => { module.exports = require("react/jsx-runtime"); /***/ }), /***/ 2261: /***/ ((module) => { module.exports = require("serverless-mysql"); /***/ }), /***/ 4300: /***/ ((module) => { module.exports = require("buffer"); /***/ }), /***/ 6113: /***/ ((module) => { module.exports = require("crypto"); /***/ }), /***/ 7147: /***/ ((module) => { module.exports = require("fs"); /***/ }), /***/ 3685: /***/ ((module) => { module.exports = require("http"); /***/ }) }; ; // load runtime var __webpack_require__ = require("../webpack-runtime.js"); __webpack_require__.C(exports); var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) var __webpack_exports__ = __webpack_require__.X(0, [4017,8313,5264,6729,5449,913,4480,370,9360,6217,4097,2317,2186], () => (__webpack_exec__(5082))); module.exports = __webpack_exports__; })();