"use strict"; exports.id = 8374; exports.ids = [8374]; exports.modules = { /***/ 8374: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { // EXPORTS __webpack_require__.d(__webpack_exports__, { "Z": () => (/* binding */ SocialLogin) }); // EXTERNAL MODULE: external "react/jsx-runtime" var jsx_runtime_ = __webpack_require__(997); // EXTERNAL MODULE: external "react" var external_react_ = __webpack_require__(6689); var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_); // EXTERNAL MODULE: ./functions/frontend/fetchApi.js var frontend_fetchApi = __webpack_require__(6729); ;// CONCATENATED MODULE: ./components/pages/login/GoogleIdentityButton.jsx /** * Imports * ============================================================================== */ /** ********************* React/Next Imports */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** * Main Component { Functional } * ============================================================================== * @param {Object} props - Props from getServerSideProps or getStaticProps * @param {import("@/package-shared/types").UserType} props.user * @param {string} [props.userType] * @param {React.Dispatch>} props.setLoading */ function GoogleIdentityButton({ user , userType , setLoading }) { /** * Get Contexts * * @abstract { React.useContext } */ //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * Javascript Variables * * @abstract Non hook variables and functions */ if (user?.logged_in_status || user?.current?.logged_in_status) return /*#__PURE__*/ jsx_runtime_.jsx((external_react_default()).Fragment, {}); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * React Hooks * * @abstract { useState, useEffect, useRef, etc ... } */ external_react_default().useEffect(()=>{ function handleCredentialResponse(response) { window.activeGooglePrompt = false; userLoginWithGoogle({ gUser: null, tokenRes: response.credential, setLoading }); } //////////////////////////////////////// google.accounts.id.initialize({ client_id: "392696781563-imb0ddojfn6m4bdokjk5v80jn546t9tq.apps.googleusercontent.com", callback: handleCredentialResponse }); //////////////////////////////////////// google.accounts.id.renderButton(document.getElementById("google-identity-button"), { theme: "outline", size: "large", logo_alignment: "center" }); //////////////////////////////////////// // if (user?.logged_in_status || document.cookie.match(/google_prompt_skipped=true/)) { // google.accounts.id.cancel(); // return; // } //////////////////////////////////////// // window.activeGooglePrompt = true; // google.accounts.id.prompt((notification) => { // console.log("getMomentType => ", notification.getMomentType()); // console.log("getDismissedReason => ", notification.getDismissedReason()); // console.log("getNotDisplayedReason => ", notification.getNotDisplayedReason()); // console.log("getSkippedReason => ", notification.getSkippedReason()); // console.log("isDismissedMoment => ", notification.isDismissedMoment()); // console.log("isDisplayMoment => ", notification.isDisplayMoment()); // console.log("isDisplayed => ", notification.isDisplayed()); // console.log("isNotDisplayed => ", notification.isNotDisplayed()); // console.log("isSkippedMoment => ", notification.isSkippedMoment()); // if (notification.isSkippedMoment()) { // document.cookie = "google_prompt_skipped=true;max-age=" + 60000 * 60 * 24 * 5; // window.activeGooglePrompt = false; // } // if (notification.isNotDisplayed()) { // window.activeGooglePrompt = false; // } // }); // also display the One Tap dialog }, []); /** * Function Return * * @abstract Main Function Return */ return /*#__PURE__*/ jsx_runtime_.jsx("div", { className: "w-full flex items-center justify-center h-[45px] overflow-hidden button outlined normal-weight small-text gray p-0", style: { padding: 0 }, children: /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", { className: "relative w-full h-full justify-center", children: [ /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", { className: "w-full h-full justify-center bg-white dark:bg-slate-800 relative z-10 pointer-events-none", style: { border: "none" }, children: [ /*#__PURE__*/ jsx_runtime_.jsx("img", { src: "/images/google.png", width: 18, height: 18, alt: "" }), /*#__PURE__*/ jsx_runtime_.jsx("span", { children: "Login With Google" }) ] }), /*#__PURE__*/ jsx_runtime_.jsx("div", { id: "google-identity-button", className: "w-full absolute justify-center top-0 left-0", style: { transform: "scale(2)" } }) ] }) }); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// } /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ function userLoginWithGoogle({ gUser , tokenRes , setLoading }) { setLoading(true); if (!tokenRes) { console.log("No Token Response received!"); return closeLoader(); } (0,frontend_fetchApi/* default */.Z)(`/api/social-login/google-auth${window.location.search}`, { method: "post", body: { token: tokenRes } }).then(async (res)=>{ if (res.success && res.user) { localStorage.setItem("csrf", res.user.csrf_k); localStorage.setItem("user", JSON.stringify(res.user)); window.location.reload(); } else { console.log(res); setLoading(false); if (res.alert) { window.alert(res.msg); } } }).catch(async (err)=>{ alert("Login Failed"); console.log("Google login fetch error => ", err); setLoading(false); }); } // EXTERNAL MODULE: ./functions/frontend/clearCaches.js var clearCaches = __webpack_require__(9137); ;// CONCATENATED MODULE: ./components/pages/login/GithubLogin.jsx // @ts-check /** * ============================================================================== * Imports * ============================================================================== */ ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// /** * ============================================================================== * Main Component { Functional } * ============================================================================== * @param {Object} props - Props from getServerSideProps or getStaticProps * @param {import("@/package-shared/types").UserType} [props.user] * @param {React.Dispatch>} props.setLoading */ function GithubLogin({ user , setLoading }) { /** * Get Contexts * * @abstract { React.useContext } */ //////////////////////////////////////////////// //////////////////////////////////////////////// //////////////////////////////////////////////// /** * Javascript Variables * * @abstract Non hook variables and functions */ if (user?.logged_in_status) return /*#__PURE__*/ jsx_runtime_.jsx((external_react_default()).Fragment, {}); //////////////////////////////////////////////// //////////////////////////////////////////////// //////////////////////////////////////////////// /** * React Hooks * * @abstract { useState, useEffect, useRef, etc ... } */ external_react_default().useEffect(()=>{ const urlQuery = window.location.search; const urlQueryParams = new URLSearchParams(urlQuery); const codeParam = urlQueryParams.get("code"); const emailParam = urlQueryParams.get("email"); if (codeParam) { setLoading(true); (0,frontend_fetchApi/* default */.Z)(`/api/social-login/github-auth?code=${codeParam}${emailParam ? "&email=" + emailParam : ""}`).then((res)=>{ if (!res?.success) { if (res.msg?.match(/Github User Email not present/i)) { const enterEmail = window.prompt(`Cannot access the email address of this github account. Please enter an email address to continue.`); if (enterEmail && enterEmail?.match(/.*@.*\..*/) && !enterEmail?.match(/ /)) { const newFetchUrl = `https://github.com/login/oauth/authorize?client_id=${"0729d312ff3108b79188"}&scope=user&redirect_uri=${"http://localhost:7070"}${window.location.pathname}?email=${enterEmail}`; window.location.assign(newFetchUrl); } } } if (res?.msg && res?.alert) { window.alert(res.msg); } if (res?.success && res?.user) { localStorage.setItem("csrf", res.user.csrf_k); localStorage.setItem("user", JSON.stringify(res.user)); (0,clearCaches/* default */.Z)().then(()=>{ window.location.reload(); }); } setTimeout(()=>{ setLoading(false); }, 1000); }).catch((error)=>{ console.log(error); setTimeout(()=>{ setLoading(false); }, 1000); }); } }, []); //////////////////////////////////////////////// //////////////////////////////////////////////// //////////////////////////////////////////////// /** * Function Return * * @abstract Main Function Return */ return /*#__PURE__*/ jsx_runtime_.jsx("div", { className: "w-full flex items-center justify-center", children: /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", { className: "button outlined gray w-full more-padding small-text normal-weight gap-6", onClick: (e)=>{ setLoading(true); const fetchUrl = `https://github.com/login/oauth/authorize?client_id=${"0729d312ff3108b79188"}&scope=user&redirect_uri=${"http://localhost:7070"}${window.location.pathname}`; console.log(fetchUrl); window.location.assign(fetchUrl); // fetch(fetchUrl, { // headers: { // "Access-Control-Allow-Origin": "*", // }, // }) // .then((res) => res.json()) // .then((data) => { // console.log(data); // setTimeout(() => { // setLoading(false); // }, 1000); // }) // .catch((error) => { // console.log(error); // setTimeout(() => { // setLoading(false); // }, 1000); // }); setTimeout(()=>{ setLoading(false); }, 1000); // fetchApi(fetchUrl).then((res) => { // console.log(res); // setTimeout(() => { // setLoading(false); // }, 1000); // }); }, children: [ /*#__PURE__*/ jsx_runtime_.jsx("img", { src: "/images/github.png", width: 18, height: 18, alt: "", className: "flex dark:hidden" }), /*#__PURE__*/ jsx_runtime_.jsx("img", { src: "/images/github-white.png", width: 18, height: 18, alt: "", className: "hidden dark:flex" }), /*#__PURE__*/ jsx_runtime_.jsx("span", { children: "Login With Github" }) ] }) }); //////////////////////////////////////////////// //////////////////////////////////////////////// //////////////////////////////////////////////// } ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ;// CONCATENATED MODULE: ./components/pages/login/FacebookSignInButton.jsx /** * ============================================================================== * Imports * ============================================================================== */ /** ********************* React/Next Imports */ /** ~ End React/Next Imports *************** */ /** ********************* Functions and Other Page Imports */ // import clearCaches from "../functions/frontend/ "; // import { closeLoader, openLoader } from "./PageLoaderBlock"; /** ~ End Functions and Other Page Imports *************** */ /** ********************* Context Providers */ /** ~ End Context Providers *************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** * Main Component { Functional } * ============================================================================== * @param {object} props - React component props object * @param {function(): void} props.setLoading - Props from getServerSideProps or getStaticProps */ function FacebookSignInButton({ setLoading }) { /** * Get Contexts * * @abstract { React.useContext } */ //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * Javascript Variables * * @abstract Non hook variables and functions */ //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * React Hooks * * @abstract { useState, useEffect, useRef, etc ... } */ let [isSignedIn, setIsSignedIn] = React.useState(false); let [refresh, setRefresh] = React.useState(0); React.useEffect(()=>{ // let reloads = localStorage.getItem("login_reloads"); // if (reloads && parseInt(reloads) >= 1) return; FB.init({ appId: "2910275882608968", cookie: true, xfbml: true, version: "v13.0" }); if (isSignedIn) return; FB.getLoginStatus((response)=>{ // console.log(response); // if (!response.authResponse) { // } else if (response.status === "connected") { // console.log("Facebook User Signed in"); setIsSignedIn(true); userLoginWithFacebook(response, setIsSignedIn, setLoading); } else { setIsSignedIn(false); } }); }, [ refresh ]); /** * Function Return * * @abstract Main Function Return */ return /*#__PURE__*/ _jsx("div", { className: "w-full", children: /*#__PURE__*/ _jsxs("div", { className: "w-full", children: [ !isSignedIn && /*#__PURE__*/ _jsxs("div", { className: "button outlined gray w-full more-padding normal-weight small-text gap-6", onClick: ()=>{ if (setLoading) setLoading(true); FB.login((res)=>{ if (res.status === "connected") { setIsSignedIn(true); userLoginWithFacebook(res, setIsSignedIn, setLoading); } else { if (setLoading) setLoading(false); } setRefresh((prev)=>prev + 1); }, { auth_type: "rerequest", scope: "email,public_profile", return_scopes: true, enable_profile_selector: true }); }, children: [ /*#__PURE__*/ _jsx("img", { src: "/images/facebook.png", width: 18, height: 18, alt: "" }), /*#__PURE__*/ _jsx("span", { children: "Login With Facebook" }) ] }), isSignedIn && /*#__PURE__*/ _jsxs("div", { className: "button outlined gray w-full pointer-events-none more-padding", onClick: ()=>{ if (setLoading) setLoading(true); FB.logout((res)=>{ // console.log(res); setIsSignedIn(false); if (setLoading) setLoading(false); }); }, children: [ /*#__PURE__*/ _jsx("img", { src: "/images/facebook.png", width: 20, alt: "" }), /*#__PURE__*/ _jsx("span", { children: "Sign Out of Facebook" }) ] }) ] }) }); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// } /** * Facebook Login Function * ============================================================================== * @param {object} fbUser - React component props object * @param {object} fbUser.authResponse - React component props object * @param {function(): void} signInDispatch - Set signin status * @param {function(): void} setLoading - Set loading function */ function userLoginWithFacebook(fbUser, signInDispatch, setLoading) { console.log("LOGGING IN WITH FB ..."); if (!fbUser.authResponse) { if (setLoading) setLoading(false); return; } FB.api("/me", { fields: "first_name,last_name,email,name,picture" }, async (response)=>{ /** * React Hooks * * @abstract { useState, useEffect, useRef, etc ... } */ let existingSocialId = await fetchApi(`/api/social-login/utils/checkSocialId?social_id=${response.id}&social_platform=facebook`); /** * React Hooks * * @abstract { useState, useEffect, useRef, etc ... } */ let finalEmail, supEmail; if (!response.email) { /** * Get Email Function * ============================================================================== * * @description get email from server */ async function getEmail() { if (existingSocialId.social_id) { let existingEmailExistingUser = await fetchApi(`/api/social-login/utils/getEmailFromSocialId?social_id=${response.id}&social_platform=facebook`); finalEmail = existingEmailExistingUser.email; return existingEmailExistingUser.email; } let userEmail = window.prompt("You have no email linked with this account: please Enter an email address to continue"); if (!userEmail) { alert("Can't create account without an email address: please provide an email address for easy contact. Thanks."); return false; } let isEmailValid = userEmail.match(/.*@.*\..*/); if (!isEmailValid) { alert("Email not valid: Please enter a valid email address"); return await getEmail(); } let existingEmail = await fetchApi(`/api/social-login/utils/checkEmail?email=${userEmail}`); if (existingEmail?.email) { alert("Email already taken: please enter another email address"); return await getEmail(); } else { supEmail = userEmail; return userEmail; } } let isEmailResolved = await getEmail(); if (isEmailResolved) { finalEmail = isEmailResolved; } else { finalEmail = null; } } else { finalEmail = response.email; } //////////////////////////////////////// if (!finalEmail) { alert("No Email Provided, Please try again"); if (setLoading) setLoading(false); return; } //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// let usernamEmail = (()=>{ if (!response.email) { return `facebook_${response.name.toLowerCase().replace(/ /g, "-")}`; } else { return `facebook_${response.email.replace(/@.*/, "")}`; } })(); let fbUserImage = `https://graph.facebook.com/${response.id}/picture?type=large`; let fbUserImageTiny = response.picture.data.url; fetch(`/api/social-login/facebook-auth${window.location.search}`, { method: "post", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ facebookUserId: response.id, facebookUserImage: fbUserImage, facebookUserFullName: response.name, facebookUserFirstName: response.first_name, facebookUserLastName: response.last_name, facebookUserEmail: finalEmail, supEmail: supEmail }) }).then((res)=>res.json()).then(async (data)=>{ signInDispatch(true); localStorage.setItem("user", JSON.stringify(data.user)); localStorage.setItem("csrf", JSON.stringify(data.user.csrf_k)); window.location.reload(); }).catch(async (err)=>{ console.log(err); signInDispatch(true); }); }); } ;// CONCATENATED MODULE: ./components/pages/login/SocialLogin.jsx // @ts-check /** * ============================================================================== * Imports * ============================================================================== */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** * ============================================================================== * Main Component { Functional } * ============================================================================== * @param {Object} props - React component props including { children } * @param {any} props.user * @param {string} props.userType * @param {React.Dispatch>} props.setLoading */ function SocialLogin({ user , userType , setLoading }) { /** * Get Contexts * * @abstract { React.useContext } */ if (true) { return null; } //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * Javascript Variables * * @abstract Non hook variables and functions */ if (user?.logged_in_status) return /*#__PURE__*/ jsx_runtime_.jsx((external_react_default()).Fragment, {}); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * React Hooks * * @abstract { useState, useEffect, useRef, etc ... } */ const [googleLogin, setGoogleLogin] = external_react_default().useState(false); // const [facebookLogin, setFacebookLogin] = React.useState(false); external_react_default().useEffect(()=>{ if (!user?.logged_in_status) { // if (window.location.protocol.match(/https/i)) { // const facebookScript = document.createElement("script"); // facebookScript.src = `https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v14.0&appId=${process.env.NEXT_PUBLIC_DSQL_FACEBOOK_ID}&autoLogAppEvents=1`; // facebookScript.className = "social-script-tag"; // facebookScript.crossOrigin = "anonymous"; // document.body.appendChild(facebookScript); // facebookScript.onload = function (e) { // // console.log("Facebook SDK loaded"); // setFacebookLogin(true); // }; // } //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// const googleScript = document.createElement("script"); googleScript.src = "https://accounts.google.com/gsi/client"; googleScript.className = "social-script-tag"; document.body.appendChild(googleScript); googleScript.onload = function(e) { // @ts-ignore if (google) setGoogleLogin(true); }; //////////////////////////////////////// return function cleanup() { document.querySelectorAll(".social-script-tag")?.forEach((scriptTag)=>{ scriptTag.parentNode?.removeChild(scriptTag); }); }; } }, [ user ]); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * Function Return * * @abstract Main Function Return */ return /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", { className: "flex flex-col items-stretch gap-3 w-full", children: [ /*#__PURE__*/ jsx_runtime_.jsx(GithubLogin, { user: user, setLoading: setLoading }), googleLogin && /*#__PURE__*/ jsx_runtime_.jsx(GoogleIdentityButton, { user: user, userType: userType, setLoading: setLoading }) ] }); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// } /***/ }), /***/ 9137: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "Z": () => (/* binding */ clearCaches) /* harmony export */ }); // @ts-check /** * Clear Caches function * ============================================================================== */ async function clearCaches() { try { /** Initialize * ============================================================================== */ /** ********************* Variables */ const keys = await caches.keys(); if (keys[0]) { await Promise.all(keys.map((key)=>{ return caches.delete(key); })); } } catch (/** @type {any} */ error) { console.log("Error in clearing cache =>", error.message); } } /***/ }) }; ;