public static Person RequestActivistSignoffProcess(string eMail, string URL) { int personID = 0; int.TryParse(eMail, out personID); Person authenticatedUser = null; People candidatePeople = null; bool personIsActivist = false; if (personID == 0) { BasicPerson[] people = SwarmDb.GetDatabaseForReading().GetPeopleFromEmailPattern(eMail.ToLower().Replace("%", "").Trim()); candidatePeople = People.FromArray(people); // if multiple people share same e-mail, suppose the last one registered is the one to change. foreach (Person p in candidatePeople) { if (authenticatedUser == null || authenticatedUser.PersonId < p.PersonId && p.IsActivist) { authenticatedUser = p; } } } else { candidatePeople = People.FromIdentities(new int[] { personID }); if (candidatePeople.Count > 0) { authenticatedUser = candidatePeople[0]; } } if (authenticatedUser == null) { return(null); } //TODO: Localize string mailbody = ""; App_LocalResources.Authentication.Culture = System.Globalization.CultureInfo.InvariantCulture; if (candidatePeople.Count == 1 && candidatePeople[0].IsActivist) { personIsActivist = true; Person p = candidatePeople[0]; if (App_LocalResources.Authentication.Culture == CultureInfo.InvariantCulture) { App_LocalResources.Authentication.Culture = CultureInfo.GetCultureInfo(p.PreferredCulture); } string encodedPasswordTicket = SHA1.Hash(p.Identity.ToString(CultureInfo.InvariantCulture)).Replace(" ", "").Substring(0, 4) + p.Identity.ToString(); mailbody = App_LocalResources.Authentication.RequestActivistSignoff_Mail_Preamble; mailbody += App_LocalResources.Authentication.RequestActivistSignoff_Mail_ClickOneLink; mailbody += "\r\n" + String.Format(URL, encodedPasswordTicket); } else { string links = ""; foreach (Person p in candidatePeople) { Memberships msList = p.GetMemberships(); if (msList.Count == 0 && p.IsActivist) { personIsActivist = true; if (App_LocalResources.Authentication.Culture == CultureInfo.InvariantCulture) { App_LocalResources.Authentication.Culture = CultureInfo.GetCultureInfo(p.PreferredCulture); } string encodedPasswordTicket = GenerateNewPasswordHash(p, p.Identity.ToString()).Replace(" ", "").Substring(0, 4) + p.Identity.ToString(); links += "\r\n\r\n"; links += "#" + p.PersonId.ToString(); links += "\r\n" + String.Format(URL, encodedPasswordTicket); } } mailbody = App_LocalResources.Authentication.RequestActivistSignoff_Mail_Preamble; mailbody += App_LocalResources.Authentication.RequestActivistSignoff_Mail_ClickOneOfLinks; mailbody += links; } mailbody += App_LocalResources.Authentication.RequestActivistSignoff_Mail_Ending; if (personIsActivist) { authenticatedUser.SendNotice(App_LocalResources.Authentication.RequestActivistSignoff_Mail_Subject, mailbody, 1); } return(authenticatedUser); }