using System; using System.Web; using System.Configuration; using System.Web.Security; using System.IO; using System.Web.Configuration; using System.Net.Mail; using System.Web.Http.ModelBinding; using Yavsc.Model.RolesAndMembers; using System.Collections.Generic; using System.Collections.Specialized; namespace Yavsc.Helpers { /// /// Yavsc helpers. /// public static class YavscHelpers { private static string siteName = null; /// /// Gets the name of the site. /// /// The name of the site. public static string SiteName { get { if (siteName == null) siteName = WebConfigurationManager.AppSettings ["Name"]; return siteName; } } // Administrator email private static string admail = WebConfigurationManager.AppSettings ["AdminEmail"]; /// /// Gets the Administrator email. /// /// The admail. public static string Admail { get { return admail; } } /// /// Sends the activation message. /// /// User. public static void SendActivationMessage(MembershipUser user) { SendEmail (WebConfigurationManager.AppSettings ["RegistrationMessage"], user); } /// /// Sends the email. /// /// Registration message. /// User. public static void SendEmail(string registrationMessage, MembershipUser user) { FileInfo fi = new FileInfo ( HttpContext.Current.Server.MapPath (registrationMessage)); if (!fi.Exists) { throw new Exception( string.Format ( "Erreur inattendue (pas de corps de message " + "à envoyer pour le message de confirmation ({0}))", registrationMessage)); } using (StreamReader sr = fi.OpenText ()) { string body = sr.ReadToEnd (); body = body.Replace ("<%SiteName%>", YavscHelpers.SiteName); body = body.Replace ("<%UserName%>", user.UserName); body = body.Replace ("<%UserActivatonUrl%>", string.Format ("<{0}://{1}/Account/Validate/{2}?key={3}>", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Authority, user.UserName, user.ProviderUserKey.ToString ())); using (MailMessage msg = new MailMessage ( Admail, user.Email, string.Format ("Validation de votre compte {0}", YavscHelpers.SiteName), body)) { using (SmtpClient sc = new SmtpClient ()) { sc.Send (msg); } } } } /// /// Resets the password. /// /// Model state. /// Model. public static void ResetPassword(LostPasswordModel model, out StringDictionary errors) { MembershipUserCollection users = null; errors = new StringDictionary (); if (!string.IsNullOrEmpty (model.UserName)) { users = Membership.FindUsersByName (model.UserName); if (users.Count < 1) { errors.Add ("UserName", "User name not found"); return ; } if (users.Count != 1) { errors.Add ("UserName", "Found more than one user!(sic)"); return ; } } if (!string.IsNullOrEmpty (model.Email)) { users = Membership.FindUsersByEmail (model.Email); if (users.Count < 1) { errors.Add ( "Email", "Email not found"); return ; } if (users.Count != 1) { errors.Add ("Email", "Found more than one user!(sic)"); return ; } } if (users==null) return; // Assert users.Count == 1 if (users.Count != 1) throw new InvalidProgramException ("Emails and user's names are uniques, and we find more than one result here, aborting."); foreach (MembershipUser u in users) YavscHelpers.SendActivationMessage (u); } } }