miércoles, 29 de octubre de 2008

Como proteger descargas en asp.net 2.0

 

bueno asp.net tiene un metodo llamado response.transmitfile

 

lo cual uno envia el archivo atravez de un response. lo cual funciona para grandes descargas.

y no son redicionados  a una url donde esta el archivo

 

este seria el codigo.

 

aca el codigo
string file = Request.Params["file"];

if (!string.IsNullOrEmpty(file))
{
    file = Path.Combine(Server.MapPath("downloadsx"), Path.GetFileName(file));

    Response.Clear();

    Response.ContentType = "application/octect-stream";


    Response.AddHeader("Content–Disposition", "attachment; filename=foo.xyz");

    Response.TransmitFile(file);

    Response.End();
}

 

pd:una vez en windows 2003 se me cortaba el enviado archivo misteriosamente lo cual lo solucione bajando un parche.

/////////////////////////////////////////////////////////

 

 

lunes, 27 de octubre de 2008

Como encontrar on objeto y cambiarle su valor o propiedades dentro de un dbgrid o datalist dentro de una fila! con ctype.

 

Muchas veces necesitamos cambiar el valor por ejemplo de un cuadro de texto que esta inscrustado dentro de un datagrid dentro de una fila lo cual lo primero que tendriamos que hacer es buscarlo por su nombre usando findcontrol y ctype juntamente declarandolo como un objeto tal asi despues poder cambiar sus propiedades.

 

ejemplo tenemos dentro de un datagrid1 ya cargado un cuadro de texto llamado textbox1 lo cual queremos modificarle la propiedad .text  a "chan" de el se encuenta en la fila 0 en la columa 1.

lo que hariamos seria.

CType(Me.GridView1.Rows(0).Cells(1).FindControl("textbox1"), TextBox).Text = "chan"

incluso se puede tratar si solo se quiere obtener el valor

dim x1 as new textbox

x1 = Me.GridView1.Rows(1).Cells(1).FindControl("textbox1")

Subir un archivo por ftp en asp.net 2.0

 

creamos la funcion uploadFileUsingFTP lo cual sera usado

uploadfileusingftp("ruta del ftp","direccion completa del archivo ","usuario","password")

 

Public Sub uploadFileUsingFTP(ByVal CompleteFTPPath As String, ByVal CompleteLocalPath As String, Optional ByVal UName As String = "", Optional ByVal PWD As String = "")

'Create a FTP Request Object and Specfiy a Complete Pat

'creando un objeto request ftp especificando la ruta completa del ftp

Dim reqObj As FtpWebRequest = WebRequest.Create(CompleteFTPPath)

llamando el metodo fileupload del objeto que creamos

reqObj.Method = WebRequestMethods.Ftp.UploadFile

'si el ftp requiere usuario y clave se configura

reqObj.Credentials = New NetworkCredential(UName, PWD)

on objeto filestream leera el archivo que se va asubir

Dim streamObj As FileStream = File.OpenRead(CompleteLocalPath)

'se guarda en un buffer

Dim buffer(streamObj.Length) As Byte

ahora se lee el archivo en el buffer

streamObj.Read(buffer, 0, buffer.Length)

se cierra el stream

streamObj.Close()

streamObj = Nothing

se sube un archivo en caso no existe

reqObj.GetRequestStream().Write(buffer, 0, buffer.Length)

reqObj = Nothing

End Sub

enviando un email asp.net 2.0

 

aca esta xD

Dim correo As New System.Net.Mail.MailMessage
        correo.From = New System.Net.Mail.MailAddress("micorreo@correo.com")

        Dim mailx2 As New System.Net.Mail.MailAddress("correo destino")

        correo.To.Add(mailx2)

        correo.Subject = "subjet"
        correo.Body = "cuerpo bla bla "
        correo.IsBodyHtml = true     (si es html =true)
        correo.Priority = System.Net.Mail.MailPriority.High
        Dim smtp As New System.Net.Mail.SmtpClient
        smtp.Host = "host del que envia" smpt
        smtp.Credentials = New System.Net.NetworkCredential("usuariossmpt","clave")
        Try
            smtp.Send(correo)
            Return "enviado"

        Catch ex As Exception
            Return "ERROR: " & ex.Message

        End Try

    End Function

crear un objeta datatable on fly

 

muchas veces necesitamos crear una tabla momentania por ejemplo un carro de comrpas anotar los pedidos y dejarlos momentaniamente cargados en una variable de session para despues guardarla en una db si es aceptada.

la forma de crear un datatable es de la siguiente manera despues termina guardada en un variable de session llamada cart

Dim objDT As System.Data.DataTable
      Dim objDR As System.Data.DataRow
      objDT = New System.Data.DataTable("Cart")
       objDT.Columns.Add("ID", GetType(Integer))
       objDT.Columns("ID").AutoIncrement = True
       objDT.Columns("ID").AutoIncrementSeed = 2
       objDT.Columns.Add("codigo", GetType(String))
       objDT.Columns.Add("urlimagen", GetType(String))
       objDT.Columns.Add("nombre", GetType(String))
       objDT.Columns.Add("precio", GetType(Single))
       objDT.Columns.Add("cantidad", GetType(Single))
       objDT.Columns.Add("subtotal", GetType(Single))
       objDT.Columns.Add("idpro", GetType(Single))
       Session("Cart") = objDT

 

si se fijan el autoincremento lo seteo en autoincrement y despues asigno el seed

saludos.

domingo, 26 de octubre de 2008

Encriptado en forma facil cadenas con hash y key

seguridad

bueno lo primero creen una clase llamada encript.vb

aca esta

http://rapidshare.com/files/157895456/encript.vb.html

y copien esto

 

Imports System

Imports System.IO

Imports System.Security

Imports System.Security.Cryptography

Imports System.Text

Public Class encript

#Region "Contraseñas Hash"

    'Con esta función que tenemos aquí abajo, lo que haces es transformar la cadena en Bytes.

    Shared Function ConvertirCadenaEnMatrizDeTipoByte(ByVal Cadena As [String]) As [Byte]()

        Return (New UnicodeEncoding).GetBytes(Cadena)

        'Retornamos la cadena convertida.

    End Function

    'En esta función la cadena la convertiremos en Bytes con la función anterior, lo transformaremos en un valor Hash, encriptado con el algoritmo SHA512 y más tarde lo convertiremos en una cadena.

    Public Function EncriptarHash(ByVal ValorAEncriptar As String) As String

        Dim ValorToHash As [Byte]() = ConvertirCadenaEnMatrizDeTipoByte(ValorAEncriptar)

        'Declaramos la variable de tipo Byte y llamamos a ConvertirCadenaEnMatrizDeTipoByte y convertimos la cadena a encriptar en typo Byte

        Dim ValorHash As Byte() = CType(CryptoConfig.CreateFromName("SHA512"), HashAlgorithm).ComputeHash(ValorToHash)

        'Encriptamos variable Byte en una cadena de tipo Byte, también.

        Return Convert.ToBase64String(ValorHash)

        'BitConverter.ToString(ValorHash)

        'Retornamos la variable de tipo Byte en String.

    End Function

    'Para comparar dos valores lo primero es enviar como parametros una cadena sin encriptar y otra cadena encriptada, con el mismo tipo de encriptación, y haciendo uso del mismo algoritmo, en nuestro caso usaremos Hash con el algoritmo SHA512. Luego encriptamos el valor si encriptar y comparamos los dos valores, retornando True si son iguales y False si son diferentes, esto lo podemos hacer con una simple sentencia IF.

    Public Function Comparar(ByVal ValorSinEncriptar As String, ByVal ValorEncriptado As String) As Boolean

        If EncriptarHash(ValorSinEncriptar) = ValorEncriptado Then

            Return True

        Else

            Return False

        End If

    End Function

#End Region

#Region "Encriptar/Desencriptar"

    Const StrClave As String = "EjemploDeCodigo"

    Public Function EncriptarTexto(ByVal CadenaAEncriptar As String, Optional ByVal Clave As String = StrClave, Optional ByVal MantenerMayusculas As Boolean = True)

        Dim i As Integer, C As Integer

        Dim CadenaEncriptada As String

        If MantenerMayusculas = False Then

            Clave = Clave.ToUpper()

            CadenaAEncriptar = CadenaAEncriptar.ToUpper()

        End If

        If Len(Clave) Then

            For i = 1 To Len(CadenaAEncriptar)

                C = Asc(Mid$(CadenaAEncriptar, i, 1))

                C = C + Asc(Mid$(Clave, (i Mod Len(Clave)) + 1, 1))

                CadenaEncriptada = CadenaEncriptada & Chr(C And &HFF)

            Next i

        Else

            CadenaEncriptada = CadenaAEncriptar

        End If

        Return CadenaEncriptada

    End Function

    Public Function DesencriptarTexto(ByVal CadenaADesencriptar As String, Optional ByVal Clave As String = StrClave, Optional ByVal MantenerMayusculas As Boolean = True)

        Dim i As Integer, C As Integer

        Dim CadenaDesencriptada As String

        If MantenerMayusculas = False Then

            Clave = Clave.ToUpper

        End If

        If Len(Clave) Then

            For i = 1 To Len(CadenaADesencriptar)

                C = Asc(Mid$(CadenaADesencriptar, i, 1))

                C = C - Asc(Mid$(Clave, (i Mod Len(Clave)) + 1, 1))

                CadenaDesencriptada += Chr(C And &HFF)

            Next i

        Else

            CadenaDesencriptada = CadenaADesencriptar

        End If

        Return CadenaDesencriptada

    End Function

#End Region

End Class

 

bueno las funciones que nos da esta clase son las siguientes

usando la clase

 

      adacadabra seria la clave para descriptar

Dim en As New encript

en.EncriptarTexto("hola", "adacadabra", True)
en.DesencriptarTexto("texto a descriptar", "adacadabra", True)

hay el ejemplo demaciado facil xD. usa SHA512 para encriptar muy seguro.

asp .net mostrando cuantos usuarios hay online

 

bueno lo primero tenemos que crear un archivo global.asax y agregar el siguiente codigo

 

Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
        ' Code that runs when a new session is started
       
        Try
            If IsNumeric(Application.Item("contador")) = False Then
                Application.Item("contador") = 1
            End If
            Dim x1 As Single
            x1 = Val(Application.Item("contador").ToString)
            x1 = x1 + 1
            Application.Item("contador") = x1
            Application.Item("urlref") = Me.Request.UrlReferrer.ToString
        Catch ex As Exception

        End Try
    End Sub

    Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
        ' Code that runs when a session ends.
        ' Note: The Session_End event is raised only when the sessionstate mode
        ' is set to InProc in the Web.config file. If session mode is set to StateServer
        ' or SQLServer, the event is not raised.
        Try
            If IsNumeric(Application.Item("contador")) = False Then
                Application.Item("contador") = 0
            End If
            Dim x1 As Single
            x1 = Val(Application.Item("contador").ToString)
            x1 = x1 - 1
            Application.Item("contador") = x1
        Catch ex As Exception

        End Try
    End Sub

 

que hace cuando se inicia una sesion se sumara a la variable contador +1 cuando el servidor genere el timeout hara el -1

bueno para mostrar los usuarios online es facil basta en el master page o la pagina principal

poner un control label o  y asignarle el valor

Application.Item("contador"))

    Try

label1.text=Application.Item("contador")) .tostring

Catch ex As Exception

label1.text="no anda naiden xD"

        End Try

apliquen un try por si las moscas

saludos............