151 lines
6.4 KiB
C#
151 lines
6.4 KiB
C#
using Newtonsoft.Json;
|
||
using OzonInternalLabelPrinter; // Добавляем пространство имен для OzonStore
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Security.Cryptography; // Для ProtectedData
|
||
using System.Text;
|
||
using System.Windows.Forms;
|
||
|
||
namespace SKLADm
|
||
{
|
||
public partial class FormManageStores : Form
|
||
{
|
||
private List<OzonStore> _stores;
|
||
// Энтропия для шифрования (можно оставить null или использовать свой секрет)
|
||
private static readonly byte[] s_entropy = null; // Или Encoding.UTF8.GetBytes("MyOptionalEntropy");
|
||
|
||
public FormManageStores()
|
||
{
|
||
InitializeComponent();
|
||
LoadStoresToListBox();
|
||
}
|
||
|
||
// --- Шифрование Api-Key ---
|
||
private string EncryptApiKey(string apiKey)
|
||
{
|
||
if (string.IsNullOrEmpty(apiKey)) return string.Empty;
|
||
try
|
||
{
|
||
byte[] apiKeyBytes = Encoding.UTF8.GetBytes(apiKey);
|
||
byte[] encryptedBytes = ProtectedData.Protect(apiKeyBytes, s_entropy, DataProtectionScope.CurrentUser);
|
||
return Convert.ToBase64String(encryptedBytes);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageBox.Show($"Ошибка шифрования ключа: {ex.Message}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
return null; // Возвращаем null при ошибке
|
||
}
|
||
}
|
||
|
||
// --- Загрузка магазинов из настроек ---
|
||
private void LoadStoresToListBox()
|
||
{
|
||
string json = Properties.Settings.Default.SavedStoresJson;
|
||
_stores = new List<OzonStore>();
|
||
if (!string.IsNullOrEmpty(json))
|
||
{
|
||
try
|
||
{
|
||
_stores = JsonConvert.DeserializeObject<List<OzonStore>>(json) ?? new List<OzonStore>();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageBox.Show($"Ошибка загрузки списка магазинов: {ex.Message}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||
_stores = new List<OzonStore>(); // Создаем пустой список при ошибке
|
||
}
|
||
}
|
||
UpdateListBox();
|
||
}
|
||
|
||
// --- Сохранение магазинов в настройки ---
|
||
private void SaveStores()
|
||
{
|
||
try
|
||
{
|
||
string json = JsonConvert.SerializeObject(_stores, Formatting.Indented);
|
||
Properties.Settings.Default.SavedStoresJson = json;
|
||
Properties.Settings.Default.Save();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageBox.Show($"Ошибка сохранения списка магазинов: {ex.Message}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
}
|
||
}
|
||
|
||
// --- Обновление ListBox ---
|
||
private void UpdateListBox()
|
||
{
|
||
lstStores.DataSource = null; // Сначала отвязываем источник
|
||
lstStores.DataSource = _stores; // Привязываем обновленный список
|
||
lstStores.DisplayMember = "StoreName"; // Отображаем имя
|
||
}
|
||
|
||
// --- Кнопка "Добавить магазин" ---
|
||
private void btnAddStore_Click(object sender, EventArgs e)
|
||
{
|
||
string storeName = txtStoreName.Text.Trim();
|
||
string clientId = txtEditClientId.Text.Trim();
|
||
string apiKey = txtEditApiKey.Text.Trim(); // Берем ключ как есть
|
||
|
||
if (string.IsNullOrEmpty(storeName) || string.IsNullOrEmpty(clientId) || string.IsNullOrEmpty(apiKey))
|
||
{
|
||
MessageBox.Show("Пожалуйста, заполните все поля: Название, Client ID, Api-Key.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||
return;
|
||
}
|
||
|
||
// Проверяем, нет ли уже магазина с таким именем
|
||
if (_stores.Any(s => s.StoreName.Equals(storeName, StringComparison.OrdinalIgnoreCase)))
|
||
{
|
||
MessageBox.Show("Магазин с таким названием уже существует.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||
return;
|
||
}
|
||
|
||
// Шифруем ключ
|
||
string encryptedKey = EncryptApiKey(apiKey);
|
||
if (encryptedKey == null) // Если шифрование не удалось
|
||
{
|
||
return;
|
||
}
|
||
|
||
// Создаем и добавляем магазин
|
||
OzonStore newStore = new OzonStore(storeName, clientId, encryptedKey);
|
||
_stores.Add(newStore);
|
||
|
||
// Сохраняем и обновляем список
|
||
SaveStores();
|
||
UpdateListBox();
|
||
|
||
// Очищаем поля ввода
|
||
txtStoreName.Clear();
|
||
txtEditClientId.Clear();
|
||
txtEditApiKey.Clear();
|
||
}
|
||
|
||
// --- Кнопка "Удалить выбранный" (Опционально) ---
|
||
private void btnDeleteStore_Click(object sender, EventArgs e)
|
||
{
|
||
if (lstStores.SelectedItem is OzonStore selectedStore)
|
||
{
|
||
if (MessageBox.Show($"Вы уверены, что хотите удалить магазин '{selectedStore.StoreName}'?", "Подтверждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
||
{
|
||
_stores.Remove(selectedStore);
|
||
SaveStores();
|
||
UpdateListBox();
|
||
}
|
||
}
|
||
else
|
||
{
|
||
MessageBox.Show("Выберите магазин для удаления.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||
}
|
||
}
|
||
|
||
// --- Кнопка "Закрыть" ---
|
||
private void btnClose_Click(object sender, EventArgs e)
|
||
{
|
||
this.DialogResult = DialogResult.OK; // Указываем, что форма закрыта штатно
|
||
this.Close();
|
||
}
|
||
}
|
||
}
|