public static FieldError[] ValidateOrganisationParameters(RegisterOrganisationParameters parameters)
        {
            var errors = new List <FieldError>();

            if (string.IsNullOrWhiteSpace(parameters.organisation_name))
            {
                errors.Add(new FieldError("organisation_name", "Organisation name is required."));
            }

            if (string.IsNullOrWhiteSpace(parameters.organisation_type))
            {
                errors.Add(new FieldError("organisation_type", "Organisation type is required."));
            }

            if (string.IsNullOrWhiteSpace(parameters.adoptation_stage))
            {
                errors.Add(new FieldError("adoptation_stage", "Adoptation stage is required."));
            }

            if (!EmailPassesSanityCheck(parameters.private_email_address))
            {
                errors.Add(new FieldError("private_email_address", "A valid private email address is required."));
            }

            return(errors.ToArray());
        }
        public JsonResult RegisterOrganisation(RegisterOrganisationParameters parameters)
        {
            var connectionString = configuration.GetConnectionString("oruk_validation");
            var db = new Db(connectionString);

            var errors = ValidateOrganisationParameters(parameters);

            if (errors.Length > 0)
            {
                return(Json(new { success = false, errors }));
            }

            var existingOrganisation = db.GetRegisteredOrganisation(parameters.private_email_address);

            if (existingOrganisation != null)
            {
                return(Json(new { success = false, error = "Already registered.", existingOrganisation }));
            }

            db.RegisterOrganisation(parameters.organisation_name, parameters.organisation_type, parameters.adoptation_stage, parameters.url, parameters.private_email_address, parameters.public_email_address);

            var organisation = db.GetRegisteredOrganisation(parameters.private_email_address);

            if (organisation == null)
            {
                return(Json(new { success = false, error = "Unknown problem." }));
            }

            SendRegisteredOrganisationEmail(parameters);

            return(Json(new { success = true, organisation }));
        }
        private void SendRegisteredOrganisationEmail(RegisterOrganisationParameters parameters)
        {
            var subject = $"{parameters.organisation_name} registered for ORUK";
            var body    = $"{parameters.organisation_name} ({parameters.private_email_address}) registered for ORUK.<br />See the full list at <a href=\"{Settings.RegisteredOrganisationsUrl}\">{Settings.RegisteredOrganisationsUrl}</a>.";

            try
            {
                EmailUtility.Send(Smtp, Settings.DefaultSupportEmail, Settings.RegisterAlertEmail, subject, body);
            }
            catch (Exception e)
            {
                Console.Error.Write(e.Message);
            }
        }