using System; using System.Net.Http; using System.Windows.Forms; using Elfisa.UI.Helpers; using Elfisa.UI.Theming; using Электронная_Фармация.Classes; using Электронная_Фармация.Properties; namespace Электронная_Фармация.HelpForms { public partial class HF_Registration : Form { public HF_Registration() { InitializeComponent(); Shown += (_, __) => WindowChromeHelper.ApplyTitleBarTheme(this, ThemeManager.Colors); } private void btnCloseThis_Click(object sender, EventArgs e) { Close(); } private async void btnConfirmRegistration_Click(object sender, EventArgs e) { btnConfirmRegistration.Enabled = false; btnCloseThis.Enabled = false; UseWaitCursor = true; string strLogin = (txtLogin.Text ?? string.Empty).Trim(); string strPassword = txtPassword.Text ?? string.Empty; if (strLogin.Length > 0 && strPassword.Length > 0) { string apiUrl = string.IsNullOrWhiteSpace(Settings.Default.ApiBaseUrl) ? AppConfig.DefaultApiBaseUrl : Settings.Default.ApiBaseUrl; LoginRequest loginRequest = new LoginRequest(); loginRequest.Username = strLogin; loginRequest.Password = strPassword.Trim(); var client = new ApiClient(AppConfig.NormalizeApiBaseUrl(apiUrl)); AppDebugLog.Info("Auth", $"Попытка авторизации. Сервер={client.BaseUrl}, login={loginRequest.Username}"); try { string token = await client.LoginAsync(loginRequest.Username, loginRequest.Password); // Сохраняем только логин и токен; пароль в настройках не храним. Settings.Default.stringLogin = strLogin; Settings.Default.stringPassword = string.Empty; Settings.Default.stringToken = token; Settings.Default.ApiBaseUrl = client.BaseUrl; Settings.Default.Save(); AppDebugLog.Info("Auth", $"Авторизация успешна. token={AppDebugLog.MaskToken(token)}"); ToastNotification.ShowSuccess("Авторизация успешно выполнена"); DialogResult = DialogResult.OK; Close(); return; } catch (UnauthorizedAccessException ex) { AppDebugLog.Error("Auth", "Ошибка авторизации", ex); ToastNotification.ShowError($"Ошибка авторизации: {ex.Message}"); } catch (HttpRequestException ex) { AppDebugLog.Error("Auth", "Ошибка сети при авторизации", ex); ToastNotification.ShowError($"Ошибка сети: {ex.Message}"); } } else { UiDialogs.ShowError("Есть незаполненные данные. Регистрация программы не пройдена", "Ошибка ввода", this); } btnConfirmRegistration.Enabled = true; btnCloseThis.Enabled = true; UseWaitCursor = false; } private void HF_Registration_Load(object sender, EventArgs e) { UiThemeHelper.ApplyToControlTree(this); WindowChromeHelper.ApplyDialogChrome(this, panel1, label3); // Только последний успешный логин; пароль пользователь вводит каждый раз. txtLogin.Text = Settings.Default.stringLogin ?? string.Empty; txtPassword.Text = string.Empty; checkTokenGained.Checked = !string.IsNullOrWhiteSpace(Settings.Default.stringToken); } } }