using System.Net; using System.Net.Http; using System.Net.Http.Json; using System.Text; using System.Text.Json; namespace AddHostToProxy { internal class Program { public static List> ListDev = new List>(); static async Task Main(string[] args) { ListDev = ReadCsvFile("ListDev.csv"); string str = await GetTokenAsync(); foreach (var item in ListDev) { var host = new HostProxy(); var lsDomain = new List(); var _meta = new Meta(); host.meta = _meta; lsDomain.Add(item.Value+".vnk.security.local"); host.domain_names = lsDomain; host.forward_host = item.Key; var str2 = await AddProxyHostAsync(str, host); Console.WriteLine($"{item.Key}\t{str2}"); } Console.WriteLine("========== ЗАКОНЧИЛ ============"); Console.ReadKey(); } public static async Task GetTokenAsync() { using var client = new HttpClient(); var payload = new { identity = "admin@security.local", secret = "4NUDZhJ7" }; var response = await client.PostAsJsonAsync("http://172.16.48.129:81/api/tokens", payload); if (response.IsSuccessStatusCode) { // Десериализуем ответ напрямую в динамический объект или анонимный тип var data = await response.Content.ReadFromJsonAsync(); return data?.Token.ToString(); } return "null"; } public static async Task AddProxyHostAsync(string token, object data) { using var _httpClient = new HttpClient(); // Формируем данные запроса var jsonContent = JsonSerializer.Serialize(data); var httpContent = new StringContent(jsonContent, Encoding.UTF8, "application/json"); // Устанавливаем заголовки _httpClient.DefaultRequestHeaders.Clear(); _httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}"); // Отправляем запрос var httpResponse = await _httpClient.PostAsync("http://172.16.48.129:81/api/nginx/proxy-hosts", httpContent); //var httpResponse = await _httpClient.PutAsync($"http://172.16.48.129:81/api/nginx/proxy-hosts", httpContent); // Проверяем статус ответа httpResponse.EnsureSuccessStatusCode(); // Возвращаем статус-код return httpResponse.StatusCode.ToString(); } public static List> ReadCsvFile(string filePath) { using (var reader = new StreamReader(filePath)) { while (!reader.EndOfStream) { var line = reader.ReadLine(); if (string.IsNullOrEmpty(line)) continue; // Разбиваем строку по запятой (предполагая CSV с разделителем запятой) var parts = line.Split(';'); // Проверяем, что строка содержит хотя бы две части if (parts.Length >= 2) { // Приводим результаты к строкам и добавляем в список ListDev.Add(new KeyValuePair(parts[0].Trim(), parts[1].Trim())); } } } return ListDev; } // Класс для десериализации ответа public record TokenResponse(string Token, DateTime Expires); } public class Meta { public bool nginx_online { get; set; } = true; public object nginx_err { get; set; } = null; } public class HostProxy { public bool enabled { get; set; } = true; public List domain_names { get; set; } public string forward_scheme { get; set; } = "https"; public string forward_host { get; set; } public int forward_port { get; set; } = 443; public int access_list_id { get; set; } = 0; public int certificate_id { get; set; } = 1; public bool ssl_forced { get; set; } = false; public bool caching_enabled { get; set; } = false; public bool block_exploits { get; set; } = false; public string advanced_config { get; set; } = ""; public Meta meta { get; set; } public bool allow_websocket_upgrade { get; set; } = true; public bool http2_support { get; set; } = false; public bool hsts_enabled { get; set; } = false; public bool hsts_subdomains { get; set; } = false; } }