## Introducción *Propósito de la biblioteca* El propósito de esta biblioteca es proporcionar un mecanismo de autenticación con la plataforma de Induxsoft desde un sistema V12. ### Funciones disponibles **getDeploymentType(db)** Detecta si la instancia V12 es cloud o on-premise. Determina si existe una variable global de V12 denominada **induxsoft_cloud_id** con un valor de 32 caracteres que debería contener el id del servicio en la nube de Induxsoft. (retorna "cloud") **Parametros** - *db.-* Referecnia a una conexion de base de datos. **Retorno:** cadena Sí existe la variable **induxsoft_cloud_id**: "cloud" En caso contrario: "onpremise" ``` "cloud" | "onpremise" ``` **getAuthData(db,idsv12)** **Parametros** - *db.-* Referencia a una conexion de base de datos. - *idsv12.-* Id de sedión del sistema v12(puede ser vació,se obtendrá desde la bd). **Retorno:** objeto Para cloud: ``` { "svc_id": "uuid del servicio V12 en la nube", "ids": "id de sesión del usuario V12 activo" } ``` Para on-premise: ``` { "uid": "correo o teléfono del perfil Induxsoft del usuario", "secret": "token de larga duración del usuario" } ``` **getSession(db,idsv12)** **Parametros** - *db.-* Referencia a una conexion de base de datos. - *idsv12.-* Id de sedión del sistema v12(puede ser vació,se obtendrá desde la bd). **Retorno:** objeto Exitoso: ``` { "success": 1, "induxsoft_sid": "id de sesión de Induxsoft", "profile": "id del perfil", "name": "nombre del usuario" ... } ``` Error: ``` { "success": 0, "error": "invalid_token" codigo de error } ``` ### Ejemplos de uso - Ejemplo para V12 cloud ``` #include "dkli.dkh" #! program "" { #include "functions.dkh" #include "serialize.dkh" #include "webcl.dkh" #include "dbr.dkh" #include "dbr.vars.dkl" #include "dbext.induxsoft.dk" ref db=dbr.open("miconexion@miapp") ref data=dbext.induxsoft.getSession(db,"ID de sesión del sistema v12") } ``` - Ejemplo para V12 on-premise ``` #include "dkli.dkh" #! program "" { #include "functions.dkh" #include "serialize.dkh" #include "webcl.dkh" #include "dbr.dkh" #include "dbr.vars.dkl" #include "dbext.induxsoft.dk" ref db=dbr.open("miconexion@miapp") ref data=dbext.induxsoft.getSession(db,"") } ``` **Tabla de códigos de error** | Código | Significado | Acción recomendada | |--------|-------------|--------------------| | `not_configured` | Usuario sin credenciales Induxsoft | Solicitar al usuario asociar su perfil desde la app "Asociar perfil Induxsoft" | | `invalid_token` | Token revocado o inválido | Solicitar al usuario generar un nuevo token en el Portal Administrativo | | `ip_mismatch` | IP no autorizada | Verificar configuración de IPs autorizadas en el Portal Administrativo | | `profile_not_found` | Perfil no existe o inactivo | Verificar que el perfil exista y esté activo | | `network_error` | Fallo de comunicación | Verificar conectividad a api.induxsoft.net | **Ejemplo completo de integración** ```devkron usar dbext.induxsoft // Obtener sesión de Induxsoft para el usuario actual resultado = dbext.induxsoft.getSession(db,idsv12) si resultado.success = 1 entonces // Usar resultado.induxsoft_sid en llamadas a servicios cloud mostrar "Sesión obtenida: " + resultado.induxsoft_sid mostrar "Perfil: " + resultado.profile mostrar "Usuario: " + resultado.name // Ejemplo: llamar a otro servicio cloud de Induxsoft // usando el induxsoft_sid como credencial sino // Manejar error según el código si resultado.error = "not_configured" entonces mostrar "Por favor asocie su perfil de Induxsoft desde el menú de configuración" sino si resultado.error = "invalid_token" entonces mostrar "Su token ha expirado. Por favor genere uno nuevo desde el Portal Administrativo" sino mostrar "Error de autenticación: " + resultado.error fin si fin si ```