nextjs-seo-manager
Version:
2 lines (1 loc) • 7.77 kB
JavaScript
import{_ as e,s as t}from"./serverCall-857824f8.js";import o from"react";import{connect as i}from"react-redux";import{DialogTitle as r,IconButton as l,DialogContent as n,Box as s,Typography as a,CircularProgress as d,Link as u}from"@mui/material";import c from"@mui/icons-material/Close";import p from"@mui/icons-material/LockOutlined";import v from"@mui/icons-material/OpenInNew";import{f as h}from"./firebase-f83deced.js";import{getAuth as m}from"firebase/auth";import{B as g}from"./BootstrapDialog-a7648b0f.js";import"axios";import"./index-ef68b6d6.js";import"firebase/app";import"@mui/material/styles";const f=m(h);class S extends o.Component{constructor(o){var i,r;super(o),this.componentWillUnmount=()=>{this.state.pollInterval&&clearInterval(this.state.pollInterval)},this.componentDidMount=()=>{var e,t,o,i;const r=null===(t=null===(e=this.props)||void 0===e?void 0:e.user)||void 0===t?void 0:t.isLoggedIn,l=null===(i=null===(o=this.props)||void 0===o?void 0:o.user)||void 0===i?void 0:i.authorizedProject;this.setState({userAuthorized:l,userLoaded:r,userSetup:!1},()=>this.userLoginSetup())},this.componentDidUpdate=e=>{var t,o,i,r,l,n,s,a,d,u;(null===(t=null==e?void 0:e.user)||void 0===t?void 0:t.isLoggedIn)===(null===(i=null===(o=this.props)||void 0===o?void 0:o.user)||void 0===i?void 0:i.isLoggedIn)&&(null===(r=null==e?void 0:e.user)||void 0===r?void 0:r.authorizedProject)===(null===(n=null===(l=this.props)||void 0===l?void 0:l.user)||void 0===n?void 0:n.authorizedProject)||(this.setState({userAuthorized:null===(a=null===(s=this.props)||void 0===s?void 0:s.user)||void 0===a?void 0:a.authorizedProject,userLoaded:null===(u=null===(d=this.props)||void 0===d?void 0:d.user)||void 0===u?void 0:u.isLoggedIn}),this.userLoginSetup())},this.userLoginSetup=()=>{var o,i,r,l,n;const s=null===(i=null===(o=this.props)||void 0===o?void 0:o.user)||void 0===i?void 0:i.isLoggedIn,a=null===(l=null===(r=this.props)||void 0===r?void 0:r.user)||void 0===l?void 0:l.authorizedProject;!0===s&&!1===a&&!1===this.state.userSetup&&(this.setState({userSetup:!0,authLoading:!0,authError:""}),null===(n=null==f?void 0:f.currentUser)||void 0===n||n.getIdToken().then(o=>e(this,void 0,void 0,function*(){var e,i,r,l,n,s,a;try{const d=yield t("/seo/setup_authorization","post",{pageId:null===(l=null===(r=null===(i=null===(e=this.props)||void 0===e?void 0:e.seoData)||void 0===i?void 0:i.initial)||void 0===r?void 0:r.page)||void 0===l?void 0:l.pageId},void 0,{X_Authorization:o,AuthorizationId:null===(n=null==f?void 0:f.currentUser)||void 0===n?void 0:n.uid});(null===(s=null==d?void 0:d.results)||void 0===s?void 0:s.qr)&&(null===(a=null==d?void 0:d.results)||void 0===a?void 0:a.url)?(this.setState({qrCode:d.results.qr,redirectUrl:d.results.url,authLoading:!1}),this.startAuthPolling()):this.setState({authLoading:!1,authError:(null==d?void 0:d.error)||"Failed to generate authentication. Please try again."})}catch(e){this.setState({authLoading:!1,authError:"Failed to connect to the server. Please try again."})}})))},this.startAuthPolling=()=>{var t,o,i,r,l,n,s;if(this.state.pollInterval)return;const a=null===(i=null===(o=null===(t=this.props)||void 0===t?void 0:t.seoData)||void 0===o?void 0:o.initial)||void 0===i?void 0:i.projectId,d=null===(s=null===(n=null===(l=null===(r=this.props)||void 0===r?void 0:r.seoData)||void 0===l?void 0:l.initial)||void 0===n?void 0:n.page)||void 0===s?void 0:s.pageId,u=["owner","admin","editor"],c=setInterval(()=>e(this,void 0,void 0,function*(){var e,t,o,i;try{const r=null==f?void 0:f.currentUser;if(!r)return;const l=yield r.getIdTokenResult(!0),n=null===(e=null==l?void 0:l.claims)||void 0===e?void 0:e[a],s=d?`${a}::${d}`:null,p=s?null===(t=null==l?void 0:l.claims)||void 0===t?void 0:t[s]:null;let v=!1,h=null,m=null;if(n&&u.includes(n))v=!0;else if(n&&"string"==typeof n)try{const{timeStamp:e}=JSON.parse(n);(new Date).toISOString()<new Date(e).toISOString()&&(v=!0,h=e,m="all")}catch(e){}else if(p&&"string"==typeof p)try{const{timeStamp:e}=JSON.parse(p);if((new Date).toISOString()<new Date(e).toISOString()){v=!0;const t=(null==l?void 0:l.claims)||{},o={};Object.keys(t).forEach(e=>{if(e.startsWith(`${a}::`))try{const i=JSON.parse(t[e]),r=e.slice(a.length+2);o[r]=i.timeStamp}catch(e){}});const i=Object.values(o).map(e=>new Date(e).getTime());h=i.length>0?new Date(Math.min(...i)).toISOString():e,m=Object.keys(o)}}catch(e){}v&&(clearInterval(c),this.setState({pollInterval:null,userAuthorized:!0}),null===(i=null===(o=this.props)||void 0===o?void 0:o.dispatch)||void 0===i||i.call(o,{type:"SET_USER",results:Object.assign(Object.assign(Object.assign({},JSON.parse(JSON.stringify(r))),{authorizedProject:!0,isLoggedIn:!0}),h&&{temporaryAccessExpiresAt:h,temporaryAccessPageIds:m})}))}catch(e){}}),5e3);this.setState({pollInterval:c})},this.state={loading:!1,loginError:"",userAuthorized:null===(i=null==o?void 0:o.user)||void 0===i?void 0:i.authorizedProject,userLoaded:null===(r=null==o?void 0:o.user)||void 0===r?void 0:r.isLoggedIn,userSetup:!1,qrCode:"",redirectUrl:"",authLoading:!1,authError:"",pollInterval:null}}render(){return this.state.userAuthorized||!this.state.userLoaded?null:o.createElement(o.Fragment,null,o.createElement(g,{onClose:this.props.onClose,"aria-labelledby":"SEO Manager Login",open:!0,maxWidth:!1,style:{zIndex:100}},o.createElement(r,{sx:{m:0,p:2}},"Login",o.createElement(l,{"aria-label":"close",onClick:this.props.onClose,sx:{position:"absolute",right:12,top:10,color:"#94a3b8","&:hover":{color:"#f8fafc",backgroundColor:"rgba(255,255,255,0.1)"}}},o.createElement(c,{fontSize:"small"}))),o.createElement(n,null,o.createElement(s,{sx:{display:"flex",flexDirection:"column",alignItems:"center",py:4,gap:2}},o.createElement(s,{sx:{width:56,height:56,borderRadius:"50%",backgroundColor:"#f1f5f9",display:"flex",alignItems:"center",justifyContent:"center",mb:1}},o.createElement(p,{sx:{color:"#475569",fontSize:28}})),o.createElement(a,{sx:{color:"#1e293b",fontSize:"1rem",fontWeight:600}},"Authentication Required"),o.createElement(a,{sx:{color:"#64748b",fontSize:"0.9rem",textAlign:"center",maxWidth:400,lineHeight:1.6}},"Please login to your SEO Manager account to continue. Scan the QR Code or use the redirect link to authenticate."),this.state.authLoading&&o.createElement(s,{sx:{display:"flex",flexDirection:"column",alignItems:"center",gap:1.5,mt:1}},o.createElement(d,{size:32,sx:{color:"#475569"}}),o.createElement(a,{sx:{color:"#94a3b8",fontSize:"0.8rem"}},"Generating authentication...")),this.state.authError&&!this.state.authLoading&&o.createElement(a,{sx:{color:"#ef4444",fontSize:"0.85rem",textAlign:"center",mt:1}},this.state.authError),this.state.qrCode&&!this.state.authLoading&&o.createElement(s,{sx:{display:"flex",flexDirection:"column",alignItems:"center",gap:2,mt:1}},o.createElement(s,{sx:{p:1.5,backgroundColor:"#ffffff",borderRadius:"12px",border:"1px solid #e2e8f0",boxShadow:"0 1px 3px rgba(0,0,0,0.08)"}},o.createElement("img",{src:`data:image/png;base64,${this.state.qrCode}`,alt:"Authentication QR Code",style:{display:"block",width:200,height:200}})),o.createElement(s,{sx:{display:"flex",alignItems:"center",gap:.5}},o.createElement(a,{sx:{color:"#94a3b8",fontSize:"0.8rem"}},"or")),o.createElement(u,{href:this.state.redirectUrl,target:"_blank",rel:"noopener noreferrer",sx:{display:"inline-flex",alignItems:"center",gap:.75,color:"#3b82f6",fontSize:"0.9rem",fontWeight:500,textDecoration:"none",px:2,py:1,borderRadius:"8px",border:"1px solid #bfdbfe",backgroundColor:"#eff6ff",transition:"all 0.15s ease","&:hover":{backgroundColor:"#dbeafe",borderColor:"#93c5fd",textDecoration:"none"}}},"Open login page",o.createElement(v,{sx:{fontSize:16}})))))))}}var x=i(e=>({user:null==e?void 0:e.user,seoData:null==e?void 0:e.seoData}))(S);export{x as default};