Advertisement
Guest User

Untitled

a guest
Feb 10th, 2017
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.51 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Configuration;
  4. using EdFi.ADSync.ConsoleApplication.Database;
  5. using LinqToLdap;
  6. using System.Linq;
  7. using log4net;
  8.  
  9. namespace EdFi.ADSync.ConsoleApplication.ActiveDirectory
  10. {
  11. public class LinqToLdapUserAccountManager : IUserAccountManager
  12. {
  13. private readonly IUserNameGenerator _userNameGenerator;
  14. private readonly IPasswordGenerator _passwordGenerator;
  15. private readonly IUserSearchProvider _userSearchProvider;
  16. private readonly Lazy<DirectoryContext> _directoryContext;
  17.  
  18. private readonly ILog _logger = LogManager.GetLogger(typeof(LinqToLdapUserAccountManager));
  19.  
  20. public LinqToLdapUserAccountManager(
  21. IUserNameGenerator userNameGenerator,
  22. IPasswordGenerator passwordGenerator,
  23. IUserSearchProvider userSearchProvider,
  24. Func<DirectoryContext> directoryContextFactory)
  25. {
  26. if (directoryContextFactory == null)
  27. throw new Exception("Directory configuration is required.");
  28.  
  29. _directoryContext = new Lazy<DirectoryContext>(directoryContextFactory); ;
  30.  
  31. _userNameGenerator = userNameGenerator;
  32. _passwordGenerator = passwordGenerator;
  33. _userSearchProvider = userSearchProvider;
  34. }
  35.  
  36. /// <summary>
  37. /// Creates a new user account using the supplied staff identity.
  38. /// </summary>
  39. /// <param name="identity">The identity of the staff member for whom an account is to be created.</param>
  40. public User CreateUserAccount(StaffEducationOrganizationIdentity identity)
  41. {
  42. var userName = _userNameGenerator.GenerateUserName(identity, (username) =>
  43. !_userSearchProvider.GetUsersByUniqueIds(new[] { identity.StaffUniqueId }).Any()
  44. );
  45. var password = _passwordGenerator.GeneratePassword(8);
  46.  
  47. var newUser = new User
  48. {
  49. CommonName = $"{identity.FirstName} {identity.LastSurname}",
  50. DistinguishedName = string.Format("CN={0},CN={1},DC={2},DC={3}",
  51. identity.FirstName + " " + identity.LastSurname,
  52. "Users",
  53. "test",
  54. "com"),
  55. ElectronicMailAddress = identity.ElectronicMailAddress,
  56. FirstName = identity.FirstName,
  57. LastName = identity.LastSurname,
  58. StaffUniqueId = identity.StaffUniqueId,
  59. UserName = userName
  60. //UserPassword = password
  61. };
  62.  
  63. _directoryContext.Value.Add(newUser);
  64.  
  65. _logger.Info($"User account '{newUser.UserName}' created for staff member '{newUser.CommonName}'.");
  66.  
  67. return newUser;
  68. }
  69.  
  70. /// <summary>
  71. /// Updates an existing user account (if necessary) using the supplied staff identity.
  72. /// </summary>
  73. /// <param name="user">The user account to be updated.</param>
  74. /// <param name="identity">The identity of the staff member associated with the account.</param>
  75. public void UpdateUserAccount(User user, StaffEducationOrganizationIdentity identity)
  76. {
  77. bool firstNameIsDirty = false;
  78. bool lastNameIsDirty = false;
  79. bool emailIsDirty = false;
  80.  
  81. var userToReport = new User
  82. {
  83. FirstName = (user.FirstName = (firstNameIsDirty = !string.Equals(user.FirstName, identity.FirstName))
  84. ? identity.FirstName
  85. : user.FirstName) == identity.FirstName && firstNameIsDirty
  86. ? identity.FirstName
  87. : string.Empty,
  88. LastName = (user.LastName = (lastNameIsDirty = !string.Equals(user.LastName, identity.LastSurname))
  89. ? identity.LastSurname
  90. : user.LastName) == identity.LastSurname && lastNameIsDirty
  91. ? identity.LastSurname
  92. : string.Empty,
  93. ElectronicMailAddress = (user.ElectronicMailAddress = (emailIsDirty =
  94. !string.Equals(user.ElectronicMailAddress, identity.ElectronicMailAddress))
  95. ? identity.ElectronicMailAddress
  96. : user.ElectronicMailAddress) == identity.ElectronicMailAddress && emailIsDirty
  97. ? identity.ElectronicMailAddress
  98. : string.Empty
  99. };
  100.  
  101. if (!firstNameIsDirty && !lastNameIsDirty && !emailIsDirty)
  102. return;
  103.  
  104. _directoryContext.Value.Update(user);
  105.  
  106. var modifiedProperties = new List<string>();
  107.  
  108. if (firstNameIsDirty)
  109. modifiedProperties.Add("First Name");
  110.  
  111. if (lastNameIsDirty)
  112. modifiedProperties.Add("Last Name");
  113.  
  114. if (emailIsDirty)
  115. modifiedProperties.Add("Email");
  116.  
  117. _logger.Info($"User account '{user.UserName}' updated with new values for {string.Join(",", modifiedProperties)}.");
  118. }
  119. }
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement