dsql-admin/dsql-app/.local_dist/server/chunks/8374.js
Benjamin Toby d13ba5057b Updates
2024-11-26 10:31:39 +01:00

708 lines
31 KiB
JavaScript

"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<React.SetStateAction<boolean>>} 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: "",
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<React.SetStateAction<boolean>>} 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=${""}&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=${""}&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: "",
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<React.SetStateAction<boolean>>} 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);
}
}
/***/ })
};
;