/// <summary> /// Create AD User in a container /// </summary> /// <param name="userinfo">ADUser object</param> /// <returns></returns> public ResponseMessage AddADUser( RequestUserCreate userinfo ) { ResponseMessage status = new ResponseMessage(); status.IsSuccessful = false; status.Message = string.Empty; Session stat = ValidateSession( userinfo.DomainInfo.SessionKey ); if ( stat.IsAuthenticated == true ) { PrincipalContext principalContext = null; string uri = FixADURI( userinfo.DomainInfo.ADHost , userinfo.DomainInfo.ContainerPath ); if ( string.IsNullOrWhiteSpace( uri ) ) { status.Message = status.Message = "AD Host is not allowed to be empty, kindly provide the AD Host"; return status; } bool isAllowWite = CheckWriteOermission( uri , userinfo.DomainInfo.BindingUserName , userinfo.DomainInfo.BindingUserPassword ); try { UserPrincipal usr = FindADUser( userinfo.UserLogonName , userinfo.DomainInfo ); if ( usr != null ) { status.Message = " user already exists. Please use a different User Logon Name"; return status; } else { principalContext = new PrincipalContext( ContextType.Domain , userinfo.DomainInfo.DomainName , userinfo.DomainInfo.ContainerPath , userinfo.DomainInfo.BindingUserName , userinfo.DomainInfo.BindingUserPassword ); } } catch ( Exception ex ) { status.Message = @"Failed to create PrincipalContext: " + ex; return status; } // Create the new UserPrincipal object UserPrincipal userPrincipal = new UserPrincipal( principalContext ); if ( !string.IsNullOrWhiteSpace( userinfo.LastName ) ) userPrincipal.Surname = userinfo.LastName; if ( !string.IsNullOrWhiteSpace( userinfo.FirstName ) ) userPrincipal.GivenName = userinfo.FirstName; if ( !string.IsNullOrWhiteSpace( userinfo.LastName ) && !string.IsNullOrWhiteSpace( userinfo.FirstName ) ) userPrincipal.DisplayName = userinfo.FirstName + " " + userinfo.LastName; if ( !string.IsNullOrWhiteSpace( userinfo.Description ) ) userPrincipal.Description = userinfo.Description; if ( !string.IsNullOrWhiteSpace( userinfo.EmployeeID ) ) userPrincipal.EmployeeId = userinfo.EmployeeID; if ( !string.IsNullOrWhiteSpace( userinfo.EmailAddress ) ) userPrincipal.EmailAddress = userinfo.EmailAddress; if ( !string.IsNullOrWhiteSpace( userinfo.Telephone ) ) userPrincipal.VoiceTelephoneNumber = userinfo.Telephone; if ( !string.IsNullOrWhiteSpace( userinfo.UserLogonName ) ) userPrincipal.SamAccountName = userinfo.UserLogonName; if ( !string.IsNullOrWhiteSpace( userinfo.Password ) ) userPrincipal.SetPassword( userinfo.Password ); userPrincipal.Enabled = true; userPrincipal.ExpirePasswordNow(); try { userPrincipal.Save(); DirectoryEntry de = (DirectoryEntry)userPrincipal.GetUnderlyingObject(); FillUserExtraAttributes( ref de , userinfo ); de.CommitChanges(); status.Message = "Account has been created successfuly"; status.IsSuccessful = true; } catch ( Exception ex ) { status.Message = "Exception creating user object. " + ex; status.IsSuccessful = false; return status; } return status; } else { status.Message = "Kindly authenticate first"; return status; } }
private void FillUserExtraAttributes( ref DirectoryEntry de , RequestUserCreate userinfo ) { try { if ( !string.IsNullOrWhiteSpace( userinfo.Title ) ) de.Properties[ "title" ].Value = userinfo.Title; if ( !string.IsNullOrWhiteSpace( userinfo.City ) ) de.Properties[ "l" ].Value = userinfo.City; if ( !string.IsNullOrWhiteSpace( userinfo.Country ) ) de.Properties[ "c" ].Value = userinfo.Country; if ( !string.IsNullOrWhiteSpace( userinfo.PostalCode ) ) de.Properties[ "postalCode" ].Value = userinfo.PostalCode; if ( !string.IsNullOrWhiteSpace( userinfo.PostOfficeBox ) ) de.Properties[ "postOfficeBox" ].Value = userinfo.PostOfficeBox; if ( !string.IsNullOrWhiteSpace( userinfo.Address ) ) de.Properties[ "streetAddress" ].Value = userinfo.Address; if ( !string.IsNullOrWhiteSpace( userinfo.Department ) ) de.Properties[ "department" ].Value = userinfo.Department; if ( !string.IsNullOrWhiteSpace( userinfo.PhysicalDeliveryOffice ) ) de.Properties[ "physicalDeliveryOfficeName" ].Value = userinfo.PhysicalDeliveryOffice; if ( !string.IsNullOrWhiteSpace( userinfo.Company ) ) de.Properties[ "company" ].Value = userinfo.Company; if ( !string.IsNullOrWhiteSpace( userinfo.PhoneExtention ) ) de.Properties[ "extensionAttribute1" ].Value = userinfo.PhoneExtention; if ( !string.IsNullOrWhiteSpace( userinfo.PhoneIpAccessCode ) ) de.Properties[ "extensionAttribute2" ].Value = userinfo.PhoneIpAccessCode; } catch ( Exception ex ) { throw ex; } }