using System.Collections.Generic; using Microsoft.AspNetCore.Mvc.RazorPages; using System.ComponentModel.DataAnnotations; using Microsoft.AspNetCore.Mvc; using System.Net.Mail; using System.Net; //for captcha: using System.Net.Http; using Newtonsoft.Json.Linq; using Microsoft.Extensions.Configuration; using Microsoft.AspNetCore.Mvc.Rendering; namespace contact.Pages { [BindProperties(SupportsGet = true)] public class RequestFormModel { public RequestFormModel() { DataCenter = "SF"; } [Required] public string Name { get; set; } [Required] public string Company { get; set; } [Required, EmailAddress] public string Email { get; set; } [Required] public string DataCenter { get; set; } } public class RequestModel : PageModel { // public string DataCenter { get; set; } [BindProperty(SupportsGet = true)] public RequestFormModel SubRequest { get; set; } public List DataCenters { get; } = new List { new SelectListItem { Value = "SF", Text = "San Francisco" }, new SelectListItem { Value = "NY", Text = "New York" }, new SelectListItem { Value = "TOR", Text = "Toronto" }, new SelectListItem { Value = "AMS", Text = "Amsterdam" }, new SelectListItem { Value = "LON", Text = "London" }, new SelectListItem { Value = "FFT", Text = "Frankfurt" }, new SelectListItem { Value = "SNG", Text = "Singapore" }, new SelectListItem { Value = "BNG", Text = "Bangalore" } }; private readonly IConfiguration _configuration; public RequestModel(IConfiguration configuration) { _configuration = configuration; } public ActionResult OnPost() { if (!ModelState.IsValid) { return Page(); } if (!ReCaptchaPassed( Request.Form["g-recaptcha-response"], // that's how you get it from the Request object _configuration.GetSection("GoogleReCaptcha:secret").Value )) { //Return a fail code that will hopefully take us off the spammers list return StatusCode(500); } //fuck those spammers //2022-05-06 changes to get rid of jumbo lead magnet spammer but still force him to pay someone to manually enter the stuff //ideally it should read from a text file here but this is a quickie fix while Joyce is on important viha phone call var blocks = new List(); blocks.Add("google"); blocks.Add("jumboleadmagnet");//<--fuck this guy in particular, keeps spamming blocks.Add("boostleadgeneration"); //ericjonesmyemail@gmail.com var companyname = SubRequest.Company.ToLowerInvariant(); foreach (string s in blocks) { if (companyname.Contains(s)) { goto skipspam; } } SendMail(); skipspam: return Redirect("https://ayanova.com/docs/ay-evaluate/"); } private void SendMail() { var MessageBody = $"Name:\r\n{SubRequest.Name}\r\n\r\nCompany:\r\n{SubRequest.Company}\r\n\r\nDataCenter:\r\n{SubRequest.DataCenter}"; //SEND TO US using (var message = new MailMessage()) { message.To.Add(new MailAddress("support@ayanova.com")); message.From = new MailAddress(SubRequest.Email); message.Subject = $"Trial request from {SubRequest.Company}"; message.Body = MessageBody; using (var smtpClient = new SmtpClient("smtp.fastmail.com")) { smtpClient.Host = "smtp.fastmail.com"; smtpClient.Port = 587; smtpClient.UseDefaultCredentials = false; //testing smtpClient.EnableSsl = true; // smtpClient.Port=465; // smtpClient.DeliveryMethod= SmtpDeliveryMethod.Network; //NOTE: Do not use the noreply email address to send mail, it crashes the server somehow //****************************************************************************************************************** //****************************************************************************************************************** //TEST CRASH // smtpClient.Credentials = new System.Net.NetworkCredential("noreply@ayanova.com", "91768700489f8edd28aa71e3e0f4073eba54ce83c4c1a6a910700fa94094ddfd"); //FASTMAIL CHANGES //Fastmail server names and ports help page: https://www.fastmail.help/hc/en-us/articles/1500000278342 //APP Password created in fastmail for smtp use only labelled 'contact-form': cnea8agl6nlx5j7l //try using from as support@onayanova.com //try domain version if this still won't work smtpClient.Credentials = new System.Net.NetworkCredential("support@onayanova.com", "cnea8agl6nlx5j7l"); //****************************************************************************************************************** //****************************************************************************************************************** smtpClient.Send(message); } } } public void OnGet() { } public static bool ReCaptchaPassed(string gRecaptchaResponse, string secret) { HttpClient httpClient = new HttpClient(); var res = httpClient.GetAsync($"https://www.google.com/recaptcha/api/siteverify?secret={secret}&response={gRecaptchaResponse}").Result; if (res.StatusCode != HttpStatusCode.OK) { // logger.LogError("Error while sending request to ReCaptcha"); return false; } string JSONres = res.Content.ReadAsStringAsync().Result; dynamic JSONdata = JObject.Parse(JSONres); if (JSONdata.success != "true") { return false; } return true; } } }