Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Configuration;
- using EdFi.ADSync.ConsoleApplication.Database;
- using LinqToLdap;
- using System.Linq;
- using log4net;
- namespace EdFi.ADSync.ConsoleApplication.ActiveDirectory
- {
- public class LinqToLdapUserAccountManager : IUserAccountManager
- {
- private readonly IUserNameGenerator _userNameGenerator;
- private readonly IPasswordGenerator _passwordGenerator;
- private readonly IUserSearchProvider _userSearchProvider;
- private readonly Lazy<DirectoryContext> _directoryContext;
- private readonly ILog _logger = LogManager.GetLogger(typeof(LinqToLdapUserAccountManager));
- public LinqToLdapUserAccountManager(
- IUserNameGenerator userNameGenerator,
- IPasswordGenerator passwordGenerator,
- IUserSearchProvider userSearchProvider,
- Func<DirectoryContext> directoryContextFactory)
- {
- if (directoryContextFactory == null)
- throw new Exception("Directory configuration is required.");
- _directoryContext = new Lazy<DirectoryContext>(directoryContextFactory); ;
- _userNameGenerator = userNameGenerator;
- _passwordGenerator = passwordGenerator;
- _userSearchProvider = userSearchProvider;
- }
- /// <summary>
- /// Creates a new user account using the supplied staff identity.
- /// </summary>
- /// <param name="identity">The identity of the staff member for whom an account is to be created.</param>
- public User CreateUserAccount(StaffEducationOrganizationIdentity identity)
- {
- var userName = _userNameGenerator.GenerateUserName(identity, (username) =>
- !_userSearchProvider.GetUsersByUniqueIds(new[] { identity.StaffUniqueId }).Any()
- );
- var password = _passwordGenerator.GeneratePassword(8);
- var newUser = new User
- {
- CommonName = $"{identity.FirstName} {identity.LastSurname}",
- DistinguishedName = string.Format("CN={0},CN={1},DC={2},DC={3}",
- identity.FirstName + " " + identity.LastSurname,
- "Users",
- "test",
- "com"),
- ElectronicMailAddress = identity.ElectronicMailAddress,
- FirstName = identity.FirstName,
- LastName = identity.LastSurname,
- StaffUniqueId = identity.StaffUniqueId,
- UserName = userName
- //UserPassword = password
- };
- _directoryContext.Value.Add(newUser);
- _logger.Info($"User account '{newUser.UserName}' created for staff member '{newUser.CommonName}'.");
- return newUser;
- }
- /// <summary>
- /// Updates an existing user account (if necessary) using the supplied staff identity.
- /// </summary>
- /// <param name="user">The user account to be updated.</param>
- /// <param name="identity">The identity of the staff member associated with the account.</param>
- public void UpdateUserAccount(User user, StaffEducationOrganizationIdentity identity)
- {
- bool firstNameIsDirty = false;
- bool lastNameIsDirty = false;
- bool emailIsDirty = false;
- var userToReport = new User
- {
- FirstName = (user.FirstName = (firstNameIsDirty = !string.Equals(user.FirstName, identity.FirstName))
- ? identity.FirstName
- : user.FirstName) == identity.FirstName && firstNameIsDirty
- ? identity.FirstName
- : string.Empty,
- LastName = (user.LastName = (lastNameIsDirty = !string.Equals(user.LastName, identity.LastSurname))
- ? identity.LastSurname
- : user.LastName) == identity.LastSurname && lastNameIsDirty
- ? identity.LastSurname
- : string.Empty,
- ElectronicMailAddress = (user.ElectronicMailAddress = (emailIsDirty =
- !string.Equals(user.ElectronicMailAddress, identity.ElectronicMailAddress))
- ? identity.ElectronicMailAddress
- : user.ElectronicMailAddress) == identity.ElectronicMailAddress && emailIsDirty
- ? identity.ElectronicMailAddress
- : string.Empty
- };
- if (!firstNameIsDirty && !lastNameIsDirty && !emailIsDirty)
- return;
- _directoryContext.Value.Update(user);
- var modifiedProperties = new List<string>();
- if (firstNameIsDirty)
- modifiedProperties.Add("First Name");
- if (lastNameIsDirty)
- modifiedProperties.Add("Last Name");
- if (emailIsDirty)
- modifiedProperties.Add("Email");
- _logger.Info($"User account '{user.UserName}' updated with new values for {string.Join(",", modifiedProperties)}.");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement