Imports System.Data.SqlClient
' Para la función generarClaveSHA1
Imports System.Security.Cryptography
Partial Class AgregarUsuario
Inherits System.Web.UI.Page
Protected Sub btnNuevo_Click( _
ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles btnNuevo.Click
Me.lblAviso.Text = ""
'
' Comprobamos si el nombre ya existe
Using cnn As New SqlConnection(Me.SqlDataSource1.ConnectionString)
Dim cmd As New SqlCommand( _
"SELECT Count(*) " & _
"FROM Usuarios " & _
"WHERE Correo = @Correo", cnn)
' Abrimos la conexión
cnn.Open()
' Añadimos el valor del parámetro de la consulta
cmd.Parameters.AddWithValue("@Correo", txtCorreo.Text)
' Si devuelve algun valor, es que ya existe
Dim i As Integer
i = CInt(cmd.ExecuteScalar())
If i > 0 Then
' Avisamos y salimos
Me.lblAviso.Text = "El usuario ya existe"
Exit Sub
End If
' Al salir del bloque Using se cierra la conexión
End Using
' El usuario no existe, lo añadimos
Using cnn As New SqlConnection(Me.SqlDataSource1.ConnectionString)
' Usamos el comando Insert del DataSource
Dim cmd As New SqlCommand(Me.SqlDataSource1.InsertCommand, cnn)
' Abrimos la conexión
cnn.Open()
' Añadimos el valor del parámetro de la consulta
cmd.Parameters.AddWithValue("@Correo", txtCorreo.Text)
' La clave la guardaremos como un valor SHA1
Dim clave As String
clave = FormsAuthentication.HashPasswordForStoringInConfigFile( _
txtClave.Text, "SHA1")
'clave = generarClaveSHA1(txtClave.Text)
cmd.Parameters.AddWithValue("@Clave", clave)
' La fecha será la actual
txtFecha.Text = DateTime.Now.ToString
cmd.Parameters.AddWithValue("@Fecha", txtFecha.Text)
cmd.Parameters.AddWithValue("@Nombre", txtNombre.Text)
cmd.Parameters.AddWithValue("@Comentarios", txtComentarios.Text)
' Ejecutamos el comando de inserción
cmd.ExecuteNonQuery()
' Al salir del bloque Using se cierra la conexión
End Using
Me.lblAviso.Text = "Se ha añadido el nuevo usuario correctamente"
End Sub
' Esta función es la que puedes usar en lugar del método
' HashPasswordForStoringInConfigFile
' Necesita una importación del espacio de nombres:
' System.Security.Cryptography
Private Function generarClaveSHA1(ByVal clave As String) As String
' Crear una clave SHA1 como la generada por
' FormsAuthentication.HashPasswordForStoringInConfigFile
Dim enc As New UTF8Encoding
Dim data() As Byte = enc.GetBytes(clave)
Dim result() As Byte
'
Dim sha As New SHA1CryptoServiceProvider()
result = sha.ComputeHash(data)
'
' Convertir los valores en hexadecimal
' cuando tiene una cifra hay que rellenarlo con cero
' para que siempre ocupen dos dígitos.
Dim sb As New StringBuilder
For i As Integer = 0 To result.Length - 1
' Para que tengan 2 cifras hexadecimales
' y las letras sean en mayúsculas
sb.Append(result(i).ToString("X2"))
Next
'
Return sb.ToString()
End Function
' Este código solo es necesario si no se valida en el lado del cliente,
' lo dejo porque forma parte de las pruebas a realizar.
'
' Pero para usarlo en el lado del cliente hay que comentarlo.
Protected Sub CustomValidator1_ServerValidate(ByVal source As Object, _
ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) _
Handles CustomValidator1.ServerValidate
args.IsValid = (args.Value.Length > 5)
'If args.Value < 6 Then
' args.IsValid = False
'End If
End Sub
End Class
|