AuthorizationUserControl.xaml.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. using CapchaLibrary;
  2. using OOO_WriteAndClear.DBModels;
  3. using OOO_WriteAndClear.EventBus.Signals;
  4. using OOO_WriteAndClear.MVP.MVPInterfaces;
  5. using OOO_WriteAndClear.MVP.Presenters;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Drawing;
  9. using System.IO;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using System.Windows;
  14. using System.Windows.Controls;
  15. using System.Windows.Data;
  16. using System.Windows.Documents;
  17. using System.Windows.Input;
  18. using System.Windows.Media;
  19. using System.Windows.Media.Imaging;
  20. using System.Windows.Navigation;
  21. using System.Windows.Shapes;
  22. using System.Windows.Threading;
  23. namespace OOO_WriteAndClear.MVP.Views
  24. {
  25. /// <summary>
  26. /// Логика взаимодействия для AuthorizationUserControl.xaml
  27. /// </summary>
  28. public partial class AuthorizationUserControl : UserControl, IAuthorizationContract.IView
  29. {
  30. public AuthorizationUserControl()
  31. {
  32. InitializeComponent();
  33. _presenter = new AuthorizationUserControlPresenter(this);
  34. _dispatcherTimer = new DispatcherTimer();
  35. _dispatcherTimer.Tick += EnableButton;
  36. _dispatcherTimer.Interval = new TimeSpan(0, 0, 10);
  37. }
  38. #region Реализация IAuthorizationContract.IView
  39. /// <summary>
  40. /// Вывести сообщение о провале авторизации
  41. /// </summary>
  42. public void ShowFailureAuthorizeMessage()
  43. {
  44. MessageBox.Show("Провал авторизации!",
  45. "Пользователя не существует, проверьте правильность написания логина и пароля",
  46. MessageBoxButton.OK,
  47. MessageBoxImage.Error);
  48. Dispatcher.BeginInvoke(new Action(() =>
  49. {
  50. if (_capchaCode is not null)
  51. DisableButtonAndStartTimer();
  52. UpdateCapcha();
  53. CapchaStackPanel.Visibility = Visibility.Visible;
  54. })).Wait();
  55. }
  56. /// <summary>
  57. /// Выполняет действия необходимые для входа пользователя в систему
  58. /// </summary>
  59. /// <param name="user">Авторизованный пользователь</param>
  60. public void LetInAuthorizedUser(User user)
  61. {
  62. Dispatcher.BeginInvoke(new Action(() =>
  63. {
  64. EventBus.EventBus.GetService().Invoke(new UserWasLoggedSignal(user));
  65. }));
  66. }
  67. #endregion
  68. public string Login { get => LoginField.Text; set => LoginField.Text = value; }
  69. public string Password { get => PasswordField.Password; set => PasswordField.Password = value; }
  70. private readonly IAuthorizationContract.IPresenter _presenter;
  71. private string? _capchaCode = null;
  72. private readonly DispatcherTimer _dispatcherTimer;
  73. #region Обработчики событий разметки
  74. /// <summary>
  75. /// Обработчик события нажатия на кнопку авторизации
  76. /// </summary>
  77. /// <param name="sender">Кнопка</param>
  78. /// <param name="e">Аргументы события</param>
  79. private void LoginButton_Click(object sender, RoutedEventArgs e)
  80. {
  81. if (_capchaCode is not null && _capchaCode != CapchaCodeTextBox.Text)
  82. {
  83. MessageBox.Show("Капча введена не верно!", "Капча", MessageBoxButton.OK);
  84. UpdateCapcha();
  85. DisableButtonAndStartTimer();
  86. return;
  87. }
  88. string login = Login;
  89. string password = Password;
  90. Task.Run(() =>
  91. {
  92. _presenter.CheckTheUser(login, password);
  93. });
  94. }
  95. /// <summary>
  96. /// Обработчик события нажатия на ссылку входа как гость
  97. /// </summary>
  98. /// <param name="sender">Ссылка</param>
  99. /// <param name="e">Аргументы события</param>
  100. private void LoginAsGuestLink_Click(object sender, RoutedEventArgs e)
  101. {
  102. EventBus.EventBus.GetService().Invoke(new UserWasLoggedSignal(new User() { UserId = -1 })); //ID = -1, так как пользователь не авторизован
  103. }
  104. private void RefreshCapcha_Click(object sender, RoutedEventArgs e)
  105. {
  106. UpdateCapcha();
  107. }
  108. #endregion
  109. private void UpdateCapcha()
  110. {
  111. CapchaData capchaData = new CapchaGenerator().GenerateCapcha();
  112. _capchaCode = capchaData.Code;
  113. BitmapImage bitmapimage = new BitmapImage();
  114. using (MemoryStream memory = new MemoryStream())
  115. {
  116. capchaData.CapchaImage.Save(memory, System.Drawing.Imaging.ImageFormat.Bmp);
  117. memory.Position = 0;
  118. bitmapimage.BeginInit();
  119. bitmapimage.StreamSource = memory;
  120. bitmapimage.CacheOption = BitmapCacheOption.OnLoad;
  121. bitmapimage.EndInit();
  122. }
  123. CapchaImage.Source = bitmapimage;
  124. }
  125. private void DisableButtonAndStartTimer()
  126. {
  127. AuthButton.IsEnabled = false;
  128. _dispatcherTimer.Start();
  129. }
  130. private void EnableButton(object sender, EventArgs e)
  131. {
  132. AuthButton.IsEnabled = true;
  133. }
  134. }
  135. }