Imports System
Imports System.Configuration
Imports System.IO
Imports System.Net
Imports System.Text
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Namespace Validators
Public Class ReCaptchaValidator
Inherits BaseValidator
#Region "Fields"
Protected dummy As New TextBox()
#End Region
#Region "Properties"
'''
''' Gets the Public Key generated by reCaptcha
'''
Private Shared ReadOnly Property PublicKey() As String
Get
Return ConfigurationManager.AppSettings("publicKey")
End Get
End Property
'''
''' Gets the Private Key generated by reCaptcha
'''
Private Shared ReadOnly Property PrivateKey() As String
Get
Return ConfigurationManager.AppSettings("privateKey")
End Get
End Property
#End Region
#Region "Private"
'''
''' Obtains the value of the passed key in the http form
'''
'''
'''
Private Shared Function GetFormValue(ByVal value As String) As String
Return HttpContext.Current.Request.Form(value)
End Function
'''
''' Gathers the parameters for reCaptchaValidator
'''
'''
Private Shared Function ReCaptchaParameters() As String
Dim response As String = GetFormValue("recaptcha_response_field")
Dim challenge As String = GetFormValue("recaptcha_challenge_field")
Dim IP As String = HttpContext.Current.Request.UserHostName
Dim builder As New StringBuilder()
builder.AppendFormat("privatekey={0}&", PrivateKey)
builder.AppendFormat("remoteip={0}&", IP)
builder.AppendFormat("challenge={0}&", challenge)
builder.AppendFormat("response={0}", response)
Return builder.ToString()
End Function
'''
''' Validates the capcha inserted by the user
'''
''' parameters to verify
''' response of the capcth
Private Shared Function ValidateCaptcha(ByVal parameters As String) As String
Try
Dim request As WebRequest = WebRequest.Create("http://api-verify.recaptcha.net/verify")
request.ContentType = "application/x-www-form-urlencoded"
request.Method = "POST"
Dim writer As New StreamWriter(request.GetRequestStream())
writer.Write(parameters)
writer.Close()
'Response
Dim webResponse As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)
Dim myReader As New StreamReader(webResponse.GetResponseStream())
Dim response As String = myReader.ReadToEnd()
myReader.Close()
webResponse.Close()
Return response
Catch generatedExceptionName As WebException
Return String.Empty
End Try
End Function
#End Region
#Region "Public"
Protected Overloads Overrides Function EvaluateIsValid() As Boolean
Dim parameters As String = ReCaptchaParameters()
Dim result As String = ValidateCaptcha(parameters)
Dim isValid As Boolean = result.Equals("true" & Chr(10) & "success")
If Not isValid Then
ErrorMessage = "Your are not a human!"
Controls.Add(New LiteralControl(ErrorMessage))
End If
Return isValid
End Function
#End Region
#Region "Control Events"
Protected Overloads Overrides Sub OnInit(ByVal e As EventArgs)
dummy.ID = "aaa"
Controls.Add(dummy)
ControlToValidate = "aaa"
MyBase.OnInit(e)
End Sub
'''
''' Writes the to show the validation Captcha
'''
'''
Protected Overloads Overrides Sub Render(ByVal writer As HtmlTextWriter)
writer.Write("" & Chr(13) & "" & Chr(10) & "" & Chr(13) & "" & Chr(10) & "" & Chr(13) & "" & Chr(10) & "", PublicKey)
dummy.Visible = False
MyBase.Render(writer)
End Sub
#End Region
End Class
End Namespace