/src/main/FUCManager/CurricularUnitFormManager/Models/Repository/IndividualRepository.cs

https://github.com/isel-31401/ISEL-LEIC-PI-31401 · C# · 235 lines · 198 code · 32 blank · 5 comment · 43 complexity · b11cca8ed8b95c83c47dbd1c60be865d MD5 · raw file

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using CurricularUnitFormManager.Models.Individual;
  6. using System.Web.Security;
  7. using CurricularUnitFormManager.Models.Mail;
  8. namespace CurricularUnitFormManager.Models.Repository
  9. {
  10. public class IndividualRepository
  11. {
  12. readonly int _MAX_ATTEMPTS = 3;
  13. readonly int _MIN_NON_ALPHA_NUM_CHARS = 2;
  14. readonly static Dictionary<string, Individual.Individual> _userRepo = UserLoad.Instance;
  15. readonly static Dictionary<int, Individual.Individual> _register = new Dictionary<int, Individual.Individual>();
  16. private static volatile IndividualRepository _instance = null;
  17. private Int32 _id = 10000;
  18. private IndividualRepository() { UserLoad.Start(); }
  19. public static void Start() { _instance = new IndividualRepository(); }
  20. public static IndividualRepository Instance { get { return _instance; } }
  21. public Boolean ChangePassWord(String user, String oldPassword, String newPassword)
  22. {
  23. if (_userRepo[user].Password != oldPassword) return false;
  24. if (!_userRepo.ContainsKey(user)) return false;
  25. _userRepo[user].Password = newPassword;
  26. return true;
  27. }
  28. public Boolean ChangePicture(String user, String newPicture)
  29. {
  30. if (!_userRepo.ContainsKey(user)) return false;
  31. _userRepo[user].PhotoName = newPicture;
  32. return true;
  33. }
  34. public Boolean AddRole(String user, String newRole)
  35. {
  36. if (!_userRepo.ContainsKey(user)) return false;
  37. return _userRepo[user].addRole(newRole);
  38. }
  39. public Boolean ChangeRole(String user, String oldRole, String newRole)
  40. {
  41. if (!_userRepo.ContainsKey(user)) return false;
  42. if (_userRepo[user].isInRole(oldRole))
  43. {
  44. if (!_userRepo[user].isInRole(newRole))
  45. {
  46. _userRepo[user].removeRole(oldRole);
  47. return _userRepo[user].addRole(newRole);
  48. }
  49. }
  50. return false;
  51. }
  52. public Boolean DeleteRole(String user, String oldRole)
  53. {
  54. if (!_userRepo.ContainsKey(user)) return false;
  55. return _userRepo[user].removeRole(oldRole);
  56. }
  57. public Boolean IsInRole(String user, String role)
  58. {
  59. if (!_userRepo.ContainsKey(user)) return false;
  60. return _userRepo[user].isInRole(role);
  61. }
  62. public Boolean ChangeSecurityQuestion(String user, String question)
  63. {
  64. if (!_userRepo.ContainsKey(user)) return false;
  65. _userRepo[user].SecurityQuestion = question;
  66. return true;
  67. }
  68. public Boolean ChangeSecurityAnswer(String user, String answer)
  69. {
  70. if (!_userRepo.ContainsKey(user)) return false;
  71. _userRepo[user].SecurityAnswer = answer;
  72. return true;
  73. }
  74. public Boolean Register(CurricularUnitFormManager.Models.Account.AccountModels.RegisterModel model)
  75. {
  76. if (_userRepo.ContainsKey(model.UserName))
  77. {
  78. return false;
  79. }
  80. string requestedDomain = HttpContext.Current.Request.ServerVariables["HTTP_HOST"];
  81. // Attempt to register the user
  82. int nbr = (new Random()).Next(100000000, 900000000);
  83. String email = "Hi " + model.FullName + "\n, You recently registered or updated your email preferences for Curricular Unit Forma Manager. Please enable your account by";
  84. email = email + " copy and paste the following link into the address bar of your browser:\n http://"+requestedDomain+"/Account/Activate?ActivationCode=" + nbr + " \nand writte the\n Activation Code : " + nbr + "\n. Thanks, Team CUFM";
  85. MembershipCreateStatus createStatus;
  86. Individual.Individual user = (Individual.Individual)Membership.CreateUser(model.UserName, model.Password, model.Email, model.SecurityQuestion, model.SecurityAnswer, true, Guid.NewGuid(), out createStatus);
  87. user.FullName = model.FullName;
  88. Mailer.SendMail(model.Email, email);
  89. if (createStatus == MembershipCreateStatus.Success)
  90. {
  91. _register.Add(nbr, user);
  92. return true;
  93. }
  94. return false;
  95. }
  96. public Boolean ConfirmRegistration(String username, String password, int confirmationCode)
  97. {
  98. if (!_register.ContainsKey(confirmationCode)) return false;
  99. if (_register[confirmationCode].UserName != username || _register[confirmationCode].Password != password) return false;
  100. Individual.Individual user = _register[confirmationCode];
  101. try
  102. {
  103. _userRepo.Add(username, user);
  104. }
  105. catch (Exception)
  106. {
  107. }
  108. if (!_userRepo.ContainsKey(username)) return false;
  109. _register.Remove(confirmationCode);
  110. return true;
  111. }
  112. public Boolean DeleteUser(string username, bool deleteAllRelatedData)
  113. {
  114. if (!_userRepo.ContainsKey(username)) return false;
  115. _userRepo[username].IsApproved = false;
  116. if (deleteAllRelatedData)
  117. {
  118. _userRepo.Remove(username);
  119. }
  120. return true;
  121. }
  122. public MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
  123. {
  124. if (_userRepo.ContainsKey(username))
  125. {
  126. status = MembershipCreateStatus.DuplicateUserName;
  127. return null;
  128. }
  129. DateTime date = DateTime.UtcNow;
  130. Individual.Individual i = new Individual.Individual("CUFMembershipProvider",
  131. username,
  132. providerUserKey,
  133. email,
  134. passwordQuestion,
  135. "",
  136. isApproved,
  137. false,
  138. date,
  139. date,
  140. date,
  141. date,
  142. date,
  143. false,
  144. new Random().Next(987654321) + "");
  145. i.Password = password;
  146. i.UserName = username;
  147. i.PhotoName = "anonymous.png";
  148. i.addRole(IndividualRoles.User);
  149. i.IndividualId = ++_id;
  150. status = MembershipCreateStatus.Success;
  151. return i;
  152. }
  153. public Boolean ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer)
  154. {
  155. if (!_userRepo.ContainsKey(username) || _userRepo[username].Password != password) return false;
  156. _userRepo[username].SecurityQuestion = newPasswordQuestion;
  157. _userRepo[username].SecurityAnswer = newPasswordAnswer;
  158. return true;
  159. }
  160. public String GetPassword(string username, string answer)
  161. {
  162. if (!_userRepo.ContainsKey(username)) return null;
  163. if (_userRepo[username].SecurityAnswer != answer) return null;
  164. return _userRepo[username].Password;
  165. }
  166. public MembershipUser GetUser(string username, bool userIsOnline)
  167. {
  168. if (!_userRepo.ContainsKey(username)) return null;
  169. if (userIsOnline)
  170. {
  171. // userIsOnline:
  172. // true to update the last-activity date/time stamp for the user; false to return
  173. // user information without updating the last-activity date/time stamp for the
  174. // user.
  175. }
  176. return _userRepo[username];
  177. }
  178. public int MaxInvalidPasswordAttempts()
  179. {
  180. return _MAX_ATTEMPTS;
  181. }
  182. public int MinRequiredNonAlphanumericCharacters()
  183. {
  184. return _MIN_NON_ALPHA_NUM_CHARS;
  185. }
  186. public bool ValidateUser(string username, string password)
  187. {
  188. if (username == null || username.Trim().Length == 0) return false;
  189. if (password == null || password.Trim().Length == 0) return false;
  190. if (!_userRepo.ContainsKey(username)) return false;
  191. if (_userRepo[username].Password == password) return true;
  192. return false;
  193. }
  194. public Boolean HasUser(String username) { return _userRepo.ContainsKey(username); }
  195. public IEnumerable<Individual.Individual> getUserList()
  196. {
  197. foreach (var i in _userRepo.Values)
  198. {
  199. yield return i;
  200. }
  201. }
  202. }
  203. }