/// <summary> /// Возвращает расшифрованный пароль пользователя /// </summary> /// <param name="user">Пользователь</param> /// <returns></returns> /// <exception cref="CryptographicException"></exception> public static string GetDecryptedPassword(this DUP_USER user) { string result; if ((user.US_Attribute & (int)DupUserAttributes.Converted) == (int)DupUserAttributes.Converted) { result = String.IsNullOrEmpty(user.US_PASSWORD) ? String.Empty : CryptoManager.DecodeTripleDesString(user.US_PASSWORD); } else { throw new CryptographicException("Невозможно расшифровать пароль пользователя, так как он не зашифрован"); } return(result); }
/// <summary> /// Возвращает онлайн-пользователя по логину / паролю /// </summary> /// <param name="dc">Контекст базы данных</param> /// <param name="name">Логин пользователя</param> /// <param name="decryptedPassword">Расшифрованный пароль (его обычно вводит пользователь)</param> /// <returns>Возвращает пользователя или null, если не нашли комбинации логин / пароль</returns> public static DUP_USER GetDupUser(this MtMainDbDataContext dc, string name, string decryptedPassword) { // для пользователей с зашифрованным паролем var user = dc.GetAllDupUsers().SingleOrDefault(u => u.US_ID == name && (u.US_Attribute & (int)DupUserAttributes.Converted) == (int)DupUserAttributes.Converted && CryptoManager.DecodeTripleDesString(u.US_PASSWORD) == decryptedPassword); if (user != null) { return(user); } // для пользователей с закодированным паролем user = dc.GetAllDupUsers().SingleOrDefault(u => u.US_ID == name && (u.US_Attribute & (int)DupUserAttributes.Converted) != (int)DupUserAttributes.Converted && u.US_PASSWORD == GetPasswordHash(decryptedPassword)); return(user); }