public ADUser GetADUserByEmail(string email, PrincipalContext ctx) { ADUser ret = new ADUser(); ret.isValid = false; UserPrincipal uP = new UserPrincipal(ctx); Principal pr = null; using (PrincipalSearcher searcher = new PrincipalSearcher(uP)) { PrincipalSearchResult <Principal> results = searcher.FindAll(); pr = results.FirstOrDefault(r => r.SamAccountName.Equals(email.Split('@')[0], StringComparison.InvariantCultureIgnoreCase)); // it does not always find the user by sAM account. In this case, let's try to find by the email. if (pr == null) { foreach (Principal result in results) { try { if (email.Equals((result as UserPrincipal).EmailAddress, StringComparison.InvariantCultureIgnoreCase)) { pr = result; } } catch { } } } if (pr != null) { UserPrincipal buff = pr as UserPrincipal; ret.email = buff.EmailAddress; ret.firstName = buff.Name.Split(' ')[0]; ret.lastName = buff.Name.Split(' ')[1]; ret.sam = buff.SamAccountName; } } return(ret); }
public ActionResult Create([Bind(Include = "Id,ContactName,UserId,Organisation,Telephone,Email,ContactStatusId,ContactNotes")] ContactsModels contactsModels) { if (contactsModels.UserId == null) { //lets try to find the userId from the UserName string userName = contactsModels.ContactName; string email = contactsModels.Email.ToLower(); email = email.Replace("ncl", "newcastle"); using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "campus.ncl.ac.uk")) { PrincipalSearcher search = new PrincipalSearcher(); UserPrincipal user = new UserPrincipal(ctx); user.Enabled = true; user.DisplayName = userName; user.EmailAddress = email; search.QueryFilter = user; PrincipalSearchResult <Principal> results = search.FindAll(); if (results.Count() == 1) { //have definitely found the user and can now save the users ID contactsModels.UserId = results.FirstOrDefault().SamAccountName; } } } if (ModelState.IsValid) { db.ContactsModels.Add(contactsModels); db.SaveChanges(); return(RedirectToAction("Index")); } ViewBag.ContactStatusId = new SelectList(db.ContactStatusModels.Where(s => s.Deleted == null), "Id", "ContactStatusName", contactsModels.ContactStatusId); return(View(contactsModels)); }