Ho un modulo così composto:
codice:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Script.Serialization;
using System.Net;
using System.Net.Mail;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.OleDb;
using System.Security;
using System.Security.Cryptography;
using System.Runtime.Serialization;
using System.Text;
using System.Runtime.Serialization.Json;
using System.IO;
namespace MiaPagina.users
{
public partial class NewUser : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnRegister_Click(object sender, EventArgs e)
{
//MD5CryptoServiceProvider crypt = new MD5CryptoServiceProvider();
//byte[] HashedBytes;
//UTF8Encoding encoder = new UTF8Encoding();
//HashedBytes = crypt.ComputeHash(encoder.GetBytes(txtPassword.Text));
//Codice per il controllo dell'univocità dell'username e della password
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "localhost\\SQLExpress";
builder.InitialCatalog = "Mio";
builder.IntegratedSecurity = true;
SqlParameter pUsername = new SqlParameter();
pUsername.ParameterName = "@Username";
pUsername.DbType = DbType.String;
pUsername.Direction = ParameterDirection.Input;
pUsername.Value = txtUsername.Text;
SqlParameter pEmail = new SqlParameter();
pEmail.ParameterName = "@Email";
pEmail.DbType = DbType.String;
pEmail.Direction = ParameterDirection.Input;
pEmail.Value = txtEmail.Text;
using (SqlConnection conn = new SqlConnection(builder.ConnectionString))
{
try
{
conn.Open();
}
catch (Exception excMessage)
{
Response.Write(excMessage.ToString());
}
// Verifica univocità Username ed Email //
using (SqlCommand cmqQuery = new SqlCommand("SELECT COUNT(*) FROM Tabella_Account WHERE Username=@Username OR Email=@Email", conn))
{
cmqQuery.Parameters.Add(pUsername);
cmqQuery.Parameters.Add(pEmail);
int count = (int)cmqQuery.ExecuteScalar();
lblUsername.Text = count.ToString();
// Routine da eseguire SOLO se Username o Email non esistono//
if (count == 0)
{
if (Validate())
{
lblmsg.Text = "Valid Recaptcha";
lblmsg.ForeColor = System.Drawing.Color.Green;
}
else
{
lblmsg.Text = "Not Valid Recaptcha";
lblmsg.ForeColor = System.Drawing.Color.Red;
}
try
{
string Username = Request.Form["txtUsername"];
string Password = Request.Form["txtPassword"];
string AuthCode = Guid.NewGuid().ToString();
string IdReg = Guid.NewGuid().ToString();
string email = Request.Form["txtEmail"];
string ipReg = Request.UserHostAddress.ToString();
string dataReg = DateTime.Now.ToShortDateString();
string oraReg = DateTime.Now.ToShortTimeString();
string mailBody;
string From = "no-reply@mail.it";
string oggetto = "Oggetto della mail";
string bodyMail = "Corpo del messggio";
string urlConf = "http://localhost:11058/users/FantaWitBridge.aspx?";
MailMessage mailObj = new MailMessage(From, email, Username + ", conferma la tua iscrizione al FantaWrestling", "Gentile " + txtUsername.Text + "," + "ci siamo quasi!" + "<BR>" + "Hai appena completato la prima parte d'iscrizione al <b>XXXXXXX</b>, ma, per attivare il tuo account e poter procedere, e necessario confermare l'indirizzo email inserito in fase di registrazione cliccando sul link sottoriportato:" + "<BR>" + "<a href=" + urlConf + "idReg=" + IdReg + "&AuthCode=" + AuthCode + "&" +"/>" + "clicca" + "</a>");
mailObj.IsBodyHtml = true;
SmtpClient SMTPServer = new SmtpClient("localhost", 1215);
SMTPServer.Send(mailObj);
SqlParameter insertUsername = new SqlParameter();
insertUsername.ParameterName = "@insertUsername";
insertUsername.DbType = DbType.String;
insertUsername.Direction = ParameterDirection.Input;
insertUsername.Value = txtUsername.Text;
SqlParameter insertEmail = new SqlParameter();
insertEmail.ParameterName = "@insertEmail";
insertEmail.DbType = DbType.String;
insertEmail.Direction = ParameterDirection.Input;
insertEmail.Value = txtEmail.Text;
SqlParameter insertPassword = new SqlParameter();
insertPassword.ParameterName = "@insertPassword";
insertPassword.DbType = DbType.String;
insertPassword.Direction = ParameterDirection.Input;
insertPassword.Value = txtPassword.Text;
SqlCommand cmdInsert = new SqlCommand("INSERT INTO Miatab_Account(Username, Email, Password, Status, DataReg, OraReg, IpReg, AuthCode, IdReg) VALUES(@insertUsername, @insertEmail, @insertPassword, '0', '" + dataReg + "', '" + oraReg + "', '" + ipReg + "', '" + AuthCode + "', '" + IdReg + "')", conn);
SqlCommand text = new SqlCommand("");
cmdInsert.Parameters.Add(insertUsername);
cmdInsert.Parameters.Add(insertEmail);
cmdInsert.Parameters.Add(insertPassword);
cmdInsert.ExecuteNonQuery();
}
catch (Exception error)
{
Response.Write(error.ToString());
}
}
else
{
lblUsername.Text = "Dati già esistenti";
}
}
}
}
public bool Validate()
{
string Response = Request["g-recaptcha-response"];//Getting Response String Appned to Post Method
bool Valid=false;
//Request to Google Server
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(" https://www.google.com/recaptcha/api/siteverify?secret=CODICE&response=" + Response);
try
{
//Google recaptcha Responce
using (WebResponse wResponse = req.GetResponse())
{
using (StreamReader readStream = new StreamReader(wResponse.GetResponseStream()))
{
string jsonResponse = readStream.ReadToEnd();
JavaScriptSerializer js = new JavaScriptSerializer();
MyObject data = js.Deserialize<MyObject>(jsonResponse);// Deserialize Json
Valid = Convert.ToBoolean(data.success);
}
}
return Valid;
}
catch (WebException ex)
{
throw ex;
}
}
public class MyObject {
public string success { get; set; }
}
}
}
Il controllo recaptcha funziona correttamente, ma adesso ho una difficoltà: dovrei fare in modo che se il captcha è corretto, la pagina sia valida, altrimenti no, e quindi non venga inviata. Come posso utilizzare la proprietà IsValid?