Files
SIG/LogIn.aspx.vb
2023-02-01 00:00:39 -07:00

407 lines
22 KiB
VB.net

Imports System.Data
Imports System.IdentityModel.Tokens.Jwt
Imports System.Security.Claims
Imports ADSSession
Imports Extensiones
Imports Microsoft.IdentityModel.Tokens
Partial Class LogIn
Inherits System.Web.UI.Page
#Region " PROPIEDADES "
Private Property CveUsuario As Integer
Get
Return IfNull(ViewState("CveUsuario"), "-1").ToString.ToEntero
End Get
Set(value As Integer)
ViewState("CveUsuario") = value
End Set
End Property
Private Property CveEmpresa As Integer
Get
Return ViewState("CveEmpresa").ToString.ToEntero
End Get
Set(value As Integer)
ViewState("CveEmpresa") = value
End Set
End Property
#End Region
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
'"187.158.96.163" es la de mi casa
'If (Context.Session("UsuarioSIG") IsNot Nothing) OrElse Not User.Identity.IsAuthenticated Then
'Request.Headers.Add("Authorization", "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJOb21icmUiOiJhZG1pbiIsIkN2ZVVzdWFyaW8iOiIyMDA5IiwiQ3ZlRW1wcmVzYSI6IjIiLCJDdmVQZXJmaWwiOiIyIiwiTWFpbCI6ImFkbWluQGFkbWluLmNvbSIsImV4cCI6MTU5NDY3MzQ2NCwiaXNzIjoiVGVzdC5jb20iLCJhdWQiOiJUZXN0LmNvbSJ9.vmPRxGfxzR10Rf-4Luk2Ej0SVs7w2XGDGJBCyx5VSQI")
'Response.AddHeader("Authorization", "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJOb21icmUiOiJhZG1pbiIsIkN2ZVVzdWFyaW8iOiIyMDA5IiwiQ3ZlRW1wcmVzYSI6IjIiLCJDdmVQZXJmaWwiOiIyIiwiTWFpbCI6ImFkbWluQGFkbWluLmNvbSIsImV4cCI6MTU5NDY3MzQ2NCwiaXNzIjoiVGVzdC5jb20iLCJhdWQiOiJUZXN0LmNvbSJ9.vmPRxGfxzR10Rf-4Luk2Ej0SVs7w2XGDGJBCyx5VSQI")
'Response.End()
'End If
Dim iplist As String() = New String() {"", ""}
If HttpContext.Current.Request.ServerVariables("REMOTE_ADDR").ToString().Contiene(iplist) Then
Response.Redirect("http://www.adsistemas.mx/login.aspx") 'si alguien lo ve es correcto la pagina vieja de adsistemas
End If
Dim token As String = GetTokenAngular()
If (token.Length > 0) Then
If Not IsNothing(Request("port")) Then
Dim ReturnUrl As String = "/"
If Request("ReturnUrl") IsNot Nothing Then
ReturnUrl = Request("ReturnUrl").ToString()
End If
Dim strdomain = Request.Url.AbsoluteUri.Replace(Request.Url.PathAndQuery, "")
If Request.Url.Port <> 80 Then
strdomain = strdomain.Replace(String.Format(":{0}", Request.Url.Port), "")
End If
ReturnUrl = String.Format("{0}:{1}/auth/login?token={3}&returnUrl=/{2}", strdomain, Request("port"), HttpUtility.UrlEncode(ReturnUrl), HttpUtility.UrlEncode(token))
'S ies angular retiro el https para que no marque error la pagina
ReturnUrl = ReturnUrl.Replace("https", "http")
ReturnUrl = ReturnUrl.Replace("HTTPS", "HTTP")
RegistraScript(String.Format("opennewlocation('{0}','{1}')", ReturnUrl, ""))
End If
End If
If Not Page.IsPostBack Then
Dim strimg As New StringBuilder
strimg.AppendLine("var imagenes= {'Metronic/assets/admin/pages/media/bg/1.jpg': 'center',")
strimg.AppendLine(" 'Metronic/assets/admin/pages/media/bg/2.jpg': 'center',")
strimg.AppendLine(" 'Metronic/assets/admin/pages/media/bg/3.jpg': 'center',")
strimg.AppendLine(" 'Metronic/assets/admin/pages/media/bg/4.jpg': 'center'")
strimg.AppendLine(" }")
'strimg.AppendLine("var imagenes= ['Metronic/assets/admin/pages/media/bg/1.jpg',")
'strimg.AppendLine(" 'Metronic/assets/admin/pages/media/bg/2.jpg',")
'strimg.AppendLine(" 'Metronic/assets/admin/pages/media/bg/3.jpg',")
'strimg.AppendLine(" 'Metronic/assets/admin/pages/media/bg/4.jpg'")
'strimg.AppendLine(" ]")
'Alert(Request.Url.Host.ToUpper().Contains("SIGNALSGPS"), TipoMensaje.MsgConfirmacion)
If Request.Url.Host.ToUpper().Contains("SIGNALSGPS".ToUpper()) Then
strimg.Clear()
strimg.AppendLine("var imagenes= {")
strimg.AppendLine(" 'Scripts/login/Layout1/images/bg01.jpg': 'center',")
strimg.AppendLine(" 'Scripts/login/Layout1/images/bg02.jpg': 'center',")
strimg.AppendLine(" 'Scripts/login/Layout1/images/bg03.jpg': 'center',")
strimg.AppendLine(" }")
'strimg.AppendLine("var imagenes= [")
'strimg.AppendLine(" 'Scripts/login/Layout1/images/bg01.jpg',")
'strimg.AppendLine(" 'Scripts/login/Layout1/images/bg02.jpg',")
'strimg.AppendLine(" 'Scripts/login/Layout1/images/bg03.jpg',")
'strimg.AppendLine(" ]")
LtlImgLogo.Text = "<img class="""" src=""Scripts/Login/Layout1/images/SignalLogo.png"" />"
LtlAppName.Text = "SIGNAL GPS <br/> tu plataforma de rastreo"
Ltlcopyright.Text = "2019 © Sistema de Monitoreo y Telemedición SA de CV"
Ltlcopyright2.Text = "2019 © Sistema de Monitoreo y Telemedición SA de CV"
PnlLoginB.CssClass = "logincint login-form "
PnlContraB.CssClass = "logincint login-form "
lnkFavicon.Href = "/Imagenes/favicongps.ico"
Else
End If
HdfImagenes.Value = strimg.ToString()
txtUsuario.Focus()
Me.Form.DefaultButton = BtnLogIn.ClientID
If Request("p") IsNot Nothing AndAlso Request("p") <> "" Then
Dim Salida As String = Decripta(Request("p"))
If Salida <> "" Then
Dim UrlParametros As Hashtable = Parametros(Salida)
If UrlParametros("OPCION") IsNot Nothing AndAlso UrlParametros("OPCION").ToString = "Activar" Then
If UrlParametros("CVEU") IsNot Nothing AndAlso UrlParametros("CVEU").ToString.ToEntero > 0 Then
CveUsuario = UrlParametros("CVEU").ToString.ToEntero
CveEmpresa = UrlParametros("CVEE").ToString.ToEntero
'Activo el usuario y redirecciono para que pida la nueva contraseña
Dim currentDate As Date = Date.Now
Dim elapsedTicks As Long = currentDate.Ticks - UrlParametros("HORA").ToString.ToLong
Dim elapsedSpan As New TimeSpan(elapsedTicks)
PnlLogin.Visible = False
If elapsedSpan.Days < 3 Then
Dim Usr As New ClsSisUsuarios
If Usr.GetUsuarios(CveUsuario, -1, -1) Then
Dim dr As DataRow = Usr.DtResultados.FiltroPrimero("")
If dr IsNot Nothing Then
If dr("PolCambiarContraseña").ToString = "SI" Then
PnlContra.Visible = True
'HCambio.Visible = True
'HdnCveUsr.Value = CveUsuario.ToString
Me.Form.DefaultButton = BtnGuardar.ClientID
'If Usr.UpdateUsuarioPortal(dr("Usuario").ToString, dr("Nombre").ToString,
' dr("Permiso1").ToString = "True", dr("Permiso2").ToString = "True", dr("Permiso3").ToString = "True", dr("Permiso4").ToString = "True", dr("Permiso5").ToString = "True",
' dr("Permiso6").ToString = "True", dr("Permiso7").ToString = "True", dr("Permiso8").ToString = "True", dr("Permiso9").ToString = "True", dr("Permiso10").ToString = "True",
' True, TxtContrasenia1.Text, dr("CveCliente").ToString.ToEntero, dr("CveProveedor").ToString.ToEntero, CveUsr) Then
' Alert("Contraseña Modificada.", TipoMensaje.MsgConfirmacion, JSBtnAceptar:="location.href=""ConsultaCliente.aspx""")
'End If
Else
Alert("El usuario ya cambio su contraseña, inicie sesión normalmente.", TipoMensaje.MsgInformacion)
PnlLogin.Visible = True
End If
Else
Alert("El Usuario no existe", TipoMensaje.MsgError)
End If
End If
Usr.Dispose()
Else
Alert("La Activación expiró", TipoMensaje.MsgError)
End If
'TxtContraseña.Text = UrlParametros("CLAVE").ToString.Trim
End If
End If
End If
Else
CveUsuario = -1
End If
Else
If CveUsuario > 0 Then
BtnGuardar_Click(Nothing, Nothing)
Else
BtnLogIn_Click(Nothing, Nothing)
End If
End If
End Sub
Private Function Parametros(Cadena As String) As Hashtable
Dim P1() As String = Cadena.Split("&"c)
Dim Tmp As String
Dim P2() As String
Dim URLParametros As New Hashtable
For Each Tmp In P1
P2 = Tmp.Split("="c)
URLParametros.Add(P2(0).ToString.ToUpper, P2(1))
Next
Return URLParametros
End Function
'Property GlobalDTUsuarios(Optional CveUsuario As Integer = -1, Optional CveEmpresa As Integer = -1) As Data.DataTable
' Get
' If CveUsuario <> -1 Then
' Dim Dv As New Data.DataView(DirectCast(Application("GlobalDTUsuarios"), Data.DataTable), "CveUsuario =" & CveUsuario, "", Data.DataViewRowState.CurrentRows)
' GlobalDTUsuarios = Dv.ToTable
' Dv.Dispose()
' Else
' GlobalDTUsuarios = DirectCast(Application("GlobalDTUsuarios"), Data.DataTable)
' End If
' End Get
' Set(value As Data.DataTable)
' Application("GlobalDTUsuarios") = value
' End Set
'End Property
Dim BtnLogIn_Clickenter As Integer = 0
Protected Sub BtnLogIn_Click(ByVal sender As Object, ByVal e As EventArgs) 'Handles CmdLogIn.Click
Dim ReturnUrl As String = "/"
If Request("ReturnUrl") IsNot Nothing Then
ReturnUrl = Request("ReturnUrl").ToString()
End If
If BtnLogIn_Clickenter = 0 Then 'esta variable se recicla con cada postaback
BtnLogIn_Clickenter = 1
Dim ObjUsuario As New ClsSisUsuarios
Dim Usuario As Usuario = Nothing
'Dim UsuarioAsignaciones As Usuario = Nothing
Dim isgps = Request.Url.Host.ToUpper().Contains("SIGNALSGPS".ToUpper())
Usuario = ObjUsuario.ValidaUsuario(txtUsuario.Text, Encripta(TxtContraseña.Text.Trim), IMEI, CvePlataforma:=If(isgps, 3, -1))
'UsuarioAsignaciones = ObjUsuario.ValidaUsuarioAsignacion(Usuario.CveUsuario, Usuario.CveEmpresa)
If Not isgps AndAlso Usuario IsNot Nothing AndAlso Usuario.CvePlataforma = 3 Then ' SI ES de la plataforma 3(GPS), no debe de entar por liga normal
Usuario = Nothing
End If
ADSSessionConfig.sessionUser = Usuario
ADSSessionConfig.sessionDpage = False
ObjUsuario.Dispose()
If Usuario IsNot Nothing Then
If Not Usuario.AutorizadoxIP OrElse (HddAdsCodex.Text.Length > 0 AndAlso Usuario.CodigoAutorizado = HddAdsCodex.Text) Then
CreaObjetoEmpresa(Usuario)
ADSSessionConfig.sessionUser.MultipleEmpresa = True
Dim x As New ADSSessionObj(Usuario.CveUsuario, Usuario.CveEmpresa)
Dim _sessionid = Encripta(String.Format("{0}|{1}", Usuario.CveUsuario, x.SessionID))
x = ADSSessionConfig.SessionManager(OpcionSession.agregarSession, x)
If Usuario.CvePlataforma = 6 And Usuario.CveRol = 10 Then
'PLATAFORMA PORTAL CLIENTE
'FormsAuthentication.RedirectFromLoginPage(_sessionid, False)
'Response.Redirect("/PortalCliente/PortalCliente.aspx", True)
ReturnUrl = "/PortalCliente/PortalCliente.aspx"
ElseIf Usuario.CvePlataforma = 7 And Usuario.CveRol = 11 Then
'PLATAFORMA PORTAL PROVEEDOR
'FormsAuthentication.RedirectFromLoginPage(Encripta(Usuario.CveUsuario), False)
'Response.Redirect("/PortalProveedor/PortalProveedor.aspx", True)
ReturnUrl = "/PortalProveedor/PortalProveedor.aspx"
ElseIf Usuario.CveRol = 1200 And Usuario.Acceso > 0 Then
'PLATAFORMA GPS
Usuario.CvePlataforma = 3
'FormsAuthentication.RedirectFromLoginPage(Encripta(Usuario.CveUsuario), False)
'Response.Redirect("/PortalGPS/InicioGPS.aspx", True)
ReturnUrl = "/PortalGPS/InicioGPS.aspx"
Else
'PLATAFORMA SIG
CType(Session("UsuarioSIG"), Usuario).CvePlataforma = 1
Using ObjUsuarios As New ClsSisUsuarios
If ObjUsuarios.GetUsuariosEmpresas(Usuario.CveUsuario, Usuario.CveEmpresa) Then
Dim dt As Data.DataTable = ObjUsuarios.DtResultados
If dt IsNot Nothing Then
If dt.Rows.Count >= 1 Then
If dt.Rows.Count > 1 Then
Usuario.MultipleEmpresa = True
End If
'FormsAuthentication.RedirectFromLoginPage(Encripta(Usuario.CveUsuario), False)
End If
End If
dt.Dispose()
End If
End Using
End If
Dim cookie = FormsAuthentication.GetAuthCookie(Usuario.CveUsuario, False)
Response.Cookies.Add(cookie)
Dim routeangular As String
Dim puerto As String = ""
If Not IsNothing(Request("port")) Then
puerto = String.Format(":{0}", Request("port"))
Else
puerto = String.Format(":{0}", If(System.Configuration.ConfigurationManager.AppSettings("EsProduccion").ToString() = "1", 84, 4200))
End If
Dim strdomain = Request.Url.AbsoluteUri.Replace(Request.Url.PathAndQuery, "")
If Request.Url.Port <> 80 Then
strdomain = strdomain.Replace(String.Format(":{0}", Request.Url.Port), "")
End If
Dim token As String = GetTokenAngular()
routeangular = String.Format("{0}{1}/auth/login?token={3}{4}&returnUrl=/{2}", strdomain, puerto, HttpUtility.UrlEncode(ReturnUrl), HttpUtility.UrlEncode(token), If(puerto.Length > 0, "", "")) '&cerrar=1
'S ies angular retiro el https para que no marque error la pagina
routeangular = routeangular.Replace("https", "http")
routeangular = routeangular.Replace("HTTPS", "HTTP")
If Not IsNothing(Request("port")) Then
ReturnUrl = routeangular
routeangular = ""
End If
RegistraScript(String.Format("opennewlocation('{0}','{1}')", ReturnUrl, routeangular))
'Response.Redirect(ReturnUrl, True)
Else
Alert("El usuario no esta autorizado en este equipo, favor de contactar al administrador de usuarios.", TipoMensaje.MsgAdvertencia)
End If
'If Usuario.Acceso > 0 Then
'Else
' Alert("Usuario con acceso limitado.", TipoMensaje.MsgAdvertencia)
'End If
Else
Alert("Usuario y/o Contraseña incorrectos.", TipoMensaje.MsgAdvertencia)
End If
End If
End Sub
Private Function GetTokenAngular() As String
If Not IsNothing(Context.Session("UsuarioSIG")) Then
Dim usuario As Usuario = DirectCast(Context.Session("UsuarioSIG"), Usuario)
Dim tokenDescriptor = New Microsoft.IdentityModel.Tokens.SecurityTokenDescriptor With {
.Subject = New System.Security.Claims.ClaimsIdentity(New System.Security.Claims.Claim() {New System.Security.Claims.Claim("CvePlataforma", usuario.CvePlataforma.ToString()),
New System.Security.Claims.Claim("CveUsuario", usuario.CveUsuario.ToString()), New System.Security.Claims.Claim("CveEmpresa", usuario.CveEmpresa.ToString()),
New System.Security.Claims.Claim("CveRol", usuario.CveRol.ToString()), New System.Security.Claims.Claim("Fecha", Date.Now.ToLongDateString())}),
.Expires = Date.UtcNow.AddHours(3),
.SigningCredentials = New Microsoft.IdentityModel.Tokens.SigningCredentials(
New Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(Encoding.ASCII.GetBytes("*_AsistenciaDesarrolloSistemas-SIGAPI_*17-06-2020")),
Microsoft.IdentityModel.Tokens.SecurityAlgorithms.HmacSha256Signature)}
Dim tokenHandler = New System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler()
Dim newtoken = tokenHandler.CreateToken(tokenDescriptor)
Dim stokenn As String = tokenHandler.WriteToken(newtoken)
Return stokenn
Else
Return ""
End If
End Function
Private Sub CreaObjetoEmpresa(ByRef UsuarioActual As Usuario)
Dim ObjEmpresa As New ClsSisEmpresas()
If ObjEmpresa.GetEmpresas(UsuarioActual.CveEmpresa, "-1", "-1", "-1", "-1") Then
If ObjEmpresa.GetEmpresasFuncionalidades(UsuarioActual.CveEmpresa) Then
Dim dttmp As Data.DataTable = ObjEmpresa.DtResultados
Dim EmpresasFuncionalidades As New HybridDictionary
For Each Row As Data.DataRow In dttmp.Rows
EmpresasFuncionalidades.Add(Convert.ToInt32(Row("CveFuncionalidad")), Row("Valor").ToString)
Next
ObjEmpresa.Empresa.SetFuncionalidades(EmpresasFuncionalidades)
End If
UsuarioActual.Empresa = ObjEmpresa.Empresa
Else
End If
ObjEmpresa.Dispose()
End Sub
Dim BtnGuardar_Clickenter As Integer = 0
Protected Sub BtnGuardar_Click(sender As Object, e As EventArgs)
If BtnGuardar_Clickenter = 0 Then 'esta variable se recicla con cada postaback
BtnGuardar_Clickenter = 1
Dim TieneError As Boolean = False
Dim ObjUsuario As New ClsSisUsuarios
If ObjUsuario.UpdateUsuarioContrasenia(Encripta(TxtContrasenia1.Text), CveUsuario, CveEmpresa) Then
If ObjUsuario.GetUsuarios(CveUsuario) Then
If ObjUsuario.DtResultados.Rows.Count = 1 Then
Dim dr As DataRow = ObjUsuario.DtResultados.Rows(0)
txtUsuario.Text = dr("Usuario").ToString
Dim Contraseña As String = Decripta(dr("Contraseña").ToString)
TxtContraseña.Text = Contraseña
Else
TieneError = True
End If
Else
TieneError = True
End If
Else
TieneError = True
End If
ObjUsuario.Dispose()
If Not TieneError Then
BtnLogIn_Clickenter = 0
BtnLogIn_Click(Nothing, Nothing)
End If
End If
End Sub
Public Function GenerateJSONWebToken(ByVal user As UserModel) As String
Dim securityKey = New SymmetricSecurityKey(Encoding.UTF8.GetBytes("ThisismySecretKey"))
Dim credentials = New SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256)
Dim claims = {New Claim("Nombre", user.Nombre), New Claim("CveUsuario", user.CveUsuario.ToString()), New Claim("CveEmpresa", user.CveEmpresa.ToString()), New Claim("CvePerfil", user.CvePerfil.ToString()), New Claim("Mail", user.Mail.ToString())}
Dim token = New JwtSecurityToken("Test.com", "Test.com", claims, expires:=DateTime.Now.AddMinutes(120), signingCredentials:=credentials)
Return New JwtSecurityTokenHandler().WriteToken(token)
End Function
Public Class UserModel
Public Sub New()
Me.CveUsuario = -1
End Sub
Public Property CveUsuario As Integer
Public Property Mail As String
Public Property Nombre As String
Public Property Contraseña As String
Public Property CvePerfil As Integer
Public Property CveUsuarioModifico As Integer
Public Property CveEmpresa As Integer
Public Property CveUsuarioRegistro As Integer
End Class
End Class