add projects
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6s

This commit is contained in:
admin
2026-03-17 17:25:08 +03:00
parent fc01f07d7c
commit ed55e77e98
39 changed files with 4430 additions and 8 deletions
+123
View File
@@ -0,0 +1,123 @@
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;
}
}