124 lines
5.0 KiB
C#
124 lines
5.0 KiB
C#
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<KeyValuePair<string, string>> ListDev = new List<KeyValuePair<string, string>>();
|
|
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<string>();
|
|
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<string> 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<TokenResponse>();
|
|
return data?.Token.ToString();
|
|
}
|
|
|
|
return "null";
|
|
}
|
|
|
|
public static async Task<string> 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<KeyValuePair<string, string>> 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<string, string>(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<string> 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;
|
|
}
|
|
}
|