<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://documentacion.siu.edu.ar/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Belmontec</id>
		<title>SIU - Contribuciones del usuario [es]</title>
		<link rel="self" type="application/atom+xml" href="https://documentacion.siu.edu.ar/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Belmontec"/>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/Especial:Contribuciones/Belmontec"/>
		<updated>2026-07-17T06:12:37Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Mapuche/Version3.28.1/Links_de_interes&amp;diff=111836</id>
		<title>SIU-Mapuche/Version3.28.1/Links de interes</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Mapuche/Version3.28.1/Links_de_interes&amp;diff=111836"/>
				<updated>2026-02-24T02:30:58Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Archivo:Siu-mapuche iso.png|derecha|link=]]&lt;br /&gt;
[[SIU-Mapuche/version3.28.2|&amp;lt; Documentación versión]]&lt;br /&gt;
== Links de Interés ==&lt;br /&gt;
A continuación se listan distintos links que pueden ser de utilidad para los usuarios del módulo SIU-Mapuche:&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
* [https://www.cin.edu.ar/ CIN - Consejo Interuniversitario Nacional]&lt;br /&gt;
* [https://www.afip.gob.ar/ AFIP - Administración Federal de Ingresos Públicos]&lt;br /&gt;
* [http://www.anses.gob.ar/ ANSES]&lt;br /&gt;
* [https://www.infoleg.gob.ar/ Infoleg]&lt;br /&gt;
* [https://www.argentina.gob.ar/capital-humano/educacion/universidades Ministerio de Educación - Universidades] &lt;br /&gt;
* Webinars&lt;br /&gt;
** [https://www.youtube.com/watch?v=OKr4Mjc4bOM&amp;amp;list=PLfXfgqj-WqGk8czJoqVEPNLsk6XNT12&amp;amp;index=5 Lista de Reproducción de todos los Webinar Siu-Mapuche en el  canal de YouTube del Siu]&lt;br /&gt;
* Podcast:&lt;br /&gt;
** [https://www.youtube.com/watch?v=teRE6UWdQpE&amp;amp;feature=youtu.be Liquidador de Ganancias Web - Experiencia de Implementación]  &lt;br /&gt;
&lt;br /&gt;
[[SIU-Mapuche/version3.28.2|Volver]]&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Mapuche/Version3.28.1/Links_de_interes&amp;diff=111835</id>
		<title>SIU-Mapuche/Version3.28.1/Links de interes</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Mapuche/Version3.28.1/Links_de_interes&amp;diff=111835"/>
				<updated>2026-02-24T02:30:28Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Archivo:Siu-mapuche iso.png|derecha|link=]]&lt;br /&gt;
[[SIU-Mapuche/version3.28.2|&amp;lt; Documentación versión]]&lt;br /&gt;
== Links de Interés ==&lt;br /&gt;
A continuación se listan distintos links que pueden ser de utilidad para los usuarios del módulo SIU-Mapuche:&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
* [http://www.cin.edu.ar/ CIN - Consejo Interuniversitario Nacional]&lt;br /&gt;
* [https://www.afip.gob.ar/ AFIP - Administración Federal de Ingresos Públicos]&lt;br /&gt;
* [http://www.anses.gob.ar/ ANSES]&lt;br /&gt;
* [https://www.infoleg.gob.ar/ Infoleg]&lt;br /&gt;
* [https://www.argentina.gob.ar/capital-humano/educacion/universidades Ministerio de Educación - Universidades] &lt;br /&gt;
* Webinars&lt;br /&gt;
** [https://www.youtube.com/watch?v=OKr4Mjc4bOM&amp;amp;list=PLfXfgqj-WqGk8czJoqVEPNLsk6XNT12&amp;amp;index=5 Lista de Reproducción de todos los Webinar Siu-Mapuche en el  canal de YouTube del Siu]&lt;br /&gt;
* Podcast:&lt;br /&gt;
** [https://www.youtube.com/watch?v=teRE6UWdQpE&amp;amp;feature=youtu.be Liquidador de Ganancias Web - Experiencia de Implementación]  &lt;br /&gt;
&lt;br /&gt;
[[SIU-Mapuche/version3.28.2|Volver]]&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=Pros_y_contras_entre_firmas&amp;diff=110312</id>
		<title>Pros y contras entre firmas</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=Pros_y_contras_entre_firmas&amp;diff=110312"/>
				<updated>2025-11-25T14:31:22Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Ventajas y Desventajas entre los tipos de Firma Digital =&lt;br /&gt;
&lt;br /&gt;
Para conocer las ventajas y desventajas de los diferentes tipos de firma, consulte la sección [https://firmadigital.siu.edu.ar/preguntas-frecuentes#cuales-son-las-ventajas-y-desventajas-de-utilizar-una-firma-digital-con-token-y-una-firma-remota-desde-la-pfdr '''Preguntas Frecuentes'''] de la página web de '''Firma Digital'''.&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=Pros_y_contras_entre_firmas&amp;diff=110311</id>
		<title>Pros y contras entre firmas</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=Pros_y_contras_entre_firmas&amp;diff=110311"/>
				<updated>2025-11-25T14:31:05Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Ventajas y Desventajas entre los tipos de Firma Digital =&lt;br /&gt;
&lt;br /&gt;
Para conocer las ventajas y desventajas de los diferentes tipo de firma, consulte la sección [https://firmadigital.siu.edu.ar/preguntas-frecuentes#cuales-son-las-ventajas-y-desventajas-de-utilizar-una-firma-digital-con-token-y-una-firma-remota-desde-la-pfdr '''Preguntas Frecuentes'''] de la página web de '''Firma Digital'''.&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=Solicitar_certificado_aplicacion&amp;diff=110310</id>
		<title>Solicitar certificado aplicacion</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=Solicitar_certificado_aplicacion&amp;diff=110310"/>
				<updated>2025-11-25T14:29:05Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ¿Cómo tramitar el certificado de aplicación ante la ONTI? =&lt;br /&gt;
&lt;br /&gt;
Para conocer como tramitar un certificado de aplicación ante la AC-ONTI consulte la sección [https://firmadigital.siu.edu.ar/tramites#certificado-de-aplicacion-aplicacioncertificado '''Trámites'''] de la página web de '''Firma Digital'''.&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=Solicitar_certificado_aplicacion&amp;diff=110309</id>
		<title>Solicitar certificado aplicacion</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=Solicitar_certificado_aplicacion&amp;diff=110309"/>
				<updated>2025-11-25T14:28:18Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ¿Cómo tramitar el certificado de aplicación ante la ONTI? =&lt;br /&gt;
&lt;br /&gt;
Para conocer como tramitar un certificado de aplicación ante la AC ONTI consulte sección [https://firmadigital.siu.edu.ar/tramites#certificado-de-aplicacion-aplicacioncertificado '''Trámites'''] de la página web de '''Firma Digital'''.&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=Solicitar_certificado_aplicacion&amp;diff=110308</id>
		<title>Solicitar certificado aplicacion</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=Solicitar_certificado_aplicacion&amp;diff=110308"/>
				<updated>2025-11-25T14:26:58Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ¿Cómo tramitar el certificado de aplicación ante la ONTI? =&lt;br /&gt;
&lt;br /&gt;
Para conocer como tramitar un certificado de aplicación ante la AC ONTI consulte sección '''Trámites''' de la página web de Firma Digital disponible [https://firmadigital.siu.edu.ar/tramites#certificado-de-aplicacion-aplicacioncertificado aquí].&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=Solicitar_certificado_aplicacion&amp;diff=110307</id>
		<title>Solicitar certificado aplicacion</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=Solicitar_certificado_aplicacion&amp;diff=110307"/>
				<updated>2025-11-25T14:25:05Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ¿Cómo tramitar el certificado de aplicación ante la ONTI? =&lt;br /&gt;
&lt;br /&gt;
Para conocer como tramitar un certificado de aplicación ante la AC ONTI consulte la documentación disponible [https://firmadigital.siu.edu.ar/tramites#certificado-de-aplicacion-aplicacioncertificado aquí].&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=Vincular_arai_firmar&amp;diff=110306</id>
		<title>Vincular arai firmar</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=Vincular_arai_firmar&amp;diff=110306"/>
				<updated>2025-11-25T14:23:19Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ¿Cómo integrar Araí-Documentos con FirmAr? ==&lt;br /&gt;
&lt;br /&gt;
Para conocer como se integra Araí Documentos con FirmAR consulte la documentación disponible [https://documentacion.siu.edu.ar/documentos/docs/firmar-implementacion/ aquí].&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Arai/Modulos&amp;diff=107323</id>
		<title>SIU-Arai/Modulos</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Arai/Modulos&amp;diff=107323"/>
				<updated>2025-06-02T11:59:23Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Archivo:siu-arai.png|derecha|link=]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= Integrando módulos del SIU =&lt;br /&gt;
&lt;br /&gt;
El SIU desarrolla diversas aplicaciones, en su mayoría de tipo Web, donde cada una tiene su peculiaridad al momento de ser instalada y configurada. En esta sección se compilan ejemplos de configuración para cada una de ellas, dependiendo de su versión y de la versión de la plataforma SIU-Araí con la que se encuentra operando.&lt;br /&gt;
== Módulos o servicios independientes ==&lt;br /&gt;
* [[SIU-Arai/Modulos/Pilaga|SIU-Pilagá]]&lt;br /&gt;
* [[SIU-Arai/Modulos/Diaguita|SIU-Diaguita]]&lt;br /&gt;
* [[SIU-Arai/Modulos/Mapuche|SIU-Mapuche]]&lt;br /&gt;
* SIU-Wichi&lt;br /&gt;
* [[SIU-Guarani/version3.16.0/interfaces/gestion-arai|SIU-Guaraní]]&lt;br /&gt;
* SIU-Kolla&lt;br /&gt;
* SIU-Sanavirón Quilmes&lt;br /&gt;
&lt;br /&gt;
== Módulos o servicios transversales ==&lt;br /&gt;
* [[SIU-Arai/catalogos-cliente|Arai-Catalogos (cliente)]]&lt;br /&gt;
* [https://documentacion.siu.edu.ar/documentos Araí-Documentos]&lt;br /&gt;
* [https://documentacion.siu.edu.ar/reportes Araí-Reportes]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai|&amp;lt; Volver]]&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Arai&amp;diff=107322</id>
		<title>SIU-Arai</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Arai&amp;diff=107322"/>
				<updated>2025-06-02T11:28:48Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Archivo:siu-arai_iso.png|derecha|link=SIU-Arai]]&lt;br /&gt;
= SIU-Arai =&lt;br /&gt;
[[Archivo:Mini-arquitectura.png|izquierda|miniaturadeimagen]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SIU-Araí es la ''plataforma integradora de servicios'' del SIU. Cada uno de los sistemas SIU son módulos dentro de la plataforma&lt;br /&gt;
&lt;br /&gt;
que interactúan entre sí, consumiendo y ofreciendo servicios. Además, gracias al uso de estándares es posible la integración con &lt;br /&gt;
&lt;br /&gt;
aplicaciones y servicios de terceros de forma simple y ordenada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Aspectos Generales ==&lt;br /&gt;
[[SIU-Arai/Arquitectura|Arquitectura general de la plataforma]]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai/Trabajo|Forma de trabajo]]&lt;br /&gt;
&lt;br /&gt;
== Documentación por módulo ==&lt;br /&gt;
A continuación se enlaza a la documentación específica por módulo, de la plataforma SIU-Araí. Esta documentación está versionada y se gestiona en conjunto con la publicación de nuevas versiones.&lt;br /&gt;
* [https://documentacion.siu.edu.ar/usuarios SIU-Araí: Usuarios]&lt;br /&gt;
* [https://documentacion.siu.edu.ar/personas SIU-Araí: Personas]&lt;br /&gt;
* [https://documentacion.siu.edu.ar/documentos SIU-Araí: Documentos]&lt;br /&gt;
* [https://documentacion.siu.edu.ar/huarpe SIU-Huarpe]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Documentación anterior ==&lt;br /&gt;
[[SIU-Arai/Requerimientos|Requerimientos]]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai/Instalacion|Instalando la plataforma]]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai/Administrar|Administrando la plataforma]]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai/Modulos|Integrando módulos del SIU]]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai/Integracion|Integrando módulos de terceros]]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai/Compatibilidad|Matriz de compatibilidad entre versiones]]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai/Problemas|Problemas comunes y posibles soluciones]]&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Arai/Modulos&amp;diff=107200</id>
		<title>SIU-Arai/Modulos</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Arai/Modulos&amp;diff=107200"/>
				<updated>2025-05-23T15:50:07Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Archivo:siu-arai.png|derecha|link=]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= Integrando módulos del SIU =&lt;br /&gt;
&lt;br /&gt;
El SIU desarrolla diversas aplicaciones, en su mayoría de tipo Web, donde cada una tiene su peculiaridad al momento de ser instalada y configurada. En esta sección se compilan ejemplos de configuración para cada una de ellas, dependiendo de su versión y de la versión de la plataforma SIU-Araí con la que se encuentra operando.&lt;br /&gt;
== Módulos o servicios independientes ==&lt;br /&gt;
* [[SIU-Arai/Modulos/Pilaga|SIU-Pilagá]]&lt;br /&gt;
* [[SIU-Arai/Modulos/Diaguita|SIU-Diaguita]]&lt;br /&gt;
* [[SIU-Arai/Modulos/Mapuche|SIU-Mapuche]]&lt;br /&gt;
* SIU-Wichi&lt;br /&gt;
* [[SIU-Guarani/version3.16.0/interfaces/gestion-arai|SIU-Guaraní]]&lt;br /&gt;
* SIU-Kolla&lt;br /&gt;
* SIU-Sanavirón Quilmes&lt;br /&gt;
&lt;br /&gt;
== Módulos o servicios transversales ==&lt;br /&gt;
* [[SIU-Arai/catalogos-cliente|Arai-Catalogos (cliente)]]&lt;br /&gt;
* [[SIU-Arai/proveedores|Arai-Proveedores]]&lt;br /&gt;
* [https://documentacion.siu.edu.ar/documentos Araí-Documentos]&lt;br /&gt;
* [https://documentacion.siu.edu.ar/reportes Araí-Reportes]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai|&amp;lt; Volver]]&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Arai/Modulos&amp;diff=107199</id>
		<title>SIU-Arai/Modulos</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Arai/Modulos&amp;diff=107199"/>
				<updated>2025-05-23T15:49:44Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Archivo:siu-arai.png|derecha|link=]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= Integrando módulos del SIU =&lt;br /&gt;
&lt;br /&gt;
El SIU desarrolla diversas aplicaciones, en su mayoría de tipo Web, donde cada una tiene su peculiaridad al momento de ser instalada y configurada. En esta sección se compilan ejemplos de configuración para cada una de ellas, dependiendo de su versión y de la versión de la plataforma SIU-Araí con la que se encuentra operando.&lt;br /&gt;
== Módulos o servicios independientes ==&lt;br /&gt;
* [[SIU-Arai/Modulos/Pilaga|SIU-Pilagá]]&lt;br /&gt;
* [[SIU-Arai/Modulos/Diaguita|SIU-Diaguita]]&lt;br /&gt;
* [[SIU-Arai/Modulos/Mapuche|SIU-Mapuche]]&lt;br /&gt;
* SIU-Wichi&lt;br /&gt;
* [[SIU-Guarani/version3.16.0/interfaces/gestion-arai|SIU-Guaraní]]&lt;br /&gt;
* SIU-Kolla&lt;br /&gt;
* SIU-Sanavirón Quilmes&lt;br /&gt;
&lt;br /&gt;
== Módulos o servicios transversales ==&lt;br /&gt;
* [[SIU-Arai/catalogos-cliente|Arai-Catalogos (cliente)]]&lt;br /&gt;
* [[SIU-Arai/proveedores|Arai-Proveedores]]&lt;br /&gt;
* [https://documentacion.siu.edu.ar/personas Araí-Documentos]&lt;br /&gt;
* [https://documentacion.siu.edu.ar/reportes Araí-Reportes]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai|&amp;lt; Volver]]&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Arai/Modulos&amp;diff=107198</id>
		<title>SIU-Arai/Modulos</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Arai/Modulos&amp;diff=107198"/>
				<updated>2025-05-23T15:48:38Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Archivo:siu-arai.png|derecha|link=]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= Integrando módulos del SIU =&lt;br /&gt;
&lt;br /&gt;
El SIU desarrolla diversas aplicaciones, en su mayoría de tipo Web, donde cada una tiene su peculiaridad al momento de ser instalada y configurada. En esta sección se compilan ejemplos de configuración para cada una de ellas, dependiendo de su versión y de la versión de la plataforma SIU-Araí con la que se encuentra operando.&lt;br /&gt;
== Módulos o servicios independientes ==&lt;br /&gt;
* [[SIU-Arai/Modulos/Pilaga|SIU-Pilagá]]&lt;br /&gt;
* [[SIU-Arai/Modulos/Diaguita|SIU-Diaguita]]&lt;br /&gt;
* [[SIU-Arai/Modulos/Mapuche|SIU-Mapuche]]&lt;br /&gt;
* SIU-Wichi&lt;br /&gt;
* [[SIU-Guarani/version3.16.0/interfaces/gestion-arai|SIU-Guaraní]]&lt;br /&gt;
* SIU-Kolla&lt;br /&gt;
* SIU-Sanavirón Quilmes&lt;br /&gt;
&lt;br /&gt;
== Módulos o servicios transversales ==&lt;br /&gt;
* [[SIU-Arai/catalogos-cliente|Arai-Catalogos (cliente)]]&lt;br /&gt;
* [[SIU-Arai/proveedores|Arai-Proveedores]]&lt;br /&gt;
* Araí-Documentos&lt;br /&gt;
* [https://documentacion.siu.edu.ar/reportes Araí-Reportes]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai|&amp;lt; Volver]]&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Arai/Modulos&amp;diff=107196</id>
		<title>SIU-Arai/Modulos</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Arai/Modulos&amp;diff=107196"/>
				<updated>2025-05-23T15:47:02Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Archivo:siu-arai.png|derecha|link=]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= Integrando módulos del SIU =&lt;br /&gt;
&lt;br /&gt;
El SIU desarrolla diversas aplicaciones, en su mayoría de tipo Web, donde cada una tiene su peculiaridad al momento de ser instalada y configurada. En esta sección se compilan ejemplos de configuración para cada una de ellas, dependiendo de su versión y de la versión de la plataforma SIU-Araí con la que se encuentra operando.&lt;br /&gt;
== Módulos o servicios independientes ==&lt;br /&gt;
* [[SIU-Arai/Modulos/Pilaga|SIU-Pilagá]]&lt;br /&gt;
* [[SIU-Arai/Modulos/Diaguita|SIU-Diaguita]]&lt;br /&gt;
* [[SIU-Arai/Modulos/Mapuche|SIU-Mapuche]]&lt;br /&gt;
* SIU-Wichi&lt;br /&gt;
* [[SIU-Guarani/version3.16.0/interfaces/gestion-arai|SIU-Guaraní]]&lt;br /&gt;
* SIU-Kolla&lt;br /&gt;
* SIU-Sanavirón Quilmes&lt;br /&gt;
&lt;br /&gt;
== Módulos o servicios transversales ==&lt;br /&gt;
* [[SIU-Arai/catalogos-cliente|Arai-Catalogos (cliente)]]&lt;br /&gt;
* [[SIU-Arai/proveedores|Arai-Proveedores]]&lt;br /&gt;
* Araí-Documentos&lt;br /&gt;
* [[https://documentacion.siu.edu.ar/reportes/docs/intro/|Araí-Reportes]]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai|&amp;lt; Volver]]&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Arai/Modulos&amp;diff=107195</id>
		<title>SIU-Arai/Modulos</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Arai/Modulos&amp;diff=107195"/>
				<updated>2025-05-23T15:46:39Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Archivo:siu-arai.png|derecha|link=]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= Integrando módulos del SIU =&lt;br /&gt;
&lt;br /&gt;
El SIU desarrolla diversas aplicaciones, en su mayoría de tipo Web, donde cada una tiene su peculiaridad al momento de ser instalada y configurada. En esta sección se compilan ejemplos de configuración para cada una de ellas, dependiendo de su versión y de la versión de la plataforma SIU-Araí con la que se encuentra operando.&lt;br /&gt;
== Módulos o servicios independientes ==&lt;br /&gt;
* [[SIU-Arai/Modulos/Pilaga|SIU-Pilagá]]&lt;br /&gt;
* [[SIU-Arai/Modulos/Diaguita|SIU-Diaguita]]&lt;br /&gt;
* [[SIU-Arai/Modulos/Mapuche|SIU-Mapuche]]&lt;br /&gt;
* SIU-Wichi&lt;br /&gt;
* [[SIU-Guarani/version3.16.0/interfaces/gestion-arai|SIU-Guaraní]]&lt;br /&gt;
* SIU-Kolla&lt;br /&gt;
* SIU-Sanavirón Quilmes&lt;br /&gt;
&lt;br /&gt;
== Módulos o servicios transversales ==&lt;br /&gt;
* [[SIU-Arai/catalogos-cliente|Arai-Catalogos (cliente)]]&lt;br /&gt;
* [[SIU-Arai/proveedores|Arai-Proveedores]]&lt;br /&gt;
* Araí-Documentos&lt;br /&gt;
* [https://documentacion.siu.edu.ar/reportes/docs/intro/|Araí-Reportes]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai|&amp;lt; Volver]]&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Arai/Modulos&amp;diff=107193</id>
		<title>SIU-Arai/Modulos</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Arai/Modulos&amp;diff=107193"/>
				<updated>2025-05-23T15:44:44Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Archivo:siu-arai.png|derecha|link=]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= Integrando módulos del SIU =&lt;br /&gt;
&lt;br /&gt;
El SIU desarrolla diversas aplicaciones, en su mayoría de tipo Web, donde cada una tiene su peculiaridad al momento de ser instalada y configurada. En esta sección se compilan ejemplos de configuración para cada una de ellas, dependiendo de su versión y de la versión de la plataforma SIU-Araí con la que se encuentra operando.&lt;br /&gt;
== Módulos o servicios independientes ==&lt;br /&gt;
* [[SIU-Arai/Modulos/Pilaga|SIU-Pilagá]]&lt;br /&gt;
* [[SIU-Arai/Modulos/Diaguita|SIU-Diaguita]]&lt;br /&gt;
* [[SIU-Arai/Modulos/Mapuche|SIU-Mapuche]]&lt;br /&gt;
* SIU-Wichi&lt;br /&gt;
* [[SIU-Guarani/version3.16.0/interfaces/gestion-arai|SIU-Guaraní]]&lt;br /&gt;
* SIU-Kolla&lt;br /&gt;
* SIU-Sanavirón Quilmes&lt;br /&gt;
&lt;br /&gt;
== Módulos o servicios transversales ==&lt;br /&gt;
* [[SIU-Arai/catalogos-cliente|Arai-Catalogos (cliente)]]&lt;br /&gt;
* [[SIU-Arai/proveedores|Arai-Proveedores]]&lt;br /&gt;
* Araí-Documentos&lt;br /&gt;
* [Araí-Reportes]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai|&amp;lt; Volver]]&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Arai/Modulos&amp;diff=107192</id>
		<title>SIU-Arai/Modulos</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Arai/Modulos&amp;diff=107192"/>
				<updated>2025-05-23T15:43:35Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Archivo:siu-arai.png|derecha|link=]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= Integrando módulos del SIU =&lt;br /&gt;
&lt;br /&gt;
El SIU desarrolla diversas aplicaciones, en su mayoría de tipo Web, donde cada una tiene su peculiaridad al momento de ser instalada y configurada. En esta sección se compilan ejemplos de configuración para cada una de ellas, dependiendo de su versión y de la versión de la plataforma SIU-Araí con la que se encuentra operando.&lt;br /&gt;
== Módulos o servicios independientes ==&lt;br /&gt;
* [[SIU-Arai/Modulos/Pilaga|SIU-Pilagá]]&lt;br /&gt;
* [[SIU-Arai/Modulos/Diaguita|SIU-Diaguita]]&lt;br /&gt;
* [[SIU-Arai/Modulos/Mapuche|SIU-Mapuche]]&lt;br /&gt;
* SIU-Wichi&lt;br /&gt;
* [[SIU-Guarani/version3.16.0/interfaces/gestion-arai|SIU-Guaraní]]&lt;br /&gt;
* SIU-Kolla&lt;br /&gt;
* SIU-Sanavirón Quilmes&lt;br /&gt;
&lt;br /&gt;
== Módulos o servicios transversales ==&lt;br /&gt;
* [[SIU-Arai/catalogos-cliente|Arai-Catalogos (cliente)]]&lt;br /&gt;
* [[SIU-Arai/proveedores|Arai-Proveedores]]&lt;br /&gt;
* Araí-Documentos&lt;br /&gt;
* [[https://documentacion.siu.edu.ar/reportes/docs/intro/|Araí-Reportes]]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai|&amp;lt; Volver]]&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Arai/Modulos&amp;diff=107191</id>
		<title>SIU-Arai/Modulos</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Arai/Modulos&amp;diff=107191"/>
				<updated>2025-05-23T15:42:37Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Archivo:siu-arai.png|derecha|link=]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= Integrando módulos del SIU =&lt;br /&gt;
&lt;br /&gt;
El SIU desarrolla diversas aplicaciones, en su mayoría de tipo Web, donde cada una tiene su peculiaridad al momento de ser instalada y configurada. En esta sección se compilan ejemplos de configuración para cada una de ellas, dependiendo de su versión y de la versión de la plataforma SIU-Araí con la que se encuentra operando.&lt;br /&gt;
== Módulos o servicios independientes ==&lt;br /&gt;
* [[SIU-Arai/Modulos/Pilaga|SIU-Pilagá]]&lt;br /&gt;
* [[SIU-Arai/Modulos/Diaguita|SIU-Diaguita]]&lt;br /&gt;
* [[SIU-Arai/Modulos/Mapuche|SIU-Mapuche]]&lt;br /&gt;
* SIU-Wichi&lt;br /&gt;
* [[SIU-Guarani/version3.16.0/interfaces/gestion-arai|SIU-Guaraní]]&lt;br /&gt;
* SIU-Kolla&lt;br /&gt;
* SIU-Sanavirón Quilmes&lt;br /&gt;
&lt;br /&gt;
== Módulos o servicios transversales ==&lt;br /&gt;
* [[SIU-Arai/catalogos-cliente|Arai-Catalogos (cliente)]]&lt;br /&gt;
* [[SIU-Arai/proveedores|Arai-Proveedores]]&lt;br /&gt;
* Araí-Documentos&lt;br /&gt;
* [[Araí-Reportes|https://documentacion.siu.edu.ar/reportes/docs/intro/]]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai|&amp;lt; Volver]]&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Arai&amp;diff=107183</id>
		<title>SIU-Arai</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=SIU-Arai&amp;diff=107183"/>
				<updated>2025-05-22T11:36:48Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Archivo:siu-arai_iso.png|derecha|link=SIU-Arai]]&lt;br /&gt;
= SIU-Arai =&lt;br /&gt;
[[Archivo:Mini-arquitectura.png|izquierda|miniaturadeimagen]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SIU-Araí es la ''plataforma integradora de servicios'' del SIU. Cada uno de los sistemas SIU son módulos dentro de la plataforma&lt;br /&gt;
&lt;br /&gt;
que interactúan entre sí, consumiendo y ofreciendo servicios. Además, gracias al uso de estándares es posible la integración con &lt;br /&gt;
&lt;br /&gt;
aplicaciones y servicios de terceros de forma simple y ordenada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Aspectos Generales ==&lt;br /&gt;
[[SIU-Arai/Arquitectura|Arquitectura general de la plataforma]]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai/Trabajo|Forma de trabajo]]&lt;br /&gt;
&lt;br /&gt;
== Documentación por módulo ==&lt;br /&gt;
A continuación se enlaza a la documentación específica por módulo, de la plataforma SIU-Araí. Esta documentación está versionada y se gestiona en conjunto con la publicación de nuevas versiones.&lt;br /&gt;
* [https://documentacion.siu.edu.ar/usuarios SIU-Araí: Usuarios]&lt;br /&gt;
* [https://documentacion.siu.edu.ar/documentos SIU-Araí: Documentos]&lt;br /&gt;
* [https://documentacion.siu.edu.ar/huarpe SIU-Huarpe]&lt;br /&gt;
* [https://documentacion.siu.edu.ar/personas SIU-Araí: Personas]&lt;br /&gt;
&lt;br /&gt;
== Documentación anterior ==&lt;br /&gt;
[[SIU-Arai/Requerimientos|Requerimientos]]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai/Instalacion|Instalando la plataforma]]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai/Administrar|Administrando la plataforma]]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai/Modulos|Integrando módulos del SIU]]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai/Integracion|Integrando módulos de terceros]]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai/Compatibilidad|Matriz de compatibilidad entre versiones]]&lt;br /&gt;
&lt;br /&gt;
[[SIU-Arai/Problemas|Problemas comunes y posibles soluciones]]&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=Nuestra_instituci%C3%B3n_no_cuenta_con_SIU-_Arai_Usuarios,_tenemos_nuestro_propio_gestor_de_identidad_y_queremos_implementar_SIU_Huarpe_%C2%BFEsto_es_posible%3F&amp;diff=106117</id>
		<title>Nuestra institución no cuenta con SIU- Arai Usuarios, tenemos nuestro propio gestor de identidad y queremos implementar SIU Huarpe ¿Esto es posible?</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=Nuestra_instituci%C3%B3n_no_cuenta_con_SIU-_Arai_Usuarios,_tenemos_nuestro_propio_gestor_de_identidad_y_queremos_implementar_SIU_Huarpe_%C2%BFEsto_es_posible%3F&amp;diff=106117"/>
				<updated>2025-04-07T15:31:09Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Nuestra institución cuenta con gestor de identidad propio y queremos implementar SIU Huarpe ¿Esto es posible? ==&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SIU-Huarpe es un portal de autogestión para los usuarios que está específicamente diseñado para trabajar por defecto con '''SIU Araí-Usuarios'''. Tanto el Huarpe núcleo como los distintos bundles necesitan consumir servicios que son implementados por Araí-Usuarios.&lt;br /&gt;
&lt;br /&gt;
A su vez, Araí-Usuarios ofrece un IDP por defecto que implementa los protocolos SAML 2.0 y OpenID Connect.&lt;br /&gt;
&lt;br /&gt;
El SIU ha evaluado y colaborado con otras instituciones en personalizaciones que permitieran integrar SIU Araí-Usuarios con distintos IdPs, al que llamamos esquema de integración híbrida, una descripción y consideraciones del mismo pueden encontrar en el siguiente link: [https://documentacion.siu.edu.ar/usuarios/docs/next/cache/estrategia-integracion-hibrida/ estrategia-integracion-hibrida]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La implementación de este esquema de integración híbrida tiene las siguientes características:&lt;br /&gt;
&lt;br /&gt;
* El IDP propio será el encargado de gestionar la autentificación, bajo un esquema “one-password”, esto significa que las contraseñas estarán almacenadas y serán validadas únicamente contra el IDP propio.&lt;br /&gt;
&lt;br /&gt;
* Todas las soluciones SIU se encontrarán desplegadas y estarán conectadas al IDP ofrecido por SIU Araí-Usuarios.&lt;br /&gt;
&lt;br /&gt;
* El IDP de SIU Araí-Usuarios a su vez debe funcionar con autenticación delegada contra el IDP propio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para la implementación de un esquema de integración híbrida, es necesario que realicen una serie de ajustes:&lt;br /&gt;
&lt;br /&gt;
* '''Gestión y sincronización de usuarios''': La creación, edición o baja de usuarios realizados en el IDP propio, debe disparar eventos que reflejen dichos cambios en arai-usuarios. El mecanismo recomendable sería vía la utilización de la API que dispone el servicio, la documentación al respecto se encuentra en el siguiente [https://documentacion.siu.edu.ar/apis/?spec=arai-usuarios_v2 enlace]. Otra alternativa sería que el mantenimiento de los usuarios en SIU-Arai: Usuarios se realice de forma manual.&lt;br /&gt;
&lt;br /&gt;
* '''Autenticación delegada''': al momento de acceder un usuario a una app registrada en arai-usuarios, podremos tener dos alternativas:&lt;br /&gt;
**se muestra la pantalla de login del IDP de Araí-Usuarios, la cual solicita el usuario/clave. Se debe adecuar la clase que realiza la autentificación para que en vez de realizar el login interno de Araí-Usuarios, lo realice por medio de validaciones contra los servicios del IDP propio.&lt;br /&gt;
**en vez de mostrar la pantalla de login del IDP de Araí-Usuarios, redirigir al usuario al login del IDP propio. Esto se logra mediante una delegación del IDP de Araí-Usuarios haciendo que se comporte como una aplicación o SP en el IDP propio de la institución. Esto a su vez se logra explotando las características del protocolo SAML.&lt;br /&gt;
&lt;br /&gt;
* '''Aclaraciones respecto a cambios en el mecanismo de autentificación''':&lt;br /&gt;
**Se puede utilizar cualquier mecanismo de interacción que dispongan para realizar el control de usuario y clave, por ejemplo, vía una consulta a una API tipo REST, mediante una consulta sql a otra base de datos, utilizando conexión a otro LDAP mediante bind, o cualquier mecanismo de verificación de la información de la cuenta. Además se requiere estos cambios en el código fuente de Araí-Usuarios extendiendo el “authsource”. Pueden tomar como referencia, por ejemplo, el ajuste realizado para Firebase. Esta personalización pueden verla desde el siguiente archivo:  [[AraiFirebaseAuth.php]]. En esta clase pueden seguir las personalizaciones realizadas, como por ejemplo el del método login().&lt;br /&gt;
**Se puede configurar mediante la personalización en el código fuente de Araí-Usuarios extendiendo el “authsource” y sumando configuración adicional para integrar vía SAML contra el IDP propio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Esta interacción de los distintos componentes de SIU Araí-Usuarios, SIU Huarpe y la personalización se pueden ver en el siguiente diagrama:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:diagrama-interaccion.png|500px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La implementación de SIU-Huarpe sin SIU Araí-Usuarios requiere que el propio gestor de identidad ofrezca los ''mismos servicios que provee Araí-Usuarios'', no solo en el momento de implementar, sino que será necesario ir evolucionando de la misma forma en el tiempo para acompañar la actualizaciones que vaya ofreciendo SIU-Huarpe.&lt;br /&gt;
Hacer esto suele ser complejo y cuesta mantenerlo en el tiempo, por eso no recomendamos esta última estrategia de implementación.&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=Nuestra_instituci%C3%B3n_no_cuenta_con_SIU-_Arai_Usuarios,_tenemos_nuestro_propio_gestor_de_identidad_y_queremos_implementar_SIU_Huarpe_%C2%BFEsto_es_posible%3F&amp;diff=106116</id>
		<title>Nuestra institución no cuenta con SIU- Arai Usuarios, tenemos nuestro propio gestor de identidad y queremos implementar SIU Huarpe ¿Esto es posible?</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=Nuestra_instituci%C3%B3n_no_cuenta_con_SIU-_Arai_Usuarios,_tenemos_nuestro_propio_gestor_de_identidad_y_queremos_implementar_SIU_Huarpe_%C2%BFEsto_es_posible%3F&amp;diff=106116"/>
				<updated>2025-04-07T15:29:54Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Nuestra institución cuenta con gestor de identidad propio y queremos implementar SIU Huarpe ¿Esto es posible? ==&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SIU-Huarpe es un portal de autogestión para los usuarios que está específicamente diseñado para trabajar por defecto con '''SIU Araí-Usuarios'''. Tanto el Huarpe núcleo como los distintos bundles necesitan consumir servicios que son implementados por Araí-Usuarios.&lt;br /&gt;
&lt;br /&gt;
A su vez, Araí-Usuarios ofrece un IDP por defecto que implementa los protocolos SAML 2.0 y OpenID Connect.&lt;br /&gt;
&lt;br /&gt;
El SIU ha evaluado y colaborado con otras instituciones en personalizaciones que permitieran integrar SIU Araí-Usuarios con distintos IdPs, al que llamamos esquema de integración híbrida, una descripción y consideraciones del mismo pueden encontrar en el siguiente link: [https://documentacion.siu.edu.ar/usuarios/docs/next/cache/estrategia-integracion-hibrida/ estrategia-integracion-hibrida]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La implementación de este esquema de integración híbrida tiene las siguientes características:&lt;br /&gt;
&lt;br /&gt;
* El IDP propio será el encargado de gestionar la autentificación, bajo un esquema “one-password”, esto significa que las contraseñas estarán almacenadas y serán validadas únicamente contra el IDP propio.&lt;br /&gt;
&lt;br /&gt;
* Todas las soluciones SIU se encontrarán desplegadas y estarán conectadas al IDP ofrecido por SIU Araí-Usuarios.&lt;br /&gt;
&lt;br /&gt;
* El IDP de SIU Araí-Usuarios a su vez debe funcionar con autenticación delegada contra el IDP propio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para la implementación de un esquema de integración híbrida, es necesario que realicen una serie de ajustes:&lt;br /&gt;
&lt;br /&gt;
* '''Gestión y sincronización de usuarios''': La creación, edición o baja de usuarios realizados en el IDP propio, debe disparar eventos que reflejen dichos cambios en arai-usuarios. El mecanismo recomendable sería vía la utilización de la API que dispone el servicio, la documentación al respecto se encuentra en el siguiente [https://documentacion.siu.edu.ar/apis/?spec=arai-usuarios_v2 enlace]. Otra alternativa sería que el mantenimiento de los usuarios en SIU-Arai: Usuarios se realice de forma manual.&lt;br /&gt;
&lt;br /&gt;
* '''Autenticación delegada''': al momento de acceder un usuario a una app registrada en arai-usuarios, podremos tener dos alternativas:&lt;br /&gt;
**se muestra la pantalla de login del IDP de Araí-Usuarios, la cual solicita el usuario/clave. Se debe adecuar la clase que realiza la autentificación para que en vez de realizar el login interno de Araí-Usuarios, lo realice por medio de validaciones contra los servicios del IDP propio.&lt;br /&gt;
**en vez de mostrar la pantalla de login del IDP de Araí-Usuarios, redirigir al usuario al login del IDP propio. Esto se logra mediante una delegación del IDP de Araí-Usuarios haciendo que se comporte como una aplicación o SP en el IDP propio de la institución. Esto a su vez se logra explotando las características del protocolo SAML.&lt;br /&gt;
&lt;br /&gt;
* '''Aclaraciones respecto a cambios en el mecanismo de autentificación''':&lt;br /&gt;
**Se puede utilizar cualquier mecanismo de interacción que dispongan para realizar el control de usuario y clave, por ejemplo, vía una consulta a una API tipo REST, mediante una consulta sql a otra base de datos, utilizando conexión a otro LDAP mediante bind, o cualquier mecanismo de verificación de la información de la cuenta. Además se requiere estos cambios en el código fuente de Araí-Usuarios extendiendo el “authsource”. Pueden tomar como referencia, por ejemplo, el ajuste realizado para Firebase. Esta personalización pueden verla desde el siguiente archivo:  [[AraiFirebaseAuth.php]]. En esta clase pueden seguir las personalizaciones realizadas, como por ejemplo el del método login().&lt;br /&gt;
**Se puede configurar mediante la personalización en el código fuente de Araí-Usuarios extendiendo el “authsource” y sumando configuración adicional para integrar vía SAML contra el IDP propio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Esta interacción de los distintos componentes de SIU Araí-Usuarios y SIU Huarpe. Y la personalización se pueden ver en el siguiente diagrama:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:diagrama-interaccion.png|500px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La implementación de SIU-Huarpe sin SIU Araí-Usuarios requiere que el propio gestor de identidad ofrezca los ''mismos servicios que provee Araí-Usuarios'', no solo en el momento de implementar, sino que será necesario ir evolucionando de la misma forma en el tiempo para acompañar la actualizaciones que vaya ofreciendo SIU-Huarpe.&lt;br /&gt;
Hacer esto suele ser complejo y cuesta mantenerlo en el tiempo, por eso no recomendamos esta última estrategia de implementación.&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=Nuestra_instituci%C3%B3n_no_cuenta_con_SIU-_Arai_Usuarios,_tenemos_nuestro_propio_gestor_de_identidad_y_queremos_implementar_SIU_Huarpe_%C2%BFEsto_es_posible%3F&amp;diff=106115</id>
		<title>Nuestra institución no cuenta con SIU- Arai Usuarios, tenemos nuestro propio gestor de identidad y queremos implementar SIU Huarpe ¿Esto es posible?</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=Nuestra_instituci%C3%B3n_no_cuenta_con_SIU-_Arai_Usuarios,_tenemos_nuestro_propio_gestor_de_identidad_y_queremos_implementar_SIU_Huarpe_%C2%BFEsto_es_posible%3F&amp;diff=106115"/>
				<updated>2025-04-07T15:29:11Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Nuestra institución cuenta con gestor de identidad propio y queremos implementar SIU Huarpe ¿Esto es posible? ==&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SIU-Huarpe es un portal de autogestión para los usuarios que está específicamente diseñado para trabajar por defecto con '''SIU Araí-Usuarios'''. Tanto el Huarpe núcleo como los distintos bundles necesitan consumir servicios que son implementados por Araí-Usuarios.&lt;br /&gt;
&lt;br /&gt;
A su vez, Araí-Usuarios ofrece un IDP por defecto que implementa los protocolos SAML 2.0 y OpenID Connect.&lt;br /&gt;
&lt;br /&gt;
El SIU ha evaluado y colaborado con otras instituciones en personalizaciones que permitieran integrar SIU Araí-Usuarios con distintos IdPs, al que llamamos esquema de integración híbrida, una descripción y consideraciones del mismo pueden encontrar en el siguiente link: [https://documentacion.siu.edu.ar/usuarios/docs/next/cache/estrategia-integracion-hibrida/ estrategia-integracion-hibrida]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La implementación de este esquema de integración híbrida tiene las siguientes características:&lt;br /&gt;
&lt;br /&gt;
* El IDP propio será el encargado de gestionar la autentificación, bajo un esquema “one-password”, esto significa que las contraseñas estarán almacenadas y serán validadas únicamente contra el IDP propio.&lt;br /&gt;
&lt;br /&gt;
* Todas las soluciones SIU se encontrarán desplegadas y estarán conectadas al IDP ofrecido por SIU Araí-Usuarios.&lt;br /&gt;
&lt;br /&gt;
* El IDP de SIU Araí-Usuarios a su vez debe funcionar con autenticación delegada contra el IDP propio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para la implementación de un esquema de integración híbrida, es necesario que realicen una serie de ajustes:&lt;br /&gt;
&lt;br /&gt;
* '''Gestión y sincronización de usuarios''': La creación, edición o baja de usuarios realizados en el IDP propio, debe disparar eventos que reflejen dichos cambios en arai-usuarios. El mecanismo recomendable sería vía la utilización de la API que dispone el servicio, la documentación al respecto se encuentra en el siguiente [https://documentacion.siu.edu.ar/apis/?spec=arai-usuarios_v2 enlace]. Otra alternativa sería que el mantenimiento de los usuarios en SIU-Arai: Usuarios se realice de forma manual.&lt;br /&gt;
&lt;br /&gt;
* '''Autenticación delegada''': al momento de acceder un usuario a una app registrada en arai-usuarios, podremos tener dos alternativas:&lt;br /&gt;
**se muestra la pantalla de login del IDP de Araí-Usuarios, la cual solicita el usuario/clave. Se debe adecuar la clase que realiza la autentificación para que en vez de realizar el login interno de Araí-Usuarios, lo realice por medio de validaciones contra los servicios del IDP propio.&lt;br /&gt;
**en vez de mostrar la pantalla de login del IDP de Araí-Usuarios, redirigir al usuario al login del IDP propio. Esto se logra mediante una delegación del IDP de Araí-Usuarios haciendo que se comporte como una aplicación o SP en el IDP propio de la institución. Esto a su vez se logra explotando las características del protocolo SAML.&lt;br /&gt;
&lt;br /&gt;
* '''Aclaraciones respecto a cambios en el mecanismo de autentificación''':&lt;br /&gt;
**Se puede utilizar cualquier mecanismo de interacción que dispongan para realizar el control de usuario y clave, por ejemplo, vía una consulta a una API tipo REST, mediante una consulta sql a otra base de datos, utilizando conexión a otro LDAP mediante bind, o cualquier mecanismo de verificación de la información de la cuenta. Además se requiere estos cambios en el código fuente de Araí-Usuarios extendiendo el “authsource”. Pueden tomar como referencia, por ejemplo, el ajuste realizado para Firebase. Esta personalización pueden verla desde el siguiente archivo: [[https://hub.siu.edu.ar/siu-arai/arai-usuarios/-/blob/develop/idp/simplesamlphp-module-arai/lib/Auth/Source/AraiFirebaseAuth.php]]. En esta clase pueden seguir las personalizaciones realizadas, como por ejemplo el del método login().&lt;br /&gt;
**Se puede configurar mediante la personalización en el código fuente de Araí-Usuarios extendiendo el “authsource” y sumando configuración adicional para integrar vía SAML contra el IDP propio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Esta interacción de los distintos componentes de SIU Araí-Usuarios y SIU Huarpe. Y la personalización se pueden ver en el siguiente diagrama:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:diagrama-interaccion.png|500px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La implementación de SIU-Huarpe sin SIU Araí-Usuarios requiere que el propio gestor de identidad ofrezca los ''mismos servicios que provee Araí-Usuarios'', no solo en el momento de implementar, sino que será necesario ir evolucionando de la misma forma en el tiempo para acompañar la actualizaciones que vaya ofreciendo SIU-Huarpe.&lt;br /&gt;
Hacer esto suele ser complejo y cuesta mantenerlo en el tiempo, por eso no recomendamos esta última estrategia de implementación.&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106114</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106114"/>
				<updated>2025-04-07T15:27:45Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== AraiFirebaseAuth.php ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use SimpleSAML\Logger;&lt;br /&gt;
use SIU\AraiUsuarios;&lt;br /&gt;
use SIU\AraiUsuarios\IDP\Factory;&lt;br /&gt;
use SIU\AraiUsuarios\Core\UsuariosManager;&lt;br /&gt;
use SIU\AraiUsuarios\Entities\Usuario;&lt;br /&gt;
use SIU\AraiUsuarios\Error;&lt;br /&gt;
&lt;br /&gt;
use SAML2\Utilities\Temporal;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Simple SQL authentication source&lt;br /&gt;
 *&lt;br /&gt;
 * Implementa la autenticación contra un servicio Google Firebase Auth&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * @package simpleSAMLphp&lt;br /&gt;
 * @version $Id$&lt;br /&gt;
 */&lt;br /&gt;
class sspmod_arai_Auth_Source_AraiFirebaseAuth extends sspmod_arai_Auth_Source_AraiAuth&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    public function __construct($info, $config)&lt;br /&gt;
    {&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_uri&amp;quot;])');&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_key&amp;quot;])');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;firebase_uri = $config['firebase_uri'];&lt;br /&gt;
        $this-&amp;gt;firebase_key = $config['firebase_key'];&lt;br /&gt;
&lt;br /&gt;
        parent::__construct($info, $config);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    protected function login($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        assert('is_string($uid)');&lt;br /&gt;
        assert('is_string($clave)');&lt;br /&gt;
&lt;br /&gt;
        $contexto = ['usuario' =&amp;gt; $uid];&lt;br /&gt;
        $uid = strtolower($uid);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            /* @var UsuariosManager $usuariosManager */&lt;br /&gt;
            $usuariosManager = Factory::getUsuariosManager();&lt;br /&gt;
&lt;br /&gt;
            if (!$this-&amp;gt;autenticarEnFirebase($uid, $clave)) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario Firebase '$uid' ingresa usuario y/o clave incorrecta&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // TODO: deberíamos permitir que la auth vía Firebase escoja si es por uid o email?&lt;br /&gt;
            $this-&amp;gt;loginSubject = $usuariosManager-&amp;gt;getUsuarioByEmail($uid);&lt;br /&gt;
            if (!$this-&amp;gt;loginSubject) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario 'mail=$uid' no existe&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //Si autentica y esta vencida la cuenta se marca como bloqueado&lt;br /&gt;
            $dt = new DateTime();&lt;br /&gt;
            $dt-&amp;gt;setTimestamp(Temporal::getTime());&lt;br /&gt;
            &lt;br /&gt;
            $uid = $this-&amp;gt;loginSubject-&amp;gt;getUid();&lt;br /&gt;
            $this-&amp;gt;validarCuentaExpirada($usuariosManager, $uid, $dt);&lt;br /&gt;
            &lt;br /&gt;
            /**&lt;br /&gt;
             * Se maneja de forma externa, no agregar nuevas cuestiones relacionadas a las claves del usuario&lt;br /&gt;
                $this-&amp;gt;validarPasswordVencido($usuariosManager, $uid, $dt);&lt;br /&gt;
                $usuariosManager-&amp;gt;anularPedidosCambioPasswordPrevios($uid);&lt;br /&gt;
            */&lt;br /&gt;
            &lt;br /&gt;
            $attributes = $usuariosManager-&amp;gt;getAtributosSAMLUsuario($this-&amp;gt;loginSubject);&lt;br /&gt;
        } catch (SIU\AraiUsuarios\Error $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se ingresa un usuario y/o clave incorrecto', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw new SimpleSAML\Error\Error('WRONGUSERPASS', $e);&lt;br /&gt;
        } catch (\Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw $e;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Factory::getIdpLogger()-&amp;gt;info('Usuario realiza login correcto', $contexto);&lt;br /&gt;
        SimpleSAML\Logger::info('arai:' . $this-&amp;gt;authId . ': Attributes: ' . implode(',', array_keys($attributes)));&lt;br /&gt;
&lt;br /&gt;
        return $attributes;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param $uid&lt;br /&gt;
     * @param $clave&lt;br /&gt;
     * @return bool&lt;br /&gt;
     * @throws \GuzzleHttp\Exception\GuzzleException&lt;br /&gt;
     */&lt;br /&gt;
    private function autenticarEnFirebase($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        $status = false;&lt;br /&gt;
&lt;br /&gt;
        $key = $this-&amp;gt;firebase_key;&lt;br /&gt;
&lt;br /&gt;
        $uri = $this-&amp;gt;firebase_uri . $key;&lt;br /&gt;
&lt;br /&gt;
        $contexto = [&lt;br /&gt;
            'firebase_user' =&amp;gt; $uid,&lt;br /&gt;
            'firebase_key' =&amp;gt; $key,&lt;br /&gt;
            'firebase_uri' =&amp;gt; $uri,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        $body = [&lt;br /&gt;
            'email'=&amp;gt; $uid,&lt;br /&gt;
            'password'=&amp;gt; $clave,&lt;br /&gt;
            'returnSecureToken'=&amp;gt; true,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            $client = new GuzzleHttp\Client();&lt;br /&gt;
&lt;br /&gt;
            $res = $client-&amp;gt;request('POST', $uri, [&lt;br /&gt;
                'json' =&amp;gt; $body&lt;br /&gt;
            ]);&lt;br /&gt;
&lt;br /&gt;
            $status = $res-&amp;gt;getStatusCode() == 200;&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\RequestException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getMessage();&lt;br /&gt;
            if ($e-&amp;gt;hasResponse()) {&lt;br /&gt;
                $msg = json_decode($e-&amp;gt;getResponse()-&amp;gt;getBody()-&amp;gt;getContents());&lt;br /&gt;
                $msg = $msg-&amp;gt;error-&amp;gt;errors;&lt;br /&gt;
            }&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\ClientException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getResponse()-&amp;gt;getReasonPhrase();&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $status;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106113</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106113"/>
				<updated>2025-04-07T15:27:08Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#:&amp;lt;source lang=&amp;quot;php&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use SimpleSAML\Logger;&lt;br /&gt;
use SIU\AraiUsuarios;&lt;br /&gt;
use SIU\AraiUsuarios\IDP\Factory;&lt;br /&gt;
use SIU\AraiUsuarios\Core\UsuariosManager;&lt;br /&gt;
use SIU\AraiUsuarios\Entities\Usuario;&lt;br /&gt;
use SIU\AraiUsuarios\Error;&lt;br /&gt;
&lt;br /&gt;
use SAML2\Utilities\Temporal;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Simple SQL authentication source&lt;br /&gt;
 *&lt;br /&gt;
 * Implementa la autenticación contra un servicio Google Firebase Auth&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * @package simpleSAMLphp&lt;br /&gt;
 * @version $Id$&lt;br /&gt;
 */&lt;br /&gt;
class sspmod_arai_Auth_Source_AraiFirebaseAuth extends sspmod_arai_Auth_Source_AraiAuth&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    public function __construct($info, $config)&lt;br /&gt;
    {&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_uri&amp;quot;])');&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_key&amp;quot;])');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;firebase_uri = $config['firebase_uri'];&lt;br /&gt;
        $this-&amp;gt;firebase_key = $config['firebase_key'];&lt;br /&gt;
&lt;br /&gt;
        parent::__construct($info, $config);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    protected function login($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        assert('is_string($uid)');&lt;br /&gt;
        assert('is_string($clave)');&lt;br /&gt;
&lt;br /&gt;
        $contexto = ['usuario' =&amp;gt; $uid];&lt;br /&gt;
        $uid = strtolower($uid);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            /* @var UsuariosManager $usuariosManager */&lt;br /&gt;
            $usuariosManager = Factory::getUsuariosManager();&lt;br /&gt;
&lt;br /&gt;
            if (!$this-&amp;gt;autenticarEnFirebase($uid, $clave)) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario Firebase '$uid' ingresa usuario y/o clave incorrecta&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // TODO: deberíamos permitir que la auth vía Firebase escoja si es por uid o email?&lt;br /&gt;
            $this-&amp;gt;loginSubject = $usuariosManager-&amp;gt;getUsuarioByEmail($uid);&lt;br /&gt;
            if (!$this-&amp;gt;loginSubject) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario 'mail=$uid' no existe&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //Si autentica y esta vencida la cuenta se marca como bloqueado&lt;br /&gt;
            $dt = new DateTime();&lt;br /&gt;
            $dt-&amp;gt;setTimestamp(Temporal::getTime());&lt;br /&gt;
            &lt;br /&gt;
            $uid = $this-&amp;gt;loginSubject-&amp;gt;getUid();&lt;br /&gt;
            $this-&amp;gt;validarCuentaExpirada($usuariosManager, $uid, $dt);&lt;br /&gt;
            &lt;br /&gt;
            /**&lt;br /&gt;
             * Se maneja de forma externa, no agregar nuevas cuestiones relacionadas a las claves del usuario&lt;br /&gt;
                $this-&amp;gt;validarPasswordVencido($usuariosManager, $uid, $dt);&lt;br /&gt;
                $usuariosManager-&amp;gt;anularPedidosCambioPasswordPrevios($uid);&lt;br /&gt;
            */&lt;br /&gt;
            &lt;br /&gt;
            $attributes = $usuariosManager-&amp;gt;getAtributosSAMLUsuario($this-&amp;gt;loginSubject);&lt;br /&gt;
        } catch (SIU\AraiUsuarios\Error $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se ingresa un usuario y/o clave incorrecto', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw new SimpleSAML\Error\Error('WRONGUSERPASS', $e);&lt;br /&gt;
        } catch (\Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw $e;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Factory::getIdpLogger()-&amp;gt;info('Usuario realiza login correcto', $contexto);&lt;br /&gt;
        SimpleSAML\Logger::info('arai:' . $this-&amp;gt;authId . ': Attributes: ' . implode(',', array_keys($attributes)));&lt;br /&gt;
&lt;br /&gt;
        return $attributes;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param $uid&lt;br /&gt;
     * @param $clave&lt;br /&gt;
     * @return bool&lt;br /&gt;
     * @throws \GuzzleHttp\Exception\GuzzleException&lt;br /&gt;
     */&lt;br /&gt;
    private function autenticarEnFirebase($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        $status = false;&lt;br /&gt;
&lt;br /&gt;
        $key = $this-&amp;gt;firebase_key;&lt;br /&gt;
&lt;br /&gt;
        $uri = $this-&amp;gt;firebase_uri . $key;&lt;br /&gt;
&lt;br /&gt;
        $contexto = [&lt;br /&gt;
            'firebase_user' =&amp;gt; $uid,&lt;br /&gt;
            'firebase_key' =&amp;gt; $key,&lt;br /&gt;
            'firebase_uri' =&amp;gt; $uri,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        $body = [&lt;br /&gt;
            'email'=&amp;gt; $uid,&lt;br /&gt;
            'password'=&amp;gt; $clave,&lt;br /&gt;
            'returnSecureToken'=&amp;gt; true,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            $client = new GuzzleHttp\Client();&lt;br /&gt;
&lt;br /&gt;
            $res = $client-&amp;gt;request('POST', $uri, [&lt;br /&gt;
                'json' =&amp;gt; $body&lt;br /&gt;
            ]);&lt;br /&gt;
&lt;br /&gt;
            $status = $res-&amp;gt;getStatusCode() == 200;&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\RequestException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getMessage();&lt;br /&gt;
            if ($e-&amp;gt;hasResponse()) {&lt;br /&gt;
                $msg = json_decode($e-&amp;gt;getResponse()-&amp;gt;getBody()-&amp;gt;getContents());&lt;br /&gt;
                $msg = $msg-&amp;gt;error-&amp;gt;errors;&lt;br /&gt;
            }&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\ClientException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getResponse()-&amp;gt;getReasonPhrase();&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $status;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106112</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106112"/>
				<updated>2025-04-07T15:07:36Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use SimpleSAML\Logger;&lt;br /&gt;
use SIU\AraiUsuarios;&lt;br /&gt;
use SIU\AraiUsuarios\IDP\Factory;&lt;br /&gt;
use SIU\AraiUsuarios\Core\UsuariosManager;&lt;br /&gt;
use SIU\AraiUsuarios\Entities\Usuario;&lt;br /&gt;
use SIU\AraiUsuarios\Error;&lt;br /&gt;
&lt;br /&gt;
use SAML2\Utilities\Temporal;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Simple SQL authentication source&lt;br /&gt;
 *&lt;br /&gt;
 * Implementa la autenticación contra un servicio Google Firebase Auth&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * @package simpleSAMLphp&lt;br /&gt;
 * @version $Id$&lt;br /&gt;
 */&lt;br /&gt;
class sspmod_arai_Auth_Source_AraiFirebaseAuth extends sspmod_arai_Auth_Source_AraiAuth&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    public function __construct($info, $config)&lt;br /&gt;
    {&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_uri&amp;quot;])');&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_key&amp;quot;])');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;firebase_uri = $config['firebase_uri'];&lt;br /&gt;
        $this-&amp;gt;firebase_key = $config['firebase_key'];&lt;br /&gt;
&lt;br /&gt;
        parent::__construct($info, $config);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    protected function login($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        assert('is_string($uid)');&lt;br /&gt;
        assert('is_string($clave)');&lt;br /&gt;
&lt;br /&gt;
        $contexto = ['usuario' =&amp;gt; $uid];&lt;br /&gt;
        $uid = strtolower($uid);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            /* @var UsuariosManager $usuariosManager */&lt;br /&gt;
            $usuariosManager = Factory::getUsuariosManager();&lt;br /&gt;
&lt;br /&gt;
            if (!$this-&amp;gt;autenticarEnFirebase($uid, $clave)) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario Firebase '$uid' ingresa usuario y/o clave incorrecta&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // TODO: deberíamos permitir que la auth vía Firebase escoja si es por uid o email?&lt;br /&gt;
            $this-&amp;gt;loginSubject = $usuariosManager-&amp;gt;getUsuarioByEmail($uid);&lt;br /&gt;
            if (!$this-&amp;gt;loginSubject) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario 'mail=$uid' no existe&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //Si autentica y esta vencida la cuenta se marca como bloqueado&lt;br /&gt;
            $dt = new DateTime();&lt;br /&gt;
            $dt-&amp;gt;setTimestamp(Temporal::getTime());&lt;br /&gt;
            &lt;br /&gt;
            $uid = $this-&amp;gt;loginSubject-&amp;gt;getUid();&lt;br /&gt;
            $this-&amp;gt;validarCuentaExpirada($usuariosManager, $uid, $dt);&lt;br /&gt;
            &lt;br /&gt;
            /**&lt;br /&gt;
             * Se maneja de forma externa, no agregar nuevas cuestiones relacionadas a las claves del usuario&lt;br /&gt;
                $this-&amp;gt;validarPasswordVencido($usuariosManager, $uid, $dt);&lt;br /&gt;
                $usuariosManager-&amp;gt;anularPedidosCambioPasswordPrevios($uid);&lt;br /&gt;
            */&lt;br /&gt;
            &lt;br /&gt;
            $attributes = $usuariosManager-&amp;gt;getAtributosSAMLUsuario($this-&amp;gt;loginSubject);&lt;br /&gt;
        } catch (SIU\AraiUsuarios\Error $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se ingresa un usuario y/o clave incorrecto', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw new SimpleSAML\Error\Error('WRONGUSERPASS', $e);&lt;br /&gt;
        } catch (\Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw $e;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Factory::getIdpLogger()-&amp;gt;info('Usuario realiza login correcto', $contexto);&lt;br /&gt;
        SimpleSAML\Logger::info('arai:' . $this-&amp;gt;authId . ': Attributes: ' . implode(',', array_keys($attributes)));&lt;br /&gt;
&lt;br /&gt;
        return $attributes;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param $uid&lt;br /&gt;
     * @param $clave&lt;br /&gt;
     * @return bool&lt;br /&gt;
     * @throws \GuzzleHttp\Exception\GuzzleException&lt;br /&gt;
     */&lt;br /&gt;
    private function autenticarEnFirebase($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        $status = false;&lt;br /&gt;
&lt;br /&gt;
        $key = $this-&amp;gt;firebase_key;&lt;br /&gt;
&lt;br /&gt;
        $uri = $this-&amp;gt;firebase_uri . $key;&lt;br /&gt;
&lt;br /&gt;
        $contexto = [&lt;br /&gt;
            'firebase_user' =&amp;gt; $uid,&lt;br /&gt;
            'firebase_key' =&amp;gt; $key,&lt;br /&gt;
            'firebase_uri' =&amp;gt; $uri,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        $body = [&lt;br /&gt;
            'email'=&amp;gt; $uid,&lt;br /&gt;
            'password'=&amp;gt; $clave,&lt;br /&gt;
            'returnSecureToken'=&amp;gt; true,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            $client = new GuzzleHttp\Client();&lt;br /&gt;
&lt;br /&gt;
            $res = $client-&amp;gt;request('POST', $uri, [&lt;br /&gt;
                'json' =&amp;gt; $body&lt;br /&gt;
            ]);&lt;br /&gt;
&lt;br /&gt;
            $status = $res-&amp;gt;getStatusCode() == 200;&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\RequestException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getMessage();&lt;br /&gt;
            if ($e-&amp;gt;hasResponse()) {&lt;br /&gt;
                $msg = json_decode($e-&amp;gt;getResponse()-&amp;gt;getBody()-&amp;gt;getContents());&lt;br /&gt;
                $msg = $msg-&amp;gt;error-&amp;gt;errors;&lt;br /&gt;
            }&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\ClientException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getResponse()-&amp;gt;getReasonPhrase();&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $status;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106111</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106111"/>
				<updated>2025-04-07T15:07:14Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use SimpleSAML\Logger;&lt;br /&gt;
use SIU\AraiUsuarios;&lt;br /&gt;
use SIU\AraiUsuarios\IDP\Factory;&lt;br /&gt;
use SIU\AraiUsuarios\Core\UsuariosManager;&lt;br /&gt;
use SIU\AraiUsuarios\Entities\Usuario;&lt;br /&gt;
use SIU\AraiUsuarios\Error;&lt;br /&gt;
&lt;br /&gt;
use SAML2\Utilities\Temporal;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Simple SQL authentication source&lt;br /&gt;
 *&lt;br /&gt;
 * Implementa la autenticación contra un servicio Google Firebase Auth&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * @package simpleSAMLphp&lt;br /&gt;
 * @version $Id$&lt;br /&gt;
 */&lt;br /&gt;
class sspmod_arai_Auth_Source_AraiFirebaseAuth extends sspmod_arai_Auth_Source_AraiAuth&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    public function __construct($info, $config)&lt;br /&gt;
    {&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_uri&amp;quot;])');&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_key&amp;quot;])');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;firebase_uri = $config['firebase_uri'];&lt;br /&gt;
        $this-&amp;gt;firebase_key = $config['firebase_key'];&lt;br /&gt;
&lt;br /&gt;
        parent::__construct($info, $config);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    protected function login($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        assert('is_string($uid)');&lt;br /&gt;
        assert('is_string($clave)');&lt;br /&gt;
&lt;br /&gt;
        $contexto = ['usuario' =&amp;gt; $uid];&lt;br /&gt;
        $uid = strtolower($uid);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            /* @var UsuariosManager $usuariosManager */&lt;br /&gt;
            $usuariosManager = Factory::getUsuariosManager();&lt;br /&gt;
&lt;br /&gt;
            if (!$this-&amp;gt;autenticarEnFirebase($uid, $clave)) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario Firebase '$uid' ingresa usuario y/o clave incorrecta&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // TODO: deberíamos permitir que la auth vía Firebase escoja si es por uid o email?&lt;br /&gt;
            $this-&amp;gt;loginSubject = $usuariosManager-&amp;gt;getUsuarioByEmail($uid);&lt;br /&gt;
            if (!$this-&amp;gt;loginSubject) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario 'mail=$uid' no existe&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //Si autentica y esta vencida la cuenta se marca como bloqueado&lt;br /&gt;
            $dt = new DateTime();&lt;br /&gt;
            $dt-&amp;gt;setTimestamp(Temporal::getTime());&lt;br /&gt;
            &lt;br /&gt;
            $uid = $this-&amp;gt;loginSubject-&amp;gt;getUid();&lt;br /&gt;
            $this-&amp;gt;validarCuentaExpirada($usuariosManager, $uid, $dt);&lt;br /&gt;
            &lt;br /&gt;
            /**&lt;br /&gt;
             * Se maneja de forma externa, no agregar nuevas cuestiones relacionadas a las claves del usuario&lt;br /&gt;
                $this-&amp;gt;validarPasswordVencido($usuariosManager, $uid, $dt);&lt;br /&gt;
                $usuariosManager-&amp;gt;anularPedidosCambioPasswordPrevios($uid);&lt;br /&gt;
            */&lt;br /&gt;
            &lt;br /&gt;
            $attributes = $usuariosManager-&amp;gt;getAtributosSAMLUsuario($this-&amp;gt;loginSubject);&lt;br /&gt;
        } catch (SIU\AraiUsuarios\Error $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se ingresa un usuario y/o clave incorrecto', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw new SimpleSAML\Error\Error('WRONGUSERPASS', $e);&lt;br /&gt;
        } catch (\Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw $e;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Factory::getIdpLogger()-&amp;gt;info('Usuario realiza login correcto', $contexto);&lt;br /&gt;
        SimpleSAML\Logger::info('arai:' . $this-&amp;gt;authId . ': Attributes: ' . implode(',', array_keys($attributes)));&lt;br /&gt;
&lt;br /&gt;
        return $attributes;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param $uid&lt;br /&gt;
     * @param $clave&lt;br /&gt;
     * @return bool&lt;br /&gt;
     * @throws \GuzzleHttp\Exception\GuzzleException&lt;br /&gt;
     */&lt;br /&gt;
    private function autenticarEnFirebase($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        $status = false;&lt;br /&gt;
&lt;br /&gt;
        $key = $this-&amp;gt;firebase_key;&lt;br /&gt;
&lt;br /&gt;
        $uri = $this-&amp;gt;firebase_uri . $key;&lt;br /&gt;
&lt;br /&gt;
        $contexto = [&lt;br /&gt;
            'firebase_user' =&amp;gt; $uid,&lt;br /&gt;
            'firebase_key' =&amp;gt; $key,&lt;br /&gt;
            'firebase_uri' =&amp;gt; $uri,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        $body = [&lt;br /&gt;
            'email'=&amp;gt; $uid,&lt;br /&gt;
            'password'=&amp;gt; $clave,&lt;br /&gt;
            'returnSecureToken'=&amp;gt; true,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            $client = new GuzzleHttp\Client();&lt;br /&gt;
&lt;br /&gt;
            $res = $client-&amp;gt;request('POST', $uri, [&lt;br /&gt;
                'json' =&amp;gt; $body&lt;br /&gt;
            ]);&lt;br /&gt;
&lt;br /&gt;
            $status = $res-&amp;gt;getStatusCode() == 200;&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\RequestException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getMessage();&lt;br /&gt;
            if ($e-&amp;gt;hasResponse()) {&lt;br /&gt;
                $msg = json_decode($e-&amp;gt;getResponse()-&amp;gt;getBody()-&amp;gt;getContents());&lt;br /&gt;
                $msg = $msg-&amp;gt;error-&amp;gt;errors;&lt;br /&gt;
            }&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\ClientException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getResponse()-&amp;gt;getReasonPhrase();&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $status;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106110</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106110"/>
				<updated>2025-04-07T15:05:57Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;Hola mundo&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106109</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106109"/>
				<updated>2025-04-07T15:01:35Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: Página reemplazada por «&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt; &amp;lt;?php echo &amp;quot;Hola mundo&amp;quot;; ?&amp;gt; &amp;lt;/syntaxhighlight&amp;gt;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;Hola mundo&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106108</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106108"/>
				<updated>2025-04-07T15:01:04Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use SimpleSAML\Logger;&lt;br /&gt;
use SIU\AraiUsuarios;&lt;br /&gt;
use SIU\AraiUsuarios\IDP\Factory;&lt;br /&gt;
use SIU\AraiUsuarios\Core\UsuariosManager;&lt;br /&gt;
use SIU\AraiUsuarios\Entities\Usuario;&lt;br /&gt;
use SIU\AraiUsuarios\Error;&lt;br /&gt;
&lt;br /&gt;
use SAML2\Utilities\Temporal;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Simple SQL authentication source&lt;br /&gt;
 *&lt;br /&gt;
 * Implementa la autenticación contra un servicio Google Firebase Auth&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * @package simpleSAMLphp&lt;br /&gt;
 * @version $Id$&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class sspmod_arai_Auth_Source_AraiFirebaseAuth extends sspmod_arai_Auth_Source_AraiAuth&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    public function __construct($info, $config)&lt;br /&gt;
    {&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_uri&amp;quot;])');&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_key&amp;quot;])');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;firebase_uri = $config['firebase_uri'];&lt;br /&gt;
        $this-&amp;gt;firebase_key = $config['firebase_key'];&lt;br /&gt;
&lt;br /&gt;
        parent::__construct($info, $config);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    protected function login($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        assert('is_string($uid)');&lt;br /&gt;
        assert('is_string($clave)');&lt;br /&gt;
&lt;br /&gt;
        $contexto = ['usuario' =&amp;gt; $uid];&lt;br /&gt;
        $uid = strtolower($uid);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            /* @var UsuariosManager $usuariosManager */&lt;br /&gt;
            $usuariosManager = Factory::getUsuariosManager();&lt;br /&gt;
&lt;br /&gt;
            if (!$this-&amp;gt;autenticarEnFirebase($uid, $clave)) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario Firebase '$uid' ingresa usuario y/o clave incorrecta&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // TODO: deberíamos permitir que la auth vía Firebase escoja si es por uid o email?&lt;br /&gt;
            $this-&amp;gt;loginSubject = $usuariosManager-&amp;gt;getUsuarioByEmail($uid);&lt;br /&gt;
            if (!$this-&amp;gt;loginSubject) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario 'mail=$uid' no existe&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //Si autentica y esta vencida la cuenta se marca como bloqueado&lt;br /&gt;
            $dt = new DateTime();&lt;br /&gt;
            $dt-&amp;gt;setTimestamp(Temporal::getTime());&lt;br /&gt;
            &lt;br /&gt;
            $uid = $this-&amp;gt;loginSubject-&amp;gt;getUid();&lt;br /&gt;
            $this-&amp;gt;validarCuentaExpirada($usuariosManager, $uid, $dt);&lt;br /&gt;
            &lt;br /&gt;
            /**&lt;br /&gt;
             * Se maneja de forma externa, no agregar nuevas cuestiones relacionadas a las claves del usuario&lt;br /&gt;
                $this-&amp;gt;validarPasswordVencido($usuariosManager, $uid, $dt);&lt;br /&gt;
                $usuariosManager-&amp;gt;anularPedidosCambioPasswordPrevios($uid);&lt;br /&gt;
            */&lt;br /&gt;
            &lt;br /&gt;
            $attributes = $usuariosManager-&amp;gt;getAtributosSAMLUsuario($this-&amp;gt;loginSubject);&lt;br /&gt;
        } catch (SIU\AraiUsuarios\Error $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se ingresa un usuario y/o clave incorrecto', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw new SimpleSAML\Error\Error('WRONGUSERPASS', $e);&lt;br /&gt;
        } catch (\Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw $e;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Factory::getIdpLogger()-&amp;gt;info('Usuario realiza login correcto', $contexto);&lt;br /&gt;
        SimpleSAML\Logger::info('arai:' . $this-&amp;gt;authId . ': Attributes: ' . implode(',', array_keys($attributes)));&lt;br /&gt;
&lt;br /&gt;
        return $attributes;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param $uid&lt;br /&gt;
     * @param $clave&lt;br /&gt;
     * @return bool&lt;br /&gt;
     * @throws \GuzzleHttp\Exception\GuzzleException&lt;br /&gt;
     */&lt;br /&gt;
    private function autenticarEnFirebase($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        $status = false;&lt;br /&gt;
&lt;br /&gt;
        $key = $this-&amp;gt;firebase_key;&lt;br /&gt;
&lt;br /&gt;
        $uri = $this-&amp;gt;firebase_uri . $key;&lt;br /&gt;
&lt;br /&gt;
        $contexto = [&lt;br /&gt;
            'firebase_user' =&amp;gt; $uid,&lt;br /&gt;
            'firebase_key' =&amp;gt; $key,&lt;br /&gt;
            'firebase_uri' =&amp;gt; $uri,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        $body = [&lt;br /&gt;
            'email'=&amp;gt; $uid,&lt;br /&gt;
            'password'=&amp;gt; $clave,&lt;br /&gt;
            'returnSecureToken'=&amp;gt; true,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            $client = new GuzzleHttp\Client();&lt;br /&gt;
&lt;br /&gt;
            $res = $client-&amp;gt;request('POST', $uri, [&lt;br /&gt;
                'json' =&amp;gt; $body&lt;br /&gt;
            ]);&lt;br /&gt;
&lt;br /&gt;
            $status = $res-&amp;gt;getStatusCode() == 200;&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\RequestException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getMessage();&lt;br /&gt;
            if ($e-&amp;gt;hasResponse()) {&lt;br /&gt;
                $msg = json_decode($e-&amp;gt;getResponse()-&amp;gt;getBody()-&amp;gt;getContents());&lt;br /&gt;
                $msg = $msg-&amp;gt;error-&amp;gt;errors;&lt;br /&gt;
            }&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\ClientException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getResponse()-&amp;gt;getReasonPhrase();&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $status;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106107</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106107"/>
				<updated>2025-04-07T14:59:54Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== AraiFirebaseAuth.php ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use SimpleSAML\Logger;&lt;br /&gt;
use SIU\AraiUsuarios;&lt;br /&gt;
use SIU\AraiUsuarios\IDP\Factory;&lt;br /&gt;
use SIU\AraiUsuarios\Core\UsuariosManager;&lt;br /&gt;
use SIU\AraiUsuarios\Entities\Usuario;&lt;br /&gt;
use SIU\AraiUsuarios\Error;&lt;br /&gt;
&lt;br /&gt;
use SAML2\Utilities\Temporal;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Simple SQL authentication source&lt;br /&gt;
 *&lt;br /&gt;
 * Implementa la autenticación contra un servicio Google Firebase Auth&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * @package simpleSAMLphp&lt;br /&gt;
 * @version $Id$&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class sspmod_arai_Auth_Source_AraiFirebaseAuth extends sspmod_arai_Auth_Source_AraiAuth&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    public function __construct($info, $config)&lt;br /&gt;
    {&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_uri&amp;quot;])');&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_key&amp;quot;])');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;firebase_uri = $config['firebase_uri'];&lt;br /&gt;
        $this-&amp;gt;firebase_key = $config['firebase_key'];&lt;br /&gt;
&lt;br /&gt;
        parent::__construct($info, $config);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    protected function login($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        assert('is_string($uid)');&lt;br /&gt;
        assert('is_string($clave)');&lt;br /&gt;
&lt;br /&gt;
        $contexto = ['usuario' =&amp;gt; $uid];&lt;br /&gt;
        $uid = strtolower($uid);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            /* @var UsuariosManager $usuariosManager */&lt;br /&gt;
            $usuariosManager = Factory::getUsuariosManager();&lt;br /&gt;
&lt;br /&gt;
            if (!$this-&amp;gt;autenticarEnFirebase($uid, $clave)) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario Firebase '$uid' ingresa usuario y/o clave incorrecta&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // TODO: deberíamos permitir que la auth vía Firebase escoja si es por uid o email?&lt;br /&gt;
            $this-&amp;gt;loginSubject = $usuariosManager-&amp;gt;getUsuarioByEmail($uid);&lt;br /&gt;
            if (!$this-&amp;gt;loginSubject) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario 'mail=$uid' no existe&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //Si autentica y esta vencida la cuenta se marca como bloqueado&lt;br /&gt;
            $dt = new DateTime();&lt;br /&gt;
            $dt-&amp;gt;setTimestamp(Temporal::getTime());&lt;br /&gt;
            &lt;br /&gt;
            $uid = $this-&amp;gt;loginSubject-&amp;gt;getUid();&lt;br /&gt;
            $this-&amp;gt;validarCuentaExpirada($usuariosManager, $uid, $dt);&lt;br /&gt;
            &lt;br /&gt;
            /**&lt;br /&gt;
             * Se maneja de forma externa, no agregar nuevas cuestiones relacionadas a las claves del usuario&lt;br /&gt;
                $this-&amp;gt;validarPasswordVencido($usuariosManager, $uid, $dt);&lt;br /&gt;
                $usuariosManager-&amp;gt;anularPedidosCambioPasswordPrevios($uid);&lt;br /&gt;
            */&lt;br /&gt;
            &lt;br /&gt;
            $attributes = $usuariosManager-&amp;gt;getAtributosSAMLUsuario($this-&amp;gt;loginSubject);&lt;br /&gt;
        } catch (SIU\AraiUsuarios\Error $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se ingresa un usuario y/o clave incorrecto', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw new SimpleSAML\Error\Error('WRONGUSERPASS', $e);&lt;br /&gt;
        } catch (\Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw $e;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Factory::getIdpLogger()-&amp;gt;info('Usuario realiza login correcto', $contexto);&lt;br /&gt;
        SimpleSAML\Logger::info('arai:' . $this-&amp;gt;authId . ': Attributes: ' . implode(',', array_keys($attributes)));&lt;br /&gt;
&lt;br /&gt;
        return $attributes;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param $uid&lt;br /&gt;
     * @param $clave&lt;br /&gt;
     * @return bool&lt;br /&gt;
     * @throws \GuzzleHttp\Exception\GuzzleException&lt;br /&gt;
     */&lt;br /&gt;
    private function autenticarEnFirebase($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        $status = false;&lt;br /&gt;
&lt;br /&gt;
        $key = $this-&amp;gt;firebase_key;&lt;br /&gt;
&lt;br /&gt;
        $uri = $this-&amp;gt;firebase_uri . $key;&lt;br /&gt;
&lt;br /&gt;
        $contexto = [&lt;br /&gt;
            'firebase_user' =&amp;gt; $uid,&lt;br /&gt;
            'firebase_key' =&amp;gt; $key,&lt;br /&gt;
            'firebase_uri' =&amp;gt; $uri,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        $body = [&lt;br /&gt;
            'email'=&amp;gt; $uid,&lt;br /&gt;
            'password'=&amp;gt; $clave,&lt;br /&gt;
            'returnSecureToken'=&amp;gt; true,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            $client = new GuzzleHttp\Client();&lt;br /&gt;
&lt;br /&gt;
            $res = $client-&amp;gt;request('POST', $uri, [&lt;br /&gt;
                'json' =&amp;gt; $body&lt;br /&gt;
            ]);&lt;br /&gt;
&lt;br /&gt;
            $status = $res-&amp;gt;getStatusCode() == 200;&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\RequestException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getMessage();&lt;br /&gt;
            if ($e-&amp;gt;hasResponse()) {&lt;br /&gt;
                $msg = json_decode($e-&amp;gt;getResponse()-&amp;gt;getBody()-&amp;gt;getContents());&lt;br /&gt;
                $msg = $msg-&amp;gt;error-&amp;gt;errors;&lt;br /&gt;
            }&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\ClientException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getResponse()-&amp;gt;getReasonPhrase();&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $status;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106106</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106106"/>
				<updated>2025-04-07T14:57:38Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== AraiFirebaseAuth.php ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use SimpleSAML\Logger;&lt;br /&gt;
use SIU\AraiUsuarios;&lt;br /&gt;
use SIU\AraiUsuarios\IDP\Factory;&lt;br /&gt;
use SIU\AraiUsuarios\Core\UsuariosManager;&lt;br /&gt;
use SIU\AraiUsuarios\Entities\Usuario;&lt;br /&gt;
use SIU\AraiUsuarios\Error;&lt;br /&gt;
&lt;br /&gt;
use SAML2\Utilities\Temporal;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Simple SQL authentication source&lt;br /&gt;
 *&lt;br /&gt;
 * Implementa la autenticación contra un servicio Google Firebase Auth&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * @package simpleSAMLphp&lt;br /&gt;
 * @version $Id$&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class sspmod_arai_Auth_Source_AraiFirebaseAuth extends sspmod_arai_Auth_Source_AraiAuth&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    public function __construct($info, $config)&lt;br /&gt;
    {&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_uri&amp;quot;])');&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_key&amp;quot;])');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;firebase_uri = $config['firebase_uri'];&lt;br /&gt;
        $this-&amp;gt;firebase_key = $config['firebase_key'];&lt;br /&gt;
&lt;br /&gt;
        parent::__construct($info, $config);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    protected function login($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        assert('is_string($uid)');&lt;br /&gt;
        assert('is_string($clave)');&lt;br /&gt;
&lt;br /&gt;
        $contexto = ['usuario' =&amp;gt; $uid];&lt;br /&gt;
        $uid = strtolower($uid);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            /* @var UsuariosManager $usuariosManager */&lt;br /&gt;
            $usuariosManager = Factory::getUsuariosManager();&lt;br /&gt;
&lt;br /&gt;
            if (!$this-&amp;gt;autenticarEnFirebase($uid, $clave)) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario Firebase '$uid' ingresa usuario y/o clave incorrecta&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // TODO: deberíamos permitir que la auth vía Firebase escoja si es por uid o email?&lt;br /&gt;
            $this-&amp;gt;loginSubject = $usuariosManager-&amp;gt;getUsuarioByEmail($uid);&lt;br /&gt;
            if (!$this-&amp;gt;loginSubject) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario 'mail=$uid' no existe&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //Si autentica y esta vencida la cuenta se marca como bloqueado&lt;br /&gt;
            $dt = new DateTime();&lt;br /&gt;
            $dt-&amp;gt;setTimestamp(Temporal::getTime());&lt;br /&gt;
            &lt;br /&gt;
            $uid = $this-&amp;gt;loginSubject-&amp;gt;getUid();&lt;br /&gt;
            $this-&amp;gt;validarCuentaExpirada($usuariosManager, $uid, $dt);&lt;br /&gt;
            &lt;br /&gt;
            /**&lt;br /&gt;
             * Se maneja de forma externa, no agregar nuevas cuestiones relacionadas a las claves del usuario&lt;br /&gt;
                $this-&amp;gt;validarPasswordVencido($usuariosManager, $uid, $dt);&lt;br /&gt;
                $usuariosManager-&amp;gt;anularPedidosCambioPasswordPrevios($uid);&lt;br /&gt;
            */&lt;br /&gt;
            &lt;br /&gt;
            $attributes = $usuariosManager-&amp;gt;getAtributosSAMLUsuario($this-&amp;gt;loginSubject);&lt;br /&gt;
        } catch (SIU\AraiUsuarios\Error $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se ingresa un usuario y/o clave incorrecto', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw new SimpleSAML\Error\Error('WRONGUSERPASS', $e);&lt;br /&gt;
        } catch (\Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw $e;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Factory::getIdpLogger()-&amp;gt;info('Usuario realiza login correcto', $contexto);&lt;br /&gt;
        SimpleSAML\Logger::info('arai:' . $this-&amp;gt;authId . ': Attributes: ' . implode(',', array_keys($attributes)));&lt;br /&gt;
&lt;br /&gt;
        return $attributes;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param $uid&lt;br /&gt;
     * @param $clave&lt;br /&gt;
     * @return bool&lt;br /&gt;
     * @throws \GuzzleHttp\Exception\GuzzleException&lt;br /&gt;
     */&lt;br /&gt;
    private function autenticarEnFirebase($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        $status = false;&lt;br /&gt;
&lt;br /&gt;
        $key = $this-&amp;gt;firebase_key;&lt;br /&gt;
&lt;br /&gt;
        $uri = $this-&amp;gt;firebase_uri . $key;&lt;br /&gt;
&lt;br /&gt;
        $contexto = [&lt;br /&gt;
            'firebase_user' =&amp;gt; $uid,&lt;br /&gt;
            'firebase_key' =&amp;gt; $key,&lt;br /&gt;
            'firebase_uri' =&amp;gt; $uri,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        $body = [&lt;br /&gt;
            'email'=&amp;gt; $uid,&lt;br /&gt;
            'password'=&amp;gt; $clave,&lt;br /&gt;
            'returnSecureToken'=&amp;gt; true,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            $client = new GuzzleHttp\Client();&lt;br /&gt;
&lt;br /&gt;
            $res = $client-&amp;gt;request('POST', $uri, [&lt;br /&gt;
                'json' =&amp;gt; $body&lt;br /&gt;
            ]);&lt;br /&gt;
&lt;br /&gt;
            $status = $res-&amp;gt;getStatusCode() == 200;&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\RequestException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getMessage();&lt;br /&gt;
            if ($e-&amp;gt;hasResponse()) {&lt;br /&gt;
                $msg = json_decode($e-&amp;gt;getResponse()-&amp;gt;getBody()-&amp;gt;getContents());&lt;br /&gt;
                $msg = $msg-&amp;gt;error-&amp;gt;errors;&lt;br /&gt;
            }&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\ClientException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getResponse()-&amp;gt;getReasonPhrase();&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $status;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106105</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106105"/>
				<updated>2025-04-07T14:56:55Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== AraiFirebaseAuth.php ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use SimpleSAML\Logger;&lt;br /&gt;
use SIU\AraiUsuarios;&lt;br /&gt;
use SIU\AraiUsuarios\IDP\Factory;&lt;br /&gt;
use SIU\AraiUsuarios\Core\UsuariosManager;&lt;br /&gt;
use SIU\AraiUsuarios\Entities\Usuario;&lt;br /&gt;
use SIU\AraiUsuarios\Error;&lt;br /&gt;
&lt;br /&gt;
use SAML2\Utilities\Temporal;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Simple SQL authentication source&lt;br /&gt;
 *&lt;br /&gt;
 * Implementa la autenticación contra un servicio Google Firebase Auth&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * @package simpleSAMLphp&lt;br /&gt;
 * @version $Id$&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class sspmod_arai_Auth_Source_AraiFirebaseAuth extends sspmod_arai_Auth_Source_AraiAuth&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    public function __construct($info, $config)&lt;br /&gt;
    {&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_uri&amp;quot;])');&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_key&amp;quot;])');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;firebase_uri = $config['firebase_uri'];&lt;br /&gt;
        $this-&amp;gt;firebase_key = $config['firebase_key'];&lt;br /&gt;
&lt;br /&gt;
        parent::__construct($info, $config);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    protected function login($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        assert('is_string($uid)');&lt;br /&gt;
        assert('is_string($clave)');&lt;br /&gt;
&lt;br /&gt;
        $contexto = ['usuario' =&amp;gt; $uid];&lt;br /&gt;
        $uid = strtolower($uid);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            /* @var UsuariosManager $usuariosManager */&lt;br /&gt;
            $usuariosManager = Factory::getUsuariosManager();&lt;br /&gt;
&lt;br /&gt;
            if (!$this-&amp;gt;autenticarEnFirebase($uid, $clave)) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario Firebase '$uid' ingresa usuario y/o clave incorrecta&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // TODO: deberíamos permitir que la auth vía Firebase escoja si es por uid o email?&lt;br /&gt;
            $this-&amp;gt;loginSubject = $usuariosManager-&amp;gt;getUsuarioByEmail($uid);&lt;br /&gt;
            if (!$this-&amp;gt;loginSubject) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario 'mail=$uid' no existe&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //Si autentica y esta vencida la cuenta se marca como bloqueado&lt;br /&gt;
            $dt = new DateTime();&lt;br /&gt;
            $dt-&amp;gt;setTimestamp(Temporal::getTime());&lt;br /&gt;
            &lt;br /&gt;
            $uid = $this-&amp;gt;loginSubject-&amp;gt;getUid();&lt;br /&gt;
            $this-&amp;gt;validarCuentaExpirada($usuariosManager, $uid, $dt);&lt;br /&gt;
            &lt;br /&gt;
            /**&lt;br /&gt;
             * Se maneja de forma externa, no agregar nuevas cuestiones relacionadas a las claves del usuario&lt;br /&gt;
                $this-&amp;gt;validarPasswordVencido($usuariosManager, $uid, $dt);&lt;br /&gt;
                $usuariosManager-&amp;gt;anularPedidosCambioPasswordPrevios($uid);&lt;br /&gt;
            */&lt;br /&gt;
            &lt;br /&gt;
            $attributes = $usuariosManager-&amp;gt;getAtributosSAMLUsuario($this-&amp;gt;loginSubject);&lt;br /&gt;
        } catch (SIU\AraiUsuarios\Error $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se ingresa un usuario y/o clave incorrecto', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw new SimpleSAML\Error\Error('WRONGUSERPASS', $e);&lt;br /&gt;
        } catch (\Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw $e;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Factory::getIdpLogger()-&amp;gt;info('Usuario realiza login correcto', $contexto);&lt;br /&gt;
        SimpleSAML\Logger::info('arai:' . $this-&amp;gt;authId . ': Attributes: ' . implode(',', array_keys($attributes)));&lt;br /&gt;
&lt;br /&gt;
        return $attributes;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param $uid&lt;br /&gt;
     * @param $clave&lt;br /&gt;
     * @return bool&lt;br /&gt;
     * @throws \GuzzleHttp\Exception\GuzzleException&lt;br /&gt;
     */&lt;br /&gt;
    private function autenticarEnFirebase($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        $status = false;&lt;br /&gt;
&lt;br /&gt;
        $key = $this-&amp;gt;firebase_key;&lt;br /&gt;
&lt;br /&gt;
        $uri = $this-&amp;gt;firebase_uri . $key;&lt;br /&gt;
&lt;br /&gt;
        $contexto = [&lt;br /&gt;
            'firebase_user' =&amp;gt; $uid,&lt;br /&gt;
            'firebase_key' =&amp;gt; $key,&lt;br /&gt;
            'firebase_uri' =&amp;gt; $uri,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        $body = [&lt;br /&gt;
            'email'=&amp;gt; $uid,&lt;br /&gt;
            'password'=&amp;gt; $clave,&lt;br /&gt;
            'returnSecureToken'=&amp;gt; true,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            $client = new GuzzleHttp\Client();&lt;br /&gt;
&lt;br /&gt;
            $res = $client-&amp;gt;request('POST', $uri, [&lt;br /&gt;
                'json' =&amp;gt; $body&lt;br /&gt;
            ]);&lt;br /&gt;
&lt;br /&gt;
            $status = $res-&amp;gt;getStatusCode() == 200;&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\RequestException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getMessage();&lt;br /&gt;
            if ($e-&amp;gt;hasResponse()) {&lt;br /&gt;
                $msg = json_decode($e-&amp;gt;getResponse()-&amp;gt;getBody()-&amp;gt;getContents());&lt;br /&gt;
                $msg = $msg-&amp;gt;error-&amp;gt;errors;&lt;br /&gt;
            }&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\ClientException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getResponse()-&amp;gt;getReasonPhrase();&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $status;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106104</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106104"/>
				<updated>2025-04-07T14:55:50Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== AraiFirebaseAuth.php ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use SimpleSAML\Logger;&lt;br /&gt;
use SIU\AraiUsuarios;&lt;br /&gt;
use SIU\AraiUsuarios\IDP\Factory;&lt;br /&gt;
use SIU\AraiUsuarios\Core\UsuariosManager;&lt;br /&gt;
use SIU\AraiUsuarios\Entities\Usuario;&lt;br /&gt;
use SIU\AraiUsuarios\Error;&lt;br /&gt;
&lt;br /&gt;
use SAML2\Utilities\Temporal;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Simple SQL authentication source&lt;br /&gt;
 *&lt;br /&gt;
 * Implementa la autenticación contra un servicio Google Firebase Auth&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * @package simpleSAMLphp&lt;br /&gt;
 * @version $Id$&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
class sspmod_arai_Auth_Source_AraiFirebaseAuth extends sspmod_arai_Auth_Source_AraiAuth&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    public function __construct($info, $config)&lt;br /&gt;
    {&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_uri&amp;quot;])');&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_key&amp;quot;])');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;firebase_uri = $config['firebase_uri'];&lt;br /&gt;
        $this-&amp;gt;firebase_key = $config['firebase_key'];&lt;br /&gt;
&lt;br /&gt;
        parent::__construct($info, $config);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    protected function login($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        assert('is_string($uid)');&lt;br /&gt;
        assert('is_string($clave)');&lt;br /&gt;
&lt;br /&gt;
        $contexto = ['usuario' =&amp;gt; $uid];&lt;br /&gt;
        $uid = strtolower($uid);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            /* @var UsuariosManager $usuariosManager */&lt;br /&gt;
            $usuariosManager = Factory::getUsuariosManager();&lt;br /&gt;
&lt;br /&gt;
            if (!$this-&amp;gt;autenticarEnFirebase($uid, $clave)) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario Firebase '$uid' ingresa usuario y/o clave incorrecta&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // TODO: deberíamos permitir que la auth vía Firebase escoja si es por uid o email?&lt;br /&gt;
            $this-&amp;gt;loginSubject = $usuariosManager-&amp;gt;getUsuarioByEmail($uid);&lt;br /&gt;
            if (!$this-&amp;gt;loginSubject) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario 'mail=$uid' no existe&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //Si autentica y esta vencida la cuenta se marca como bloqueado&lt;br /&gt;
            $dt = new DateTime();&lt;br /&gt;
            $dt-&amp;gt;setTimestamp(Temporal::getTime());&lt;br /&gt;
            &lt;br /&gt;
            $uid = $this-&amp;gt;loginSubject-&amp;gt;getUid();&lt;br /&gt;
            $this-&amp;gt;validarCuentaExpirada($usuariosManager, $uid, $dt);&lt;br /&gt;
            &lt;br /&gt;
            /**&lt;br /&gt;
             * Se maneja de forma externa, no agregar nuevas cuestiones relacionadas a las claves del usuario&lt;br /&gt;
                $this-&amp;gt;validarPasswordVencido($usuariosManager, $uid, $dt);&lt;br /&gt;
                $usuariosManager-&amp;gt;anularPedidosCambioPasswordPrevios($uid);&lt;br /&gt;
            */&lt;br /&gt;
            &lt;br /&gt;
            $attributes = $usuariosManager-&amp;gt;getAtributosSAMLUsuario($this-&amp;gt;loginSubject);&lt;br /&gt;
        } catch (SIU\AraiUsuarios\Error $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se ingresa un usuario y/o clave incorrecto', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw new SimpleSAML\Error\Error('WRONGUSERPASS', $e);&lt;br /&gt;
        } catch (\Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw $e;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Factory::getIdpLogger()-&amp;gt;info('Usuario realiza login correcto', $contexto);&lt;br /&gt;
        SimpleSAML\Logger::info('arai:' . $this-&amp;gt;authId . ': Attributes: ' . implode(',', array_keys($attributes)));&lt;br /&gt;
&lt;br /&gt;
        return $attributes;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param $uid&lt;br /&gt;
     * @param $clave&lt;br /&gt;
     * @return bool&lt;br /&gt;
     * @throws \GuzzleHttp\Exception\GuzzleException&lt;br /&gt;
     */&lt;br /&gt;
    private function autenticarEnFirebase($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        $status = false;&lt;br /&gt;
&lt;br /&gt;
        $key = $this-&amp;gt;firebase_key;&lt;br /&gt;
&lt;br /&gt;
        $uri = $this-&amp;gt;firebase_uri . $key;&lt;br /&gt;
&lt;br /&gt;
        $contexto = [&lt;br /&gt;
            'firebase_user' =&amp;gt; $uid,&lt;br /&gt;
            'firebase_key' =&amp;gt; $key,&lt;br /&gt;
            'firebase_uri' =&amp;gt; $uri,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        $body = [&lt;br /&gt;
            'email'=&amp;gt; $uid,&lt;br /&gt;
            'password'=&amp;gt; $clave,&lt;br /&gt;
            'returnSecureToken'=&amp;gt; true,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            $client = new GuzzleHttp\Client();&lt;br /&gt;
&lt;br /&gt;
            $res = $client-&amp;gt;request('POST', $uri, [&lt;br /&gt;
                'json' =&amp;gt; $body&lt;br /&gt;
            ]);&lt;br /&gt;
&lt;br /&gt;
            $status = $res-&amp;gt;getStatusCode() == 200;&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\RequestException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getMessage();&lt;br /&gt;
            if ($e-&amp;gt;hasResponse()) {&lt;br /&gt;
                $msg = json_decode($e-&amp;gt;getResponse()-&amp;gt;getBody()-&amp;gt;getContents());&lt;br /&gt;
                $msg = $msg-&amp;gt;error-&amp;gt;errors;&lt;br /&gt;
            }&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\ClientException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getResponse()-&amp;gt;getReasonPhrase();&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $status;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106103</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106103"/>
				<updated>2025-04-07T14:18:08Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== AraiFirebaseAuth.php ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use SimpleSAML\Logger;&lt;br /&gt;
use SIU\AraiUsuarios;&lt;br /&gt;
use SIU\AraiUsuarios\IDP\Factory;&lt;br /&gt;
use SIU\AraiUsuarios\Core\UsuariosManager;&lt;br /&gt;
use SIU\AraiUsuarios\Entities\Usuario;&lt;br /&gt;
use SIU\AraiUsuarios\Error;&lt;br /&gt;
&lt;br /&gt;
use SAML2\Utilities\Temporal;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Simple SQL authentication source&lt;br /&gt;
 *&lt;br /&gt;
 * Implementa la autenticación contra un servicio Google Firebase Auth&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * @package simpleSAMLphp&lt;br /&gt;
 * @version $Id$&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
class sspmod_arai_Auth_Source_AraiFirebaseAuth extends sspmod_arai_Auth_Source_AraiAuth&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    public function __construct($info, $config)&lt;br /&gt;
    {&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_uri&amp;quot;])');&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_key&amp;quot;])');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;firebase_uri = $config['firebase_uri'];&lt;br /&gt;
        $this-&amp;gt;firebase_key = $config['firebase_key'];&lt;br /&gt;
&lt;br /&gt;
        parent::__construct($info, $config);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    protected function login($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        assert('is_string($uid)');&lt;br /&gt;
        assert('is_string($clave)');&lt;br /&gt;
&lt;br /&gt;
        $contexto = ['usuario' =&amp;gt; $uid];&lt;br /&gt;
        $uid = strtolower($uid);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            /* @var UsuariosManager $usuariosManager */&lt;br /&gt;
            $usuariosManager = Factory::getUsuariosManager();&lt;br /&gt;
&lt;br /&gt;
            if (!$this-&amp;gt;autenticarEnFirebase($uid, $clave)) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario Firebase '$uid' ingresa usuario y/o clave incorrecta&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // TODO: deberíamos permitir que la auth vía Firebase escoja si es por uid o email?&lt;br /&gt;
            $this-&amp;gt;loginSubject = $usuariosManager-&amp;gt;getUsuarioByEmail($uid);&lt;br /&gt;
            if (!$this-&amp;gt;loginSubject) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario 'mail=$uid' no existe&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //Si autentica y esta vencida la cuenta se marca como bloqueado&lt;br /&gt;
            $dt = new DateTime();&lt;br /&gt;
            $dt-&amp;gt;setTimestamp(Temporal::getTime());&lt;br /&gt;
            &lt;br /&gt;
            $uid = $this-&amp;gt;loginSubject-&amp;gt;getUid();&lt;br /&gt;
            $this-&amp;gt;validarCuentaExpirada($usuariosManager, $uid, $dt);&lt;br /&gt;
            &lt;br /&gt;
            /**&lt;br /&gt;
             * Se maneja de forma externa, no agregar nuevas cuestiones relacionadas a las claves del usuario&lt;br /&gt;
                $this-&amp;gt;validarPasswordVencido($usuariosManager, $uid, $dt);&lt;br /&gt;
                $usuariosManager-&amp;gt;anularPedidosCambioPasswordPrevios($uid);&lt;br /&gt;
            */&lt;br /&gt;
            &lt;br /&gt;
            $attributes = $usuariosManager-&amp;gt;getAtributosSAMLUsuario($this-&amp;gt;loginSubject);&lt;br /&gt;
        } catch (SIU\AraiUsuarios\Error $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se ingresa un usuario y/o clave incorrecto', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw new SimpleSAML\Error\Error('WRONGUSERPASS', $e);&lt;br /&gt;
        } catch (\Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw $e;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Factory::getIdpLogger()-&amp;gt;info('Usuario realiza login correcto', $contexto);&lt;br /&gt;
        SimpleSAML\Logger::info('arai:' . $this-&amp;gt;authId . ': Attributes: ' . implode(',', array_keys($attributes)));&lt;br /&gt;
&lt;br /&gt;
        return $attributes;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param $uid&lt;br /&gt;
     * @param $clave&lt;br /&gt;
     * @return bool&lt;br /&gt;
     * @throws \GuzzleHttp\Exception\GuzzleException&lt;br /&gt;
     */&lt;br /&gt;
    private function autenticarEnFirebase($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        $status = false;&lt;br /&gt;
&lt;br /&gt;
        $key = $this-&amp;gt;firebase_key;&lt;br /&gt;
&lt;br /&gt;
        $uri = $this-&amp;gt;firebase_uri . $key;&lt;br /&gt;
&lt;br /&gt;
        $contexto = [&lt;br /&gt;
            'firebase_user' =&amp;gt; $uid,&lt;br /&gt;
            'firebase_key' =&amp;gt; $key,&lt;br /&gt;
            'firebase_uri' =&amp;gt; $uri,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        $body = [&lt;br /&gt;
            'email'=&amp;gt; $uid,&lt;br /&gt;
            'password'=&amp;gt; $clave,&lt;br /&gt;
            'returnSecureToken'=&amp;gt; true,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            $client = new GuzzleHttp\Client();&lt;br /&gt;
&lt;br /&gt;
            $res = $client-&amp;gt;request('POST', $uri, [&lt;br /&gt;
                'json' =&amp;gt; $body&lt;br /&gt;
            ]);&lt;br /&gt;
&lt;br /&gt;
            $status = $res-&amp;gt;getStatusCode() == 200;&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\RequestException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getMessage();&lt;br /&gt;
            if ($e-&amp;gt;hasResponse()) {&lt;br /&gt;
                $msg = json_decode($e-&amp;gt;getResponse()-&amp;gt;getBody()-&amp;gt;getContents());&lt;br /&gt;
                $msg = $msg-&amp;gt;error-&amp;gt;errors;&lt;br /&gt;
            }&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\ClientException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getResponse()-&amp;gt;getReasonPhrase();&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $status;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106102</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106102"/>
				<updated>2025-04-07T14:17:45Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== AraiFirebaseAuth.php ==&lt;br /&gt;
&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use SimpleSAML\Logger;&lt;br /&gt;
use SIU\AraiUsuarios;&lt;br /&gt;
use SIU\AraiUsuarios\IDP\Factory;&lt;br /&gt;
use SIU\AraiUsuarios\Core\UsuariosManager;&lt;br /&gt;
use SIU\AraiUsuarios\Entities\Usuario;&lt;br /&gt;
use SIU\AraiUsuarios\Error;&lt;br /&gt;
&lt;br /&gt;
use SAML2\Utilities\Temporal;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Simple SQL authentication source&lt;br /&gt;
 *&lt;br /&gt;
 * Implementa la autenticación contra un servicio Google Firebase Auth&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * @package simpleSAMLphp&lt;br /&gt;
 * @version $Id$&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
class sspmod_arai_Auth_Source_AraiFirebaseAuth extends sspmod_arai_Auth_Source_AraiAuth&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    public function __construct($info, $config)&lt;br /&gt;
    {&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_uri&amp;quot;])');&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_key&amp;quot;])');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;firebase_uri = $config['firebase_uri'];&lt;br /&gt;
        $this-&amp;gt;firebase_key = $config['firebase_key'];&lt;br /&gt;
&lt;br /&gt;
        parent::__construct($info, $config);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    protected function login($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        assert('is_string($uid)');&lt;br /&gt;
        assert('is_string($clave)');&lt;br /&gt;
&lt;br /&gt;
        $contexto = ['usuario' =&amp;gt; $uid];&lt;br /&gt;
        $uid = strtolower($uid);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            /* @var UsuariosManager $usuariosManager */&lt;br /&gt;
            $usuariosManager = Factory::getUsuariosManager();&lt;br /&gt;
&lt;br /&gt;
            if (!$this-&amp;gt;autenticarEnFirebase($uid, $clave)) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario Firebase '$uid' ingresa usuario y/o clave incorrecta&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // TODO: deberíamos permitir que la auth vía Firebase escoja si es por uid o email?&lt;br /&gt;
            $this-&amp;gt;loginSubject = $usuariosManager-&amp;gt;getUsuarioByEmail($uid);&lt;br /&gt;
            if (!$this-&amp;gt;loginSubject) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario 'mail=$uid' no existe&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //Si autentica y esta vencida la cuenta se marca como bloqueado&lt;br /&gt;
            $dt = new DateTime();&lt;br /&gt;
            $dt-&amp;gt;setTimestamp(Temporal::getTime());&lt;br /&gt;
            &lt;br /&gt;
            $uid = $this-&amp;gt;loginSubject-&amp;gt;getUid();&lt;br /&gt;
            $this-&amp;gt;validarCuentaExpirada($usuariosManager, $uid, $dt);&lt;br /&gt;
            &lt;br /&gt;
            /**&lt;br /&gt;
             * Se maneja de forma externa, no agregar nuevas cuestiones relacionadas a las claves del usuario&lt;br /&gt;
                $this-&amp;gt;validarPasswordVencido($usuariosManager, $uid, $dt);&lt;br /&gt;
                $usuariosManager-&amp;gt;anularPedidosCambioPasswordPrevios($uid);&lt;br /&gt;
            */&lt;br /&gt;
            &lt;br /&gt;
            $attributes = $usuariosManager-&amp;gt;getAtributosSAMLUsuario($this-&amp;gt;loginSubject);&lt;br /&gt;
        } catch (SIU\AraiUsuarios\Error $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se ingresa un usuario y/o clave incorrecto', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw new SimpleSAML\Error\Error('WRONGUSERPASS', $e);&lt;br /&gt;
        } catch (\Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw $e;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Factory::getIdpLogger()-&amp;gt;info('Usuario realiza login correcto', $contexto);&lt;br /&gt;
        SimpleSAML\Logger::info('arai:' . $this-&amp;gt;authId . ': Attributes: ' . implode(',', array_keys($attributes)));&lt;br /&gt;
&lt;br /&gt;
        return $attributes;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param $uid&lt;br /&gt;
     * @param $clave&lt;br /&gt;
     * @return bool&lt;br /&gt;
     * @throws \GuzzleHttp\Exception\GuzzleException&lt;br /&gt;
     */&lt;br /&gt;
    private function autenticarEnFirebase($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        $status = false;&lt;br /&gt;
&lt;br /&gt;
        $key = $this-&amp;gt;firebase_key;&lt;br /&gt;
&lt;br /&gt;
        $uri = $this-&amp;gt;firebase_uri . $key;&lt;br /&gt;
&lt;br /&gt;
        $contexto = [&lt;br /&gt;
            'firebase_user' =&amp;gt; $uid,&lt;br /&gt;
            'firebase_key' =&amp;gt; $key,&lt;br /&gt;
            'firebase_uri' =&amp;gt; $uri,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        $body = [&lt;br /&gt;
            'email'=&amp;gt; $uid,&lt;br /&gt;
            'password'=&amp;gt; $clave,&lt;br /&gt;
            'returnSecureToken'=&amp;gt; true,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            $client = new GuzzleHttp\Client();&lt;br /&gt;
&lt;br /&gt;
            $res = $client-&amp;gt;request('POST', $uri, [&lt;br /&gt;
                'json' =&amp;gt; $body&lt;br /&gt;
            ]);&lt;br /&gt;
&lt;br /&gt;
            $status = $res-&amp;gt;getStatusCode() == 200;&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\RequestException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getMessage();&lt;br /&gt;
            if ($e-&amp;gt;hasResponse()) {&lt;br /&gt;
                $msg = json_decode($e-&amp;gt;getResponse()-&amp;gt;getBody()-&amp;gt;getContents());&lt;br /&gt;
                $msg = $msg-&amp;gt;error-&amp;gt;errors;&lt;br /&gt;
            }&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\ClientException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getResponse()-&amp;gt;getReasonPhrase();&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $status;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106101</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106101"/>
				<updated>2025-04-07T14:17:29Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== AraiFirebaseAuth.php ==&lt;br /&gt;
&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use SimpleSAML\Logger;&lt;br /&gt;
use SIU\AraiUsuarios;&lt;br /&gt;
use SIU\AraiUsuarios\IDP\Factory;&lt;br /&gt;
use SIU\AraiUsuarios\Core\UsuariosManager;&lt;br /&gt;
use SIU\AraiUsuarios\Entities\Usuario;&lt;br /&gt;
use SIU\AraiUsuarios\Error;&lt;br /&gt;
&lt;br /&gt;
use SAML2\Utilities\Temporal;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Simple SQL authentication source&lt;br /&gt;
 *&lt;br /&gt;
 * Implementa la autenticación contra un servicio Google Firebase Auth&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * @package simpleSAMLphp&lt;br /&gt;
 * @version $Id$&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
class sspmod_arai_Auth_Source_AraiFirebaseAuth extends sspmod_arai_Auth_Source_AraiAuth&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    public function __construct($info, $config)&lt;br /&gt;
    {&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_uri&amp;quot;])');&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_key&amp;quot;])');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;firebase_uri = $config['firebase_uri'];&lt;br /&gt;
        $this-&amp;gt;firebase_key = $config['firebase_key'];&lt;br /&gt;
&lt;br /&gt;
        parent::__construct($info, $config);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    protected function login($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        assert('is_string($uid)');&lt;br /&gt;
        assert('is_string($clave)');&lt;br /&gt;
&lt;br /&gt;
        $contexto = ['usuario' =&amp;gt; $uid];&lt;br /&gt;
        $uid = strtolower($uid);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            /* @var UsuariosManager $usuariosManager */&lt;br /&gt;
            $usuariosManager = Factory::getUsuariosManager();&lt;br /&gt;
&lt;br /&gt;
            if (!$this-&amp;gt;autenticarEnFirebase($uid, $clave)) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario Firebase '$uid' ingresa usuario y/o clave incorrecta&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // TODO: deberíamos permitir que la auth vía Firebase escoja si es por uid o email?&lt;br /&gt;
            $this-&amp;gt;loginSubject = $usuariosManager-&amp;gt;getUsuarioByEmail($uid);&lt;br /&gt;
            if (!$this-&amp;gt;loginSubject) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario 'mail=$uid' no existe&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //Si autentica y esta vencida la cuenta se marca como bloqueado&lt;br /&gt;
            $dt = new DateTime();&lt;br /&gt;
            $dt-&amp;gt;setTimestamp(Temporal::getTime());&lt;br /&gt;
            &lt;br /&gt;
            $uid = $this-&amp;gt;loginSubject-&amp;gt;getUid();&lt;br /&gt;
            $this-&amp;gt;validarCuentaExpirada($usuariosManager, $uid, $dt);&lt;br /&gt;
            &lt;br /&gt;
            /**&lt;br /&gt;
             * Se maneja de forma externa, no agregar nuevas cuestiones relacionadas a las claves del usuario&lt;br /&gt;
                $this-&amp;gt;validarPasswordVencido($usuariosManager, $uid, $dt);&lt;br /&gt;
                $usuariosManager-&amp;gt;anularPedidosCambioPasswordPrevios($uid);&lt;br /&gt;
            */&lt;br /&gt;
            &lt;br /&gt;
            $attributes = $usuariosManager-&amp;gt;getAtributosSAMLUsuario($this-&amp;gt;loginSubject);&lt;br /&gt;
        } catch (SIU\AraiUsuarios\Error $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se ingresa un usuario y/o clave incorrecto', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw new SimpleSAML\Error\Error('WRONGUSERPASS', $e);&lt;br /&gt;
        } catch (\Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw $e;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Factory::getIdpLogger()-&amp;gt;info('Usuario realiza login correcto', $contexto);&lt;br /&gt;
        SimpleSAML\Logger::info('arai:' . $this-&amp;gt;authId . ': Attributes: ' . implode(',', array_keys($attributes)));&lt;br /&gt;
&lt;br /&gt;
        return $attributes;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param $uid&lt;br /&gt;
     * @param $clave&lt;br /&gt;
     * @return bool&lt;br /&gt;
     * @throws \GuzzleHttp\Exception\GuzzleException&lt;br /&gt;
     */&lt;br /&gt;
    private function autenticarEnFirebase($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        $status = false;&lt;br /&gt;
&lt;br /&gt;
        $key = $this-&amp;gt;firebase_key;&lt;br /&gt;
&lt;br /&gt;
        $uri = $this-&amp;gt;firebase_uri . $key;&lt;br /&gt;
&lt;br /&gt;
        $contexto = [&lt;br /&gt;
            'firebase_user' =&amp;gt; $uid,&lt;br /&gt;
            'firebase_key' =&amp;gt; $key,&lt;br /&gt;
            'firebase_uri' =&amp;gt; $uri,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        $body = [&lt;br /&gt;
            'email'=&amp;gt; $uid,&lt;br /&gt;
            'password'=&amp;gt; $clave,&lt;br /&gt;
            'returnSecureToken'=&amp;gt; true,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            $client = new GuzzleHttp\Client();&lt;br /&gt;
&lt;br /&gt;
            $res = $client-&amp;gt;request('POST', $uri, [&lt;br /&gt;
                'json' =&amp;gt; $body&lt;br /&gt;
            ]);&lt;br /&gt;
&lt;br /&gt;
            $status = $res-&amp;gt;getStatusCode() == 200;&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\RequestException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getMessage();&lt;br /&gt;
            if ($e-&amp;gt;hasResponse()) {&lt;br /&gt;
                $msg = json_decode($e-&amp;gt;getResponse()-&amp;gt;getBody()-&amp;gt;getContents());&lt;br /&gt;
                $msg = $msg-&amp;gt;error-&amp;gt;errors;&lt;br /&gt;
            }&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\ClientException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getResponse()-&amp;gt;getReasonPhrase();&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $status;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106100</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106100"/>
				<updated>2025-04-07T14:00:15Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== AraiFirebaseAuth.php ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use SimpleSAML\Logger;&lt;br /&gt;
use SIU\AraiUsuarios;&lt;br /&gt;
use SIU\AraiUsuarios\IDP\Factory;&lt;br /&gt;
use SIU\AraiUsuarios\Core\UsuariosManager;&lt;br /&gt;
use SIU\AraiUsuarios\Entities\Usuario;&lt;br /&gt;
use SIU\AraiUsuarios\Error;&lt;br /&gt;
&lt;br /&gt;
use SAML2\Utilities\Temporal;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Simple SQL authentication source&lt;br /&gt;
 *&lt;br /&gt;
 * Implementa la autenticación contra un servicio Google Firebase Auth&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * @package simpleSAMLphp&lt;br /&gt;
 * @version $Id$&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
class sspmod_arai_Auth_Source_AraiFirebaseAuth extends sspmod_arai_Auth_Source_AraiAuth&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    public function __construct($info, $config)&lt;br /&gt;
    {&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_uri&amp;quot;])');&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_key&amp;quot;])');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;firebase_uri = $config['firebase_uri'];&lt;br /&gt;
        $this-&amp;gt;firebase_key = $config['firebase_key'];&lt;br /&gt;
&lt;br /&gt;
        parent::__construct($info, $config);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    protected function login($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        assert('is_string($uid)');&lt;br /&gt;
        assert('is_string($clave)');&lt;br /&gt;
&lt;br /&gt;
        $contexto = ['usuario' =&amp;gt; $uid];&lt;br /&gt;
        $uid = strtolower($uid);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            /* @var UsuariosManager $usuariosManager */&lt;br /&gt;
            $usuariosManager = Factory::getUsuariosManager();&lt;br /&gt;
&lt;br /&gt;
            if (!$this-&amp;gt;autenticarEnFirebase($uid, $clave)) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario Firebase '$uid' ingresa usuario y/o clave incorrecta&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // TODO: deberíamos permitir que la auth vía Firebase escoja si es por uid o email?&lt;br /&gt;
            $this-&amp;gt;loginSubject = $usuariosManager-&amp;gt;getUsuarioByEmail($uid);&lt;br /&gt;
            if (!$this-&amp;gt;loginSubject) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario 'mail=$uid' no existe&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //Si autentica y esta vencida la cuenta se marca como bloqueado&lt;br /&gt;
            $dt = new DateTime();&lt;br /&gt;
            $dt-&amp;gt;setTimestamp(Temporal::getTime());&lt;br /&gt;
            &lt;br /&gt;
            $uid = $this-&amp;gt;loginSubject-&amp;gt;getUid();&lt;br /&gt;
            $this-&amp;gt;validarCuentaExpirada($usuariosManager, $uid, $dt);&lt;br /&gt;
            &lt;br /&gt;
            /**&lt;br /&gt;
             * Se maneja de forma externa, no agregar nuevas cuestiones relacionadas a las claves del usuario&lt;br /&gt;
                $this-&amp;gt;validarPasswordVencido($usuariosManager, $uid, $dt);&lt;br /&gt;
                $usuariosManager-&amp;gt;anularPedidosCambioPasswordPrevios($uid);&lt;br /&gt;
            */&lt;br /&gt;
            &lt;br /&gt;
            $attributes = $usuariosManager-&amp;gt;getAtributosSAMLUsuario($this-&amp;gt;loginSubject);&lt;br /&gt;
        } catch (SIU\AraiUsuarios\Error $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se ingresa un usuario y/o clave incorrecto', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw new SimpleSAML\Error\Error('WRONGUSERPASS', $e);&lt;br /&gt;
        } catch (\Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw $e;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Factory::getIdpLogger()-&amp;gt;info('Usuario realiza login correcto', $contexto);&lt;br /&gt;
        SimpleSAML\Logger::info('arai:' . $this-&amp;gt;authId . ': Attributes: ' . implode(',', array_keys($attributes)));&lt;br /&gt;
&lt;br /&gt;
        return $attributes;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param $uid&lt;br /&gt;
     * @param $clave&lt;br /&gt;
     * @return bool&lt;br /&gt;
     * @throws \GuzzleHttp\Exception\GuzzleException&lt;br /&gt;
     */&lt;br /&gt;
    private function autenticarEnFirebase($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        $status = false;&lt;br /&gt;
&lt;br /&gt;
        $key = $this-&amp;gt;firebase_key;&lt;br /&gt;
&lt;br /&gt;
        $uri = $this-&amp;gt;firebase_uri . $key;&lt;br /&gt;
&lt;br /&gt;
        $contexto = [&lt;br /&gt;
            'firebase_user' =&amp;gt; $uid,&lt;br /&gt;
            'firebase_key' =&amp;gt; $key,&lt;br /&gt;
            'firebase_uri' =&amp;gt; $uri,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        $body = [&lt;br /&gt;
            'email'=&amp;gt; $uid,&lt;br /&gt;
            'password'=&amp;gt; $clave,&lt;br /&gt;
            'returnSecureToken'=&amp;gt; true,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            $client = new GuzzleHttp\Client();&lt;br /&gt;
&lt;br /&gt;
            $res = $client-&amp;gt;request('POST', $uri, [&lt;br /&gt;
                'json' =&amp;gt; $body&lt;br /&gt;
            ]);&lt;br /&gt;
&lt;br /&gt;
            $status = $res-&amp;gt;getStatusCode() == 200;&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\RequestException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getMessage();&lt;br /&gt;
            if ($e-&amp;gt;hasResponse()) {&lt;br /&gt;
                $msg = json_decode($e-&amp;gt;getResponse()-&amp;gt;getBody()-&amp;gt;getContents());&lt;br /&gt;
                $msg = $msg-&amp;gt;error-&amp;gt;errors;&lt;br /&gt;
            }&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\ClientException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getResponse()-&amp;gt;getReasonPhrase();&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $status;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106099</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106099"/>
				<updated>2025-04-07T13:59:53Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== AraiFirebaseAuth.php ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use SimpleSAML\Logger;&lt;br /&gt;
use SIU\AraiUsuarios;&lt;br /&gt;
use SIU\AraiUsuarios\IDP\Factory;&lt;br /&gt;
use SIU\AraiUsuarios\Core\UsuariosManager;&lt;br /&gt;
use SIU\AraiUsuarios\Entities\Usuario;&lt;br /&gt;
use SIU\AraiUsuarios\Error;&lt;br /&gt;
&lt;br /&gt;
use SAML2\Utilities\Temporal;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Simple SQL authentication source&lt;br /&gt;
 *&lt;br /&gt;
 * Implementa la autenticación contra un servicio Google Firebase Auth&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * @package simpleSAMLphp&lt;br /&gt;
 * @version $Id$&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
class sspmod_arai_Auth_Source_AraiFirebaseAuth extends sspmod_arai_Auth_Source_AraiAuth&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    public function __construct($info, $config)&lt;br /&gt;
    {&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_uri&amp;quot;])');&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_key&amp;quot;])');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;firebase_uri = $config['firebase_uri'];&lt;br /&gt;
        $this-&amp;gt;firebase_key = $config['firebase_key'];&lt;br /&gt;
&lt;br /&gt;
        parent::__construct($info, $config);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    protected function login($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        assert('is_string($uid)');&lt;br /&gt;
        assert('is_string($clave)');&lt;br /&gt;
&lt;br /&gt;
        $contexto = ['usuario' =&amp;gt; $uid];&lt;br /&gt;
        $uid = strtolower($uid);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            /* @var UsuariosManager $usuariosManager */&lt;br /&gt;
            $usuariosManager = Factory::getUsuariosManager();&lt;br /&gt;
&lt;br /&gt;
            if (!$this-&amp;gt;autenticarEnFirebase($uid, $clave)) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario Firebase '$uid' ingresa usuario y/o clave incorrecta&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // TODO: deberíamos permitir que la auth vía Firebase escoja si es por uid o email?&lt;br /&gt;
            $this-&amp;gt;loginSubject = $usuariosManager-&amp;gt;getUsuarioByEmail($uid);&lt;br /&gt;
            if (!$this-&amp;gt;loginSubject) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario 'mail=$uid' no existe&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //Si autentica y esta vencida la cuenta se marca como bloqueado&lt;br /&gt;
            $dt = new DateTime();&lt;br /&gt;
            $dt-&amp;gt;setTimestamp(Temporal::getTime());&lt;br /&gt;
            &lt;br /&gt;
            $uid = $this-&amp;gt;loginSubject-&amp;gt;getUid();&lt;br /&gt;
            $this-&amp;gt;validarCuentaExpirada($usuariosManager, $uid, $dt);&lt;br /&gt;
            &lt;br /&gt;
            /**&lt;br /&gt;
             * Se maneja de forma externa, no agregar nuevas cuestiones relacionadas a las claves del usuario&lt;br /&gt;
                $this-&amp;gt;validarPasswordVencido($usuariosManager, $uid, $dt);&lt;br /&gt;
                $usuariosManager-&amp;gt;anularPedidosCambioPasswordPrevios($uid);&lt;br /&gt;
            */&lt;br /&gt;
            &lt;br /&gt;
            $attributes = $usuariosManager-&amp;gt;getAtributosSAMLUsuario($this-&amp;gt;loginSubject);&lt;br /&gt;
        } catch (SIU\AraiUsuarios\Error $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se ingresa un usuario y/o clave incorrecto', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw new SimpleSAML\Error\Error('WRONGUSERPASS', $e);&lt;br /&gt;
        } catch (\Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw $e;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Factory::getIdpLogger()-&amp;gt;info('Usuario realiza login correcto', $contexto);&lt;br /&gt;
        SimpleSAML\Logger::info('arai:' . $this-&amp;gt;authId . ': Attributes: ' . implode(',', array_keys($attributes)));&lt;br /&gt;
&lt;br /&gt;
        return $attributes;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param $uid&lt;br /&gt;
     * @param $clave&lt;br /&gt;
     * @return bool&lt;br /&gt;
     * @throws \GuzzleHttp\Exception\GuzzleException&lt;br /&gt;
     */&lt;br /&gt;
    private function autenticarEnFirebase($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        $status = false;&lt;br /&gt;
&lt;br /&gt;
        $key = $this-&amp;gt;firebase_key;&lt;br /&gt;
&lt;br /&gt;
        $uri = $this-&amp;gt;firebase_uri . $key;&lt;br /&gt;
&lt;br /&gt;
        $contexto = [&lt;br /&gt;
            'firebase_user' =&amp;gt; $uid,&lt;br /&gt;
            'firebase_key' =&amp;gt; $key,&lt;br /&gt;
            'firebase_uri' =&amp;gt; $uri,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        $body = [&lt;br /&gt;
            'email'=&amp;gt; $uid,&lt;br /&gt;
            'password'=&amp;gt; $clave,&lt;br /&gt;
            'returnSecureToken'=&amp;gt; true,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            $client = new GuzzleHttp\Client();&lt;br /&gt;
&lt;br /&gt;
            $res = $client-&amp;gt;request('POST', $uri, [&lt;br /&gt;
                'json' =&amp;gt; $body&lt;br /&gt;
            ]);&lt;br /&gt;
&lt;br /&gt;
            $status = $res-&amp;gt;getStatusCode() == 200;&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\RequestException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getMessage();&lt;br /&gt;
            if ($e-&amp;gt;hasResponse()) {&lt;br /&gt;
                $msg = json_decode($e-&amp;gt;getResponse()-&amp;gt;getBody()-&amp;gt;getContents());&lt;br /&gt;
                $msg = $msg-&amp;gt;error-&amp;gt;errors;&lt;br /&gt;
            }&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\ClientException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getResponse()-&amp;gt;getReasonPhrase();&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $status;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106098</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106098"/>
				<updated>2025-04-07T13:58:07Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== AraiFirebaseAuth.php ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use SimpleSAML\Logger;&lt;br /&gt;
use SIU\AraiUsuarios;&lt;br /&gt;
use SIU\AraiUsuarios\IDP\Factory;&lt;br /&gt;
use SIU\AraiUsuarios\Core\UsuariosManager;&lt;br /&gt;
use SIU\AraiUsuarios\Entities\Usuario;&lt;br /&gt;
use SIU\AraiUsuarios\Error;&lt;br /&gt;
&lt;br /&gt;
use SAML2\Utilities\Temporal;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Simple SQL authentication source&lt;br /&gt;
 *&lt;br /&gt;
 * Implementa la autenticación contra un servicio Google Firebase Auth&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * @package simpleSAMLphp&lt;br /&gt;
 * @version $Id$&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
class sspmod_arai_Auth_Source_AraiFirebaseAuth extends sspmod_arai_Auth_Source_AraiAuth&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    public function __construct($info, $config)&lt;br /&gt;
    {&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_uri&amp;quot;])');&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_key&amp;quot;])');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;firebase_uri = $config['firebase_uri'];&lt;br /&gt;
        $this-&amp;gt;firebase_key = $config['firebase_key'];&lt;br /&gt;
&lt;br /&gt;
        parent::__construct($info, $config);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    protected function login($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        assert('is_string($uid)');&lt;br /&gt;
        assert('is_string($clave)');&lt;br /&gt;
&lt;br /&gt;
        $contexto = ['usuario' =&amp;gt; $uid];&lt;br /&gt;
        $uid = strtolower($uid);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            /* @var UsuariosManager $usuariosManager */&lt;br /&gt;
            $usuariosManager = Factory::getUsuariosManager();&lt;br /&gt;
&lt;br /&gt;
            if (!$this-&amp;gt;autenticarEnFirebase($uid, $clave)) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario Firebase '$uid' ingresa usuario y/o clave incorrecta&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // TODO: deberíamos permitir que la auth vía Firebase escoja si es por uid o email?&lt;br /&gt;
            $this-&amp;gt;loginSubject = $usuariosManager-&amp;gt;getUsuarioByEmail($uid);&lt;br /&gt;
            if (!$this-&amp;gt;loginSubject) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario 'mail=$uid' no existe&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //Si autentica y esta vencida la cuenta se marca como bloqueado&lt;br /&gt;
            $dt = new DateTime();&lt;br /&gt;
            $dt-&amp;gt;setTimestamp(Temporal::getTime());&lt;br /&gt;
            &lt;br /&gt;
            $uid = $this-&amp;gt;loginSubject-&amp;gt;getUid();&lt;br /&gt;
            $this-&amp;gt;validarCuentaExpirada($usuariosManager, $uid, $dt);&lt;br /&gt;
            &lt;br /&gt;
            /**&lt;br /&gt;
             * Se maneja de forma externa, no agregar nuevas cuestiones relacionadas a las claves del usuario&lt;br /&gt;
                $this-&amp;gt;validarPasswordVencido($usuariosManager, $uid, $dt);&lt;br /&gt;
                $usuariosManager-&amp;gt;anularPedidosCambioPasswordPrevios($uid);&lt;br /&gt;
            */&lt;br /&gt;
            &lt;br /&gt;
            $attributes = $usuariosManager-&amp;gt;getAtributosSAMLUsuario($this-&amp;gt;loginSubject);&lt;br /&gt;
        } catch (SIU\AraiUsuarios\Error $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se ingresa un usuario y/o clave incorrecto', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw new SimpleSAML\Error\Error('WRONGUSERPASS', $e);&lt;br /&gt;
        } catch (\Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw $e;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Factory::getIdpLogger()-&amp;gt;info('Usuario realiza login correcto', $contexto);&lt;br /&gt;
        SimpleSAML\Logger::info('arai:' . $this-&amp;gt;authId . ': Attributes: ' . implode(',', array_keys($attributes)));&lt;br /&gt;
&lt;br /&gt;
        return $attributes;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param $uid&lt;br /&gt;
     * @param $clave&lt;br /&gt;
     * @return bool&lt;br /&gt;
     * @throws \GuzzleHttp\Exception\GuzzleException&lt;br /&gt;
     */&lt;br /&gt;
    private function autenticarEnFirebase($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        $status = false;&lt;br /&gt;
&lt;br /&gt;
        $key = $this-&amp;gt;firebase_key;&lt;br /&gt;
&lt;br /&gt;
        $uri = $this-&amp;gt;firebase_uri . $key;&lt;br /&gt;
&lt;br /&gt;
        $contexto = [&lt;br /&gt;
            'firebase_user' =&amp;gt; $uid,&lt;br /&gt;
            'firebase_key' =&amp;gt; $key,&lt;br /&gt;
            'firebase_uri' =&amp;gt; $uri,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        $body = [&lt;br /&gt;
            'email'=&amp;gt; $uid,&lt;br /&gt;
            'password'=&amp;gt; $clave,&lt;br /&gt;
            'returnSecureToken'=&amp;gt; true,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            $client = new GuzzleHttp\Client();&lt;br /&gt;
&lt;br /&gt;
            $res = $client-&amp;gt;request('POST', $uri, [&lt;br /&gt;
                'json' =&amp;gt; $body&lt;br /&gt;
            ]);&lt;br /&gt;
&lt;br /&gt;
            $status = $res-&amp;gt;getStatusCode() == 200;&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\RequestException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getMessage();&lt;br /&gt;
            if ($e-&amp;gt;hasResponse()) {&lt;br /&gt;
                $msg = json_decode($e-&amp;gt;getResponse()-&amp;gt;getBody()-&amp;gt;getContents());&lt;br /&gt;
                $msg = $msg-&amp;gt;error-&amp;gt;errors;&lt;br /&gt;
            }&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\ClientException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getResponse()-&amp;gt;getReasonPhrase();&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $status;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106097</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106097"/>
				<updated>2025-04-07T13:57:31Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== AraiFirebaseAuth.php ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use SimpleSAML\Logger;&lt;br /&gt;
use SIU\AraiUsuarios;&lt;br /&gt;
use SIU\AraiUsuarios\IDP\Factory;&lt;br /&gt;
use SIU\AraiUsuarios\Core\UsuariosManager;&lt;br /&gt;
use SIU\AraiUsuarios\Entities\Usuario;&lt;br /&gt;
use SIU\AraiUsuarios\Error;&lt;br /&gt;
&lt;br /&gt;
use SAML2\Utilities\Temporal;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Simple SQL authentication source&lt;br /&gt;
 *&lt;br /&gt;
 * Implementa la autenticación contra un servicio Google Firebase Auth&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * @package simpleSAMLphp&lt;br /&gt;
 * @version $Id$&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
class sspmod_arai_Auth_Source_AraiFirebaseAuth extends sspmod_arai_Auth_Source_AraiAuth&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    public function __construct($info, $config)&lt;br /&gt;
    {&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_uri&amp;quot;])');&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_key&amp;quot;])');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;firebase_uri = $config['firebase_uri'];&lt;br /&gt;
        $this-&amp;gt;firebase_key = $config['firebase_key'];&lt;br /&gt;
&lt;br /&gt;
        parent::__construct($info, $config);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    protected function login($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        assert('is_string($uid)');&lt;br /&gt;
        assert('is_string($clave)');&lt;br /&gt;
&lt;br /&gt;
        $contexto = ['usuario' =&amp;gt; $uid];&lt;br /&gt;
        $uid = strtolower($uid);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            /* @var UsuariosManager $usuariosManager */&lt;br /&gt;
            $usuariosManager = Factory::getUsuariosManager();&lt;br /&gt;
&lt;br /&gt;
            if (!$this-&amp;gt;autenticarEnFirebase($uid, $clave)) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario Firebase '$uid' ingresa usuario y/o clave incorrecta&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // TODO: deberíamos permitir que la auth vía Firebase escoja si es por uid o email?&lt;br /&gt;
            $this-&amp;gt;loginSubject = $usuariosManager-&amp;gt;getUsuarioByEmail($uid);&lt;br /&gt;
            if (!$this-&amp;gt;loginSubject) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario 'mail=$uid' no existe&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //Si autentica y esta vencida la cuenta se marca como bloqueado&lt;br /&gt;
            $dt = new DateTime();&lt;br /&gt;
            $dt-&amp;gt;setTimestamp(Temporal::getTime());&lt;br /&gt;
            &lt;br /&gt;
            $uid = $this-&amp;gt;loginSubject-&amp;gt;getUid();&lt;br /&gt;
            $this-&amp;gt;validarCuentaExpirada($usuariosManager, $uid, $dt);&lt;br /&gt;
            &lt;br /&gt;
            /**&lt;br /&gt;
             * Se maneja de forma externa, no agregar nuevas cuestiones relacionadas a las claves del usuario&lt;br /&gt;
                $this-&amp;gt;validarPasswordVencido($usuariosManager, $uid, $dt);&lt;br /&gt;
                $usuariosManager-&amp;gt;anularPedidosCambioPasswordPrevios($uid);&lt;br /&gt;
            */&lt;br /&gt;
            &lt;br /&gt;
            $attributes = $usuariosManager-&amp;gt;getAtributosSAMLUsuario($this-&amp;gt;loginSubject);&lt;br /&gt;
        } catch (SIU\AraiUsuarios\Error $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se ingresa un usuario y/o clave incorrecto', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw new SimpleSAML\Error\Error('WRONGUSERPASS', $e);&lt;br /&gt;
        } catch (\Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw $e;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Factory::getIdpLogger()-&amp;gt;info('Usuario realiza login correcto', $contexto);&lt;br /&gt;
        SimpleSAML\Logger::info('arai:' . $this-&amp;gt;authId . ': Attributes: ' . implode(',', array_keys($attributes)));&lt;br /&gt;
&lt;br /&gt;
        return $attributes;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param $uid&lt;br /&gt;
     * @param $clave&lt;br /&gt;
     * @return bool&lt;br /&gt;
     * @throws \GuzzleHttp\Exception\GuzzleException&lt;br /&gt;
     */&lt;br /&gt;
    private function autenticarEnFirebase($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        $status = false;&lt;br /&gt;
&lt;br /&gt;
        $key = $this-&amp;gt;firebase_key;&lt;br /&gt;
&lt;br /&gt;
        $uri = $this-&amp;gt;firebase_uri . $key;&lt;br /&gt;
&lt;br /&gt;
        $contexto = [&lt;br /&gt;
            'firebase_user' =&amp;gt; $uid,&lt;br /&gt;
            'firebase_key' =&amp;gt; $key,&lt;br /&gt;
            'firebase_uri' =&amp;gt; $uri,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        $body = [&lt;br /&gt;
            'email'=&amp;gt; $uid,&lt;br /&gt;
            'password'=&amp;gt; $clave,&lt;br /&gt;
            'returnSecureToken'=&amp;gt; true,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            $client = new GuzzleHttp\Client();&lt;br /&gt;
&lt;br /&gt;
            $res = $client-&amp;gt;request('POST', $uri, [&lt;br /&gt;
                'json' =&amp;gt; $body&lt;br /&gt;
            ]);&lt;br /&gt;
&lt;br /&gt;
            $status = $res-&amp;gt;getStatusCode() == 200;&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\RequestException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getMessage();&lt;br /&gt;
            if ($e-&amp;gt;hasResponse()) {&lt;br /&gt;
                $msg = json_decode($e-&amp;gt;getResponse()-&amp;gt;getBody()-&amp;gt;getContents());&lt;br /&gt;
                $msg = $msg-&amp;gt;error-&amp;gt;errors;&lt;br /&gt;
            }&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\ClientException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getResponse()-&amp;gt;getReasonPhrase();&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $status;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106096</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106096"/>
				<updated>2025-04-07T13:55:29Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== AraiFirebaseAuth.php ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use SimpleSAML\Logger;&lt;br /&gt;
use SIU\AraiUsuarios;&lt;br /&gt;
use SIU\AraiUsuarios\IDP\Factory;&lt;br /&gt;
use SIU\AraiUsuarios\Core\UsuariosManager;&lt;br /&gt;
use SIU\AraiUsuarios\Entities\Usuario;&lt;br /&gt;
use SIU\AraiUsuarios\Error;&lt;br /&gt;
&lt;br /&gt;
use SAML2\Utilities\Temporal;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Simple SQL authentication source&lt;br /&gt;
 *&lt;br /&gt;
 * Implementa la autenticación contra un servicio Google Firebase Auth&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * @package simpleSAMLphp&lt;br /&gt;
 * @version $Id$&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
class sspmod_arai_Auth_Source_AraiFirebaseAuth extends sspmod_arai_Auth_Source_AraiAuth&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    public function __construct($info, $config)&lt;br /&gt;
    {&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_uri&amp;quot;])');&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_key&amp;quot;])');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;firebase_uri = $config['firebase_uri'];&lt;br /&gt;
        $this-&amp;gt;firebase_key = $config['firebase_key'];&lt;br /&gt;
&lt;br /&gt;
        parent::__construct($info, $config);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    protected function login($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        assert('is_string($uid)');&lt;br /&gt;
        assert('is_string($clave)');&lt;br /&gt;
&lt;br /&gt;
        $contexto = ['usuario' =&amp;gt; $uid];&lt;br /&gt;
        $uid = strtolower($uid);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            /* @var UsuariosManager $usuariosManager */&lt;br /&gt;
            $usuariosManager = Factory::getUsuariosManager();&lt;br /&gt;
&lt;br /&gt;
            if (!$this-&amp;gt;autenticarEnFirebase($uid, $clave)) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario Firebase '$uid' ingresa usuario y/o clave incorrecta&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // TODO: deberíamos permitir que la auth vía Firebase escoja si es por uid o email?&lt;br /&gt;
            $this-&amp;gt;loginSubject = $usuariosManager-&amp;gt;getUsuarioByEmail($uid);&lt;br /&gt;
            if (!$this-&amp;gt;loginSubject) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario 'mail=$uid' no existe&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //Si autentica y esta vencida la cuenta se marca como bloqueado&lt;br /&gt;
            $dt = new DateTime();&lt;br /&gt;
            $dt-&amp;gt;setTimestamp(Temporal::getTime());&lt;br /&gt;
            &lt;br /&gt;
            $uid = $this-&amp;gt;loginSubject-&amp;gt;getUid();&lt;br /&gt;
            $this-&amp;gt;validarCuentaExpirada($usuariosManager, $uid, $dt);&lt;br /&gt;
            &lt;br /&gt;
            /**&lt;br /&gt;
             * Se maneja de forma externa, no agregar nuevas cuestiones relacionadas a las claves del usuario&lt;br /&gt;
                $this-&amp;gt;validarPasswordVencido($usuariosManager, $uid, $dt);&lt;br /&gt;
                $usuariosManager-&amp;gt;anularPedidosCambioPasswordPrevios($uid);&lt;br /&gt;
            */&lt;br /&gt;
            &lt;br /&gt;
            $attributes = $usuariosManager-&amp;gt;getAtributosSAMLUsuario($this-&amp;gt;loginSubject);&lt;br /&gt;
        } catch (SIU\AraiUsuarios\Error $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se ingresa un usuario y/o clave incorrecto', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw new SimpleSAML\Error\Error('WRONGUSERPASS', $e);&lt;br /&gt;
        } catch (\Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw $e;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Factory::getIdpLogger()-&amp;gt;info('Usuario realiza login correcto', $contexto);&lt;br /&gt;
        SimpleSAML\Logger::info('arai:' . $this-&amp;gt;authId . ': Attributes: ' . implode(',', array_keys($attributes)));&lt;br /&gt;
&lt;br /&gt;
        return $attributes;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param $uid&lt;br /&gt;
     * @param $clave&lt;br /&gt;
     * @return bool&lt;br /&gt;
     * @throws \GuzzleHttp\Exception\GuzzleException&lt;br /&gt;
     */&lt;br /&gt;
    private function autenticarEnFirebase($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        $status = false;&lt;br /&gt;
&lt;br /&gt;
        $key = $this-&amp;gt;firebase_key;&lt;br /&gt;
&lt;br /&gt;
        $uri = $this-&amp;gt;firebase_uri . $key;&lt;br /&gt;
&lt;br /&gt;
        $contexto = [&lt;br /&gt;
            'firebase_user' =&amp;gt; $uid,&lt;br /&gt;
            'firebase_key' =&amp;gt; $key,&lt;br /&gt;
            'firebase_uri' =&amp;gt; $uri,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        $body = [&lt;br /&gt;
            'email'=&amp;gt; $uid,&lt;br /&gt;
            'password'=&amp;gt; $clave,&lt;br /&gt;
            'returnSecureToken'=&amp;gt; true,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            $client = new GuzzleHttp\Client();&lt;br /&gt;
&lt;br /&gt;
            $res = $client-&amp;gt;request('POST', $uri, [&lt;br /&gt;
                'json' =&amp;gt; $body&lt;br /&gt;
            ]);&lt;br /&gt;
&lt;br /&gt;
            $status = $res-&amp;gt;getStatusCode() == 200;&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\RequestException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getMessage();&lt;br /&gt;
            if ($e-&amp;gt;hasResponse()) {&lt;br /&gt;
                $msg = json_decode($e-&amp;gt;getResponse()-&amp;gt;getBody()-&amp;gt;getContents());&lt;br /&gt;
                $msg = $msg-&amp;gt;error-&amp;gt;errors;&lt;br /&gt;
            }&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\ClientException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getResponse()-&amp;gt;getReasonPhrase();&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $status;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106095</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106095"/>
				<updated>2025-04-07T13:55:05Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use SimpleSAML\Logger;&lt;br /&gt;
use SIU\AraiUsuarios;&lt;br /&gt;
use SIU\AraiUsuarios\IDP\Factory;&lt;br /&gt;
use SIU\AraiUsuarios\Core\UsuariosManager;&lt;br /&gt;
use SIU\AraiUsuarios\Entities\Usuario;&lt;br /&gt;
use SIU\AraiUsuarios\Error;&lt;br /&gt;
&lt;br /&gt;
use SAML2\Utilities\Temporal;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Simple SQL authentication source&lt;br /&gt;
 *&lt;br /&gt;
 * Implementa la autenticación contra un servicio Google Firebase Auth&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * @package simpleSAMLphp&lt;br /&gt;
 * @version $Id$&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
class sspmod_arai_Auth_Source_AraiFirebaseAuth extends sspmod_arai_Auth_Source_AraiAuth&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    public function __construct($info, $config)&lt;br /&gt;
    {&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_uri&amp;quot;])');&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_key&amp;quot;])');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;firebase_uri = $config['firebase_uri'];&lt;br /&gt;
        $this-&amp;gt;firebase_key = $config['firebase_key'];&lt;br /&gt;
&lt;br /&gt;
        parent::__construct($info, $config);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    protected function login($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        assert('is_string($uid)');&lt;br /&gt;
        assert('is_string($clave)');&lt;br /&gt;
&lt;br /&gt;
        $contexto = ['usuario' =&amp;gt; $uid];&lt;br /&gt;
        $uid = strtolower($uid);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            /* @var UsuariosManager $usuariosManager */&lt;br /&gt;
            $usuariosManager = Factory::getUsuariosManager();&lt;br /&gt;
&lt;br /&gt;
            if (!$this-&amp;gt;autenticarEnFirebase($uid, $clave)) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario Firebase '$uid' ingresa usuario y/o clave incorrecta&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // TODO: deberíamos permitir que la auth vía Firebase escoja si es por uid o email?&lt;br /&gt;
            $this-&amp;gt;loginSubject = $usuariosManager-&amp;gt;getUsuarioByEmail($uid);&lt;br /&gt;
            if (!$this-&amp;gt;loginSubject) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario 'mail=$uid' no existe&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //Si autentica y esta vencida la cuenta se marca como bloqueado&lt;br /&gt;
            $dt = new DateTime();&lt;br /&gt;
            $dt-&amp;gt;setTimestamp(Temporal::getTime());&lt;br /&gt;
            &lt;br /&gt;
            $uid = $this-&amp;gt;loginSubject-&amp;gt;getUid();&lt;br /&gt;
            $this-&amp;gt;validarCuentaExpirada($usuariosManager, $uid, $dt);&lt;br /&gt;
            &lt;br /&gt;
            /**&lt;br /&gt;
             * Se maneja de forma externa, no agregar nuevas cuestiones relacionadas a las claves del usuario&lt;br /&gt;
                $this-&amp;gt;validarPasswordVencido($usuariosManager, $uid, $dt);&lt;br /&gt;
                $usuariosManager-&amp;gt;anularPedidosCambioPasswordPrevios($uid);&lt;br /&gt;
            */&lt;br /&gt;
            &lt;br /&gt;
            $attributes = $usuariosManager-&amp;gt;getAtributosSAMLUsuario($this-&amp;gt;loginSubject);&lt;br /&gt;
        } catch (SIU\AraiUsuarios\Error $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se ingresa un usuario y/o clave incorrecto', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw new SimpleSAML\Error\Error('WRONGUSERPASS', $e);&lt;br /&gt;
        } catch (\Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw $e;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Factory::getIdpLogger()-&amp;gt;info('Usuario realiza login correcto', $contexto);&lt;br /&gt;
        SimpleSAML\Logger::info('arai:' . $this-&amp;gt;authId . ': Attributes: ' . implode(',', array_keys($attributes)));&lt;br /&gt;
&lt;br /&gt;
        return $attributes;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param $uid&lt;br /&gt;
     * @param $clave&lt;br /&gt;
     * @return bool&lt;br /&gt;
     * @throws \GuzzleHttp\Exception\GuzzleException&lt;br /&gt;
     */&lt;br /&gt;
    private function autenticarEnFirebase($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        $status = false;&lt;br /&gt;
&lt;br /&gt;
        $key = $this-&amp;gt;firebase_key;&lt;br /&gt;
&lt;br /&gt;
        $uri = $this-&amp;gt;firebase_uri . $key;&lt;br /&gt;
&lt;br /&gt;
        $contexto = [&lt;br /&gt;
            'firebase_user' =&amp;gt; $uid,&lt;br /&gt;
            'firebase_key' =&amp;gt; $key,&lt;br /&gt;
            'firebase_uri' =&amp;gt; $uri,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        $body = [&lt;br /&gt;
            'email'=&amp;gt; $uid,&lt;br /&gt;
            'password'=&amp;gt; $clave,&lt;br /&gt;
            'returnSecureToken'=&amp;gt; true,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            $client = new GuzzleHttp\Client();&lt;br /&gt;
&lt;br /&gt;
            $res = $client-&amp;gt;request('POST', $uri, [&lt;br /&gt;
                'json' =&amp;gt; $body&lt;br /&gt;
            ]);&lt;br /&gt;
&lt;br /&gt;
            $status = $res-&amp;gt;getStatusCode() == 200;&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\RequestException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getMessage();&lt;br /&gt;
            if ($e-&amp;gt;hasResponse()) {&lt;br /&gt;
                $msg = json_decode($e-&amp;gt;getResponse()-&amp;gt;getBody()-&amp;gt;getContents());&lt;br /&gt;
                $msg = $msg-&amp;gt;error-&amp;gt;errors;&lt;br /&gt;
            }&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\ClientException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getResponse()-&amp;gt;getReasonPhrase();&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $status;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106094</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106094"/>
				<updated>2025-04-07T13:54:20Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use SimpleSAML\Logger;&lt;br /&gt;
use SIU\AraiUsuarios;&lt;br /&gt;
use SIU\AraiUsuarios\IDP\Factory;&lt;br /&gt;
use SIU\AraiUsuarios\Core\UsuariosManager;&lt;br /&gt;
use SIU\AraiUsuarios\Entities\Usuario;&lt;br /&gt;
use SIU\AraiUsuarios\Error;&lt;br /&gt;
&lt;br /&gt;
use SAML2\Utilities\Temporal;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Simple SQL authentication source&lt;br /&gt;
 *&lt;br /&gt;
 * Implementa la autenticación contra un servicio Google Firebase Auth&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * @package simpleSAMLphp&lt;br /&gt;
 * @version $Id$&lt;br /&gt;
 */&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
class sspmod_arai_Auth_Source_AraiFirebaseAuth extends sspmod_arai_Auth_Source_AraiAuth&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    public function __construct($info, $config)&lt;br /&gt;
    {&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_uri&amp;quot;])');&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_key&amp;quot;])');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;firebase_uri = $config['firebase_uri'];&lt;br /&gt;
        $this-&amp;gt;firebase_key = $config['firebase_key'];&lt;br /&gt;
&lt;br /&gt;
        parent::__construct($info, $config);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    protected function login($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        assert('is_string($uid)');&lt;br /&gt;
        assert('is_string($clave)');&lt;br /&gt;
&lt;br /&gt;
        $contexto = ['usuario' =&amp;gt; $uid];&lt;br /&gt;
        $uid = strtolower($uid);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            /* @var UsuariosManager $usuariosManager */&lt;br /&gt;
            $usuariosManager = Factory::getUsuariosManager();&lt;br /&gt;
&lt;br /&gt;
            if (!$this-&amp;gt;autenticarEnFirebase($uid, $clave)) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario Firebase '$uid' ingresa usuario y/o clave incorrecta&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // TODO: deberíamos permitir que la auth vía Firebase escoja si es por uid o email?&lt;br /&gt;
            $this-&amp;gt;loginSubject = $usuariosManager-&amp;gt;getUsuarioByEmail($uid);&lt;br /&gt;
            if (!$this-&amp;gt;loginSubject) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario 'mail=$uid' no existe&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //Si autentica y esta vencida la cuenta se marca como bloqueado&lt;br /&gt;
            $dt = new DateTime();&lt;br /&gt;
            $dt-&amp;gt;setTimestamp(Temporal::getTime());&lt;br /&gt;
            &lt;br /&gt;
            $uid = $this-&amp;gt;loginSubject-&amp;gt;getUid();&lt;br /&gt;
            $this-&amp;gt;validarCuentaExpirada($usuariosManager, $uid, $dt);&lt;br /&gt;
            &lt;br /&gt;
            /**&lt;br /&gt;
             * Se maneja de forma externa, no agregar nuevas cuestiones relacionadas a las claves del usuario&lt;br /&gt;
                $this-&amp;gt;validarPasswordVencido($usuariosManager, $uid, $dt);&lt;br /&gt;
                $usuariosManager-&amp;gt;anularPedidosCambioPasswordPrevios($uid);&lt;br /&gt;
            */&lt;br /&gt;
            &lt;br /&gt;
            $attributes = $usuariosManager-&amp;gt;getAtributosSAMLUsuario($this-&amp;gt;loginSubject);&lt;br /&gt;
        } catch (SIU\AraiUsuarios\Error $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se ingresa un usuario y/o clave incorrecto', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw new SimpleSAML\Error\Error('WRONGUSERPASS', $e);&lt;br /&gt;
        } catch (\Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw $e;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Factory::getIdpLogger()-&amp;gt;info('Usuario realiza login correcto', $contexto);&lt;br /&gt;
        SimpleSAML\Logger::info('arai:' . $this-&amp;gt;authId . ': Attributes: ' . implode(',', array_keys($attributes)));&lt;br /&gt;
&lt;br /&gt;
        return $attributes;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param $uid&lt;br /&gt;
     * @param $clave&lt;br /&gt;
     * @return bool&lt;br /&gt;
     * @throws \GuzzleHttp\Exception\GuzzleException&lt;br /&gt;
     */&lt;br /&gt;
    private function autenticarEnFirebase($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        $status = false;&lt;br /&gt;
&lt;br /&gt;
        $key = $this-&amp;gt;firebase_key;&lt;br /&gt;
&lt;br /&gt;
        $uri = $this-&amp;gt;firebase_uri . $key;&lt;br /&gt;
&lt;br /&gt;
        $contexto = [&lt;br /&gt;
            'firebase_user' =&amp;gt; $uid,&lt;br /&gt;
            'firebase_key' =&amp;gt; $key,&lt;br /&gt;
            'firebase_uri' =&amp;gt; $uri,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        $body = [&lt;br /&gt;
            'email'=&amp;gt; $uid,&lt;br /&gt;
            'password'=&amp;gt; $clave,&lt;br /&gt;
            'returnSecureToken'=&amp;gt; true,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            $client = new GuzzleHttp\Client();&lt;br /&gt;
&lt;br /&gt;
            $res = $client-&amp;gt;request('POST', $uri, [&lt;br /&gt;
                'json' =&amp;gt; $body&lt;br /&gt;
            ]);&lt;br /&gt;
&lt;br /&gt;
            $status = $res-&amp;gt;getStatusCode() == 200;&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\RequestException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getMessage();&lt;br /&gt;
            if ($e-&amp;gt;hasResponse()) {&lt;br /&gt;
                $msg = json_decode($e-&amp;gt;getResponse()-&amp;gt;getBody()-&amp;gt;getContents());&lt;br /&gt;
                $msg = $msg-&amp;gt;error-&amp;gt;errors;&lt;br /&gt;
            }&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\ClientException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getResponse()-&amp;gt;getReasonPhrase();&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $status;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106093</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106093"/>
				<updated>2025-04-07T13:52:21Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use SimpleSAML\Logger;&lt;br /&gt;
use SIU\AraiUsuarios;&lt;br /&gt;
use SIU\AraiUsuarios\IDP\Factory;&lt;br /&gt;
use SIU\AraiUsuarios\Core\UsuariosManager;&lt;br /&gt;
use SIU\AraiUsuarios\Entities\Usuario;&lt;br /&gt;
use SIU\AraiUsuarios\Error;&lt;br /&gt;
&lt;br /&gt;
use SAML2\Utilities\Temporal;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Simple SQL authentication source&lt;br /&gt;
 *&lt;br /&gt;
 * Implementa la autenticación contra un servicio Google Firebase Auth&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * @package simpleSAMLphp&lt;br /&gt;
 * @version $Id$&lt;br /&gt;
 */&lt;br /&gt;
class sspmod_arai_Auth_Source_AraiFirebaseAuth extends sspmod_arai_Auth_Source_AraiAuth&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    public function __construct($info, $config)&lt;br /&gt;
    {&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_uri&amp;quot;])');&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_key&amp;quot;])');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;firebase_uri = $config['firebase_uri'];&lt;br /&gt;
        $this-&amp;gt;firebase_key = $config['firebase_key'];&lt;br /&gt;
&lt;br /&gt;
        parent::__construct($info, $config);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    protected function login($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        assert('is_string($uid)');&lt;br /&gt;
        assert('is_string($clave)');&lt;br /&gt;
&lt;br /&gt;
        $contexto = ['usuario' =&amp;gt; $uid];&lt;br /&gt;
        $uid = strtolower($uid);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            /* @var UsuariosManager $usuariosManager */&lt;br /&gt;
            $usuariosManager = Factory::getUsuariosManager();&lt;br /&gt;
&lt;br /&gt;
            if (!$this-&amp;gt;autenticarEnFirebase($uid, $clave)) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario Firebase '$uid' ingresa usuario y/o clave incorrecta&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // TODO: deberíamos permitir que la auth vía Firebase escoja si es por uid o email?&lt;br /&gt;
            $this-&amp;gt;loginSubject = $usuariosManager-&amp;gt;getUsuarioByEmail($uid);&lt;br /&gt;
            if (!$this-&amp;gt;loginSubject) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario 'mail=$uid' no existe&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //Si autentica y esta vencida la cuenta se marca como bloqueado&lt;br /&gt;
            $dt = new DateTime();&lt;br /&gt;
            $dt-&amp;gt;setTimestamp(Temporal::getTime());&lt;br /&gt;
            &lt;br /&gt;
            $uid = $this-&amp;gt;loginSubject-&amp;gt;getUid();&lt;br /&gt;
            $this-&amp;gt;validarCuentaExpirada($usuariosManager, $uid, $dt);&lt;br /&gt;
            &lt;br /&gt;
            /**&lt;br /&gt;
             * Se maneja de forma externa, no agregar nuevas cuestiones relacionadas a las claves del usuario&lt;br /&gt;
                $this-&amp;gt;validarPasswordVencido($usuariosManager, $uid, $dt);&lt;br /&gt;
                $usuariosManager-&amp;gt;anularPedidosCambioPasswordPrevios($uid);&lt;br /&gt;
            */&lt;br /&gt;
            &lt;br /&gt;
            $attributes = $usuariosManager-&amp;gt;getAtributosSAMLUsuario($this-&amp;gt;loginSubject);&lt;br /&gt;
        } catch (SIU\AraiUsuarios\Error $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se ingresa un usuario y/o clave incorrecto', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw new SimpleSAML\Error\Error('WRONGUSERPASS', $e);&lt;br /&gt;
        } catch (\Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw $e;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Factory::getIdpLogger()-&amp;gt;info('Usuario realiza login correcto', $contexto);&lt;br /&gt;
        SimpleSAML\Logger::info('arai:' . $this-&amp;gt;authId . ': Attributes: ' . implode(',', array_keys($attributes)));&lt;br /&gt;
&lt;br /&gt;
        return $attributes;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param $uid&lt;br /&gt;
     * @param $clave&lt;br /&gt;
     * @return bool&lt;br /&gt;
     * @throws \GuzzleHttp\Exception\GuzzleException&lt;br /&gt;
     */&lt;br /&gt;
    private function autenticarEnFirebase($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        $status = false;&lt;br /&gt;
&lt;br /&gt;
        $key = $this-&amp;gt;firebase_key;&lt;br /&gt;
&lt;br /&gt;
        $uri = $this-&amp;gt;firebase_uri . $key;&lt;br /&gt;
&lt;br /&gt;
        $contexto = [&lt;br /&gt;
            'firebase_user' =&amp;gt; $uid,&lt;br /&gt;
            'firebase_key' =&amp;gt; $key,&lt;br /&gt;
            'firebase_uri' =&amp;gt; $uri,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        $body = [&lt;br /&gt;
            'email'=&amp;gt; $uid,&lt;br /&gt;
            'password'=&amp;gt; $clave,&lt;br /&gt;
            'returnSecureToken'=&amp;gt; true,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            $client = new GuzzleHttp\Client();&lt;br /&gt;
&lt;br /&gt;
            $res = $client-&amp;gt;request('POST', $uri, [&lt;br /&gt;
                'json' =&amp;gt; $body&lt;br /&gt;
            ]);&lt;br /&gt;
&lt;br /&gt;
            $status = $res-&amp;gt;getStatusCode() == 200;&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\RequestException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getMessage();&lt;br /&gt;
            if ($e-&amp;gt;hasResponse()) {&lt;br /&gt;
                $msg = json_decode($e-&amp;gt;getResponse()-&amp;gt;getBody()-&amp;gt;getContents());&lt;br /&gt;
                $msg = $msg-&amp;gt;error-&amp;gt;errors;&lt;br /&gt;
            }&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\ClientException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getResponse()-&amp;gt;getReasonPhrase();&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $status;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106092</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106092"/>
				<updated>2025-04-07T13:52:02Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use SimpleSAML\Logger;&lt;br /&gt;
use SIU\AraiUsuarios;&lt;br /&gt;
use SIU\AraiUsuarios\IDP\Factory;&lt;br /&gt;
use SIU\AraiUsuarios\Core\UsuariosManager;&lt;br /&gt;
use SIU\AraiUsuarios\Entities\Usuario;&lt;br /&gt;
use SIU\AraiUsuarios\Error;&lt;br /&gt;
&lt;br /&gt;
use SAML2\Utilities\Temporal;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Simple SQL authentication source&lt;br /&gt;
 *&lt;br /&gt;
 * Implementa la autenticación contra un servicio Google Firebase Auth&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * @package simpleSAMLphp&lt;br /&gt;
 * @version $Id$&lt;br /&gt;
 */&lt;br /&gt;
class sspmod_arai_Auth_Source_AraiFirebaseAuth extends sspmod_arai_Auth_Source_AraiAuth&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    public function __construct($info, $config)&lt;br /&gt;
    {&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_uri&amp;quot;])');&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_key&amp;quot;])');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;firebase_uri = $config['firebase_uri'];&lt;br /&gt;
        $this-&amp;gt;firebase_key = $config['firebase_key'];&lt;br /&gt;
&lt;br /&gt;
        parent::__construct($info, $config);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    protected function login($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        assert('is_string($uid)');&lt;br /&gt;
        assert('is_string($clave)');&lt;br /&gt;
&lt;br /&gt;
        $contexto = ['usuario' =&amp;gt; $uid];&lt;br /&gt;
        $uid = strtolower($uid);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            /* @var UsuariosManager $usuariosManager */&lt;br /&gt;
            $usuariosManager = Factory::getUsuariosManager();&lt;br /&gt;
&lt;br /&gt;
            if (!$this-&amp;gt;autenticarEnFirebase($uid, $clave)) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario Firebase '$uid' ingresa usuario y/o clave incorrecta&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // TODO: deberíamos permitir que la auth vía Firebase escoja si es por uid o email?&lt;br /&gt;
            $this-&amp;gt;loginSubject = $usuariosManager-&amp;gt;getUsuarioByEmail($uid);&lt;br /&gt;
            if (!$this-&amp;gt;loginSubject) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario 'mail=$uid' no existe&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //Si autentica y esta vencida la cuenta se marca como bloqueado&lt;br /&gt;
            $dt = new DateTime();&lt;br /&gt;
            $dt-&amp;gt;setTimestamp(Temporal::getTime());&lt;br /&gt;
            &lt;br /&gt;
            $uid = $this-&amp;gt;loginSubject-&amp;gt;getUid();&lt;br /&gt;
            $this-&amp;gt;validarCuentaExpirada($usuariosManager, $uid, $dt);&lt;br /&gt;
            &lt;br /&gt;
            /**&lt;br /&gt;
             * Se maneja de forma externa, no agregar nuevas cuestiones relacionadas a las claves del usuario&lt;br /&gt;
                $this-&amp;gt;validarPasswordVencido($usuariosManager, $uid, $dt);&lt;br /&gt;
                $usuariosManager-&amp;gt;anularPedidosCambioPasswordPrevios($uid);&lt;br /&gt;
            */&lt;br /&gt;
            &lt;br /&gt;
            $attributes = $usuariosManager-&amp;gt;getAtributosSAMLUsuario($this-&amp;gt;loginSubject);&lt;br /&gt;
        } catch (SIU\AraiUsuarios\Error $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se ingresa un usuario y/o clave incorrecto', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw new SimpleSAML\Error\Error('WRONGUSERPASS', $e);&lt;br /&gt;
        } catch (\Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw $e;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Factory::getIdpLogger()-&amp;gt;info('Usuario realiza login correcto', $contexto);&lt;br /&gt;
        SimpleSAML\Logger::info('arai:' . $this-&amp;gt;authId . ': Attributes: ' . implode(',', array_keys($attributes)));&lt;br /&gt;
&lt;br /&gt;
        return $attributes;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param $uid&lt;br /&gt;
     * @param $clave&lt;br /&gt;
     * @return bool&lt;br /&gt;
     * @throws \GuzzleHttp\Exception\GuzzleException&lt;br /&gt;
     */&lt;br /&gt;
    private function autenticarEnFirebase($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        $status = false;&lt;br /&gt;
&lt;br /&gt;
        $key = $this-&amp;gt;firebase_key;&lt;br /&gt;
&lt;br /&gt;
        $uri = $this-&amp;gt;firebase_uri . $key;&lt;br /&gt;
&lt;br /&gt;
        $contexto = [&lt;br /&gt;
            'firebase_user' =&amp;gt; $uid,&lt;br /&gt;
            'firebase_key' =&amp;gt; $key,&lt;br /&gt;
            'firebase_uri' =&amp;gt; $uri,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        $body = [&lt;br /&gt;
            'email'=&amp;gt; $uid,&lt;br /&gt;
            'password'=&amp;gt; $clave,&lt;br /&gt;
            'returnSecureToken'=&amp;gt; true,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            $client = new GuzzleHttp\Client();&lt;br /&gt;
&lt;br /&gt;
            $res = $client-&amp;gt;request('POST', $uri, [&lt;br /&gt;
                'json' =&amp;gt; $body&lt;br /&gt;
            ]);&lt;br /&gt;
&lt;br /&gt;
            $status = $res-&amp;gt;getStatusCode() == 200;&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\RequestException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getMessage();&lt;br /&gt;
            if ($e-&amp;gt;hasResponse()) {&lt;br /&gt;
                $msg = json_decode($e-&amp;gt;getResponse()-&amp;gt;getBody()-&amp;gt;getContents());&lt;br /&gt;
                $msg = $msg-&amp;gt;error-&amp;gt;errors;&lt;br /&gt;
            }&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\ClientException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getResponse()-&amp;gt;getReasonPhrase();&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $status;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=Nuestra_instituci%C3%B3n_no_cuenta_con_SIU-_Arai_Usuarios,_tenemos_nuestro_propio_gestor_de_identidad_y_queremos_implementar_SIU_Huarpe_%C2%BFEsto_es_posible%3F&amp;diff=106091</id>
		<title>Nuestra institución no cuenta con SIU- Arai Usuarios, tenemos nuestro propio gestor de identidad y queremos implementar SIU Huarpe ¿Esto es posible?</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=Nuestra_instituci%C3%B3n_no_cuenta_con_SIU-_Arai_Usuarios,_tenemos_nuestro_propio_gestor_de_identidad_y_queremos_implementar_SIU_Huarpe_%C2%BFEsto_es_posible%3F&amp;diff=106091"/>
				<updated>2025-04-07T13:51:17Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Nuestra institución cuenta con gestor de identidad propio y queremos implementar SIU Huarpe ¿Esto es posible? ==&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SIU-Huarpe es un portal de autogestión para los usuarios que está específicamente diseñado para trabajar por defecto con '''SIU Araí-Usuarios'''. Tanto el Huarpe núcleo como los distintos bundles necesitan consumir servicios que son implementados por Araí-Usuarios.&lt;br /&gt;
&lt;br /&gt;
A su vez, Araí-Usuarios ofrece un IDP por defecto que implementa los protocolos SAML 2.0 y OpenID Connect.&lt;br /&gt;
&lt;br /&gt;
El SIU ha evaluado y colaborado con otras instituciones en personalizaciones que permitieran integrar SIU Araí-Usuarios con distintos IdPs, al que llamamos esquema de integración híbrida, una descripción y consideraciones del mismo pueden encontrar en el siguiente link: [https://documentacion.siu.edu.ar/usuarios/docs/next/cache/estrategia-integracion-hibrida/ estrategia-integracion-hibrida]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La implementación de este esquema de integración híbrida tiene las siguientes características:&lt;br /&gt;
&lt;br /&gt;
* El IDP propio será el encargado de gestionar la autentificación, bajo un esquema “one-password”, esto significa que las contraseñas estarán almacenadas y serán validadas únicamente contra el IDP propio.&lt;br /&gt;
&lt;br /&gt;
* Todas las soluciones SIU se encontrarán desplegadas y estarán conectadas al IDP ofrecido por SIU Araí-Usuarios.&lt;br /&gt;
&lt;br /&gt;
* El IDP de SIU Araí-Usuarios a su vez debe funcionar con autenticación delegada contra el IDP propio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para la implementación de un esquema de integración híbrida, es necesario que realicen una serie de ajustes:&lt;br /&gt;
&lt;br /&gt;
* '''Gestión y sincronización de usuarios''': La creación, edición o baja de usuarios realizados en el IDP propio, debe disparar eventos que reflejen dichos cambios en arai-usuarios. El mecanismo recomendable sería vía la utilización de la API que dispone el servicio, la documentación al respecto se encuentra en el siguiente [https://documentacion.siu.edu.ar/apis/?spec=arai-usuarios_v2 enlace]. Otra alternativa sería que el mantenimiento de los usuarios en SIU-Arai: Usuarios se realice de forma manual.&lt;br /&gt;
&lt;br /&gt;
* '''Autenticación delegada''': al momento de acceder un usuario a una app registrada en arai-usuarios, podremos tener dos alternativas:&lt;br /&gt;
**se muestra la pantalla de login del IDP de Araí-Usuarios, la cual solicita el usuario/clave. Se debe adecuar la clase que realiza la autentificación para que en vez de realizar el login interno de Araí-Usuarios, lo realice por medio de validaciones contra los servicios del IDP propio.&lt;br /&gt;
**en vez de mostrar la pantalla de login del IDP de Araí-Usuarios, redirigir al usuario al login del IDP propio. Esto se logra mediante una delegación del IDP de Araí-Usuarios haciendo que se comporte como una aplicación o SP en el IDP propio de la institución. Esto a su vez se logra explotando las características del protocolo SAML.&lt;br /&gt;
&lt;br /&gt;
* '''Aclaraciones respecto a cambios en el mecanismo de autentificación''':&lt;br /&gt;
**Se puede utilizar cualquier mecanismo de interacción que dispongan para realizar el control de usuario y clave, por ejemplo, vía una consulta a una API tipo REST, mediante una consulta sql a otra base de datos, utilizando conexión a otro LDAP mediante bind, o cualquier mecanismo de verificación de la información de la cuenta. Además se requiere estos cambios en el código fuente de Araí-Usuarios extendiendo el “authsource”. Pueden tomar como referencia, por ejemplo, el ajuste realizado para Firebase. Esta personalización pueden verla desde el siguiente archivo: [[AraiFirebaseAuth.php]]. En esta clase pueden seguir las personalizaciones realizadas, como por ejemplo el del método login().&lt;br /&gt;
**Se puede configurar mediante la personalización en el código fuente de Araí-Usuarios extendiendo el “authsource” y sumando configuración adicional para integrar vía SAML contra el IDP propio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Esta interacción de los distintos componentes de SIU Araí-Usuarios y SIU Huarpe. Y la personalización se pueden ver en el siguiente diagrama:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:diagrama-interaccion.png|500px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La implementación de SIU-Huarpe sin SIU Araí-Usuarios requiere que el propio gestor de identidad ofrezca los ''mismos servicios que provee Araí-Usuarios'', no solo en el momento de implementar, sino que será necesario ir evolucionando de la misma forma en el tiempo para acompañar la actualizaciones que vaya ofreciendo SIU-Huarpe.&lt;br /&gt;
Hacer esto suele ser complejo y cuesta mantenerlo en el tiempo, por eso no recomendamos esta última estrategia de implementación.&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=Nuestra_instituci%C3%B3n_no_cuenta_con_SIU-_Arai_Usuarios,_tenemos_nuestro_propio_gestor_de_identidad_y_queremos_implementar_SIU_Huarpe_%C2%BFEsto_es_posible%3F&amp;diff=106090</id>
		<title>Nuestra institución no cuenta con SIU- Arai Usuarios, tenemos nuestro propio gestor de identidad y queremos implementar SIU Huarpe ¿Esto es posible?</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=Nuestra_instituci%C3%B3n_no_cuenta_con_SIU-_Arai_Usuarios,_tenemos_nuestro_propio_gestor_de_identidad_y_queremos_implementar_SIU_Huarpe_%C2%BFEsto_es_posible%3F&amp;diff=106090"/>
				<updated>2025-04-07T13:50:35Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Nuestra institución cuenta con gestor de identidad propio y queremos implementar SIU Huarpe ¿Esto es posible? ==&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SIU-Huarpe es un portal de autogestión para los usuarios que está específicamente diseñado para trabajar por defecto con '''SIU Araí-Usuarios'''. Tanto el Huarpe núcleo como los distintos bundles necesitan consumir servicios que son implementados por Araí-Usuarios.&lt;br /&gt;
&lt;br /&gt;
A su vez, Araí-Usuarios ofrece un IDP por defecto que implementa los protocolos SAML 2.0 y OpenID Connect.&lt;br /&gt;
&lt;br /&gt;
El SIU ha evaluado y colaborado con otras instituciones en personalizaciones que permitieran integrar SIU Araí-Usuarios con distintos IdPs, al que llamamos esquema de integración híbrida, una descripción y consideraciones del mismo pueden encontrar en el siguiente link: [https://documentacion.siu.edu.ar/usuarios/docs/next/cache/estrategia-integracion-hibrida/ estrategia-integracion-hibrida]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La implementación de este esquema de integración híbrida tiene las siguientes características:&lt;br /&gt;
&lt;br /&gt;
* El IDP propio será el encargado de gestionar la autentificación, bajo un esquema “one-password”, esto significa que las contraseñas estarán almacenadas y serán validadas únicamente contra el IDP propio.&lt;br /&gt;
&lt;br /&gt;
* Todas las soluciones SIU se encontrarán desplegadas y estarán conectadas al IDP ofrecido por SIU Araí-Usuarios.&lt;br /&gt;
&lt;br /&gt;
* El IDP de SIU Araí-Usuarios a su vez debe funcionar con autenticación delegada contra el IDP propio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para la implementación de un esquema de integración híbrida, es necesario que realicen una serie de ajustes:&lt;br /&gt;
&lt;br /&gt;
* '''Gestión y sincronización de usuarios''': La creación, edición o baja de usuarios realizados en el IDP propio, debe disparar eventos que reflejen dichos cambios en arai-usuarios. El mecanismo recomendable sería vía la utilización de la API que dispone el servicio, la documentación al respecto se encuentra en el siguiente [https://documentacion.siu.edu.ar/apis/?spec=arai-usuarios_v2 enlace]. Otra alternativa sería que el mantenimiento de los usuarios en SIU-Arai: Usuarios se realice de forma manual.&lt;br /&gt;
&lt;br /&gt;
* '''Autenticación delegada''': al momento de acceder un usuario a una app registrada en arai-usuarios, podremos tener dos alternativas:&lt;br /&gt;
**se muestra la pantalla de login del IDP de Araí-Usuarios, la cual solicita el usuario/clave. Se debe adecuar la clase que realiza la autentificación para que en vez de realizar el login interno de Araí-Usuarios, lo realice por medio de validaciones contra los servicios del IDP propio.&lt;br /&gt;
**en vez de mostrar la pantalla de login del IDP de Araí-Usuarios, redirigir al usuario al login del IDP propio. Esto se logra mediante una delegación del IDP de Araí-Usuarios haciendo que se comporte como una aplicación o SP en el IDP propio de la institución. Esto a su vez se logra explotando las características del protocolo SAML.&lt;br /&gt;
&lt;br /&gt;
* '''Aclaraciones respecto a cambios en el mecanismo de autentificación''':&lt;br /&gt;
**Se puede utilizar cualquier mecanismo de interacción que dispongan para realizar el control de usuario y clave, por ejemplo, vía una consulta a una API tipo REST, mediante una consulta sql a otra base de datos, utilizando conexión a otro LDAP mediante bind, o cualquier mecanismo de verificación de la información de la cuenta. Además se requiere estos cambios en el código fuente de Araí-Usuarios extendiendo el “authsource”. Pueden tomar como referencia, por ejemplo, el ajuste realizado para Firebase. Esta personalización pueden verla desde el siguiente archivo:[[AraiFirebaseAuth.php]]&lt;br /&gt;
En esta clase pueden seguir las personalizaciones realizadas, como por ejemplo el del método login().&lt;br /&gt;
**Se puede configurar mediante la personalización en el código fuente de Araí-Usuarios extendiendo el “authsource” y sumando configuración adicional para integrar vía SAML contra el IDP propio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Esta interacción de los distintos componentes de SIU Araí-Usuarios y SIU Huarpe. Y la personalización se pueden ver en el siguiente diagrama:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:diagrama-interaccion.png|500px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La implementación de SIU-Huarpe sin SIU Araí-Usuarios requiere que el propio gestor de identidad ofrezca los ''mismos servicios que provee Araí-Usuarios'', no solo en el momento de implementar, sino que será necesario ir evolucionando de la misma forma en el tiempo para acompañar la actualizaciones que vaya ofreciendo SIU-Huarpe.&lt;br /&gt;
Hacer esto suele ser complejo y cuesta mantenerlo en el tiempo, por eso no recomendamos esta última estrategia de implementación.&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=Nuestra_instituci%C3%B3n_no_cuenta_con_SIU-_Arai_Usuarios,_tenemos_nuestro_propio_gestor_de_identidad_y_queremos_implementar_SIU_Huarpe_%C2%BFEsto_es_posible%3F&amp;diff=106089</id>
		<title>Nuestra institución no cuenta con SIU- Arai Usuarios, tenemos nuestro propio gestor de identidad y queremos implementar SIU Huarpe ¿Esto es posible?</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=Nuestra_instituci%C3%B3n_no_cuenta_con_SIU-_Arai_Usuarios,_tenemos_nuestro_propio_gestor_de_identidad_y_queremos_implementar_SIU_Huarpe_%C2%BFEsto_es_posible%3F&amp;diff=106089"/>
				<updated>2025-04-07T13:50:07Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Nuestra institución cuenta con gestor de identidad propio y queremos implementar SIU Huarpe ¿Esto es posible? ==&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SIU-Huarpe es un portal de autogestión para los usuarios que está específicamente diseñado para trabajar por defecto con '''SIU Araí-Usuarios'''. Tanto el Huarpe núcleo como los distintos bundles necesitan consumir servicios que son implementados por Araí-Usuarios.&lt;br /&gt;
&lt;br /&gt;
A su vez, Araí-Usuarios ofrece un IDP por defecto que implementa los protocolos SAML 2.0 y OpenID Connect.&lt;br /&gt;
&lt;br /&gt;
El SIU ha evaluado y colaborado con otras instituciones en personalizaciones que permitieran integrar SIU Araí-Usuarios con distintos IdPs, al que llamamos esquema de integración híbrida, una descripción y consideraciones del mismo pueden encontrar en el siguiente link: [https://documentacion.siu.edu.ar/usuarios/docs/next/cache/estrategia-integracion-hibrida/ estrategia-integracion-hibrida]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La implementación de este esquema de integración híbrida tiene las siguientes características:&lt;br /&gt;
&lt;br /&gt;
* El IDP propio será el encargado de gestionar la autentificación, bajo un esquema “one-password”, esto significa que las contraseñas estarán almacenadas y serán validadas únicamente contra el IDP propio.&lt;br /&gt;
&lt;br /&gt;
* Todas las soluciones SIU se encontrarán desplegadas y estarán conectadas al IDP ofrecido por SIU Araí-Usuarios.&lt;br /&gt;
&lt;br /&gt;
* El IDP de SIU Araí-Usuarios a su vez debe funcionar con autenticación delegada contra el IDP propio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para la implementación de un esquema de integración híbrida, es necesario que realicen una serie de ajustes:&lt;br /&gt;
&lt;br /&gt;
* '''Gestión y sincronización de usuarios''': La creación, edición o baja de usuarios realizados en el IDP propio, debe disparar eventos que reflejen dichos cambios en arai-usuarios. El mecanismo recomendable sería vía la utilización de la API que dispone el servicio, la documentación al respecto se encuentra en el siguiente [https://documentacion.siu.edu.ar/apis/?spec=arai-usuarios_v2 enlace]. Otra alternativa sería que el mantenimiento de los usuarios en SIU-Arai: Usuarios se realice de forma manual.&lt;br /&gt;
&lt;br /&gt;
* '''Autenticación delegada''': al momento de acceder un usuario a una app registrada en arai-usuarios, podremos tener dos alternativas:&lt;br /&gt;
**se muestra la pantalla de login del IDP de Araí-Usuarios, la cual solicita el usuario/clave. Se debe adecuar la clase que realiza la autentificación para que en vez de realizar el login interno de Araí-Usuarios, lo realice por medio de validaciones contra los servicios del IDP propio.&lt;br /&gt;
**en vez de mostrar la pantalla de login del IDP de Araí-Usuarios, redirigir al usuario al login del IDP propio. Esto se logra mediante una delegación del IDP de Araí-Usuarios haciendo que se comporte como una aplicación o SP en el IDP propio de la institución. Esto a su vez se logra explotando las características del protocolo SAML.&lt;br /&gt;
&lt;br /&gt;
* '''Aclaraciones respecto a cambios en el mecanismo de autentificación''':&lt;br /&gt;
**Se puede utilizar cualquier mecanismo de interacción que dispongan para realizar el control de usuario y clave, por ejemplo, vía una consulta a una API tipo REST, mediante una consulta sql a otra base de datos, utilizando conexión a otro LDAP mediante bind, o cualquier mecanismo de verificación de la información de la cuenta. Además se requiere estos cambios en el código fuente de Araí-Usuarios extendiendo el “authsource”. Pueden tomar como referencia, por ejemplo, el ajuste realizado para Firebase. Esta personalización pueden verla desde el siguiente archivo:&lt;br /&gt;
[[AraiFirebaseAuth.php]]&lt;br /&gt;
&lt;br /&gt;
En esta clase pueden seguir las personalizaciones realizadas, como por ejemplo el del método login().&lt;br /&gt;
**Se puede configurar mediante la personalización en el código fuente de Araí-Usuarios extendiendo el “authsource” y sumando configuración adicional para integrar vía SAML contra el IDP propio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Esta interacción de los distintos componentes de SIU Araí-Usuarios y SIU Huarpe. Y la personalización se pueden ver en el siguiente diagrama:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:diagrama-interaccion.png|500px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La implementación de SIU-Huarpe sin SIU Araí-Usuarios requiere que el propio gestor de identidad ofrezca los ''mismos servicios que provee Araí-Usuarios'', no solo en el momento de implementar, sino que será necesario ir evolucionando de la misma forma en el tiempo para acompañar la actualizaciones que vaya ofreciendo SIU-Huarpe.&lt;br /&gt;
Hacer esto suele ser complejo y cuesta mantenerlo en el tiempo, por eso no recomendamos esta última estrategia de implementación.&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	<entry>
		<id>https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106088</id>
		<title>AraiFirebaseAuth.php</title>
		<link rel="alternate" type="text/html" href="https://documentacion.siu.edu.ar/wiki/index.php?title=AraiFirebaseAuth.php&amp;diff=106088"/>
				<updated>2025-04-07T13:48:33Z</updated>
		
		<summary type="html">&lt;p&gt;Belmontec: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use SimpleSAML\Logger;&lt;br /&gt;
use SIU\AraiUsuarios;&lt;br /&gt;
use SIU\AraiUsuarios\IDP\Factory;&lt;br /&gt;
use SIU\AraiUsuarios\Core\UsuariosManager;&lt;br /&gt;
use SIU\AraiUsuarios\Entities\Usuario;&lt;br /&gt;
use SIU\AraiUsuarios\Error;&lt;br /&gt;
&lt;br /&gt;
use SAML2\Utilities\Temporal;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Simple SQL authentication source&lt;br /&gt;
 *&lt;br /&gt;
 * Implementa la autenticación contra un servicio Google Firebase Auth&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * @package simpleSAMLphp&lt;br /&gt;
 * @version $Id$&lt;br /&gt;
 */&lt;br /&gt;
class sspmod_arai_Auth_Source_AraiFirebaseAuth extends sspmod_arai_Auth_Source_AraiAuth&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    public function __construct($info, $config)&lt;br /&gt;
    {&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_uri&amp;quot;])');&lt;br /&gt;
        assert('isset($config[&amp;quot;firebase_key&amp;quot;])');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;firebase_uri = $config['firebase_uri'];&lt;br /&gt;
        $this-&amp;gt;firebase_key = $config['firebase_key'];&lt;br /&gt;
&lt;br /&gt;
        parent::__construct($info, $config);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @inheritDoc&lt;br /&gt;
     */&lt;br /&gt;
    protected function login($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        assert('is_string($uid)');&lt;br /&gt;
        assert('is_string($clave)');&lt;br /&gt;
&lt;br /&gt;
        $contexto = ['usuario' =&amp;gt; $uid];&lt;br /&gt;
        $uid = strtolower($uid);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            /* @var UsuariosManager $usuariosManager */&lt;br /&gt;
            $usuariosManager = Factory::getUsuariosManager();&lt;br /&gt;
&lt;br /&gt;
            if (!$this-&amp;gt;autenticarEnFirebase($uid, $clave)) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario Firebase '$uid' ingresa usuario y/o clave incorrecta&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // TODO: deberíamos permitir que la auth vía Firebase escoja si es por uid o email?&lt;br /&gt;
            $this-&amp;gt;loginSubject = $usuariosManager-&amp;gt;getUsuarioByEmail($uid);&lt;br /&gt;
            if (!$this-&amp;gt;loginSubject) {&lt;br /&gt;
                throw new SimpleSAML\Error\Error('WRONGUSERPASS', new Exception(&amp;quot;El usuario 'mail=$uid' no existe&amp;quot;));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //Si autentica y esta vencida la cuenta se marca como bloqueado&lt;br /&gt;
            $dt = new DateTime();&lt;br /&gt;
            $dt-&amp;gt;setTimestamp(Temporal::getTime());&lt;br /&gt;
            &lt;br /&gt;
            $uid = $this-&amp;gt;loginSubject-&amp;gt;getUid();&lt;br /&gt;
            $this-&amp;gt;validarCuentaExpirada($usuariosManager, $uid, $dt);&lt;br /&gt;
            &lt;br /&gt;
            /**&lt;br /&gt;
             * Se maneja de forma externa, no agregar nuevas cuestiones relacionadas a las claves del usuario&lt;br /&gt;
                $this-&amp;gt;validarPasswordVencido($usuariosManager, $uid, $dt);&lt;br /&gt;
                $usuariosManager-&amp;gt;anularPedidosCambioPasswordPrevios($uid);&lt;br /&gt;
            */&lt;br /&gt;
            &lt;br /&gt;
            $attributes = $usuariosManager-&amp;gt;getAtributosSAMLUsuario($this-&amp;gt;loginSubject);&lt;br /&gt;
        } catch (SIU\AraiUsuarios\Error $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se ingresa un usuario y/o clave incorrecto', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw new SimpleSAML\Error\Error('WRONGUSERPASS', $e);&lt;br /&gt;
        } catch (\Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
            throw $e;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Factory::getIdpLogger()-&amp;gt;info('Usuario realiza login correcto', $contexto);&lt;br /&gt;
        SimpleSAML\Logger::info('arai:' . $this-&amp;gt;authId . ': Attributes: ' . implode(',', array_keys($attributes)));&lt;br /&gt;
&lt;br /&gt;
        return $attributes;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param $uid&lt;br /&gt;
     * @param $clave&lt;br /&gt;
     * @return bool&lt;br /&gt;
     * @throws \GuzzleHttp\Exception\GuzzleException&lt;br /&gt;
     */&lt;br /&gt;
    private function autenticarEnFirebase($uid, $clave)&lt;br /&gt;
    {&lt;br /&gt;
        $status = false;&lt;br /&gt;
&lt;br /&gt;
        $key = $this-&amp;gt;firebase_key;&lt;br /&gt;
&lt;br /&gt;
        $uri = $this-&amp;gt;firebase_uri . $key;&lt;br /&gt;
&lt;br /&gt;
        $contexto = [&lt;br /&gt;
            'firebase_user' =&amp;gt; $uid,&lt;br /&gt;
            'firebase_key' =&amp;gt; $key,&lt;br /&gt;
            'firebase_uri' =&amp;gt; $uri,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        $body = [&lt;br /&gt;
            'email'=&amp;gt; $uid,&lt;br /&gt;
            'password'=&amp;gt; $clave,&lt;br /&gt;
            'returnSecureToken'=&amp;gt; true,&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            $client = new GuzzleHttp\Client();&lt;br /&gt;
&lt;br /&gt;
            $res = $client-&amp;gt;request('POST', $uri, [&lt;br /&gt;
                'json' =&amp;gt; $body&lt;br /&gt;
            ]);&lt;br /&gt;
&lt;br /&gt;
            $status = $res-&amp;gt;getStatusCode() == 200;&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\RequestException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getMessage();&lt;br /&gt;
            if ($e-&amp;gt;hasResponse()) {&lt;br /&gt;
                $msg = json_decode($e-&amp;gt;getResponse()-&amp;gt;getBody()-&amp;gt;getContents());&lt;br /&gt;
                $msg = $msg-&amp;gt;error-&amp;gt;errors;&lt;br /&gt;
            }&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (\GuzzleHttp\Exception\ClientException $e) {&lt;br /&gt;
            $msg = $e-&amp;gt;getResponse()-&amp;gt;getReasonPhrase();&lt;br /&gt;
            $contexto['error'] = $msg;&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$msg);&lt;br /&gt;
        } catch (Exception $e) {&lt;br /&gt;
            $contexto['error'] = $e-&amp;gt;getMessage();&lt;br /&gt;
            Factory::getIdpLogger()-&amp;gt;notice('Se produjo un error al intentar validr un usuario y/o clave', $contexto);&lt;br /&gt;
            SimpleSAML\Logger::error('arai:' . $this-&amp;gt;authId .    &amp;quot;: &amp;quot;.$e-&amp;gt;getMessage());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $status;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Belmontec</name></author>	</entry>

	</feed>