{"version":3,"sources":["config/axios.js","redux/auth/actions.js","redux/types.js","views/usuario/login.js","redux/auth/reducer.js","redux/reducers.js","redux/store.js","App.js","serviceWorker.js","index.js"],"names":["Axios","axios","create","baseURL","process","options","msalConfig","auth","clientId","authority","validateAuthority","postLogoutRedirectUri","navigateToLoginRequestUrl","cache","cacheLocation","storeAuthStateInCookie","system","windowHashTimeout","iframeHashTimeout","loadFrameTimeout","myMsal","UserAgentApplication","cerrarSesion","logout","login","dispatch","iniciarConexion","loginRedirect","error","console","log","handleRedirectCallback","response","type","detenerConexion","errorGUID","payload","validarSesion","guid","Login","props","useDispatch","id","localStorage","getItem","salir","match","params","useSelector","state","validated","guidValidated","firmarAppCrol","crolGUID","window","location","href","useEffect","identity","a","data","GUID","post","e","JSON","stringify","swal","fire","title","html","mensaje","icon","showCancelButton","confirmButtonColor","confirmButtonText","allowOutsideClick","allowEscapeKey","then","result","value","validarUsuario","className","src","alt","inicialState","requests","reducers","combineReducers","action","removeItem","setItem","store","createStore","compose","applyMiddleware","thunk","__REDUX_DEVTOOLS_EXTENSION__","f","hash","includes","App","path","component","Boolean","hostname","ReactDOM","render","StrictMode","document","getElementById","navigator","serviceWorker","ready","registration","unregister","catch","message"],"mappings":"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","file":"static/js/main.32f8f1f4.chunk.js","sourcesContent":["import axios from 'axios';\r\n\r\nconst Axios = axios.create({\r\n baseURL : process.env.REACT_APP_BACKEND_URL\r\n});\r\n\r\nexport default Axios;","import Axios from '../../config/axios';\r\nimport swal from 'sweetalert2';\r\nimport { \r\n UserAgentApplication\r\n} from 'msal';\r\nimport { \r\n INICIO_SESION,\r\n INICIO_CONEXION,\r\n //ERROR_CONEXION,\r\n DETENER_CONEXION,\r\n //CIERRE_SESION,\r\n //OBTENER_GUID,\r\n ERROR_GUID,\r\n VALIDAR_SESION,\r\n //ERROR_CIERRE_SESSION\r\n} from '../types';\r\n\r\nconst options = {\r\n scopes: [process.env.REACT_APP_B2CSCOPES]\r\n};\r\n\r\nconst msalConfig = {\r\n auth: {\r\n clientId: `${process.env.REACT_APP_CLIENTID}`, //This is your client ID\r\n authority: `${process.env.REACT_APP_AUTHORITY}`, //This is your tenant info\r\n validateAuthority: false,\r\n postLogoutRedirectUri: 'https://www.crol.mx',\r\n navigateToLoginRequestUrl: false\r\n },\r\n cache: {\r\n cacheLocation: \"localStorage\",\r\n storeAuthStateInCookie: false\r\n },\r\n system: {\r\n windowHashTimeout: 60000,\r\n iframeHashTimeout: 6000,\r\n loadFrameTimeout: 0\r\n }\r\n};\r\n\r\n\r\nconst myMsal = new UserAgentApplication(msalConfig);\r\nmyMsal.handleRedirectCallback( authCallback );\r\n\r\nfunction authCallback(error, response){\r\n}\r\n\r\nexport function actualizarEstadoLogin( data ) {\r\n return ( dispatch ) => {\r\n if( data ){\r\n dispatch( inicioSesion( data ) );\r\n } else {\r\n dispatch( detenerConexion() );\r\n dispatch( errorGUID('El usuario no se encuentra firmado') );\r\n }\r\n }\r\n}\r\n\r\nfunction iniciarSesion() {\r\n myMsal.loginRedirect(options.scopes);\r\n}\r\n\r\nfunction cerrarSesion() {\r\n myMsal.logout();\r\n}\r\n\r\n\r\n/*async function getToken(accessTokenRequest) {\r\n myMsal.acquireTokenSilent(accessTokenRequest).then(function(accessTokenResponse) {\r\n // Acquire token silent success\r\n // Call API with token\r\n let accessToken = accessTokenResponse.accessToken;\r\n console.log(accessToken);\r\n localStorage.setItem(\"user_data\", accessToken);\r\n }).catch(function (error) {\r\n //Acquire token silent failure, and send an interactive request\r\n console.log(error);\r\n window.alert(error);\r\n if (error.errorMessage.indexOf(\"interaction_required\") !== -1) {\r\n myMsal.acquireTokenRedirect(accessTokenRequest);\r\n }\r\n });\r\n}*/\r\n \r\n /**\r\n * Action for initiating an interactive sign-in.\r\n */\r\n export function login() {\r\n return (dispatch) => {\r\n try {\r\n dispatch(iniciarConexion());\r\n iniciarSesion();\r\n } catch (error) {\r\n console.log( error );\r\n }\r\n };\r\n }\r\n \r\n /**\r\n * Action for initiating a sign-out.\r\n */\r\n export function logout() {\r\n return (dispatch) => {\r\n dispatch(iniciarConexion());\r\n cerrarSesion();\r\n };\r\n }\r\n\r\n export function validarUsuario ( identity, salir ){\r\n return async (dispatch) => { \r\n \r\n try {\r\n let data = { identity, GUID: null };\r\n let response = null;\r\n\r\n if( salir === '1' && identity ){\r\n\r\n dispatch( detenerConexion() );\r\n dispatch( errorGUID( 'salir' ) );\r\n cerrarSesion();\r\n\r\n } else {\r\n\r\n if( identity ){\r\n\r\n try {\r\n\r\n response = await Axios.post( 'auth', data );\r\n\r\n if( response ){\r\n dispatch( validarSesion( response.data ) );\r\n }else{\r\n dispatch( detenerConexion() );\r\n dispatch( errorGUID('Error al iniciar sesión') );\r\n }\r\n /*Axios.post('auth', data).then( (response, error) => {\r\n if(response){\r\n dispatch( validarSesion( response.data ) );\r\n }else{\r\n dispatch( detenerConexion() );\r\n dispatch( errorGUID('Error al iniciar sesión') );\r\n }\r\n } );*/\r\n \r\n } catch (error) {\r\n let e = {...error};\r\n console.log(JSON.stringify(e.response));\r\n swal.fire({\r\n title: 'Error',\r\n html: `
${e.response.data.mensaje}
`,\r\n icon: 'error',\r\n showCancelButton: false,\r\n confirmButtonColor: '#3085d6',\r\n confirmButtonText: 'Ok',\r\n allowOutsideClick: false,\r\n allowEscapeKey: false\r\n }).then((result) => {\r\n if (result.value) {\r\n dispatch( errorGUID( error ) );\r\n window.location.href = `${process.env.REACT_APP_BASEURL}/CrolLogin/1`;\r\n }\r\n })\r\n }\r\n }\r\n\r\n }\r\n \r\n\r\n } catch (error) {\r\n let e = {...error};\r\n console.log(JSON.stringify(e.response));\r\n swal.fire({\r\n title: 'Error',\r\n html: `
${e.response.data.mensaje}
`,\r\n icon: 'error',\r\n showCancelButton: false,\r\n confirmButtonColor: '#3085d6',\r\n confirmButtonText: 'Ok',\r\n allowOutsideClick: false,\r\n allowEscapeKey: false\r\n }).then((result) => {\r\n if (result.value) {\r\n dispatch(errorGUID(error));\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n\r\nconst iniciarConexion = () => ( { type: INICIO_CONEXION } );\r\n\r\nconst detenerConexion = () => ( { type: DETENER_CONEXION } );\r\n\r\n//const errorConexion = ( error ) => ( { type: ERROR_CONEXION, payload: error } );\r\n\r\nconst inicioSesion = ( identity ) => ( { type: INICIO_SESION, payload: identity } );\r\n\r\n//const cierreSesion = () => ( { type: CIERRE_SESION } );\r\n\r\nconst errorGUID = ( error ) => ( { type: ERROR_GUID, payload: error } );\r\n\r\nconst validarSesion = ( guid ) => ( { type: VALIDAR_SESION, payload: guid } );","/** Inicio de sesión */\r\nexport const INICIO_SESION = \"INICIO_SESION\";\r\nexport const INICIO_CONEXION = \"INICIO_CONEXION\";\r\nexport const ERROR_CONEXION = \"ERROR_CONEXION\";\r\nexport const DETENER_CONEXION = \"DETENER_CONEXION\";\r\nexport const CIERRE_SESION = \"CIERRE_SESION\";\r\nexport const OBTENER_GUID = 'OBTENER_GUID';\r\nexport const ERROR_GUID = 'ERROR_GUID';\r\nexport const VALIDAR_SESION = 'VALIDAR_SESION';\r\nexport const ERROR_CIERRE_SESSION = 'ERROR_CIERRE_SESSION';","import React, { useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n//import Cookies from 'universal-cookie';\r\nimport 'pace-js';\r\nimport 'pace-js/themes/yellow/pace-theme-minimal.css';\r\n\r\nimport { login, validarUsuario } from '../../redux/auth/actions';\r\n\r\nconst Login = ( props ) => {\r\n const dispatch = useDispatch();\r\n const id = localStorage.getItem(\"msal.idtoken\");\r\n const salir = props.match.params.salir ? props.match.params.salir : '0';\r\n let guid = useSelector( (state) => state.auth.guid );\r\n let validated = useSelector( (state) => state.auth.guidValidated ); \r\n let firmarAppCrol = useSelector( (state) => state.auth.firmarAppCrol ); \r\n let crolGUID = (localStorage.getItem('crolSession') ? localStorage.getItem('crolSession') : null);\r\n\r\n if( guid && validated ) {\r\n if (firmarAppCrol === true){\r\n window.location.href = `${process.env.REACT_APP_BASEURLWEB}/home/LoginMicrosoft?GUID=${crolGUID}`;\r\n }\r\n else{\r\n window.location.href =`${process.env.REACT_APP_BASEURL}/webapp/home/LoginMicrosoft?GUID=${crolGUID}`;\r\n }\r\n }\r\n\r\n useEffect( () => {\r\n\r\n if( id ) {\r\n\r\n dispatch( validarUsuario( id, salir ) );\r\n }\r\n\r\n if( !id ) {\r\n dispatch( login() );\r\n }\r\n \r\n // eslint-disable-next-line\r\n }, [] );\r\n \r\n return (\r\n
\r\n
\r\n \"logoblanco\"\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n \r\nexport default Login;","//import Cookies from 'universal-cookie';\r\nimport { \r\n INICIO_SESION,\r\n INICIO_CONEXION,\r\n ERROR_CONEXION,\r\n DETENER_CONEXION,\r\n CIERRE_SESION,\r\n OBTENER_GUID,\r\n ERROR_GUID,\r\n VALIDAR_SESION,\r\n ERROR_CIERRE_SESSION\r\n} from '../types';\r\n\r\n\r\n/** Cada reducer debe tener su propio state */\r\n\r\nconst inicialState = {\r\n requests: 0,\r\n identity: null,\r\n guid: null,//localStorage.getItem('crolSession'),\r\n error: null,\r\n guidValidated: false,\r\n cerrarSesion: false,\r\n firmarAppCrol: false,\r\n}\r\n\r\n//const cookies = new Cookies();\r\n\r\nexport default function(state = inicialState, action) {\r\n switch(action.type) {\r\n case ERROR_CONEXION:\r\n return {\r\n ...state,\r\n error: action.payload\r\n };\r\n case INICIO_CONEXION:\r\n return {\r\n ...state,\r\n requests: state.requests + 1\r\n };\r\n case DETENER_CONEXION:\r\n return {\r\n ...state,\r\n requests: state.requests - 1,\r\n guid: null\r\n };\r\n case INICIO_SESION:\r\n return {\r\n ...state,\r\n identity: action.payload\r\n };\r\n case CIERRE_SESION:\r\n localStorage.removeItem('crolSession');\r\n //cookies.remove('crolGUID', { path: '/' });\r\n //cookies.remove('crolGUID', { path: '/CrolLogin' });\r\n return {\r\n ...state,\r\n identity: null,\r\n guid: null,\r\n error: null,\r\n cerrarSesion: false\r\n };\r\n case OBTENER_GUID:\r\n localStorage.setItem('crolSession',action.payload);\r\n //cookies.set('crolGUID', `${action.payload}`);\r\n return {\r\n ...state,\r\n requests: 0,\r\n guid: action.payload,\r\n };\r\n case ERROR_GUID:\r\n localStorage.removeItem('crolSession');\r\n //cookies.remove('crolGUID', { path: '/' });\r\n //cookies.remove('crolGUID', { path: '/CrolLogin' });\r\n return {\r\n ...state,\r\n requests: 0,\r\n guid: null,\r\n error: action.payload,\r\n guidValidated: false,\r\n cerrarSesion: (action.payload === 'salir') ? true : false\r\n };\r\n case VALIDAR_SESION:\r\n localStorage.setItem('crolSession',action.payload.GUID);\r\n //cookies.set('crolGUID', `${action.payload}`);\r\n return {\r\n ...state,\r\n requests: 0,\r\n guid: action.payload.GUID,\r\n firmarAppCrol: action.payload.firmarAppCrol,\r\n guidValidated: true\r\n };\r\n case ERROR_CIERRE_SESSION:\r\n return {\r\n ...state,\r\n requests: 0,\r\n error: action.payload,\r\n identity: null,\r\n guid: null\r\n }\r\n default:\r\n return state;\r\n }\r\n}","import { combineReducers } from 'redux';\r\nimport auth from './auth/reducer';\r\n\r\nconst reducers = combineReducers({\r\n auth\r\n});\r\n\r\nexport default reducers;","import { createStore, applyMiddleware, compose } from 'redux';\r\nimport thunk from 'redux-thunk';\r\nimport reducers from './reducers';\r\n\r\nconst store = createStore(\r\n reducers,\r\n compose( applyMiddleware(thunk),\r\n typeof window === 'object' &&\r\n typeof window.__REDUX_DEVTOOLS_EXTENSION__ !== 'undefined' ?\r\n window.__REDUX_DEVTOOLS_EXTENSION__() : f => f\r\n )\r\n);\r\n\r\nexport default store;","import React from 'react';\nimport Login from './views/usuario/login';\n\nimport { BrowserRouter as Router, Route, Switch } from 'react-router-dom';\n\nimport { Provider } from 'react-redux';\nimport store from './redux/store';\nimport { \n UserAgentApplication\n} from 'msal';\n\nif (window.location.hash.includes(\"id_token\")) {\n new UserAgentApplication(\"4ecf3d26-e844-4855-9158-b8f6c0121b50\", null, null);\n}\nconsole.log(window.location.hash);\n\nfunction App() {\n return (\n \n \n \n \n \n \n \n );\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\n ReactDOM.render(\n \n \n ,\n document.getElementById('root')\n );\n \n // If you want your app to work offline and load faster, you can change\n // unregister() to register() below. Note this comes with some pitfalls.\n // Learn more about service workers: https://bit.ly/CRA-PWA\n serviceWorker.unregister();\n\n"],"sourceRoot":""}