/OmidID.Web.Security.EFMembershipProvider/Mapper/UserAutoMapper.cs

https://github.com/OmidID/Ado.net-Entity-Framework-Membership-Provider · C# · 187 lines · 132 code · 45 blank · 10 comment · 8 complexity · 12ae2db7af3d19f15fe97f314a983aa8 MD5 · raw file

  1. using System;
  2. using System.ComponentModel.DataAnnotations;
  3. using System.Linq.Expressions;
  4. using System.Web.Security;
  5. namespace OmidID.Web.Security.Mapper {
  6. internal class UserAutoMapper<TUser> : IUserMapper<TUser>
  7. where TUser : class {
  8. private ClassHelper<TUser, UserColumnType, UserColumnAttribute> Helper { get; set; }
  9. internal UserAutoMapper(ClassHelper<TUser, UserColumnType, UserColumnAttribute> helper) {
  10. Helper = helper;
  11. }
  12. #region IMapper<TUser,MembershipUser,UserColumnType> Members
  13. public System.Web.Security.MembershipUser To(string ProviderName, TUser From) {
  14. return new System.Web.Security.MembershipUser(
  15. ProviderName,
  16. Get<string>(From, UserColumnType.Username),
  17. Get(From, UserColumnType.UserID),
  18. Get<string>(From, UserColumnType.Email),
  19. Get<string>(From, UserColumnType.PasswordQuestion),
  20. Get<string>(From, UserColumnType.Comment),
  21. Get<bool>(From, UserColumnType.IsApproved),
  22. Get<bool>(From, UserColumnType.IsLockedOut),
  23. Get<DateTime>(From, UserColumnType.CreateOn),
  24. Get<DateTime>(From, UserColumnType.LastLoginDate),
  25. Get<DateTime>(From, UserColumnType.LastActivityDate),
  26. Get<DateTime>(From, UserColumnType.LastPasswordChangedDate),
  27. Get<DateTime>(From, UserColumnType.LastLockoutDate));
  28. }
  29. public TUser To(System.Web.Security.MembershipUser From) {
  30. TUser model = Helper.New();
  31. return To(model, From);
  32. }
  33. public TUser To(TUser model, System.Web.Security.MembershipUser From) {
  34. Set(model, UserColumnType.Username, From.UserName);
  35. Set(model, UserColumnType.UserID, From.ProviderUserKey);
  36. Set(model, UserColumnType.Email, From.Email);
  37. Set(model, UserColumnType.PasswordQuestion, From.PasswordQuestion);
  38. Set(model, UserColumnType.Comment, From.Comment);
  39. Set(model, UserColumnType.IsApproved, From.IsApproved);
  40. Set(model, UserColumnType.IsLockedOut, From.IsLockedOut);
  41. Set(model, UserColumnType.CreateOn, From.CreationDate);
  42. Set(model, UserColumnType.LastLoginDate, From.LastLoginDate);
  43. Set(model, UserColumnType.LastActivityDate, From.LastActivityDate);
  44. Set(model, UserColumnType.LastPasswordChangedDate, From.LastPasswordChangedDate);
  45. Set(model, UserColumnType.LastLockoutDate, From.LastLockoutDate);
  46. return model;
  47. }
  48. public T Get<T>(TUser Entity, UserColumnType ColumnType) {
  49. var param = Expression.Parameter(Helper.ClassType, "p");
  50. var member = Helper.GetMemberAccess(param, ColumnType);
  51. if (member == null) return default(T);
  52. var ttype = typeof(T);
  53. Expression<Func<TUser, T>> lambda;
  54. if (member.Type == ttype)
  55. lambda = Expression.Lambda<Func<TUser, T>>(member, param);
  56. else
  57. lambda = Expression.Lambda<Func<TUser, T>>(Expression.Convert(member, typeof(T)), param);
  58. return lambda.Compile().Invoke(Entity);
  59. //var val = Get(Entity, ColumnType);
  60. //if (val == null) return default(T);
  61. //return (T)val;
  62. }
  63. public object Get(TUser Entity, UserColumnType ColumnType) {
  64. return Get<object>(Entity, ColumnType);
  65. //var prop = Helper.Get(ColumnType);
  66. //if (prop == null) return null;
  67. //return prop.GetValue(Entity, null);
  68. }
  69. public bool Set<TValue>(TUser Entity, UserColumnType ColumnType, TValue Value) {
  70. var param1 = Expression.Parameter(Helper.ClassType, "p1");
  71. var param2 = Expression.Parameter(typeof(TValue), "p2");
  72. var member = Helper.GetMemberAccess(param1, ColumnType);
  73. if (member == null) return false;
  74. Expression<Action<TUser, TValue>> lambda;
  75. if (member.Type == param2.Type)
  76. lambda = Expression.Lambda<Action<TUser, TValue>>(Expression.Assign(member, param2), param1, param2);
  77. else
  78. lambda = Expression.Lambda<Action<TUser, TValue>>(Expression.Assign(member, Expression.Convert(param2, member.Type)), param1, param2);
  79. lambda.Compile().Invoke(Entity, Value);
  80. return true;
  81. //var prop = Helper.Get(ColumnType);
  82. //if (prop == null) return false;
  83. //prop.SetValue(Entity, Value, null);
  84. //return true;
  85. }
  86. public object UserID(TUser user) { return Get(user, UserColumnType.UserID); }
  87. public IUserMapper<TUser> UserID(TUser user, object value) { Set(user, UserColumnType.UserID, value); return this; }
  88. public string Username(TUser user) { return Get<string>(user, UserColumnType.Username); }
  89. public IUserMapper<TUser> Username(TUser user, string value) { Set(user, UserColumnType.Username, value); return this; }
  90. public string Email(TUser user) { return Get<string>(user, UserColumnType.Email); }
  91. public IUserMapper<TUser> Email(TUser user, string value) { Set(user, UserColumnType.Email, value); return this; }
  92. public bool IsAnonymous(TUser user) { return Get<bool>(user, UserColumnType.IsAnonymous); }
  93. public IUserMapper<TUser> IsAnonymous(TUser user, bool value) { Set(user, UserColumnType.IsAnonymous, value); return this; }
  94. public string Password(TUser user) { return Get<string>(user, UserColumnType.Password); }
  95. public IUserMapper<TUser> Password(TUser user, string value) { Set(user, UserColumnType.Password, value); return this; }
  96. public System.Web.Security.MembershipPasswordFormat PasswordFormat(TUser user) { return Get<MembershipPasswordFormat>(user, UserColumnType.PasswordFormat); }
  97. public IUserMapper<TUser> PasswordFormat(TUser user, System.Web.Security.MembershipPasswordFormat value) { Set(user, UserColumnType.PasswordFormat, value); return this; }
  98. public string PasswordSalt(TUser user) { return Get<string>(user, UserColumnType.PasswordSalt); }
  99. public IUserMapper<TUser> PasswordSalt(TUser user, string value) { Set(user, UserColumnType.PasswordSalt, value); return this; }
  100. public string PasswordQuestion(TUser user) { return Get<string>(user, UserColumnType.PasswordQuestion); }
  101. public IUserMapper<TUser> PasswordQuestion(TUser user, string value) { Set(user, UserColumnType.PasswordQuestion, value); return this; }
  102. public string PasswordAnswer(TUser user) { return Get<string>(user, UserColumnType.PasswordAnswer); }
  103. public IUserMapper<TUser> PasswordAnswer(TUser user, string value) { Set(user, UserColumnType.PasswordAnswer, value); return this; }
  104. public bool IsApproved(TUser user) { return Get<bool>(user, UserColumnType.IsApproved); }
  105. public IUserMapper<TUser> IsApproved(TUser user, bool value) { Set(user, UserColumnType.IsApproved, value); return this; }
  106. public DateTime CreateOn(TUser user) { return Get<DateTime>(user, UserColumnType.CreateOn); }
  107. public IUserMapper<TUser> CreateOn(TUser user, DateTime value) { Set(user, UserColumnType.CreateOn, value); return this; }
  108. public DateTime LastLoginDate(TUser user) { return Get<DateTime>(user, UserColumnType.LastLoginDate); }
  109. public IUserMapper<TUser> LastLoginDate(TUser user, DateTime value) { Set(user, UserColumnType.LastLoginDate, value); return this; }
  110. public DateTime LastActivityDate(TUser user) { return Get<DateTime>(user, UserColumnType.LastActivityDate); }
  111. public IUserMapper<TUser> LastActivityDate(TUser user, DateTime value) { Set(user, UserColumnType.LastActivityDate, value); return this; }
  112. public DateTime LastPasswordChangedDate(TUser user) { return Get<DateTime>(user, UserColumnType.LastPasswordChangedDate); }
  113. public IUserMapper<TUser> LastPasswordChangedDate(TUser user, DateTime value) { Set(user, UserColumnType.LastPasswordChangedDate, value); return this; }
  114. public DateTime LastLockoutDate(TUser user) { return Get<DateTime>(user, UserColumnType.LastLockoutDate); }
  115. public IUserMapper<TUser> LastLockoutDate(TUser user, DateTime value) { Set(user, UserColumnType.LastLockoutDate, value); return this; }
  116. public int FailedPasswordAttemptCount(TUser user) { return Get<int>(user, UserColumnType.FailedPasswordAttemptCount); }
  117. public IUserMapper<TUser> FailedPasswordAttemptCount(TUser user, int value) { Set(user, UserColumnType.FailedPasswordAttemptCount, value); return this; }
  118. public DateTime FailedPasswordAttemptWindowStart(TUser user) { return Get<DateTime>(user, UserColumnType.FailedPasswordAttemptWindowStart); }
  119. public IUserMapper<TUser> FailedPasswordAttemptWindowStart(TUser user, DateTime value) { Set(user, UserColumnType.FailedPasswordAttemptWindowStart, value); return this; }
  120. public int FailedPasswordAnswerAttemptCount(TUser user) { return Get<int>(user, UserColumnType.FailedPasswordAnswerAttemptCount); }
  121. public IUserMapper<TUser> FailedPasswordAnswerAttemptCount(TUser user, int value) { Set(user, UserColumnType.FailedPasswordAnswerAttemptCount, value); return this; }
  122. public DateTime FailedPasswordAnswerAttemptWindowStart(TUser user) { return Get<DateTime>(user, UserColumnType.FailedPasswordAnswerAttemptWindowStart); }
  123. public IUserMapper<TUser> FailedPasswordAnswerAttemptWindowStart(TUser user, DateTime value) { Set(user, UserColumnType.FailedPasswordAnswerAttemptWindowStart, value); return this; }
  124. public string Comment(TUser user) { return Get<string>(user, UserColumnType.Comment); }
  125. public IUserMapper<TUser> Comment(TUser user, string value) { Set(user, UserColumnType.Comment, value); return this; }
  126. public bool IsLockedOut(TUser user) { return Get<bool>(user, UserColumnType.IsLockedOut); }
  127. public IUserMapper<TUser> IsLockedOut(TUser user, bool value) { Set(user, UserColumnType.IsLockedOut, value); return this; }
  128. #endregion
  129. #region WebMatrix
  130. #if USE_WEBMATRIX
  131. public string WebMatrixConfirmationCode(TUser user) { return Get<string>(user, UserColumnType.ConfirmationCode); }
  132. public IUserMapper<TUser> WebMatrixConfirmationCode(TUser user, string value) { Set(user, UserColumnType.ConfirmationCode, value); return this; }
  133. public string WebMatrixPasswordValidationToken(TUser user) { return Get<string>(user, UserColumnType.PasswordValidationToken); }
  134. public IUserMapper<TUser> WebMatrixPasswordValidationToken(TUser user, string value) { Set(user, UserColumnType.PasswordValidationToken, value); return this; }
  135. public DateTime WebMatrixPasswordValidationTokenExpireOn(TUser user) { return Get<DateTime>(user, UserColumnType.PasswordValidationTokenExpireOn); }
  136. public IUserMapper<TUser> WebMatrixPasswordValidationTokenExpireOn(TUser user, DateTime value) { Set(user, UserColumnType.PasswordValidationTokenExpireOn, value); return this; }
  137. public bool WebMatrixRegistered(TUser user) { return Get<bool>(user, UserColumnType.Registered); }
  138. public IUserMapper<TUser> WebMatrixRegistered(TUser user, bool value) { Set(user, UserColumnType.Registered, value); return this; }
  139. #endif
  140. #endregion
  141. }
  142. }