123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- using CapchaLibrary;
- using OOO_WriteAndClear.DBModels;
- using OOO_WriteAndClear.EventBus.Signals;
- using OOO_WriteAndClear.MVP.MVPInterfaces;
- using OOO_WriteAndClear.MVP.Presenters;
- using System;
- using System.Collections.Generic;
- using System.Drawing;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- using System.Windows.Threading;
- namespace OOO_WriteAndClear.MVP.Views
- {
- /// <summary>
- /// Логика взаимодействия для AuthorizationUserControl.xaml
- /// </summary>
- public partial class AuthorizationUserControl : UserControl, IAuthorizationContract.IView
- {
- public AuthorizationUserControl()
- {
- InitializeComponent();
- _presenter = new AuthorizationUserControlPresenter(this);
- _dispatcherTimer = new DispatcherTimer();
- _dispatcherTimer.Tick += EnableButton;
- _dispatcherTimer.Interval = new TimeSpan(0, 0, 10);
- }
- #region Реализация IAuthorizationContract.IView
- /// <summary>
- /// Вывести сообщение о провале авторизации
- /// </summary>
- public void ShowFailureAuthorizeMessage()
- {
- MessageBox.Show("Провал авторизации!",
- "Пользователя не существует, проверьте правильность написания логина и пароля",
- MessageBoxButton.OK,
- MessageBoxImage.Error);
- Dispatcher.BeginInvoke(new Action(() =>
- {
- if (_capchaCode is not null)
- DisableButtonAndStartTimer();
- UpdateCapcha();
- CapchaStackPanel.Visibility = Visibility.Visible;
- })).Wait();
- }
- /// <summary>
- /// Выполняет действия необходимые для входа пользователя в систему
- /// </summary>
- /// <param name="user">Авторизованный пользователь</param>
- public void LetInAuthorizedUser(User user)
- {
- Dispatcher.BeginInvoke(new Action(() =>
- {
- EventBus.EventBus.GetService().Invoke(new UserWasLoggedSignal(user));
- }));
- }
- #endregion
- public string Login { get => LoginField.Text; set => LoginField.Text = value; }
- public string Password { get => PasswordField.Password; set => PasswordField.Password = value; }
- private readonly IAuthorizationContract.IPresenter _presenter;
- private string? _capchaCode = null;
- private readonly DispatcherTimer _dispatcherTimer;
- #region Обработчики событий разметки
- /// <summary>
- /// Обработчик события нажатия на кнопку авторизации
- /// </summary>
- /// <param name="sender">Кнопка</param>
- /// <param name="e">Аргументы события</param>
- private void LoginButton_Click(object sender, RoutedEventArgs e)
- {
- if (_capchaCode is not null && _capchaCode != CapchaCodeTextBox.Text)
- {
- MessageBox.Show("Капча введена не верно!", "Капча", MessageBoxButton.OK);
- UpdateCapcha();
- DisableButtonAndStartTimer();
- return;
- }
- string login = Login;
- string password = Password;
- Task.Run(() =>
- {
- _presenter.CheckTheUser(login, password);
- });
- }
- /// <summary>
- /// Обработчик события нажатия на ссылку входа как гость
- /// </summary>
- /// <param name="sender">Ссылка</param>
- /// <param name="e">Аргументы события</param>
- private void LoginAsGuestLink_Click(object sender, RoutedEventArgs e)
- {
- EventBus.EventBus.GetService().Invoke(new UserWasLoggedSignal(new User() { UserId = -1 })); //ID = -1, так как пользователь не авторизован
- }
- private void RefreshCapcha_Click(object sender, RoutedEventArgs e)
- {
- UpdateCapcha();
- }
- #endregion
- private void UpdateCapcha()
- {
- CapchaData capchaData = new CapchaGenerator().GenerateCapcha();
- _capchaCode = capchaData.Code;
- BitmapImage bitmapimage = new BitmapImage();
- using (MemoryStream memory = new MemoryStream())
- {
- capchaData.CapchaImage.Save(memory, System.Drawing.Imaging.ImageFormat.Bmp);
- memory.Position = 0;
- bitmapimage.BeginInit();
- bitmapimage.StreamSource = memory;
- bitmapimage.CacheOption = BitmapCacheOption.OnLoad;
- bitmapimage.EndInit();
- }
- CapchaImage.Source = bitmapimage;
- }
- private void DisableButtonAndStartTimer()
- {
- AuthButton.IsEnabled = false;
- _dispatcherTimer.Start();
- }
- private void EnableButton(object sender, EventArgs e)
- {
- AuthButton.IsEnabled = true;
- }
- }
- }
|