cambios en apidenuncias

This commit is contained in:
2026-04-30 08:55:00 +02:00
parent 3b77fc827d
commit b22f02807d
295 changed files with 26359 additions and 3777 deletions

View File

@@ -0,0 +1,397 @@
Imports System.Net
Imports System.Net.Http
Imports System.Net.Http.Headers
Imports System.Text
Imports System.Threading.Tasks
Imports Models
Imports Newtonsoft.Json.Linq
Public Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
mensajeError.InnerText = Convert.ToString(Request.QueryString("certError"))
End If
End Sub
Private Async Sub btnAcceso_Click(sender As Object, e As EventArgs) Handles btnAcceso.Click
mensajeError.InnerText = ""
Dim resultIden As String = Await CredNet(Usuario.Value)
Dim RespIden As Models.ResultadoIdentificacion = Nothing
If resultIden <> "error" Then
Dim client = HttpClientFactory.Create()
client.BaseAddress = New Uri(UtilAntifraude.urlSwagger())
client.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Bearer", Convert.ToString(Session("token")))
Dim loginResponse = Await client.GetAsync("api/ResultadoIdentificacion/nif/" + resultIden + "/Origen/WEBINTRANET")
Dim responseContent = Await loginResponse.Content.ReadAsStringAsync()
RespIden = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Models.ResultadoIdentificacion)(responseContent)
End If
If RespIden Is Nothing Then
divLoadingHome.Style.Item("display") = "none"
mensajeError.InnerText = "No se pudo identificar al usuario."
Return
End If
ProcesarResultadoIdentificacion(RespIden, Usuario.Value)
End Sub
Private Async Function CredNet(Nif As String) As Task(Of String)
Try
Dim contr As String = Contrasena.Value
Dim client = HttpClientFactory.Create()
client.BaseAddress = New Uri(UtilAntifraude.urlSwagger())
Dim loginPayload = "{""NombreUsuario"":""" + Nif + """,""Contraseña"":""" + contr + """, ""Origen"":""Intranet""}"
Dim loginContent As StringContent = New StringContent(loginPayload, Encoding.UTF8, "application/json")
Dim loginResponse = Await client.PostAsync("api/Auth/login", loginContent)
Dim responseContent = Await loginResponse.Content.ReadAsStringAsync()
If loginResponse.IsSuccessStatusCode Then
Dim parsedJson = JObject.Parse(responseContent)
Session("token") = If(parsedJson("token")?.ToString(), If(parsedJson("Token")?.ToString(), ""))
Dim us = parsedJson("user")
If us Is Nothing Then us = parsedJson("User")
If us IsNot Nothing Then
Return If(us("nif")?.ToString(),
If(us("NIF")?.ToString(),
If(us("dni")?.ToString(),
If(us("DNI")?.ToString(), ""))))
End If
Return "error"
Else
Return "error"
End If
Catch
Return "error"
End Try
End Function
Private Sub ProcesarResultadoIdentificacion(respIden As Models.ResultadoIdentificacion, usuarioOriginal As String)
If respIden Is Nothing Then
divLoadingHome.Style.Item("display") = "none"
mensajeError.InnerText = "No se pudo identificar al usuario."
Return
End If
Select Case respIden.resultado.ToString()
Case "0"
Dim Nombre As String = respIden.Personas(0).Nombre
Dim Nif As String = respIden.Personas(0).Dni
Session.Add("Nombre", Nombre)
Session.Add("usuario", Nif)
Session.Add("Persona", respIden)
CargarNotificaciones(respIden)
If Not String.IsNullOrWhiteSpace(usuarioOriginal) AndAlso usuarioOriginal.Length > 1 Then
If Not "0123456789".Contains(usuarioOriginal.Substring(1, 1)) Then
Session.Add("LDAP", usuarioOriginal)
End If
End If
If respIden.Personas.Count > 1 Then
Response.Redirect("selModo.aspx", False)
Context.ApplicationInstance.CompleteRequest()
Else
Session.Add("modo", "PROPIO")
Session.Add("usuariosSeleccionados", Nif.Split(",").ToList())
Response.Redirect("home.aspx", False)
Context.ApplicationInstance.CompleteRequest()
End If
Case "1"
divLoadingHome.Style.Item("display") = "none"
mensajeError.InnerText = "Usuario incorrecto"
Case "2"
divLoadingHome.Style.Item("display") = "none"
mensajeError.InnerText = "Contraseña incorrecta"
Case "3"
divLoadingHome.Style.Item("display") = "none"
mensajeError.InnerText = respIden.errores.ToString()
Case Else
divLoadingHome.Style.Item("display") = "none"
mensajeError.InnerText = "Error de identificación no controlado."
End Select
End Sub
Private Sub CargarNotificaciones(respIden As Models.ResultadoIdentificacion)
Dim listpersonas = respIden.Personas.ToList()
Dim numAsistenciasPendientes = 0
Dim listaPersonasIncidenciasPendientes As List(Of String) = New List(Of String)
If listpersonas.Count > 1 Then
Dim cont = 0
For Each persona As Models.Personal In listpersonas
If cont = 0 Then
cont += 1
Else
numAsistenciasPendientes += persona.NumeroInciPorAceptar
If persona.NumeroInciPorAceptar > 0 Then
listaPersonasIncidenciasPendientes.Add(persona.Dni)
End If
End If
Next
If numAsistenciasPendientes > 0 Then
Session.Add("nuIncidenciasPendientes", numAsistenciasPendientes)
Session.Add("listaPersonasIncPend", listaPersonasIncidenciasPendientes)
Session.Add("fechaIniIncidenciasPendientes", respIden.FeIniInciPorAceptar.ToString("yyyy-MM-dd"))
Session.Add("fechaFinIncidenciasPendientes", respIden.FeFinInciPorAceptar.ToString("yyyy-MM-dd"))
Session.Add("mostrarAviso", True)
End If
End If
End Sub
<System.Web.Services.WebMethod(EnableSession:=True)>
Public Shared Async Function cargarListado(usu As String, token As String) As Task(Of String)
Return Await cargarListadoInterno(HttpContext.Current, usu, token)
End Function
<System.Web.Services.WebMethod(EnableSession:=True)>
Public Shared Async Function cargarListadoCertificado(dni As String) As Task(Of String)
If String.IsNullOrWhiteSpace(dni) Then
Return "No se pudo obtener el DNI del certificado."
End If
Dim currentContext = HttpContext.Current
If currentContext Is Nothing Then
Return "No se pudo recuperar el contexto de sesión del acceso."
End If
If currentContext.Session Is Nothing Then
Return "No se pudo recuperar la sesión del acceso con certificado."
End If
Dim endpoint As String = ConfigurationManager.AppSettings("CertLoginEndpoint")
If String.IsNullOrWhiteSpace(endpoint) Then
endpoint = "api/Auth/login-cert-proxy"
End If
Dim payload = "{""Dni"":""" & EscapeJson(dni.Trim()) & """}"
Dim lastError As String = "No se pudo conectar con el servicio de autenticación."
For Each baseAddress In ObtenerSwaggerBaseAddresses()
Try
Dim client = HttpClientFactory.Create()
client.BaseAddress = baseAddress
client.Timeout = TimeSpan.FromSeconds(15)
Using loginContent As New StringContent(payload, Encoding.UTF8, "application/json")
Dim loginResponse = Await client.PostAsync(endpoint, loginContent)
Dim responseContent = Await loginResponse.Content.ReadAsStringAsync()
If Not loginResponse.IsSuccessStatusCode Then
If Not String.IsNullOrWhiteSpace(responseContent) Then
Return responseContent
End If
Return "Error en el acceso con certificado."
End If
Dim parsedJson = JObject.Parse(responseContent)
Dim token = If(parsedJson("token")?.ToString(), If(parsedJson("Token")?.ToString(), ""))
Dim us = parsedJson("user")
If us Is Nothing Then us = parsedJson("User")
Dim nif = ""
If us IsNot Nothing Then
nif = If(us("nif")?.ToString(),
If(us("NIF")?.ToString(),
If(us("dni")?.ToString(),
If(us("DNI")?.ToString(), ""))))
End If
If String.IsNullOrWhiteSpace(token) OrElse String.IsNullOrWhiteSpace(nif) Then
Return "Respuesta inválida del servicio de autenticación."
End If
Try
Return Await cargarListadoInterno(currentContext, nif, token)
Catch ex As Exception
Return "Error interno completando el acceso con certificado: " & ex.Message
End Try
End Using
Catch ex As Exception When TypeOf ex Is HttpRequestException OrElse
TypeOf ex Is TaskCanceledException OrElse
TypeOf ex Is InvalidOperationException OrElse
TypeOf ex Is UriFormatException
lastError = ex.Message
End Try
Next
Return "No se pudo conectar con el servicio de autenticación configurado: " & lastError
End Function
Private Shared Iterator Function ObtenerSwaggerBaseAddresses() As IEnumerable(Of Uri)
Dim seen As New HashSet(Of String)(StringComparer.OrdinalIgnoreCase)
For Each candidate In ObtenerSwaggerBaseAddressCandidates()
Dim normalizedCandidate = candidate.Trim()
If normalizedCandidate = "" Then
Continue For
End If
Dim baseUri As Uri = Nothing
If Not Uri.TryCreate(normalizedCandidate, UriKind.Absolute, baseUri) Then
Continue For
End If
Dim key = baseUri.AbsoluteUri.TrimEnd("/"c)
If seen.Add(key) Then
Yield baseUri
End If
Next
End Function
Private Shared Iterator Function ObtenerSwaggerBaseAddressCandidates() As IEnumerable(Of String)
Dim configuredUrl = UtilAntifraude.urlSwagger()
If Not String.IsNullOrWhiteSpace(configuredUrl) Then
Yield configuredUrl
Dim configuredUri As Uri = Nothing
If Uri.TryCreate(configuredUrl, UriKind.Absolute, configuredUri) AndAlso
String.Equals(configuredUri.Scheme, Uri.UriSchemeHttps, StringComparison.OrdinalIgnoreCase) AndAlso
EsHostLocal(configuredUri.Host) Then
Dim httpBuilder As New UriBuilder(configuredUri) With {
.Scheme = Uri.UriSchemeHttp,
.Port = configuredUri.Port
}
Yield httpBuilder.Uri.AbsoluteUri
End If
End If
Dim explicitFallback = ConfigurationManager.AppSettings("SwaggerVBFallback")
If Not String.IsNullOrWhiteSpace(explicitFallback) Then
Yield explicitFallback
End If
End Function
Private Shared Function EsHostLocal(host As String) As Boolean
Return String.Equals(host, "localhost", StringComparison.OrdinalIgnoreCase) OrElse
String.Equals(host, "127.0.0.1", StringComparison.OrdinalIgnoreCase) OrElse
String.Equals(host, "::1", StringComparison.OrdinalIgnoreCase)
End Function
Private Shared Function EscapeJson(valor As String) As String
If valor Is Nothing Then Return ""
Return valor.Replace("\", "\\").Replace("""", "\""").Replace(vbCrLf, "\n").Replace(vbLf, "\n").Replace(vbCr, "\n")
End Function
Private Shared Async Function cargarListadoInterno(context As HttpContext, usu As String, token As String) As Task(Of String)
If context Is Nothing Then
Return "No se pudo recuperar la sesión del usuario."
End If
Dim session = context.Session
If session Is Nothing Then
Return "No se pudo recuperar la sesión del usuario."
End If
session("token") = token
Dim client = HttpClientFactory.Create()
client.BaseAddress = New Uri(UtilAntifraude.urlSwagger())
client.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Bearer", token)
Dim loginResponse = Await client.GetAsync("api/ResultadoIdentificacion/nif/" + usu + "/Origen/WEBINTRANET")
Dim responseContent = Await loginResponse.Content.ReadAsStringAsync()
Dim respIden = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Models.ResultadoIdentificacion)(responseContent)
If respIden Is Nothing Then
Return "No se pudo identificar al usuario."
End If
If respIden.Personas Is Nothing OrElse respIden.Personas.Count = 0 Then
Return "La identificación no devolvió ninguna persona asociada."
End If
Dim resultado = Convert.ToString(respIden.resultado)
Select Case resultado
Case "0"
Dim nombre = respIden.Personas(0).Nombre
Dim nif = respIden.Personas(0).Dni
session("Nombre") = nombre
session("usuario") = nif
session("Persona") = respIden
Dim listpersonas = respIden.Personas.ToList()
Dim numAsistenciasPendientes = 0
Dim listaPersonasIncidenciasPendientes As List(Of String) = New List(Of String)
If listpersonas.Count > 1 Then
Dim cont = 0
For Each persona As Models.Personal In listpersonas
If cont = 0 Then
cont += 1
Else
numAsistenciasPendientes += persona.NumeroInciPorAceptar
If persona.NumeroInciPorAceptar > 0 Then
listaPersonasIncidenciasPendientes.Add(persona.Dni)
End If
End If
Next
If numAsistenciasPendientes > 0 Then
session("nuIncidenciasPendientes") = numAsistenciasPendientes
session("listaPersonasIncPend") = listaPersonasIncidenciasPendientes
session("fechaIniIncidenciasPendientes") = respIden.FeIniInciPorAceptar.ToString("yyyy-MM-dd")
session("fechaFinIncidenciasPendientes") = respIden.FeFinInciPorAceptar.ToString("yyyy-MM-dd")
session("mostrarAviso") = True
End If
End If
If Not String.IsNullOrWhiteSpace(usu) AndAlso usu.Length > 1 Then
If Not "0123456789".Contains(usu.Substring(1, 1)) Then
session("LDAP") = usu
End If
End If
If respIden.Personas.Count > 1 Then
Return "selModo.aspx"
End If
session("modo") = "PROPIO"
session("usuariosSeleccionados") = nif.Split(",").ToList()
Return "home.aspx"
Case "1"
Return "Usuario incorrecto"
Case "2"
Return "Contraseña incorrecta"
Case "3"
Return Convert.ToString(respIden.errores)
Case Else
Return "Error de identificación no controlado"
End Select
End Function
End Class
Public Class NominaTrabajador
Public Property idNominaTrabajador As String
Public Property Descripcion As String
Public Property MesNomina As Integer
End Class