diff --git a/ddns/IonosDynamicDNSUpdater/.github/workflows/docker-image-dev.yml b/ddns/IonosDynamicDNSUpdater/.github/workflows/docker-image-dev.yml new file mode 100644 index 0000000..629334b --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/.github/workflows/docker-image-dev.yml @@ -0,0 +1,42 @@ +name: Docker Image CI + +on: + push: + branches: [ "dev" ] + pull_request: + branches: [ "dev" ] + +jobs: + + build_n_push: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Extract branch name + shell: bash + run: echo "branch=$(echo ${GITHUB_REF#refs/heads/})" >>$GITHUB_OUTPUT + id: extract_branch + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + with: + install: true + + - name: Docker Build and Tag Prod + run: docker build --load -t saile2204/ionos_ddns_updater:latest-${{ steps.extract_branch.outputs.branch }} -t saile2204/ionos_ddns_updater:${{ steps.extract_branch.outputs.branch }}-$GITHUB_SHA . + + - name: Docker Build and Tagd + run: docker build --load -t saile2204/ionos_ddns_updater:$(date +%s) . + + - name: Log in to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERUSERNAME }} + password: ${{ secrets.DOCKERPASSWORD }} + + - name: Push to Dockerhub + run: | + docker push saile2204/ionos_ddns_updater:latest-${{ steps.extract_branch.outputs.branch }} + docker push saile2204/ionos_ddns_updater:${{ steps.extract_branch.outputs.branch }}-$GITHUB_SHA diff --git a/ddns/IonosDynamicDNSUpdater/.github/workflows/docker-image-prod.yml b/ddns/IonosDynamicDNSUpdater/.github/workflows/docker-image-prod.yml new file mode 100644 index 0000000..77ea193 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/.github/workflows/docker-image-prod.yml @@ -0,0 +1,42 @@ +name: Docker Image CI + +on: + push: + branches: [ "master"] + pull_request: + branches: [ "master"] + +jobs: + + build_n_push: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Extract branch name + shell: bash + run: echo "branch=$(echo ${GITHUB_REF#refs/heads/})" >>$GITHUB_OUTPUT + id: extract_branch + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + with: + install: true + + - name: Docker Build and Tag Prod + run: docker build --load -t saile2204/ionos_ddns_updater:latest-${{ steps.extract_branch.outputs.branch }} -t saile2204/ionos_ddns_updater:${{ steps.extract_branch.outputs.branch }}-$GITHUB_SHA . + + - name: Docker Build and Tagd + run: docker build --load -t saile2204/ionos_ddns_updater:$(date +%s) . + + - name: Log in to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERUSERNAME }} + password: ${{ secrets.DOCKERPASSWORD }} + + - name: Push to Dockerhub + run: | + docker push saile2204/ionos_ddns_updater:latest-${{ steps.extract_branch.outputs.branch }} + docker push saile2204/ionos_ddns_updater:${{ steps.extract_branch.outputs.branch }}-$GITHUB_SHA diff --git a/ddns/IonosDynamicDNSUpdater/.github/workflows/dotnet.yml b/ddns/IonosDynamicDNSUpdater/.github/workflows/dotnet.yml new file mode 100644 index 0000000..bf986cd --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/.github/workflows/dotnet.yml @@ -0,0 +1,28 @@ +# This workflow will build a .NET project +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net + +name: .NET + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: 6.0.x + - name: Restore dependencies + run: dotnet restore + - name: Build + run: dotnet build --no-restore + - name: Test + run: dotnet test --no-build --verbosity normal diff --git a/ddns/IonosDynamicDNSUpdater/.idea/.idea.DDNSUpdater/.idea/.gitignore b/ddns/IonosDynamicDNSUpdater/.idea/.idea.DDNSUpdater/.idea/.gitignore new file mode 100644 index 0000000..f6ab325 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/.idea/.idea.DDNSUpdater/.idea/.gitignore @@ -0,0 +1,13 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Rider ignored files +/.idea.DDNSUpdater.iml +/contentModel.xml +/projectSettingsUpdater.xml +/modules.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/ddns/IonosDynamicDNSUpdater/.idea/.idea.DDNSUpdater/.idea/.name b/ddns/IonosDynamicDNSUpdater/.idea/.idea.DDNSUpdater/.idea/.name new file mode 100644 index 0000000..469ca7d --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/.idea/.idea.DDNSUpdater/.idea/.name @@ -0,0 +1 @@ +DDNSUpdater \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/.idea/.idea.DDNSUpdater/.idea/encodings.xml b/ddns/IonosDynamicDNSUpdater/.idea/.idea.DDNSUpdater/.idea/encodings.xml new file mode 100644 index 0000000..df87cf9 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/.idea/.idea.DDNSUpdater/.idea/encodings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/.idea/.idea.DDNSUpdater/.idea/indexLayout.xml b/ddns/IonosDynamicDNSUpdater/.idea/.idea.DDNSUpdater/.idea/indexLayout.xml new file mode 100644 index 0000000..7b08163 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/.idea/.idea.DDNSUpdater/.idea/indexLayout.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/.idea/.idea.DDNSUpdater/.idea/vcs.xml b/ddns/IonosDynamicDNSUpdater/.idea/.idea.DDNSUpdater/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/.idea/.idea.DDNSUpdater/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater.sln b/ddns/IonosDynamicDNSUpdater/DDNSUpdater.sln new file mode 100644 index 0000000..2a75291 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater.sln @@ -0,0 +1,16 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DDNSUpdater", "DDNSUpdater\DDNSUpdater.csproj", "{EDEDF642-4CFC-4EEB-A8F2-3872DBEC63E3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {EDEDF642-4CFC-4EEB-A8F2-3872DBEC63E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EDEDF642-4CFC-4EEB-A8F2-3872DBEC63E3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EDEDF642-4CFC-4EEB-A8F2-3872DBEC63E3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EDEDF642-4CFC-4EEB-A8F2-3872DBEC63E3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/DDNSUpdater.csproj b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/DDNSUpdater.csproj new file mode 100644 index 0000000..5d2bd9a --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/DDNSUpdater.csproj @@ -0,0 +1,31 @@ + + + + Exe + net7.0 + enable + enable + Linux + + + + + + + + + + + + + + + + + + PreserveNewest + + + + + diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/DataContext.cs b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/DataContext.cs new file mode 100644 index 0000000..d4d5a10 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/DataContext.cs @@ -0,0 +1,15 @@ +using DDNSUpdater.Models; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; + +namespace DDNSUpdater; + +public class DataContext : DbContext +{ + + public DataContext(DbContextOptions options) + : base(options) { } + + + public DbSet Domains { get; set; } +} \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Interfaces/IDDNSService.cs b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Interfaces/IDDNSService.cs new file mode 100644 index 0000000..46a5fbe --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Interfaces/IDDNSService.cs @@ -0,0 +1,8 @@ +namespace DDNSUpdater.Interfaces; + +public interface IDDNSService +{ + public Task Init(); + public Task Update(bool changed); + public Task SetUpdateURL(); +} \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Interfaces/ITimerService.cs b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Interfaces/ITimerService.cs new file mode 100644 index 0000000..c625c52 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Interfaces/ITimerService.cs @@ -0,0 +1,6 @@ +namespace DDNSUpdater.Interfaces; + +public interface ITimerService +{ + Task Start(); +} \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Logging/SpecterConsoleLogger.cs b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Logging/SpecterConsoleLogger.cs new file mode 100644 index 0000000..45ebbc7 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Logging/SpecterConsoleLogger.cs @@ -0,0 +1,75 @@ +using System; +using DDNSUpdater.Interfaces; +using Microsoft.Extensions.Logging; +using Spectre.Console; +using Console = Spectre.Console.AnsiConsole; + +namespace DDNSUpdater.Logging; + +public sealed class SpecterConsoleLogger : ILogger +{ + private readonly string _name; + private readonly Func _getCurrentConfig; + public SpecterConsoleLogger( + string name, Func getCurrentConfig) => + (_name, _getCurrentConfig) = (name, getCurrentConfig); + + public void Log(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func formatter) + { + if (!IsEnabled(logLevel)) + { + return; + } + + Table table = null; + try + { + table = state as Table; + + + } + catch (Exception e) + { + Console.WriteLine(e.ToString()); + throw; + } + + + try + { + SpecterConsoleLoggerConfiguration config = _getCurrentConfig(); + if (table is not null) + { + Console.Write(table); + } + else if (config.EventId == 0 || config.EventId == eventId.Id) + { + var originalColor = new Style(foreground: System.Console.ForegroundColor); + + + Console.Foreground = config.LogLevelToColorMap[logLevel]; + Console.Write($"[{eventId.Id,2}:{logLevel,-12}]"); + + Console.Foreground = originalColor.Foreground; + Console.Write($" {_name} - "); + + Console.Foreground = config.LogLevelToColorMap[logLevel]; + Console.Write($"{formatter(state, exception)}"); + + Console.Foreground = originalColor.Foreground; + Console.WriteLine(); + } + } + catch + { + + } + } + + + + public bool IsEnabled(LogLevel logLevel) => + _getCurrentConfig().LogLevelToColorMap.ContainsKey(logLevel); + + public IDisposable? BeginScope(TState state) where TState : notnull => default!; +} \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Logging/SpecterConsoleLoggerConfiguration.cs b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Logging/SpecterConsoleLoggerConfiguration.cs new file mode 100644 index 0000000..142bd55 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Logging/SpecterConsoleLoggerConfiguration.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using Microsoft.Extensions.Logging; + +namespace DDNSUpdater.Logging; + +public sealed class SpecterConsoleLoggerConfiguration +{ + public int EventId { get; set; } + + public Dictionary LogLevelToColorMap { get; set; } = new() + { + [LogLevel.Information] = ConsoleColor.DarkGreen + }; +} \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Logging/SpecterConsoleLoggerExtensions.cs b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Logging/SpecterConsoleLoggerExtensions.cs new file mode 100644 index 0000000..9882aaf --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Logging/SpecterConsoleLoggerExtensions.cs @@ -0,0 +1,42 @@ +using System; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Configuration; +using Spectre.Console; + +namespace DDNSUpdater.Logging; + +public static class SpecterConsoleLoggerExtensions +{ + public static ILoggingBuilder AddSpecterConsoleLogger( + this ILoggingBuilder builder) + { + builder.AddConfiguration(); + + builder.Services.TryAddEnumerable( + ServiceDescriptor.Singleton()); + + LoggerProviderOptions.RegisterProviderOptions + (builder.Services); + + return builder; + } + + public static ILoggingBuilder AddSpecterConsoleLogger( + this ILoggingBuilder builder, + Action configure) + { + builder.AddSpecterConsoleLogger(); + builder.Services.Configure(configure); + + return builder; + } + + public static void LogTable(this ILogger logger, LogLevel logLevel, EventId eventId, Exception? exception, Table? table) + { + + logger.Log(logLevel, eventId, table, exception, null); + } + +} \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Logging/SpecterConsoleLoggerProvider.cs b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Logging/SpecterConsoleLoggerProvider.cs new file mode 100644 index 0000000..7cf1010 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Logging/SpecterConsoleLoggerProvider.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Concurrent; +using System.Runtime.Versioning; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Console; +using Microsoft.Extensions.Options; + +namespace DDNSUpdater.Logging; + +[UnsupportedOSPlatform("browser")] +[ProviderAlias("SpecterConsole")] +public sealed class SpecterConsoleLoggerProvider : ILoggerProvider +{ + private readonly IDisposable? _onChangeToken; + private SpecterConsoleLoggerConfiguration _currentConfig; + private readonly ConcurrentDictionary _loggers = + new(StringComparer.OrdinalIgnoreCase); + public SpecterConsoleLoggerProvider( + IOptionsMonitor config) + { + _currentConfig = config.CurrentValue; + _onChangeToken = config.OnChange(updatedConfig => _currentConfig = updatedConfig); + } + + public ILogger CreateLogger(string categoryName) => + _loggers.GetOrAdd(categoryName, name => new SpecterConsoleLogger(name, GetCurrentConfig)); + + private SpecterConsoleLoggerConfiguration GetCurrentConfig() => _currentConfig; + + public void Dispose() + { + _loggers.Clear(); + _onChangeToken?.Dispose(); + } +} \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Logic/DomainComparer.cs b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Logic/DomainComparer.cs new file mode 100644 index 0000000..1a92443 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Logic/DomainComparer.cs @@ -0,0 +1,40 @@ +using DDNSUpdater.Models; + +namespace DDNSUpdater.Logic; + +public class DomainComparer +{ + public static List GetObjectsNotInList(List list1, List list2) + { + List result = new List(); + + foreach (var item1 in list1) + { + bool found = false; + + foreach (var item2 in list2) + { + if (AreEqual(item1, item2)) + { + found = true; + break; + } + } + + if (!found) + { + result.Add(item1); + } + } + + return result; + } + + private static bool AreEqual(Domain domain1, Domain domain2) + { + // Compare each property for equality + return domain1.Id == domain2.Id && + string.Equals(domain1.DomainString, domain2.DomainString, StringComparison.OrdinalIgnoreCase) && + string.Equals(domain1.Key, domain2.Key, StringComparison.OrdinalIgnoreCase); + } +} diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Models/Domain.cs b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Models/Domain.cs new file mode 100644 index 0000000..9577d69 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Models/Domain.cs @@ -0,0 +1,12 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace DDNSUpdater.Models; + +public class Domain +{ + [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + public string DomainString { get; set; } + public string Key { get; set; } +} \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Models/Requests/DynamicDns.cs b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Models/Requests/DynamicDns.cs new file mode 100644 index 0000000..f99f173 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Models/Requests/DynamicDns.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace DDNSUpdater.Models.Requests; + +public class DynamicDns +{ + [JsonProperty("domains")] + public List Domains { get; set; } + + [JsonProperty("description")] + public string Description { get; set; } +} \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Models/Requests/DynamicDnsResponse.cs b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Models/Requests/DynamicDnsResponse.cs new file mode 100644 index 0000000..579c78f --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Models/Requests/DynamicDnsResponse.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; + +namespace DDNSUpdater.Models.Requests; + +public class DynamicDnsResponse +{ + public string BulkId { get; set; } + public string UpdateUrl { get; set; } + public List Domains { get; set; } + public string Description { get; set; } +} \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Program.cs b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Program.cs new file mode 100644 index 0000000..c11a9ed --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Program.cs @@ -0,0 +1,53 @@ +using System; +using DDNSUpdater; +using DDNSUpdater.Interfaces; +using DDNSUpdater.Logging; +using DDNSUpdater.Services; +using Docker.DotNet; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using RestSharp; + +var builder = new ConfigurationBuilder() + .AddJsonFile("appsettings.json", optional: false, reloadOnChange: false); + +DockerClient dockerClient = new DockerClientConfiguration() + .CreateClient(); + +var configuration = builder.Build(); + +/*var logConfig = new OptionsMonitor(); +logConfig.CurrentValue.LogLevelToColorMap[LogLevel.Warning] = ConsoleColor.DarkCyan; +logConfig.CurrentValue.LogLevelToColorMap[LogLevel.Error] = ConsoleColor.DarkRed;*/ + +var serviceProvider = new ServiceCollection() + .AddSingleton(configuration) + .AddLogging(logging => logging.AddSpecterConsoleLogger(configuration => + { + // Replace warning value from appsettings.json of "Cyan" + configuration.LogLevelToColorMap[LogLevel.Warning] = ConsoleColor.DarkCyan; + // Replace warning value from appsettings.json of "Red" + configuration.LogLevelToColorMap[LogLevel.Error] = ConsoleColor.DarkRed; + })) + .AddSingleton() + .AddSingleton() + .AddSingleton(dockerClient) + .AddSingleton() + .AddDbContext(options => options.UseInMemoryDatabase(databaseName: "DataContext")) + .BuildServiceProvider(); + + + +var dockerService = serviceProvider.GetService(); +dockerService?.UpdateDomainList(); + +var dataAccess = serviceProvider.GetService(); +dataAccess?.Init(); + +var timerService = serviceProvider.GetService(); +timerService?.Start(); + +Console.ReadKey(); diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Services/DDNSService.cs b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Services/DDNSService.cs new file mode 100644 index 0000000..56eeccc --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Services/DDNSService.cs @@ -0,0 +1,164 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Threading.Tasks; +using DDNSUpdater.Interfaces; +using DDNSUpdater.Logging; +using DDNSUpdater.Models; +using DDNSUpdater.Models.Requests; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using RestSharp; +using RestSharp.Serializers; +using Spectre.Console; +using Console = Spectre.Console.AnsiConsole; + +namespace DDNSUpdater.Services; + +public class DDNSService : IDDNSService +{ + private List? UpdateURLs { get; set; } + + private readonly ILogger _logger; + private readonly DataContext _dataContext; + + public DDNSService(ILogger logger, DataContext dataContext) + { + _logger = logger; + _dataContext = dataContext; + } + + + public async Task Init() + { + int count = 0; + _logger.LogInformation("Fetching UpdateURLs"); + var domains = await _dataContext.Domains.ToListAsync(); + if (domains.Count == 0) + { + return; + } + UpdateURLs = await GetUpdateURLs(); + while (UpdateURLs == null || UpdateURLs.Count == 0 || count > 50) + { + _logger.LogInformation($"Fetching UpdateURLs again."); + UpdateURLs = await GetUpdateURLs(); + count++; + } + + _logger.LogInformation($"Fetched {UpdateURLs.Count} UpdateURLs"); + } + + public async Task Update(bool changed) + { + if (changed) + { + Init(); + } + + if(UpdateURLs.Count == 0) return; + + foreach (var UpdateURL in UpdateURLs) + { + var client = new RestClient(UpdateURL); + var request = new RestRequest("",Method.Get); + request.AddHeader("Cookie", "0b04270753322c986927738ac2b6c0d8=ea099cbd8a6109c688f9831d6bbfa7a1; 5b66c83e4535f5f6bef8295496cfe559=e85228fccae97f107478bf9ef664e4eb; DPX=v1:ghOJrOzFTj:htgOaKFW:63d3bf8f:de"); + var body = @""; + request.AddParameter("text/plain", body, ParameterType.RequestBody); + + try + { + var response = await client.ExecuteAsync(request); + while (response.StatusCode == HttpStatusCode.TooManyRequests) + { + Thread.Sleep(1000); + response = await client.ExecuteAsync(request); + } + + + _logger.LogInformation("Requesting Update on Ionos."); + } + catch (Exception e) + { + _logger.LogError(e.Message); + throw; + } + } + + } + + public async Task SetUpdateURL() + { + UpdateURLs = await GetUpdateURLs(); + } + + private async Task> GetUpdateURLs() + { + List updateURLs = new List(); + + Dictionary> domainDict = new Dictionary>(); + Dictionary tables = new Dictionary(); + foreach (var domain in await _dataContext.Domains.ToListAsync()) + { + + if (!domainDict.ContainsKey(domain.Key)) + { + domainDict.Add(domain.Key, new List()); + var t = new Table(); + t.AddColumn("Key"); + t.AddColumn("Domain"); + + tables.Add(domain.Key,t); + } + + domainDict[domain.Key].Add(domain.DomainString); + tables[domain.Key].AddRow(domain.Key, domain.DomainString); + } + foreach (var keyValuePair in tables) + { + Console.Write(tables[keyValuePair.Key]); + } + + + foreach (var domainList in domainDict) + { + + var dyndns = new DynamicDns() + { + Domains = domainList.Value, + Description = "My DynamicDns" + }; + var content = JsonConvert.SerializeObject(dyndns); + var client = new RestClient("https://api.hosting.ionos.com/dns/v1"); + var request = new RestRequest("/dyndns", Method.Post); + + + request.AddHeader("X-API-Key", domainList.Key.Replace("ionos ", "")); + + request.AddStringBody(content, ContentType.Json); + + + try + { + var response = client.ExecutePost(request); + while (response.StatusCode == HttpStatusCode.TooManyRequests) + { + Thread.Sleep(1000); + response = client.ExecutePost(request); + } + updateURLs.Add(response.Data.UpdateUrl); + } + catch (Exception error) + { + _logger.LogError(error.Message); + return null; + } + } + + return updateURLs; + } +} diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Services/DockerService.cs b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Services/DockerService.cs new file mode 100644 index 0000000..bca1f05 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Services/DockerService.cs @@ -0,0 +1,157 @@ +using DDNSUpdater.Models; +using Docker.DotNet; +using Docker.DotNet.Models; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +namespace DDNSUpdater.Services; + +public class DockerService +{ + private Timer timer; + private readonly ILogger _logger; + private readonly IServiceScopeFactory _factory; + private readonly DockerClient _dockerClient; + private readonly DataContext _context; + private readonly int intervalMinutes; + + public DockerService(ILogger logger,IServiceScopeFactory factory, DockerClient dockerClient, DataContext context) + { + _logger = logger; + _factory = factory; + _dockerClient = dockerClient; + _context = context; + } + + public async Task UpdateDomainList() + { + var changed = false; + + + var containers = await _dockerClient.Containers.ListContainersAsync(new ContainersListParameters()); + var domains = await _context.Domains.ToListAsync(); + + + + + foreach (var container in containers) + { + foreach (var (key, value) in container.Labels) + { + if (key.Contains("caddy")) + { + domains = await _context.Domains.ToListAsync(); + //var domainsFound = container.Labels["caddy"].Split(" "); + //var apiKey = container.Labels["caddy.tls.dns"].Replace("ionos ", ""); + var domainsFound = await GetDomains(container); + + foreach (var domain in domainsFound) + { + //Domain? find = domains.Find(d => d.DomainString.Equals(domain.DomainString)); + var exists = false; + foreach (var d in domains) + { + if (d.DomainString.Equals(domain.DomainString)) + { + exists = true; + } + } + + if (!exists) + { + _logger.LogInformation("Adding Domain: " + domain.DomainString); + changed = true; + await _context.Domains.AddAsync(domain); + await _context.SaveChangesAsync(); + } + } + + await _context.SaveChangesAsync(); + } + } + + } + domains = await _context.Domains.ToListAsync(); + foreach (var domain in domains) + { + var found = false; + + foreach (var containerListResponse in containers) + { + var domainsInLabels = await GetDomains(containerListResponse); + foreach (var domainInContainer in domainsInLabels) + { + if (domainInContainer.DomainString.Equals(domain.DomainString)) + { + found = true; + } + } + + + /*if (!containerListResponse.Labels.Contains( + new KeyValuePair("caddy", domain.DomainString))) + { + found = true; + }*/ + } + + if (!found) + { + _context.Domains.Remove(domain); + } + } + + + await _context.SaveChangesAsync(); + + + return changed; + + } + + private List GetDnsRange(IDictionary labels) + { + var dnsRange = new List(); + foreach (var keyValuePair in labels) + { + if (keyValuePair.Key.Contains("caddy")) + { + if (!keyValuePair.Key.Contains("reverse_proxy") && !keyValuePair.Key.Contains("tls.dns")) + { + if (labels.ContainsKey($"{keyValuePair.Key}.tls.dns")) + { + dnsRange.Add(keyValuePair.Key); + } + } + } + } + + return dnsRange; + } + + + private async Task> GetDomains(ContainerListResponse container) + { + var domains = new List(); + var labels = container.Labels; + + + var dnsRange = GetDnsRange(labels); + + foreach (var range in dnsRange) + { + foreach (var domainLabel in labels[range].Split(" ")) + { + var domain = new Domain(); + domain.DomainString = domainLabel; + domain.Key = labels[range + ".tls.dns"]; + domains.Add(domain); + } + } + return domains; + } + + +} \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Services/TimerService.cs b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Services/TimerService.cs new file mode 100644 index 0000000..a9237d3 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Services/TimerService.cs @@ -0,0 +1,44 @@ +using System; +using System.Threading; +using DDNSUpdater.Interfaces; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +namespace DDNSUpdater.Services; + +public class TimerService : ITimerService +{ + private PeriodicTimer _timer; + private readonly ILogger _logger; + private readonly IServiceScopeFactory _factory; + private readonly int intervalSeconds; + + public TimerService(ILogger logger,IServiceScopeFactory factory, IConfiguration configuration) + { + _logger = logger; + _factory = factory; + _timer = new PeriodicTimer(TimeSpan.FromSeconds(configuration.GetValue("TimerIntervalSeconds"))); + } + + + private async Task Timer() + { + _logger.LogInformation("Timer callback executed at " + DateTime.Now); + using var asyncScope = _factory.CreateAsyncScope(); + var ddnsService = asyncScope.ServiceProvider.GetRequiredService(); + var dockerService = asyncScope.ServiceProvider.GetRequiredService(); + + bool changed = await dockerService.UpdateDomainList(); + await ddnsService.Update(changed); + } + public async Task Start() + { + _logger.LogInformation("Timer service started."); + + while (await _timer.WaitForNextTickAsync()) + { + await Timer(); + } + } +} \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/appsettings.json b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/appsettings.json new file mode 100644 index 0000000..8cd81d0 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/appsettings.json @@ -0,0 +1,16 @@ +{ + "Logging": { + "ColorConsole": { + "LogLevelToColorMap": { + "Information": "DarkGreen", + "Warning": "Cyan", + "Error": "Red" + } + } + }, + "TimerIntervalSeconds": 30, + "APIKey": "", + "Domains": [ + "*.Test.de" + ] +} diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/DDNSUpdater b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/DDNSUpdater new file mode 100644 index 0000000..cc4bb41 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/DDNSUpdater differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/DDNSUpdater.deps.json b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/DDNSUpdater.deps.json new file mode 100644 index 0000000..6f4fd3b --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/DDNSUpdater.deps.json @@ -0,0 +1,575 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v7.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v7.0": { + "DDNSUpdater/1.0.0": { + "dependencies": { + "Docker.DotNet": "3.125.15", + "Microsoft.EntityFrameworkCore.InMemory": "7.0.10", + "Microsoft.Extensions.Configuration": "7.0.0", + "Microsoft.Extensions.Configuration.Json": "7.0.0", + "Microsoft.Extensions.DependencyInjection": "7.0.0", + "Microsoft.Extensions.Logging": "7.0.0", + "Microsoft.Extensions.Logging.Console": "7.0.0", + "Newtonsoft.Json": "13.0.2", + "RestSharp": "108.0.3", + "Spectre.Console": "0.46.0" + }, + "runtime": { + "DDNSUpdater.dll": {} + } + }, + "Docker.DotNet/3.125.15": { + "dependencies": { + "Newtonsoft.Json": "13.0.2", + "System.Buffers": "4.5.1", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "runtime": { + "lib/netstandard2.1/Docker.DotNet.dll": { + "assemblyVersion": "3.125.0.0", + "fileVersion": "3.125.15.1" + } + } + }, + "Microsoft.EntityFrameworkCore/7.0.10": { + "dependencies": { + "Microsoft.EntityFrameworkCore.Abstractions": "7.0.10", + "Microsoft.EntityFrameworkCore.Analyzers": "7.0.10", + "Microsoft.Extensions.Caching.Memory": "7.0.0", + "Microsoft.Extensions.DependencyInjection": "7.0.0", + "Microsoft.Extensions.Logging": "7.0.0" + }, + "runtime": { + "lib/net6.0/Microsoft.EntityFrameworkCore.dll": { + "assemblyVersion": "7.0.10.0", + "fileVersion": "7.0.1023.36204" + } + } + }, + "Microsoft.EntityFrameworkCore.Abstractions/7.0.10": { + "runtime": { + "lib/net6.0/Microsoft.EntityFrameworkCore.Abstractions.dll": { + "assemblyVersion": "7.0.10.0", + "fileVersion": "7.0.1023.36204" + } + } + }, + "Microsoft.EntityFrameworkCore.Analyzers/7.0.10": {}, + "Microsoft.EntityFrameworkCore.InMemory/7.0.10": { + "dependencies": { + "Microsoft.EntityFrameworkCore": "7.0.10" + }, + "runtime": { + "lib/net6.0/Microsoft.EntityFrameworkCore.InMemory.dll": { + "assemblyVersion": "7.0.10.0", + "fileVersion": "7.0.1023.36204" + } + } + }, + "Microsoft.Extensions.Caching.Abstractions/7.0.0": { + "dependencies": { + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Caching.Abstractions.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "Microsoft.Extensions.Caching.Memory/7.0.0": { + "dependencies": { + "Microsoft.Extensions.Caching.Abstractions": "7.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", + "Microsoft.Extensions.Logging.Abstractions": "7.0.0", + "Microsoft.Extensions.Options": "7.0.0", + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Caching.Memory.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "Microsoft.Extensions.Configuration/7.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Configuration.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "Microsoft.Extensions.Configuration.Abstractions/7.0.0": { + "dependencies": { + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "Microsoft.Extensions.Configuration.Binder/7.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "7.0.0" + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Configuration.Binder.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "Microsoft.Extensions.Configuration.FileExtensions/7.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "7.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", + "Microsoft.Extensions.FileProviders.Physical": "7.0.0", + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Configuration.FileExtensions.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "Microsoft.Extensions.Configuration.Json/7.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "7.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", + "Microsoft.Extensions.Configuration.FileExtensions": "7.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", + "System.Text.Json": "7.0.0" + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Configuration.Json.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "Microsoft.Extensions.DependencyInjection/7.0.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0" + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.DependencyInjection.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/7.0.0": { + "runtime": { + "lib/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "Microsoft.Extensions.FileProviders.Abstractions/7.0.0": { + "dependencies": { + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "Microsoft.Extensions.FileProviders.Physical/7.0.0": { + "dependencies": { + "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", + "Microsoft.Extensions.FileSystemGlobbing": "7.0.0", + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.FileProviders.Physical.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "Microsoft.Extensions.FileSystemGlobbing/7.0.0": { + "runtime": { + "lib/net7.0/Microsoft.Extensions.FileSystemGlobbing.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "Microsoft.Extensions.Logging/7.0.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "7.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", + "Microsoft.Extensions.Logging.Abstractions": "7.0.0", + "Microsoft.Extensions.Options": "7.0.0" + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Logging.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "Microsoft.Extensions.Logging.Abstractions/7.0.0": { + "runtime": { + "lib/net7.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "Microsoft.Extensions.Logging.Configuration/7.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "7.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", + "Microsoft.Extensions.Configuration.Binder": "7.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", + "Microsoft.Extensions.Logging": "7.0.0", + "Microsoft.Extensions.Logging.Abstractions": "7.0.0", + "Microsoft.Extensions.Options": "7.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "7.0.0" + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Logging.Configuration.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "Microsoft.Extensions.Logging.Console/7.0.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", + "Microsoft.Extensions.Logging": "7.0.0", + "Microsoft.Extensions.Logging.Abstractions": "7.0.0", + "Microsoft.Extensions.Logging.Configuration": "7.0.0", + "Microsoft.Extensions.Options": "7.0.0", + "System.Text.Json": "7.0.0" + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Logging.Console.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "Microsoft.Extensions.Options/7.0.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Options.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "Microsoft.Extensions.Options.ConfigurationExtensions/7.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", + "Microsoft.Extensions.Configuration.Binder": "7.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", + "Microsoft.Extensions.Options": "7.0.0", + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "Microsoft.Extensions.Primitives/7.0.0": { + "runtime": { + "lib/net7.0/Microsoft.Extensions.Primitives.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "Newtonsoft.Json/13.0.2": { + "runtime": { + "lib/net6.0/Newtonsoft.Json.dll": { + "assemblyVersion": "13.0.0.0", + "fileVersion": "13.0.2.27524" + } + } + }, + "RestSharp/108.0.3": { + "runtime": { + "lib/net6.0/RestSharp.dll": { + "assemblyVersion": "108.0.3.0", + "fileVersion": "108.0.3.0" + } + } + }, + "Spectre.Console/0.46.0": { + "dependencies": { + "System.Memory": "4.5.5" + }, + "runtime": { + "lib/net7.0/Spectre.Console.dll": { + "assemblyVersion": "0.0.0.0", + "fileVersion": "0.46.0.0" + } + } + }, + "System.Buffers/4.5.1": {}, + "System.Memory/4.5.5": {}, + "System.Text.Encodings.Web/7.0.0": {}, + "System.Text.Json/7.0.0": { + "dependencies": { + "System.Text.Encodings.Web": "7.0.0" + } + }, + "System.Threading.Tasks.Extensions/4.5.4": {} + } + }, + "libraries": { + "DDNSUpdater/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Docker.DotNet/3.125.15": { + "type": "package", + "serviceable": true, + "sha512": "sha512-XN8FKxVv8Mjmwu104/Hl9lM61pLY675s70gzwSj8KR5pwblo8HfWLcCuinh9kYsqujBkMH4HVRCEcRuU6al4BQ==", + "path": "docker.dotnet/3.125.15", + "hashPath": "docker.dotnet.3.125.15.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore/7.0.10": { + "type": "package", + "serviceable": true, + "sha512": "sha512-24NbXJqJ/x8u88/agqeb1pLdAF9+9StDLA36+P/3g5xsJPOaB2GxXn7epR8dWpZTgHsNZ7cvBMxBgfFmF+xZlg==", + "path": "microsoft.entityframeworkcore/7.0.10", + "hashPath": "microsoft.entityframeworkcore.7.0.10.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Abstractions/7.0.10": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Z/lDWmGLiT9uNQrp6UXTKZxofSmAKQCiKOz98FDscTbfAGgBXE3DTTqRsPMc8HFIVVSNANSiFRz3JyLg07HN9Q==", + "path": "microsoft.entityframeworkcore.abstractions/7.0.10", + "hashPath": "microsoft.entityframeworkcore.abstractions.7.0.10.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Analyzers/7.0.10": { + "type": "package", + "serviceable": true, + "sha512": "sha512-+8NVNpyJTzW6nNh/7RGfldf+mbeboVcn+X1tD8kMBCEJswuy3RqM/qecEEfOfTcWLliZExPMaHwOwtHO6RMpdA==", + "path": "microsoft.entityframeworkcore.analyzers/7.0.10", + "hashPath": "microsoft.entityframeworkcore.analyzers.7.0.10.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.InMemory/7.0.10": { + "type": "package", + "serviceable": true, + "sha512": "sha512-WeUjWx80ZVQVXkHuEIO4kOCKUHo6C4RdB1bJZLSngLWqwrQrMTCZE90IGBz0330GXmXKbL4LyJO/rXO/w7cRNA==", + "path": "microsoft.entityframeworkcore.inmemory/7.0.10", + "hashPath": "microsoft.entityframeworkcore.inmemory.7.0.10.nupkg.sha512" + }, + "Microsoft.Extensions.Caching.Abstractions/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-IeimUd0TNbhB4ded3AbgBLQv2SnsiVugDyGV1MvspQFVlA07nDC7Zul7kcwH5jWN3JiTcp/ySE83AIJo8yfKjg==", + "path": "microsoft.extensions.caching.abstractions/7.0.0", + "hashPath": "microsoft.extensions.caching.abstractions.7.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Caching.Memory/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-xpidBs2KCE2gw1JrD0quHE72kvCaI3xFql5/Peb2GRtUuZX+dYPoK/NTdVMiM67Svym0M0Df9A3xyU0FbMQhHw==", + "path": "microsoft.extensions.caching.memory/7.0.0", + "hashPath": "microsoft.extensions.caching.memory.7.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-tldQUBWt/xeH2K7/hMPPo5g8zuLc3Ro9I5d4o/XrxvxOCA2EZBtW7bCHHTc49fcBtvB8tLAb/Qsmfrq+2SJ4vA==", + "path": "microsoft.extensions.configuration/7.0.0", + "hashPath": "microsoft.extensions.configuration.7.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Abstractions/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-f34u2eaqIjNO9YLHBz8rozVZ+TcFiFs0F3r7nUJd7FRkVSxk8u4OpoK226mi49MwexHOR2ibP9MFvRUaLilcQQ==", + "path": "microsoft.extensions.configuration.abstractions/7.0.0", + "hashPath": "microsoft.extensions.configuration.abstractions.7.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Binder/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-tgU4u7bZsoS9MKVRiotVMAwHtbREHr5/5zSEV+JPhg46+ox47Au84E3D2IacAaB0bk5ePNaNieTlPrfjbbRJkg==", + "path": "microsoft.extensions.configuration.binder/7.0.0", + "hashPath": "microsoft.extensions.configuration.binder.7.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.FileExtensions/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-xk2lRJ1RDuqe57BmgvRPyCt6zyePKUmvT6iuXqiHR+/OIIgWVR8Ff5k2p6DwmqY8a17hx/OnrekEhziEIeQP6Q==", + "path": "microsoft.extensions.configuration.fileextensions/7.0.0", + "hashPath": "microsoft.extensions.configuration.fileextensions.7.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Json/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LDNYe3uw76W35Jci+be4LDf2lkQZe0A7EEYQVChFbc509CpZ4Iupod8li4PUXPBhEUOFI/rlQNf5xkzJRQGvtA==", + "path": "microsoft.extensions.configuration.json/7.0.0", + "hashPath": "microsoft.extensions.configuration.json.7.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==", + "path": "microsoft.extensions.dependencyinjection/7.0.0", + "hashPath": "microsoft.extensions.dependencyinjection.7.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw==", + "path": "microsoft.extensions.dependencyinjection.abstractions/7.0.0", + "hashPath": "microsoft.extensions.dependencyinjection.abstractions.7.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.FileProviders.Abstractions/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-NyawiW9ZT/liQb34k9YqBSNPLuuPkrjMgQZ24Y/xXX1RoiBkLUdPMaQTmxhZ5TYu8ZKZ9qayzil75JX95vGQUg==", + "path": "microsoft.extensions.fileproviders.abstractions/7.0.0", + "hashPath": "microsoft.extensions.fileproviders.abstractions.7.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.FileProviders.Physical/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-K8D2MTR+EtzkbZ8z80LrG7Ur64R7ZZdRLt1J5cgpc/pUWl0C6IkAUapPuK28oionHueCPELUqq0oYEvZfalNdg==", + "path": "microsoft.extensions.fileproviders.physical/7.0.0", + "hashPath": "microsoft.extensions.fileproviders.physical.7.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.FileSystemGlobbing/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-2jONjKHiF+E92ynz2ZFcr9OvxIw+rTGMPEH+UZGeHTEComVav93jQUWGkso8yWwVBcEJGcNcZAaqY01FFJcj7w==", + "path": "microsoft.extensions.filesystemglobbing/7.0.0", + "hashPath": "microsoft.extensions.filesystemglobbing.7.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Logging/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==", + "path": "microsoft.extensions.logging/7.0.0", + "hashPath": "microsoft.extensions.logging.7.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Abstractions/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw==", + "path": "microsoft.extensions.logging.abstractions/7.0.0", + "hashPath": "microsoft.extensions.logging.abstractions.7.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Configuration/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-FLDA0HcffKA8ycoDQLJuCNGIE42cLWPxgdQGRBaSzZrYTkMBjnf9zrr8pGT06psLq9Q+RKWmmZczQ9bCrXEBcA==", + "path": "microsoft.extensions.logging.configuration/7.0.0", + "hashPath": "microsoft.extensions.logging.configuration.7.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Console/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-qt5n8bHLZPUfuRnFxJKW5q9ZwOTncdh96rtWzWpX3Y/064MlxzCSw2ELF5Jlwdo+Y4wK3I47NmUTFsV7Sg8rqg==", + "path": "microsoft.extensions.logging.console/7.0.0", + "hashPath": "microsoft.extensions.logging.console.7.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Options/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==", + "path": "microsoft.extensions.options/7.0.0", + "hashPath": "microsoft.extensions.options.7.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Options.ConfigurationExtensions/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-95UnxZkkFdXxF6vSrtJsMHCzkDeSMuUWGs2hDT54cX+U5eVajrCJ3qLyQRW+CtpTt5OJ8bmTvpQVHu1DLhH+cA==", + "path": "microsoft.extensions.options.configurationextensions/7.0.0", + "hashPath": "microsoft.extensions.options.configurationextensions.7.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Primitives/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==", + "path": "microsoft.extensions.primitives/7.0.0", + "hashPath": "microsoft.extensions.primitives.7.0.0.nupkg.sha512" + }, + "Newtonsoft.Json/13.0.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-R2pZ3B0UjeyHShm9vG+Tu0EBb2lC8b0dFzV9gVn50ofHXh9Smjk6kTn7A/FdAsC8B5cKib1OnGYOXxRBz5XQDg==", + "path": "newtonsoft.json/13.0.2", + "hashPath": "newtonsoft.json.13.0.2.nupkg.sha512" + }, + "RestSharp/108.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-phq1AkVhqVXHZxvWDV4fJEJKCR5OHNFUGx2Ix8o5EFShS6654oZhth4X2RWvaU/W7UexIswW0T+lTirxfLU2Ow==", + "path": "restsharp/108.0.3", + "hashPath": "restsharp.108.0.3.nupkg.sha512" + }, + "Spectre.Console/0.46.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-qd2OMEGxfQW1KLuQj56KKHkIK6eB/IUF/AET5CRl/efROHGsvBehx9shfkL0HgJEHLCwRiR7foWi4/LkdPk18g==", + "path": "spectre.console/0.46.0", + "hashPath": "spectre.console.0.46.0.nupkg.sha512" + }, + "System.Buffers/4.5.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==", + "path": "system.buffers/4.5.1", + "hashPath": "system.buffers.4.5.1.nupkg.sha512" + }, + "System.Memory/4.5.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==", + "path": "system.memory/4.5.5", + "hashPath": "system.memory.4.5.5.nupkg.sha512" + }, + "System.Text.Encodings.Web/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==", + "path": "system.text.encodings.web/7.0.0", + "hashPath": "system.text.encodings.web.7.0.0.nupkg.sha512" + }, + "System.Text.Json/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==", + "path": "system.text.json/7.0.0", + "hashPath": "system.text.json.7.0.0.nupkg.sha512" + }, + "System.Threading.Tasks.Extensions/4.5.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "path": "system.threading.tasks.extensions/4.5.4", + "hashPath": "system.threading.tasks.extensions.4.5.4.nupkg.sha512" + } + } +} \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/DDNSUpdater.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/DDNSUpdater.dll new file mode 100644 index 0000000..c4a323e Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/DDNSUpdater.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/DDNSUpdater.pdb b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/DDNSUpdater.pdb new file mode 100644 index 0000000..384a3d4 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/DDNSUpdater.pdb differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/DDNSUpdater.runtimeconfig.json b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/DDNSUpdater.runtimeconfig.json new file mode 100644 index 0000000..8872219 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/DDNSUpdater.runtimeconfig.json @@ -0,0 +1,12 @@ +{ + "runtimeOptions": { + "tfm": "net7.0", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "7.0.0" + }, + "configProperties": { + "System.Reflection.NullabilityInfoContext.IsSupported": true + } + } +} \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Docker.DotNet.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Docker.DotNet.dll new file mode 100644 index 0000000..ebad5ab Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Docker.DotNet.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.Abstractions.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.Abstractions.dll new file mode 100644 index 0000000..8751326 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.Abstractions.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.InMemory.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.InMemory.dll new file mode 100644 index 0000000..1b71053 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.InMemory.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.dll new file mode 100644 index 0000000..e4b5a97 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Caching.Abstractions.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Caching.Abstractions.dll new file mode 100644 index 0000000..1ba13a8 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Caching.Abstractions.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Caching.Memory.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Caching.Memory.dll new file mode 100644 index 0000000..c15d16e Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Caching.Memory.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Configuration.Abstractions.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Configuration.Abstractions.dll new file mode 100644 index 0000000..058b124 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Configuration.Abstractions.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Configuration.Binder.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Configuration.Binder.dll new file mode 100644 index 0000000..587cf85 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Configuration.Binder.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Configuration.FileExtensions.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Configuration.FileExtensions.dll new file mode 100644 index 0000000..def889a Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Configuration.FileExtensions.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Configuration.Json.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Configuration.Json.dll new file mode 100644 index 0000000..e8bdcc1 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Configuration.Json.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Configuration.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Configuration.dll new file mode 100644 index 0000000..fd14a98 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Configuration.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll new file mode 100644 index 0000000..048ba41 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.DependencyInjection.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.DependencyInjection.dll new file mode 100644 index 0000000..2dcd31b Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.DependencyInjection.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.FileProviders.Abstractions.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.FileProviders.Abstractions.dll new file mode 100644 index 0000000..dc9b7ee Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.FileProviders.Abstractions.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.FileProviders.Physical.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.FileProviders.Physical.dll new file mode 100644 index 0000000..b186402 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.FileProviders.Physical.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.FileSystemGlobbing.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.FileSystemGlobbing.dll new file mode 100644 index 0000000..683ac38 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.FileSystemGlobbing.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Logging.Abstractions.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Logging.Abstractions.dll new file mode 100644 index 0000000..41909d2 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Logging.Abstractions.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Logging.Configuration.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Logging.Configuration.dll new file mode 100644 index 0000000..6b60164 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Logging.Configuration.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Logging.Console.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Logging.Console.dll new file mode 100644 index 0000000..c271287 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Logging.Console.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Logging.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Logging.dll new file mode 100644 index 0000000..f21b68b Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Logging.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll new file mode 100644 index 0000000..7473029 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Options.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Options.dll new file mode 100644 index 0000000..1aa2d3f Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Options.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Primitives.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Primitives.dll new file mode 100644 index 0000000..9953143 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Primitives.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Newtonsoft.Json.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Newtonsoft.Json.dll new file mode 100644 index 0000000..8ba89bf Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Newtonsoft.Json.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/RestSharp.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/RestSharp.dll new file mode 100644 index 0000000..8a755a1 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/RestSharp.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Spectre.Console.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Spectre.Console.dll new file mode 100644 index 0000000..8f7980d Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Spectre.Console.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/appsettings.json b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/appsettings.json new file mode 100644 index 0000000..8cd81d0 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/appsettings.json @@ -0,0 +1,16 @@ +{ + "Logging": { + "ColorConsole": { + "LogLevelToColorMap": { + "Information": "DarkGreen", + "Warning": "Cyan", + "Error": "Red" + } + } + }, + "TimerIntervalSeconds": 30, + "APIKey": "", + "Domains": [ + "*.Test.de" + ] +} diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/DDNSUpdater.csproj.nuget.dgspec.json b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/DDNSUpdater.csproj.nuget.dgspec.json new file mode 100644 index 0000000..158c8de --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/DDNSUpdater.csproj.nuget.dgspec.json @@ -0,0 +1,103 @@ +{ + "format": 1, + "restore": { + "/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/DDNSUpdater.csproj": {} + }, + "projects": { + "/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/DDNSUpdater.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/DDNSUpdater.csproj", + "projectName": "DDNSUpdater", + "projectPath": "/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/DDNSUpdater.csproj", + "packagesPath": "/root/.nuget/packages/", + "outputPath": "/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/root/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net7.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net7.0": { + "targetAlias": "net7.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net7.0": { + "targetAlias": "net7.0", + "dependencies": { + "Docker.DotNet": { + "target": "Package", + "version": "[3.125.15, )" + }, + "Microsoft.EntityFrameworkCore.InMemory": { + "target": "Package", + "version": "[7.0.10, )" + }, + "Microsoft.Extensions.Configuration": { + "target": "Package", + "version": "[7.0.0, )" + }, + "Microsoft.Extensions.Configuration.Json": { + "target": "Package", + "version": "[7.0.0, )" + }, + "Microsoft.Extensions.DependencyInjection": { + "target": "Package", + "version": "[7.0.0, )" + }, + "Microsoft.Extensions.Logging": { + "target": "Package", + "version": "[7.0.0, )" + }, + "Microsoft.Extensions.Logging.Console": { + "target": "Package", + "version": "[7.0.0, )" + }, + "Newtonsoft.Json": { + "target": "Package", + "version": "[13.0.2, )" + }, + "RestSharp": { + "target": "Package", + "version": "[108.0.3, )" + }, + "Spectre.Console": { + "target": "Package", + "version": "[0.46.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/7.0.110/RuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/DDNSUpdater.csproj.nuget.g.props b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/DDNSUpdater.csproj.nuget.g.props new file mode 100644 index 0000000..902fe7c --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/DDNSUpdater.csproj.nuget.g.props @@ -0,0 +1,18 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + /root/.nuget/packages/ + /root/.nuget/packages/ + PackageReference + 6.6.0 + + + + + + + + \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/DDNSUpdater.csproj.nuget.g.targets b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/DDNSUpdater.csproj.nuget.g.targets new file mode 100644 index 0000000..eab753f --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/DDNSUpdater.csproj.nuget.g.targets @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs new file mode 100644 index 0000000..4257f4b --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v7.0", FrameworkDisplayName = ".NET 7.0")] diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.AssemblyInfo.cs b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.AssemblyInfo.cs new file mode 100644 index 0000000..98156d1 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.AssemblyInfo.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("DDNSUpdater")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("DDNSUpdater")] +[assembly: System.Reflection.AssemblyTitleAttribute("DDNSUpdater")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.AssemblyInfoInputs.cache b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.AssemblyInfoInputs.cache new file mode 100644 index 0000000..d469559 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +3cc15af2642228b149b1d39ba430dc87e6f1bfda diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.GeneratedMSBuildEditorConfig.editorconfig b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..097fca0 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,11 @@ +is_global = true +build_property.TargetFramework = net7.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = DDNSUpdater +build_property.ProjectDir = /root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.GlobalUsings.g.cs b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.GlobalUsings.g.cs new file mode 100644 index 0000000..8578f3d --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading; +global using global::System.Threading.Tasks; diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.assets.cache b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.assets.cache new file mode 100644 index 0000000..5a45a68 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.assets.cache differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.csproj.AssemblyReference.cache b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.csproj.AssemblyReference.cache new file mode 100644 index 0000000..8425445 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.csproj.AssemblyReference.cache differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.csproj.CopyComplete b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.csproj.CopyComplete new file mode 100644 index 0000000..e69de29 diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.csproj.CoreCompileInputs.cache b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..f5205d9 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +8d2927d76c460de3b794a5ecc0c5bc2aeeac0a39 diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.csproj.FileListAbsolute.txt b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..a610acb --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.csproj.FileListAbsolute.txt @@ -0,0 +1,43 @@ +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/appsettings.json +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/DDNSUpdater +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/DDNSUpdater.deps.json +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/DDNSUpdater.runtimeconfig.json +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/DDNSUpdater.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/DDNSUpdater.pdb +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.Abstractions.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.InMemory.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Caching.Abstractions.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Caching.Memory.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Configuration.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Configuration.Abstractions.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Configuration.Binder.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Configuration.FileExtensions.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Configuration.Json.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.DependencyInjection.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.FileProviders.Abstractions.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.FileProviders.Physical.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.FileSystemGlobbing.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Logging.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Logging.Abstractions.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Logging.Configuration.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Logging.Console.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Options.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Microsoft.Extensions.Primitives.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Newtonsoft.Json.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/RestSharp.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Spectre.Console.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.csproj.AssemblyReference.cache +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.GeneratedMSBuildEditorConfig.editorconfig +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.AssemblyInfoInputs.cache +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.AssemblyInfo.cs +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.csproj.CoreCompileInputs.cache +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.csproj.CopyComplete +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/refint/DDNSUpdater.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.pdb +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.genruntimeconfig.cache +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/ref/DDNSUpdater.dll +/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/bin/Debug/net7.0/Docker.DotNet.dll diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.dll new file mode 100644 index 0000000..c4a323e Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.genruntimeconfig.cache b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.genruntimeconfig.cache new file mode 100644 index 0000000..4a2c2a2 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.genruntimeconfig.cache @@ -0,0 +1 @@ +94e88e2f8a0c3767cba8b5f46557283ad8d505bc diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.pdb b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.pdb new file mode 100644 index 0000000..384a3d4 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/DDNSUpdater.pdb differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/apphost b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/apphost new file mode 100644 index 0000000..cc4bb41 Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/apphost differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/ref/DDNSUpdater.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/ref/DDNSUpdater.dll new file mode 100644 index 0000000..27671cc Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/ref/DDNSUpdater.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/refint/DDNSUpdater.dll b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/refint/DDNSUpdater.dll new file mode 100644 index 0000000..27671cc Binary files /dev/null and b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/Debug/net7.0/refint/DDNSUpdater.dll differ diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/project.assets.json b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/project.assets.json new file mode 100644 index 0000000..9fa8ca8 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/project.assets.json @@ -0,0 +1,1593 @@ +{ + "version": 3, + "targets": { + "net7.0": { + "Docker.DotNet/3.125.15": { + "type": "package", + "dependencies": { + "Newtonsoft.Json": "13.0.1", + "System.Buffers": "4.5.1", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/netstandard2.1/Docker.DotNet.dll": { + "related": ".pdb" + } + }, + "runtime": { + "lib/netstandard2.1/Docker.DotNet.dll": { + "related": ".pdb" + } + } + }, + "Microsoft.EntityFrameworkCore/7.0.10": { + "type": "package", + "dependencies": { + "Microsoft.EntityFrameworkCore.Abstractions": "7.0.10", + "Microsoft.EntityFrameworkCore.Analyzers": "7.0.10", + "Microsoft.Extensions.Caching.Memory": "7.0.0", + "Microsoft.Extensions.DependencyInjection": "7.0.0", + "Microsoft.Extensions.Logging": "7.0.0" + }, + "compile": { + "lib/net6.0/Microsoft.EntityFrameworkCore.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/Microsoft.EntityFrameworkCore.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/Microsoft.EntityFrameworkCore.props": {} + } + }, + "Microsoft.EntityFrameworkCore.Abstractions/7.0.10": { + "type": "package", + "compile": { + "lib/net6.0/Microsoft.EntityFrameworkCore.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/Microsoft.EntityFrameworkCore.Abstractions.dll": { + "related": ".xml" + } + } + }, + "Microsoft.EntityFrameworkCore.Analyzers/7.0.10": { + "type": "package", + "compile": { + "lib/netstandard2.0/_._": {} + }, + "runtime": { + "lib/netstandard2.0/_._": {} + } + }, + "Microsoft.EntityFrameworkCore.InMemory/7.0.10": { + "type": "package", + "dependencies": { + "Microsoft.EntityFrameworkCore": "7.0.10" + }, + "compile": { + "lib/net6.0/Microsoft.EntityFrameworkCore.InMemory.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/Microsoft.EntityFrameworkCore.InMemory.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Extensions.Caching.Abstractions/7.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.Extensions.Caching.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Caching.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Caching.Memory/7.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Caching.Abstractions": "7.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", + "Microsoft.Extensions.Logging.Abstractions": "7.0.0", + "Microsoft.Extensions.Options": "7.0.0", + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.Extensions.Caching.Memory.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Caching.Memory.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Configuration/7.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.Extensions.Configuration.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Configuration.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Configuration.Abstractions/7.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Configuration.Binder/7.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.Extensions.Configuration.Binder.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Configuration.Binder.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Configuration.FileExtensions/7.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration": "7.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", + "Microsoft.Extensions.FileProviders.Physical": "7.0.0", + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.Extensions.Configuration.FileExtensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Configuration.FileExtensions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Configuration.Json/7.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration": "7.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", + "Microsoft.Extensions.Configuration.FileExtensions": "7.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", + "System.Text.Json": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.Extensions.Configuration.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Configuration.Json.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.DependencyInjection/7.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.Extensions.DependencyInjection.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.DependencyInjection.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.FileProviders.Abstractions/7.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.FileProviders.Physical/7.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", + "Microsoft.Extensions.FileSystemGlobbing": "7.0.0", + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.Extensions.FileProviders.Physical.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.FileProviders.Physical.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.FileSystemGlobbing/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/Microsoft.Extensions.FileSystemGlobbing.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.FileSystemGlobbing.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Logging/7.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "7.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", + "Microsoft.Extensions.Logging.Abstractions": "7.0.0", + "Microsoft.Extensions.Options": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.Extensions.Logging.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Logging.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Logging.Abstractions/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/Microsoft.Extensions.Logging.Abstractions.targets": {} + } + }, + "Microsoft.Extensions.Logging.Configuration/7.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration": "7.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", + "Microsoft.Extensions.Configuration.Binder": "7.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", + "Microsoft.Extensions.Logging": "7.0.0", + "Microsoft.Extensions.Logging.Abstractions": "7.0.0", + "Microsoft.Extensions.Options": "7.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.Extensions.Logging.Configuration.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Logging.Configuration.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Logging.Console/7.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", + "Microsoft.Extensions.Logging": "7.0.0", + "Microsoft.Extensions.Logging.Abstractions": "7.0.0", + "Microsoft.Extensions.Logging.Configuration": "7.0.0", + "Microsoft.Extensions.Options": "7.0.0", + "System.Text.Json": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.Extensions.Logging.Console.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Logging.Console.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Options/7.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.Extensions.Options.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Options.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Options.ConfigurationExtensions/7.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", + "Microsoft.Extensions.Configuration.Binder": "7.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", + "Microsoft.Extensions.Options": "7.0.0", + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Primitives/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/Microsoft.Extensions.Primitives.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Primitives.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Newtonsoft.Json/13.0.2": { + "type": "package", + "compile": { + "lib/net6.0/Newtonsoft.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/Newtonsoft.Json.dll": { + "related": ".xml" + } + } + }, + "RestSharp/108.0.3": { + "type": "package", + "compile": { + "lib/net6.0/RestSharp.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/RestSharp.dll": { + "related": ".xml" + } + } + }, + "Spectre.Console/0.46.0": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.5" + }, + "compile": { + "lib/net7.0/Spectre.Console.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Spectre.Console.dll": { + "related": ".xml" + } + } + }, + "System.Buffers/4.5.1": { + "type": "package", + "compile": { + "ref/netcoreapp2.0/_._": {} + }, + "runtime": { + "lib/netcoreapp2.0/_._": {} + } + }, + "System.Memory/4.5.5": { + "type": "package", + "compile": { + "ref/netcoreapp2.1/_._": {} + }, + "runtime": { + "lib/netcoreapp2.1/_._": {} + } + }, + "System.Text.Encodings.Web/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/System.Text.Encodings.Web.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Text.Encodings.Web.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + }, + "runtimeTargets": { + "runtimes/browser/lib/net7.0/System.Text.Encodings.Web.dll": { + "assetType": "runtime", + "rid": "browser" + } + } + }, + "System.Text.Json/7.0.0": { + "type": "package", + "dependencies": { + "System.Text.Encodings.Web": "7.0.0" + }, + "compile": { + "lib/net7.0/System.Text.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Text.Json.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/System.Text.Json.targets": {} + } + }, + "System.Threading.Tasks.Extensions/4.5.4": { + "type": "package", + "compile": { + "ref/netcoreapp2.1/_._": {} + }, + "runtime": { + "lib/netcoreapp2.1/_._": {} + } + } + } + }, + "libraries": { + "Docker.DotNet/3.125.15": { + "sha512": "XN8FKxVv8Mjmwu104/Hl9lM61pLY675s70gzwSj8KR5pwblo8HfWLcCuinh9kYsqujBkMH4HVRCEcRuU6al4BQ==", + "type": "package", + "path": "docker.dotnet/3.125.15", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE", + "docker.dotnet.3.125.15.nupkg.sha512", + "docker.dotnet.nuspec", + "icon.png", + "lib/netstandard2.0/Docker.DotNet.dll", + "lib/netstandard2.0/Docker.DotNet.pdb", + "lib/netstandard2.1/Docker.DotNet.dll", + "lib/netstandard2.1/Docker.DotNet.pdb" + ] + }, + "Microsoft.EntityFrameworkCore/7.0.10": { + "sha512": "24NbXJqJ/x8u88/agqeb1pLdAF9+9StDLA36+P/3g5xsJPOaB2GxXn7epR8dWpZTgHsNZ7cvBMxBgfFmF+xZlg==", + "type": "package", + "path": "microsoft.entityframeworkcore/7.0.10", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "buildTransitive/net6.0/Microsoft.EntityFrameworkCore.props", + "lib/net6.0/Microsoft.EntityFrameworkCore.dll", + "lib/net6.0/Microsoft.EntityFrameworkCore.xml", + "microsoft.entityframeworkcore.7.0.10.nupkg.sha512", + "microsoft.entityframeworkcore.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Abstractions/7.0.10": { + "sha512": "Z/lDWmGLiT9uNQrp6UXTKZxofSmAKQCiKOz98FDscTbfAGgBXE3DTTqRsPMc8HFIVVSNANSiFRz3JyLg07HN9Q==", + "type": "package", + "path": "microsoft.entityframeworkcore.abstractions/7.0.10", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "lib/net6.0/Microsoft.EntityFrameworkCore.Abstractions.dll", + "lib/net6.0/Microsoft.EntityFrameworkCore.Abstractions.xml", + "microsoft.entityframeworkcore.abstractions.7.0.10.nupkg.sha512", + "microsoft.entityframeworkcore.abstractions.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Analyzers/7.0.10": { + "sha512": "+8NVNpyJTzW6nNh/7RGfldf+mbeboVcn+X1tD8kMBCEJswuy3RqM/qecEEfOfTcWLliZExPMaHwOwtHO6RMpdA==", + "type": "package", + "path": "microsoft.entityframeworkcore.analyzers/7.0.10", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "analyzers/dotnet/cs/Microsoft.EntityFrameworkCore.Analyzers.dll", + "lib/netstandard2.0/_._", + "microsoft.entityframeworkcore.analyzers.7.0.10.nupkg.sha512", + "microsoft.entityframeworkcore.analyzers.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.InMemory/7.0.10": { + "sha512": "WeUjWx80ZVQVXkHuEIO4kOCKUHo6C4RdB1bJZLSngLWqwrQrMTCZE90IGBz0330GXmXKbL4LyJO/rXO/w7cRNA==", + "type": "package", + "path": "microsoft.entityframeworkcore.inmemory/7.0.10", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "lib/net6.0/Microsoft.EntityFrameworkCore.InMemory.dll", + "lib/net6.0/Microsoft.EntityFrameworkCore.InMemory.xml", + "microsoft.entityframeworkcore.inmemory.7.0.10.nupkg.sha512", + "microsoft.entityframeworkcore.inmemory.nuspec" + ] + }, + "Microsoft.Extensions.Caching.Abstractions/7.0.0": { + "sha512": "IeimUd0TNbhB4ded3AbgBLQv2SnsiVugDyGV1MvspQFVlA07nDC7Zul7kcwH5jWN3JiTcp/ySE83AIJo8yfKjg==", + "type": "package", + "path": "microsoft.extensions.caching.abstractions/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Caching.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Caching.Abstractions.targets", + "lib/net462/Microsoft.Extensions.Caching.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Caching.Abstractions.xml", + "lib/net6.0/Microsoft.Extensions.Caching.Abstractions.dll", + "lib/net6.0/Microsoft.Extensions.Caching.Abstractions.xml", + "lib/net7.0/Microsoft.Extensions.Caching.Abstractions.dll", + "lib/net7.0/Microsoft.Extensions.Caching.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.xml", + "microsoft.extensions.caching.abstractions.7.0.0.nupkg.sha512", + "microsoft.extensions.caching.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Caching.Memory/7.0.0": { + "sha512": "xpidBs2KCE2gw1JrD0quHE72kvCaI3xFql5/Peb2GRtUuZX+dYPoK/NTdVMiM67Svym0M0Df9A3xyU0FbMQhHw==", + "type": "package", + "path": "microsoft.extensions.caching.memory/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Caching.Memory.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Caching.Memory.targets", + "lib/net462/Microsoft.Extensions.Caching.Memory.dll", + "lib/net462/Microsoft.Extensions.Caching.Memory.xml", + "lib/net6.0/Microsoft.Extensions.Caching.Memory.dll", + "lib/net6.0/Microsoft.Extensions.Caching.Memory.xml", + "lib/net7.0/Microsoft.Extensions.Caching.Memory.dll", + "lib/net7.0/Microsoft.Extensions.Caching.Memory.xml", + "lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.dll", + "lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.xml", + "microsoft.extensions.caching.memory.7.0.0.nupkg.sha512", + "microsoft.extensions.caching.memory.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Configuration/7.0.0": { + "sha512": "tldQUBWt/xeH2K7/hMPPo5g8zuLc3Ro9I5d4o/XrxvxOCA2EZBtW7bCHHTc49fcBtvB8tLAb/Qsmfrq+2SJ4vA==", + "type": "package", + "path": "microsoft.extensions.configuration/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.targets", + "lib/net462/Microsoft.Extensions.Configuration.dll", + "lib/net462/Microsoft.Extensions.Configuration.xml", + "lib/net6.0/Microsoft.Extensions.Configuration.dll", + "lib/net6.0/Microsoft.Extensions.Configuration.xml", + "lib/net7.0/Microsoft.Extensions.Configuration.dll", + "lib/net7.0/Microsoft.Extensions.Configuration.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.xml", + "microsoft.extensions.configuration.7.0.0.nupkg.sha512", + "microsoft.extensions.configuration.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Configuration.Abstractions/7.0.0": { + "sha512": "f34u2eaqIjNO9YLHBz8rozVZ+TcFiFs0F3r7nUJd7FRkVSxk8u4OpoK226mi49MwexHOR2ibP9MFvRUaLilcQQ==", + "type": "package", + "path": "microsoft.extensions.configuration.abstractions/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.Abstractions.targets", + "lib/net462/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/net6.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net6.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/net7.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net7.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "microsoft.extensions.configuration.abstractions.7.0.0.nupkg.sha512", + "microsoft.extensions.configuration.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Configuration.Binder/7.0.0": { + "sha512": "tgU4u7bZsoS9MKVRiotVMAwHtbREHr5/5zSEV+JPhg46+ox47Au84E3D2IacAaB0bk5ePNaNieTlPrfjbbRJkg==", + "type": "package", + "path": "microsoft.extensions.configuration.binder/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.Binder.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.Binder.targets", + "lib/net462/Microsoft.Extensions.Configuration.Binder.dll", + "lib/net462/Microsoft.Extensions.Configuration.Binder.xml", + "lib/net6.0/Microsoft.Extensions.Configuration.Binder.dll", + "lib/net6.0/Microsoft.Extensions.Configuration.Binder.xml", + "lib/net7.0/Microsoft.Extensions.Configuration.Binder.dll", + "lib/net7.0/Microsoft.Extensions.Configuration.Binder.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Binder.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Binder.xml", + "microsoft.extensions.configuration.binder.7.0.0.nupkg.sha512", + "microsoft.extensions.configuration.binder.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Configuration.FileExtensions/7.0.0": { + "sha512": "xk2lRJ1RDuqe57BmgvRPyCt6zyePKUmvT6iuXqiHR+/OIIgWVR8Ff5k2p6DwmqY8a17hx/OnrekEhziEIeQP6Q==", + "type": "package", + "path": "microsoft.extensions.configuration.fileextensions/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.FileExtensions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.FileExtensions.targets", + "lib/net462/Microsoft.Extensions.Configuration.FileExtensions.dll", + "lib/net462/Microsoft.Extensions.Configuration.FileExtensions.xml", + "lib/net6.0/Microsoft.Extensions.Configuration.FileExtensions.dll", + "lib/net6.0/Microsoft.Extensions.Configuration.FileExtensions.xml", + "lib/net7.0/Microsoft.Extensions.Configuration.FileExtensions.dll", + "lib/net7.0/Microsoft.Extensions.Configuration.FileExtensions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.xml", + "microsoft.extensions.configuration.fileextensions.7.0.0.nupkg.sha512", + "microsoft.extensions.configuration.fileextensions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Configuration.Json/7.0.0": { + "sha512": "LDNYe3uw76W35Jci+be4LDf2lkQZe0A7EEYQVChFbc509CpZ4Iupod8li4PUXPBhEUOFI/rlQNf5xkzJRQGvtA==", + "type": "package", + "path": "microsoft.extensions.configuration.json/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.Json.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.Json.targets", + "lib/net462/Microsoft.Extensions.Configuration.Json.dll", + "lib/net462/Microsoft.Extensions.Configuration.Json.xml", + "lib/net6.0/Microsoft.Extensions.Configuration.Json.dll", + "lib/net6.0/Microsoft.Extensions.Configuration.Json.xml", + "lib/net7.0/Microsoft.Extensions.Configuration.Json.dll", + "lib/net7.0/Microsoft.Extensions.Configuration.Json.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Json.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Json.xml", + "lib/netstandard2.1/Microsoft.Extensions.Configuration.Json.dll", + "lib/netstandard2.1/Microsoft.Extensions.Configuration.Json.xml", + "microsoft.extensions.configuration.json.7.0.0.nupkg.sha512", + "microsoft.extensions.configuration.json.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.DependencyInjection/7.0.0": { + "sha512": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==", + "type": "package", + "path": "microsoft.extensions.dependencyinjection/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.DependencyInjection.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.targets", + "lib/net462/Microsoft.Extensions.DependencyInjection.dll", + "lib/net462/Microsoft.Extensions.DependencyInjection.xml", + "lib/net6.0/Microsoft.Extensions.DependencyInjection.dll", + "lib/net6.0/Microsoft.Extensions.DependencyInjection.xml", + "lib/net7.0/Microsoft.Extensions.DependencyInjection.dll", + "lib/net7.0/Microsoft.Extensions.DependencyInjection.xml", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.dll", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.xml", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.dll", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.xml", + "microsoft.extensions.dependencyinjection.7.0.0.nupkg.sha512", + "microsoft.extensions.dependencyinjection.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/7.0.0": { + "sha512": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw==", + "type": "package", + "path": "microsoft.extensions.dependencyinjection.abstractions/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.DependencyInjection.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.Abstractions.targets", + "lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/net6.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/net6.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "microsoft.extensions.dependencyinjection.abstractions.7.0.0.nupkg.sha512", + "microsoft.extensions.dependencyinjection.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.FileProviders.Abstractions/7.0.0": { + "sha512": "NyawiW9ZT/liQb34k9YqBSNPLuuPkrjMgQZ24Y/xXX1RoiBkLUdPMaQTmxhZ5TYu8ZKZ9qayzil75JX95vGQUg==", + "type": "package", + "path": "microsoft.extensions.fileproviders.abstractions/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.FileProviders.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.FileProviders.Abstractions.targets", + "lib/net462/Microsoft.Extensions.FileProviders.Abstractions.dll", + "lib/net462/Microsoft.Extensions.FileProviders.Abstractions.xml", + "lib/net6.0/Microsoft.Extensions.FileProviders.Abstractions.dll", + "lib/net6.0/Microsoft.Extensions.FileProviders.Abstractions.xml", + "lib/net7.0/Microsoft.Extensions.FileProviders.Abstractions.dll", + "lib/net7.0/Microsoft.Extensions.FileProviders.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.xml", + "microsoft.extensions.fileproviders.abstractions.7.0.0.nupkg.sha512", + "microsoft.extensions.fileproviders.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.FileProviders.Physical/7.0.0": { + "sha512": "K8D2MTR+EtzkbZ8z80LrG7Ur64R7ZZdRLt1J5cgpc/pUWl0C6IkAUapPuK28oionHueCPELUqq0oYEvZfalNdg==", + "type": "package", + "path": "microsoft.extensions.fileproviders.physical/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.FileProviders.Physical.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.FileProviders.Physical.targets", + "lib/net462/Microsoft.Extensions.FileProviders.Physical.dll", + "lib/net462/Microsoft.Extensions.FileProviders.Physical.xml", + "lib/net6.0/Microsoft.Extensions.FileProviders.Physical.dll", + "lib/net6.0/Microsoft.Extensions.FileProviders.Physical.xml", + "lib/net7.0/Microsoft.Extensions.FileProviders.Physical.dll", + "lib/net7.0/Microsoft.Extensions.FileProviders.Physical.xml", + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Physical.dll", + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Physical.xml", + "microsoft.extensions.fileproviders.physical.7.0.0.nupkg.sha512", + "microsoft.extensions.fileproviders.physical.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.FileSystemGlobbing/7.0.0": { + "sha512": "2jONjKHiF+E92ynz2ZFcr9OvxIw+rTGMPEH+UZGeHTEComVav93jQUWGkso8yWwVBcEJGcNcZAaqY01FFJcj7w==", + "type": "package", + "path": "microsoft.extensions.filesystemglobbing/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.FileSystemGlobbing.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.FileSystemGlobbing.targets", + "lib/net462/Microsoft.Extensions.FileSystemGlobbing.dll", + "lib/net462/Microsoft.Extensions.FileSystemGlobbing.xml", + "lib/net6.0/Microsoft.Extensions.FileSystemGlobbing.dll", + "lib/net6.0/Microsoft.Extensions.FileSystemGlobbing.xml", + "lib/net7.0/Microsoft.Extensions.FileSystemGlobbing.dll", + "lib/net7.0/Microsoft.Extensions.FileSystemGlobbing.xml", + "lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.dll", + "lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.xml", + "microsoft.extensions.filesystemglobbing.7.0.0.nupkg.sha512", + "microsoft.extensions.filesystemglobbing.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Logging/7.0.0": { + "sha512": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==", + "type": "package", + "path": "microsoft.extensions.logging/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Logging.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.targets", + "lib/net462/Microsoft.Extensions.Logging.dll", + "lib/net462/Microsoft.Extensions.Logging.xml", + "lib/net6.0/Microsoft.Extensions.Logging.dll", + "lib/net6.0/Microsoft.Extensions.Logging.xml", + "lib/net7.0/Microsoft.Extensions.Logging.dll", + "lib/net7.0/Microsoft.Extensions.Logging.xml", + "lib/netstandard2.0/Microsoft.Extensions.Logging.dll", + "lib/netstandard2.0/Microsoft.Extensions.Logging.xml", + "lib/netstandard2.1/Microsoft.Extensions.Logging.dll", + "lib/netstandard2.1/Microsoft.Extensions.Logging.xml", + "microsoft.extensions.logging.7.0.0.nupkg.sha512", + "microsoft.extensions.logging.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Logging.Abstractions/7.0.0": { + "sha512": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw==", + "type": "package", + "path": "microsoft.extensions.logging.abstractions/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/roslyn3.11/cs/Microsoft.Extensions.Logging.Generators.dll", + "analyzers/dotnet/roslyn3.11/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/Microsoft.Extensions.Logging.Generators.dll", + "analyzers/dotnet/roslyn4.0/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Logging.Generators.dll", + "analyzers/dotnet/roslyn4.4/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", + "buildTransitive/net461/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/net462/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/net6.0/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.targets", + "lib/net462/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/net6.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net6.0/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/net7.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net7.0/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.xml", + "microsoft.extensions.logging.abstractions.7.0.0.nupkg.sha512", + "microsoft.extensions.logging.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Logging.Configuration/7.0.0": { + "sha512": "FLDA0HcffKA8ycoDQLJuCNGIE42cLWPxgdQGRBaSzZrYTkMBjnf9zrr8pGT06psLq9Q+RKWmmZczQ9bCrXEBcA==", + "type": "package", + "path": "microsoft.extensions.logging.configuration/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Logging.Configuration.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.Configuration.targets", + "lib/net462/Microsoft.Extensions.Logging.Configuration.dll", + "lib/net462/Microsoft.Extensions.Logging.Configuration.xml", + "lib/net6.0/Microsoft.Extensions.Logging.Configuration.dll", + "lib/net6.0/Microsoft.Extensions.Logging.Configuration.xml", + "lib/net7.0/Microsoft.Extensions.Logging.Configuration.dll", + "lib/net7.0/Microsoft.Extensions.Logging.Configuration.xml", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Configuration.dll", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Configuration.xml", + "microsoft.extensions.logging.configuration.7.0.0.nupkg.sha512", + "microsoft.extensions.logging.configuration.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Logging.Console/7.0.0": { + "sha512": "qt5n8bHLZPUfuRnFxJKW5q9ZwOTncdh96rtWzWpX3Y/064MlxzCSw2ELF5Jlwdo+Y4wK3I47NmUTFsV7Sg8rqg==", + "type": "package", + "path": "microsoft.extensions.logging.console/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Logging.Console.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.Console.targets", + "lib/net462/Microsoft.Extensions.Logging.Console.dll", + "lib/net462/Microsoft.Extensions.Logging.Console.xml", + "lib/net6.0/Microsoft.Extensions.Logging.Console.dll", + "lib/net6.0/Microsoft.Extensions.Logging.Console.xml", + "lib/net7.0/Microsoft.Extensions.Logging.Console.dll", + "lib/net7.0/Microsoft.Extensions.Logging.Console.xml", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Console.dll", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Console.xml", + "microsoft.extensions.logging.console.7.0.0.nupkg.sha512", + "microsoft.extensions.logging.console.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Options/7.0.0": { + "sha512": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==", + "type": "package", + "path": "microsoft.extensions.options/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Options.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Options.targets", + "lib/net462/Microsoft.Extensions.Options.dll", + "lib/net462/Microsoft.Extensions.Options.xml", + "lib/net6.0/Microsoft.Extensions.Options.dll", + "lib/net6.0/Microsoft.Extensions.Options.xml", + "lib/net7.0/Microsoft.Extensions.Options.dll", + "lib/net7.0/Microsoft.Extensions.Options.xml", + "lib/netstandard2.0/Microsoft.Extensions.Options.dll", + "lib/netstandard2.0/Microsoft.Extensions.Options.xml", + "lib/netstandard2.1/Microsoft.Extensions.Options.dll", + "lib/netstandard2.1/Microsoft.Extensions.Options.xml", + "microsoft.extensions.options.7.0.0.nupkg.sha512", + "microsoft.extensions.options.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Options.ConfigurationExtensions/7.0.0": { + "sha512": "95UnxZkkFdXxF6vSrtJsMHCzkDeSMuUWGs2hDT54cX+U5eVajrCJ3qLyQRW+CtpTt5OJ8bmTvpQVHu1DLhH+cA==", + "type": "package", + "path": "microsoft.extensions.options.configurationextensions/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Options.ConfigurationExtensions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Options.ConfigurationExtensions.targets", + "lib/net462/Microsoft.Extensions.Options.ConfigurationExtensions.dll", + "lib/net462/Microsoft.Extensions.Options.ConfigurationExtensions.xml", + "lib/net6.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll", + "lib/net6.0/Microsoft.Extensions.Options.ConfigurationExtensions.xml", + "lib/net7.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll", + "lib/net7.0/Microsoft.Extensions.Options.ConfigurationExtensions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Options.ConfigurationExtensions.xml", + "microsoft.extensions.options.configurationextensions.7.0.0.nupkg.sha512", + "microsoft.extensions.options.configurationextensions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Primitives/7.0.0": { + "sha512": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==", + "type": "package", + "path": "microsoft.extensions.primitives/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Primitives.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Primitives.targets", + "lib/net462/Microsoft.Extensions.Primitives.dll", + "lib/net462/Microsoft.Extensions.Primitives.xml", + "lib/net6.0/Microsoft.Extensions.Primitives.dll", + "lib/net6.0/Microsoft.Extensions.Primitives.xml", + "lib/net7.0/Microsoft.Extensions.Primitives.dll", + "lib/net7.0/Microsoft.Extensions.Primitives.xml", + "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll", + "lib/netstandard2.0/Microsoft.Extensions.Primitives.xml", + "microsoft.extensions.primitives.7.0.0.nupkg.sha512", + "microsoft.extensions.primitives.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Newtonsoft.Json/13.0.2": { + "sha512": "R2pZ3B0UjeyHShm9vG+Tu0EBb2lC8b0dFzV9gVn50ofHXh9Smjk6kTn7A/FdAsC8B5cKib1OnGYOXxRBz5XQDg==", + "type": "package", + "path": "newtonsoft.json/13.0.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.md", + "README.md", + "lib/net20/Newtonsoft.Json.dll", + "lib/net20/Newtonsoft.Json.xml", + "lib/net35/Newtonsoft.Json.dll", + "lib/net35/Newtonsoft.Json.xml", + "lib/net40/Newtonsoft.Json.dll", + "lib/net40/Newtonsoft.Json.xml", + "lib/net45/Newtonsoft.Json.dll", + "lib/net45/Newtonsoft.Json.xml", + "lib/net6.0/Newtonsoft.Json.dll", + "lib/net6.0/Newtonsoft.Json.xml", + "lib/netstandard1.0/Newtonsoft.Json.dll", + "lib/netstandard1.0/Newtonsoft.Json.xml", + "lib/netstandard1.3/Newtonsoft.Json.dll", + "lib/netstandard1.3/Newtonsoft.Json.xml", + "lib/netstandard2.0/Newtonsoft.Json.dll", + "lib/netstandard2.0/Newtonsoft.Json.xml", + "newtonsoft.json.13.0.2.nupkg.sha512", + "newtonsoft.json.nuspec", + "packageIcon.png" + ] + }, + "RestSharp/108.0.3": { + "sha512": "phq1AkVhqVXHZxvWDV4fJEJKCR5OHNFUGx2Ix8o5EFShS6654oZhth4X2RWvaU/W7UexIswW0T+lTirxfLU2Ow==", + "type": "package", + "path": "restsharp/108.0.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net5.0/RestSharp.dll", + "lib/net5.0/RestSharp.xml", + "lib/net6.0/RestSharp.dll", + "lib/net6.0/RestSharp.xml", + "lib/netstandard2.0/RestSharp.dll", + "lib/netstandard2.0/RestSharp.xml", + "restsharp.108.0.3.nupkg.sha512", + "restsharp.nuspec", + "restsharp.png" + ] + }, + "Spectre.Console/0.46.0": { + "sha512": "qd2OMEGxfQW1KLuQj56KKHkIK6eB/IUF/AET5CRl/efROHGsvBehx9shfkL0HgJEHLCwRiR7foWi4/LkdPk18g==", + "type": "package", + "path": "spectre.console/0.46.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net6.0/Spectre.Console.dll", + "lib/net6.0/Spectre.Console.xml", + "lib/net7.0/Spectre.Console.dll", + "lib/net7.0/Spectre.Console.xml", + "lib/netstandard2.0/Spectre.Console.dll", + "lib/netstandard2.0/Spectre.Console.xml", + "small-logo.png", + "spectre.console.0.46.0.nupkg.sha512", + "spectre.console.nuspec" + ] + }, + "System.Buffers/4.5.1": { + "sha512": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==", + "type": "package", + "path": "system.buffers/4.5.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/System.Buffers.dll", + "lib/net461/System.Buffers.xml", + "lib/netcoreapp2.0/_._", + "lib/netstandard1.1/System.Buffers.dll", + "lib/netstandard1.1/System.Buffers.xml", + "lib/netstandard2.0/System.Buffers.dll", + "lib/netstandard2.0/System.Buffers.xml", + "lib/uap10.0.16299/_._", + "ref/net45/System.Buffers.dll", + "ref/net45/System.Buffers.xml", + "ref/netcoreapp2.0/_._", + "ref/netstandard1.1/System.Buffers.dll", + "ref/netstandard1.1/System.Buffers.xml", + "ref/netstandard2.0/System.Buffers.dll", + "ref/netstandard2.0/System.Buffers.xml", + "ref/uap10.0.16299/_._", + "system.buffers.4.5.1.nupkg.sha512", + "system.buffers.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Memory/4.5.5": { + "sha512": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==", + "type": "package", + "path": "system.memory/4.5.5", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/System.Memory.dll", + "lib/net461/System.Memory.xml", + "lib/netcoreapp2.1/_._", + "lib/netstandard1.1/System.Memory.dll", + "lib/netstandard1.1/System.Memory.xml", + "lib/netstandard2.0/System.Memory.dll", + "lib/netstandard2.0/System.Memory.xml", + "ref/netcoreapp2.1/_._", + "system.memory.4.5.5.nupkg.sha512", + "system.memory.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Text.Encodings.Web/7.0.0": { + "sha512": "OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==", + "type": "package", + "path": "system.text.encodings.web/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Text.Encodings.Web.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Text.Encodings.Web.targets", + "lib/net462/System.Text.Encodings.Web.dll", + "lib/net462/System.Text.Encodings.Web.xml", + "lib/net6.0/System.Text.Encodings.Web.dll", + "lib/net6.0/System.Text.Encodings.Web.xml", + "lib/net7.0/System.Text.Encodings.Web.dll", + "lib/net7.0/System.Text.Encodings.Web.xml", + "lib/netstandard2.0/System.Text.Encodings.Web.dll", + "lib/netstandard2.0/System.Text.Encodings.Web.xml", + "runtimes/browser/lib/net6.0/System.Text.Encodings.Web.dll", + "runtimes/browser/lib/net6.0/System.Text.Encodings.Web.xml", + "runtimes/browser/lib/net7.0/System.Text.Encodings.Web.dll", + "runtimes/browser/lib/net7.0/System.Text.Encodings.Web.xml", + "system.text.encodings.web.7.0.0.nupkg.sha512", + "system.text.encodings.web.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Text.Json/7.0.0": { + "sha512": "DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==", + "type": "package", + "path": "system.text.json/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "README.md", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/roslyn3.11/cs/System.Text.Json.SourceGeneration.dll", + "analyzers/dotnet/roslyn3.11/cs/cs/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/de/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/es/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/fr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/it/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ja/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ko/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pl/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ru/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/tr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/System.Text.Json.SourceGeneration.dll", + "analyzers/dotnet/roslyn4.0/cs/cs/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/de/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/es/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/fr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/it/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ja/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ko/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pl/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ru/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/tr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/System.Text.Json.SourceGeneration.dll", + "analyzers/dotnet/roslyn4.4/cs/cs/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/de/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/es/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/fr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/it/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ja/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ko/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pl/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ru/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/tr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", + "buildTransitive/net461/System.Text.Json.targets", + "buildTransitive/net462/System.Text.Json.targets", + "buildTransitive/net6.0/System.Text.Json.targets", + "buildTransitive/netcoreapp2.0/System.Text.Json.targets", + "buildTransitive/netstandard2.0/System.Text.Json.targets", + "lib/net462/System.Text.Json.dll", + "lib/net462/System.Text.Json.xml", + "lib/net6.0/System.Text.Json.dll", + "lib/net6.0/System.Text.Json.xml", + "lib/net7.0/System.Text.Json.dll", + "lib/net7.0/System.Text.Json.xml", + "lib/netstandard2.0/System.Text.Json.dll", + "lib/netstandard2.0/System.Text.Json.xml", + "system.text.json.7.0.0.nupkg.sha512", + "system.text.json.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Threading.Tasks.Extensions/4.5.4": { + "sha512": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "type": "package", + "path": "system.threading.tasks.extensions/4.5.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net461/System.Threading.Tasks.Extensions.dll", + "lib/net461/System.Threading.Tasks.Extensions.xml", + "lib/netcoreapp2.1/_._", + "lib/netstandard1.0/System.Threading.Tasks.Extensions.dll", + "lib/netstandard1.0/System.Threading.Tasks.Extensions.xml", + "lib/netstandard2.0/System.Threading.Tasks.Extensions.dll", + "lib/netstandard2.0/System.Threading.Tasks.Extensions.xml", + "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.dll", + "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.xml", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/netcoreapp2.1/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.threading.tasks.extensions.4.5.4.nupkg.sha512", + "system.threading.tasks.extensions.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + } + }, + "projectFileDependencyGroups": { + "net7.0": [ + "Docker.DotNet >= 3.125.15", + "Microsoft.EntityFrameworkCore.InMemory >= 7.0.10", + "Microsoft.Extensions.Configuration >= 7.0.0", + "Microsoft.Extensions.Configuration.Json >= 7.0.0", + "Microsoft.Extensions.DependencyInjection >= 7.0.0", + "Microsoft.Extensions.Logging >= 7.0.0", + "Microsoft.Extensions.Logging.Console >= 7.0.0", + "Newtonsoft.Json >= 13.0.2", + "RestSharp >= 108.0.3", + "Spectre.Console >= 0.46.0" + ] + }, + "packageFolders": { + "/root/.nuget/packages/": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/DDNSUpdater.csproj", + "projectName": "DDNSUpdater", + "projectPath": "/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/DDNSUpdater.csproj", + "packagesPath": "/root/.nuget/packages/", + "outputPath": "/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/root/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net7.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net7.0": { + "targetAlias": "net7.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net7.0": { + "targetAlias": "net7.0", + "dependencies": { + "Docker.DotNet": { + "target": "Package", + "version": "[3.125.15, )" + }, + "Microsoft.EntityFrameworkCore.InMemory": { + "target": "Package", + "version": "[7.0.10, )" + }, + "Microsoft.Extensions.Configuration": { + "target": "Package", + "version": "[7.0.0, )" + }, + "Microsoft.Extensions.Configuration.Json": { + "target": "Package", + "version": "[7.0.0, )" + }, + "Microsoft.Extensions.DependencyInjection": { + "target": "Package", + "version": "[7.0.0, )" + }, + "Microsoft.Extensions.Logging": { + "target": "Package", + "version": "[7.0.0, )" + }, + "Microsoft.Extensions.Logging.Console": { + "target": "Package", + "version": "[7.0.0, )" + }, + "Newtonsoft.Json": { + "target": "Package", + "version": "[13.0.2, )" + }, + "RestSharp": { + "target": "Package", + "version": "[108.0.3, )" + }, + "Spectre.Console": { + "target": "Package", + "version": "[0.46.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/7.0.110/RuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/project.nuget.cache b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/project.nuget.cache new file mode 100644 index 0000000..9a96b51 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/project.nuget.cache @@ -0,0 +1,41 @@ +{ + "version": 2, + "dgSpecHash": "SH2F2M42Mv3jK46b9cRQI5FXFWexrz8g8mvikuoZ1AXXZ99cxuSx+llnCt5ZleCIn5+UFYnyRbh6ndjz6Uwe3Q==", + "success": true, + "projectFilePath": "/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/DDNSUpdater.csproj", + "expectedPackageFiles": [ + "/root/.nuget/packages/docker.dotnet/3.125.15/docker.dotnet.3.125.15.nupkg.sha512", + "/root/.nuget/packages/microsoft.entityframeworkcore/7.0.10/microsoft.entityframeworkcore.7.0.10.nupkg.sha512", + "/root/.nuget/packages/microsoft.entityframeworkcore.abstractions/7.0.10/microsoft.entityframeworkcore.abstractions.7.0.10.nupkg.sha512", + "/root/.nuget/packages/microsoft.entityframeworkcore.analyzers/7.0.10/microsoft.entityframeworkcore.analyzers.7.0.10.nupkg.sha512", + "/root/.nuget/packages/microsoft.entityframeworkcore.inmemory/7.0.10/microsoft.entityframeworkcore.inmemory.7.0.10.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.caching.abstractions/7.0.0/microsoft.extensions.caching.abstractions.7.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.caching.memory/7.0.0/microsoft.extensions.caching.memory.7.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.configuration/7.0.0/microsoft.extensions.configuration.7.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.configuration.abstractions/7.0.0/microsoft.extensions.configuration.abstractions.7.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.configuration.binder/7.0.0/microsoft.extensions.configuration.binder.7.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.configuration.fileextensions/7.0.0/microsoft.extensions.configuration.fileextensions.7.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.configuration.json/7.0.0/microsoft.extensions.configuration.json.7.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.dependencyinjection/7.0.0/microsoft.extensions.dependencyinjection.7.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.dependencyinjection.abstractions/7.0.0/microsoft.extensions.dependencyinjection.abstractions.7.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.fileproviders.abstractions/7.0.0/microsoft.extensions.fileproviders.abstractions.7.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.fileproviders.physical/7.0.0/microsoft.extensions.fileproviders.physical.7.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.filesystemglobbing/7.0.0/microsoft.extensions.filesystemglobbing.7.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.logging/7.0.0/microsoft.extensions.logging.7.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.logging.abstractions/7.0.0/microsoft.extensions.logging.abstractions.7.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.logging.configuration/7.0.0/microsoft.extensions.logging.configuration.7.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.logging.console/7.0.0/microsoft.extensions.logging.console.7.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.options/7.0.0/microsoft.extensions.options.7.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.options.configurationextensions/7.0.0/microsoft.extensions.options.configurationextensions.7.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.primitives/7.0.0/microsoft.extensions.primitives.7.0.0.nupkg.sha512", + "/root/.nuget/packages/newtonsoft.json/13.0.2/newtonsoft.json.13.0.2.nupkg.sha512", + "/root/.nuget/packages/restsharp/108.0.3/restsharp.108.0.3.nupkg.sha512", + "/root/.nuget/packages/spectre.console/0.46.0/spectre.console.0.46.0.nupkg.sha512", + "/root/.nuget/packages/system.buffers/4.5.1/system.buffers.4.5.1.nupkg.sha512", + "/root/.nuget/packages/system.memory/4.5.5/system.memory.4.5.5.nupkg.sha512", + "/root/.nuget/packages/system.text.encodings.web/7.0.0/system.text.encodings.web.7.0.0.nupkg.sha512", + "/root/.nuget/packages/system.text.json/7.0.0/system.text.json.7.0.0.nupkg.sha512", + "/root/.nuget/packages/system.threading.tasks.extensions/4.5.4/system.threading.tasks.extensions.4.5.4.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/project.packagespec.json b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/project.packagespec.json new file mode 100644 index 0000000..c30bd77 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/project.packagespec.json @@ -0,0 +1 @@ +"restore":{"projectUniqueName":"/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/DDNSUpdater.csproj","projectName":"DDNSUpdater","projectPath":"/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/DDNSUpdater.csproj","outputPath":"/root/Proxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/","projectStyle":"PackageReference","originalTargetFrameworks":["net7.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net7.0":{"targetAlias":"net7.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]}}"frameworks":{"net7.0":{"targetAlias":"net7.0","dependencies":{"Docker.DotNet":{"target":"Package","version":"[3.125.15, )"},"Microsoft.EntityFrameworkCore.InMemory":{"target":"Package","version":"[7.0.10, )"},"Microsoft.Extensions.Configuration":{"target":"Package","version":"[7.0.0, )"},"Microsoft.Extensions.Configuration.Json":{"target":"Package","version":"[7.0.0, )"},"Microsoft.Extensions.DependencyInjection":{"target":"Package","version":"[7.0.0, )"},"Microsoft.Extensions.Logging":{"target":"Package","version":"[7.0.0, )"},"Microsoft.Extensions.Logging.Console":{"target":"Package","version":"[7.0.0, )"},"Newtonsoft.Json":{"target":"Package","version":"[13.0.2, )"},"RestSharp":{"target":"Package","version":"[108.0.3, )"},"Spectre.Console":{"target":"Package","version":"[0.46.0, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"/usr/lib/dotnet/sdk/7.0.110/RuntimeIdentifierGraph.json"}} \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/rider.project.model.nuget.info b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/rider.project.model.nuget.info new file mode 100644 index 0000000..fd28ffd --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/rider.project.model.nuget.info @@ -0,0 +1 @@ +16937582976898301 \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/rider.project.restore.info b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/rider.project.restore.info new file mode 100644 index 0000000..fd28ffd --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/DDNSUpdater/obj/rider.project.restore.info @@ -0,0 +1 @@ +16937582976898301 \ No newline at end of file diff --git a/ddns/IonosDynamicDNSUpdater/Dockerfile b/ddns/IonosDynamicDNSUpdater/Dockerfile new file mode 100644 index 0000000..9ce6e81 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/Dockerfile @@ -0,0 +1,18 @@ +FROM mcr.microsoft.com/dotnet/runtime:7.0 AS base +WORKDIR /app + +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build +WORKDIR /src +COPY ["DDNSUpdater/DDNSUpdater.csproj", "DDNSUpdater/"] +RUN dotnet restore "DDNSUpdater/DDNSUpdater.csproj" +COPY . . +WORKDIR "/src/DDNSUpdater" +RUN dotnet build "DDNSUpdater.csproj" -c Release -o /app/build + +FROM build AS publish +RUN dotnet publish "DDNSUpdater.csproj" -c Release -o /app/publish + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "DDNSUpdater.dll"] diff --git a/ddns/IonosDynamicDNSUpdater/README.md b/ddns/IonosDynamicDNSUpdater/README.md new file mode 100644 index 0000000..a89610d --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/README.md @@ -0,0 +1,58 @@ +# IonosDynamicDNSUpdater + +This is an automatic Dynamic DNS updater for Ionos written in C#. It uses the Ionos API to request an UpdateURL and updates the DNS record with the current IP address. It also supports running in a Docker container and using Docker Compose. + +## Prerequisites + +To use IonosDynamicDNSUpdater, you need to have the following installed on your system: + +- [.NET Core](https://dotnet.microsoft.com/download) (if running outside of a Docker container) +- [Docker](https://www.docker.com/get-started) (if running in a Docker container) +- [Docker Compose](https://docs.docker.com/compose/install) (if using Docker Compose) + +## Installation + +To install the IonosDynamicDNSUpdater, follow these steps: + +1. Clone the repository to your local machine using `git clone https://github.com/eliasstepanik/IonosDynamicDNSUpdater.git`. +2. Navigate to the project directory using `cd IonosDynamicDNSUpdater`. + +## Usage + +To use the IonosDynamicDNSUpdater, follow these steps: + +### Running outside of a Docker container + +1. Create an API token in Ionos. +2. Replace the placeholder values in `appsettings.json` with your Ionos API token and the hostname for the DNS record you want to update. +3. Run the application using `dotnet run`. + +### Running in a Docker container + +1. Build the Docker image using `docker build -t ionosdynamicdnsupdater .`. +2. Run the Docker container using `docker run -d -e API_KEY= -e DOMAINS= ionosdynamicdnsupdater`. + +### Using Docker Compose + +1. Create an API token in Ionos. +2. Replace the placeholder values in `docker-compose.yml` with your Ionos API token and the hostname for the DNS record you want to update. +3. Start the services using `docker-compose up -d`. + +## Contributing + +To contribute to the IonosDynamicDNSUpdater project, follow these steps: + +1. Fork the repository. +2. Create a new branch for your changes. +3. Make your changes and commit them to your branch. +4. Submit a pull request to the main repository. + +Please make sure to follow the coding style and add appropriate documentation for your changes. + +## License + +This project is licensed under the [MIT License](LICENSE). + +## Contact + +For any questions or feedback, please contact the maintainer at [eliasstepanik@web.de](mailto:eliasstepanik@web.de). diff --git a/ddns/IonosDynamicDNSUpdater/docker-compose.yml b/ddns/IonosDynamicDNSUpdater/docker-compose.yml new file mode 100644 index 0000000..9ef41d9 --- /dev/null +++ b/ddns/IonosDynamicDNSUpdater/docker-compose.yml @@ -0,0 +1,11 @@ +version: "3.7" + +services: + ionos_ddns_updater: + build: . + restart: unless-stopped + tty: true + stdin_open: true + environment: + API_Key: "" + DOMAINS: "subdomain.domain.de,domain.de" diff --git a/ports/PortUpdate/.dockerignore b/ports/PortUpdate/.dockerignore new file mode 100644 index 0000000..cd967fc --- /dev/null +++ b/ports/PortUpdate/.dockerignore @@ -0,0 +1,25 @@ +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/.idea +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md \ No newline at end of file diff --git a/ports/PortUpdate/.gitignore b/ports/PortUpdate/.gitignore new file mode 100644 index 0000000..add57be --- /dev/null +++ b/ports/PortUpdate/.gitignore @@ -0,0 +1,5 @@ +bin/ +obj/ +/packages/ +riderModule.iml +/_ReSharper.Caches/ \ No newline at end of file diff --git a/ports/PortUpdate/.idea/.idea.PortUpdate/.idea/.gitignore b/ports/PortUpdate/.idea/.idea.PortUpdate/.idea/.gitignore new file mode 100644 index 0000000..28f19dd --- /dev/null +++ b/ports/PortUpdate/.idea/.idea.PortUpdate/.idea/.gitignore @@ -0,0 +1,13 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Rider ignored files +/projectSettingsUpdater.xml +/modules.xml +/contentModel.xml +/.idea.PortUpdate.iml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/ports/PortUpdate/.idea/.idea.PortUpdate/.idea/encodings.xml b/ports/PortUpdate/.idea/.idea.PortUpdate/.idea/encodings.xml new file mode 100644 index 0000000..df87cf9 --- /dev/null +++ b/ports/PortUpdate/.idea/.idea.PortUpdate/.idea/encodings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ports/PortUpdate/.idea/.idea.PortUpdate/.idea/indexLayout.xml b/ports/PortUpdate/.idea/.idea.PortUpdate/.idea/indexLayout.xml new file mode 100644 index 0000000..7b08163 --- /dev/null +++ b/ports/PortUpdate/.idea/.idea.PortUpdate/.idea/indexLayout.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/ports/PortUpdate/.idea/.idea.PortUpdate/.idea/misc.xml b/ports/PortUpdate/.idea/.idea.PortUpdate/.idea/misc.xml new file mode 100644 index 0000000..0a75641 --- /dev/null +++ b/ports/PortUpdate/.idea/.idea.PortUpdate/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ports/PortUpdate/.idea/.idea.PortUpdate/.idea/vcs.xml b/ports/PortUpdate/.idea/.idea.PortUpdate/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/ports/PortUpdate/.idea/.idea.PortUpdate/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ports/PortUpdate/Dockerfile b/ports/PortUpdate/Dockerfile new file mode 100644 index 0000000..302e6fe --- /dev/null +++ b/ports/PortUpdate/Dockerfile @@ -0,0 +1,18 @@ +FROM mcr.microsoft.com/dotnet/runtime:7.0 AS base +WORKDIR /app + +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build +WORKDIR /src +COPY ["PortUpdate/PortUpdate.csproj", "PortUpdate/"] +RUN dotnet restore "PortUpdate/PortUpdate.csproj" +COPY . . +WORKDIR "/src/PortUpdate" +RUN dotnet build "PortUpdate.csproj" -c Release -o /app/build + +FROM build AS publish +RUN dotnet publish "PortUpdate.csproj" -c Release -o /app/publish /p:UseAppHost=false + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "PortUpdate.dll"] diff --git a/ports/PortUpdate/PortUpdate.sln b/ports/PortUpdate/PortUpdate.sln new file mode 100644 index 0000000..2d2a41d --- /dev/null +++ b/ports/PortUpdate/PortUpdate.sln @@ -0,0 +1,16 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PortUpdate", "PortUpdate\PortUpdate.csproj", "{99FB6B58-FACE-43B9-B2EE-17384580E90A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {99FB6B58-FACE-43B9-B2EE-17384580E90A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {99FB6B58-FACE-43B9-B2EE-17384580E90A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {99FB6B58-FACE-43B9-B2EE-17384580E90A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {99FB6B58-FACE-43B9-B2EE-17384580E90A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/ports/PortUpdate/PortUpdate/Interfaces/IPortService.cs b/ports/PortUpdate/PortUpdate/Interfaces/IPortService.cs new file mode 100644 index 0000000..72b76ee --- /dev/null +++ b/ports/PortUpdate/PortUpdate/Interfaces/IPortService.cs @@ -0,0 +1,7 @@ +namespace PortUpdate.Interfaces; + +public interface IPortService +{ + public void Init(); + public void Update(); +} \ No newline at end of file diff --git a/ports/PortUpdate/PortUpdate/Interfaces/ITimerService.cs b/ports/PortUpdate/PortUpdate/Interfaces/ITimerService.cs new file mode 100644 index 0000000..87036c2 --- /dev/null +++ b/ports/PortUpdate/PortUpdate/Interfaces/ITimerService.cs @@ -0,0 +1,6 @@ +namespace PortUpdate.Interfaces; + +public interface ITimerService +{ + void Start(); +} \ No newline at end of file diff --git a/ports/PortUpdate/PortUpdate/Logging/SpecterConsoleLogger.cs b/ports/PortUpdate/PortUpdate/Logging/SpecterConsoleLogger.cs new file mode 100644 index 0000000..4e578c7 --- /dev/null +++ b/ports/PortUpdate/PortUpdate/Logging/SpecterConsoleLogger.cs @@ -0,0 +1,69 @@ +using System; +using PortUpdate.Interfaces; +using Microsoft.Extensions.Logging; +using Spectre.Console; +using Console = Spectre.Console.AnsiConsole; + +namespace PortUpdate.Logging; + +public sealed class SpecterConsoleLogger : ILogger +{ + private readonly string _name; + private readonly Func _getCurrentConfig; + public SpecterConsoleLogger( + string name, Func getCurrentConfig) => + (_name, _getCurrentConfig) = (name, getCurrentConfig); + + public void Log(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func formatter) + { + if (!IsEnabled(logLevel)) + { + return; + } + + Table table = null; + try + { + table = state as Table; + + + } + catch (Exception e) + { + Console.WriteLine(e.ToString()); + throw; + } + + + + SpecterConsoleLoggerConfiguration config = _getCurrentConfig(); + if (table is not null) + { + Console.Write(table); + } + else if (config.EventId == 0 || config.EventId == eventId.Id) + { + var originalColor = new Style(foreground: System.Console.ForegroundColor); + + + Console.Foreground = config.LogLevelToColorMap[logLevel]; + Console.Write($"[{eventId.Id,2}:{logLevel,-12}]"); + + Console.Foreground = originalColor.Foreground; + Console.Write($" {_name} - "); + + Console.Foreground = config.LogLevelToColorMap[logLevel]; + Console.Write($"{formatter(state, exception)}"); + + Console.Foreground = originalColor.Foreground; + Console.WriteLine(); + } + } + + + + public bool IsEnabled(LogLevel logLevel) => + _getCurrentConfig().LogLevelToColorMap.ContainsKey(logLevel); + + public IDisposable? BeginScope(TState state) where TState : notnull => default!; +} \ No newline at end of file diff --git a/ports/PortUpdate/PortUpdate/Logging/SpecterConsoleLoggerConfiguration.cs b/ports/PortUpdate/PortUpdate/Logging/SpecterConsoleLoggerConfiguration.cs new file mode 100644 index 0000000..ea381c2 --- /dev/null +++ b/ports/PortUpdate/PortUpdate/Logging/SpecterConsoleLoggerConfiguration.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using Microsoft.Extensions.Logging; + +namespace PortUpdate.Logging; + +public sealed class SpecterConsoleLoggerConfiguration +{ + public int EventId { get; set; } + + public Dictionary LogLevelToColorMap { get; set; } = new() + { + [LogLevel.Information] = ConsoleColor.DarkGreen + }; +} \ No newline at end of file diff --git a/ports/PortUpdate/PortUpdate/Logging/SpecterConsoleLoggerExtensions.cs b/ports/PortUpdate/PortUpdate/Logging/SpecterConsoleLoggerExtensions.cs new file mode 100644 index 0000000..d7b46b1 --- /dev/null +++ b/ports/PortUpdate/PortUpdate/Logging/SpecterConsoleLoggerExtensions.cs @@ -0,0 +1,42 @@ +using System; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Configuration; +using Spectre.Console; + +namespace PortUpdate.Logging; + +public static class SpecterConsoleLoggerExtensions +{ + public static ILoggingBuilder AddSpecterConsoleLogger( + this ILoggingBuilder builder) + { + builder.AddConfiguration(); + + builder.Services.TryAddEnumerable( + ServiceDescriptor.Singleton()); + + LoggerProviderOptions.RegisterProviderOptions + (builder.Services); + + return builder; + } + + public static ILoggingBuilder AddSpecterConsoleLogger( + this ILoggingBuilder builder, + Action configure) + { + builder.AddSpecterConsoleLogger(); + builder.Services.Configure(configure); + + return builder; + } + + public static void LogTable(this ILogger logger, LogLevel logLevel, EventId eventId, Exception? exception, Table? table) + { + + logger.Log(logLevel, eventId, table, exception, null); + } + +} \ No newline at end of file diff --git a/ports/PortUpdate/PortUpdate/Logging/SpecterConsoleLoggerProvider.cs b/ports/PortUpdate/PortUpdate/Logging/SpecterConsoleLoggerProvider.cs new file mode 100644 index 0000000..e9e3591 --- /dev/null +++ b/ports/PortUpdate/PortUpdate/Logging/SpecterConsoleLoggerProvider.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Concurrent; +using System.Runtime.Versioning; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Console; +using Microsoft.Extensions.Options; + +namespace PortUpdate.Logging; + +[UnsupportedOSPlatform("browser")] +[ProviderAlias("SpecterConsole")] +public sealed class SpecterConsoleLoggerProvider : ILoggerProvider +{ + private readonly IDisposable? _onChangeToken; + private SpecterConsoleLoggerConfiguration _currentConfig; + private readonly ConcurrentDictionary _loggers = + new(StringComparer.OrdinalIgnoreCase); + public SpecterConsoleLoggerProvider( + IOptionsMonitor config) + { + _currentConfig = config.CurrentValue; + _onChangeToken = config.OnChange(updatedConfig => _currentConfig = updatedConfig); + } + + public ILogger CreateLogger(string categoryName) => + _loggers.GetOrAdd(categoryName, name => new SpecterConsoleLogger(name, GetCurrentConfig)); + + private SpecterConsoleLoggerConfiguration GetCurrentConfig() => _currentConfig; + + public void Dispose() + { + _loggers.Clear(); + _onChangeToken?.Dispose(); + } +} \ No newline at end of file diff --git a/ports/PortUpdate/PortUpdate/Models/NotificationRequest.cs b/ports/PortUpdate/PortUpdate/Models/NotificationRequest.cs new file mode 100644 index 0000000..07aab0e --- /dev/null +++ b/ports/PortUpdate/PortUpdate/Models/NotificationRequest.cs @@ -0,0 +1,23 @@ +namespace PortUpdate.Models; + +// Root myDeserializedClass = JsonConvert.DeserializeObject(myJsonResponse); +public class Action +{ + public string action { get; set; } + public string label { get; set; } + public string url { get; set; } +} + +public class NotificationRequest +{ + public string topic { get; set; } + public string message { get; set; } + public string title { get; set; } + public List tags { get; set; } + public int priority { get; set; } + public string attach { get; set; } + public string filename { get; set; } + public string click { get; set; } + public List actions { get; set; } +} + diff --git a/ports/PortUpdate/PortUpdate/Models/PortRequest.cs b/ports/PortUpdate/PortUpdate/Models/PortRequest.cs new file mode 100644 index 0000000..c73eca4 --- /dev/null +++ b/ports/PortUpdate/PortUpdate/Models/PortRequest.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Globalization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; + +namespace PortUpdate.Models; + + +public partial class PortRequest +{ + [JsonProperty("data")] + public virtual List Ports { get; set; } +} + +public partial class Port +{ + [JsonProperty("type")] + public virtual string Type { get; set; } = "in"; + + [JsonProperty("log")] + public virtual string Log { get; set; } + + [JsonProperty("dport")] + /*[JsonConverter(typeof(StringConverter))]*/ + public virtual long Dport { get; set; } + + [JsonProperty("digest")] + public virtual string Digest { get; set; } + + [JsonProperty("action")] + public virtual string Action { get; set; } = "ACCEPT"; + + [JsonProperty("enable")] + public virtual long Enable { get; set; } = 1; + + [JsonProperty("pos")] + public virtual long Pos { get; set; } + + [JsonProperty("proto")] + public virtual string Proto { get; set; } +} diff --git a/ports/PortUpdate/PortUpdate/Models/TicketRequest.cs b/ports/PortUpdate/PortUpdate/Models/TicketRequest.cs new file mode 100644 index 0000000..338174e --- /dev/null +++ b/ports/PortUpdate/PortUpdate/Models/TicketRequest.cs @@ -0,0 +1,150 @@ + +using System; +using System.Collections.Generic; + +using System.Globalization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; + + +// +// +// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do: +// +// using CodeBeautify; +// +// var welcome1 = TicketRequest.FromJson(jsonString); + +namespace PortUpdate.Models; + +public partial class TicketRequest +{ + [JsonProperty("data")] + public Data Data { get; set; } +} + +public partial class Data +{ + [JsonProperty("username")] + public string Username { get; set; } + + [JsonProperty("clustername")] + public string Clustername { get; set; } + + [JsonProperty("ticket")] + public string Ticket { get; set; } + + [JsonProperty("CSRFPreventionToken")] + public string CsrfPreventionToken { get; set; } + + [JsonProperty("cap")] + public Cap Cap { get; set; } +} + +public partial class Cap +{ + [JsonProperty("mapping")] + public Mapping Mapping { get; set; } + + [JsonProperty("nodes")] + public System.Collections.Generic.Dictionary Nodes { get; set; } + + [JsonProperty("storage")] + public Storage Storage { get; set; } + + [JsonProperty("dc")] + public System.Collections.Generic.Dictionary Dc { get; set; } + + [JsonProperty("vms")] + public System.Collections.Generic.Dictionary Vms { get; set; } + + [JsonProperty("sdn")] + public Sdn Sdn { get; set; } + + [JsonProperty("access")] + public Access Access { get; set; } +} + +public partial class Access +{ + [JsonProperty("Group.Allocate")] + public long GroupAllocate { get; set; } + + [JsonProperty("Permissions.Modify")] + public long PermissionsModify { get; set; } + + [JsonProperty("User.Modify")] + public long UserModify { get; set; } +} + +public partial class Mapping +{ + [JsonProperty("Mapping.Modify")] + public long MappingModify { get; set; } + + [JsonProperty("Mapping.Use")] + public long MappingUse { get; set; } + + [JsonProperty("Permissions.Modify")] + public long PermissionsModify { get; set; } + + [JsonProperty("Mapping.Audit")] + public long MappingAudit { get; set; } +} + +public partial class Sdn +{ + [JsonProperty("SDN.Allocate")] + public long SdnAllocate { get; set; } + + [JsonProperty("SDN.Audit")] + public long SdnAudit { get; set; } + + [JsonProperty("Permissions.Modify")] + public long PermissionsModify { get; set; } + + [JsonProperty("SDN.Use")] + public long SdnUse { get; set; } +} + +public partial class Storage +{ + [JsonProperty("Datastore.AllocateSpace")] + public long DatastoreAllocateSpace { get; set; } + + [JsonProperty("Datastore.Audit")] + public long DatastoreAudit { get; set; } + + [JsonProperty("Datastore.AllocateTemplate")] + public long DatastoreAllocateTemplate { get; set; } + + [JsonProperty("Datastore.Allocate")] + public long DatastoreAllocate { get; set; } + + [JsonProperty("Permissions.Modify")] + public long PermissionsModify { get; set; } +} + +public partial class TicketRequest +{ + public static TicketRequest? FromJson(string json) => JsonConvert.DeserializeObject(json, Converter.Settings); +} + +public static class Serialize +{ + public static string ToJson(this TicketRequest self) => JsonConvert.SerializeObject(self, Converter.Settings); +} + +internal static class Converter +{ + public static readonly JsonSerializerSettings? Settings = new JsonSerializerSettings + { + MetadataPropertyHandling = MetadataPropertyHandling.Ignore, + DateParseHandling = DateParseHandling.None, + Converters = + { + new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal } + }, + }; +} + diff --git a/ports/PortUpdate/PortUpdate/PortUpdate.csproj b/ports/PortUpdate/PortUpdate/PortUpdate.csproj new file mode 100644 index 0000000..09dffed --- /dev/null +++ b/ports/PortUpdate/PortUpdate/PortUpdate.csproj @@ -0,0 +1,31 @@ + + + + Exe + net7.0 + enable + enable + Linux + + + + + + + + + + + + + + + + + + + .dockerignore + + + + diff --git a/ports/PortUpdate/PortUpdate/Program.cs b/ports/PortUpdate/PortUpdate/Program.cs new file mode 100644 index 0000000..daa28c1 --- /dev/null +++ b/ports/PortUpdate/PortUpdate/Program.cs @@ -0,0 +1,40 @@ +using System; +using PortUpdate; +using PortUpdate.Interfaces; +using PortUpdate.Logging; +using PortUpdate.Services; +using Docker.DotNet; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using RestSharp; + +var builder = new ConfigurationBuilder(); + +var configuration = builder.Build(); + +var serviceProvider = new ServiceCollection() + .AddSingleton(configuration) + .AddLogging(logging => logging.AddSpecterConsoleLogger(configuration => + { + // Replace warning value from appsettings.json of "Cyan" + configuration.LogLevelToColorMap[LogLevel.Warning] = ConsoleColor.DarkCyan; + // Replace warning value from appsettings.json of "Red" + configuration.LogLevelToColorMap[LogLevel.Error] = ConsoleColor.DarkRed; + })) + .AddSingleton() + .AddSingleton() + .AddSingleton() + .AddTransient() + /*.AddSingleton(new PveClient("192.168.178.66").ApiToken = "root@pam!858cc9ac-b8d2-42f7-a474-b2a193b18765")*/ + .BuildServiceProvider(); + +var dataAccess = serviceProvider.GetService(); +dataAccess?.Init(); + +var timerService = serviceProvider.GetService(); +timerService?.Start(); + +Console.ReadKey(); \ No newline at end of file diff --git a/ports/PortUpdate/PortUpdate/Services/DockerService.cs b/ports/PortUpdate/PortUpdate/Services/DockerService.cs new file mode 100644 index 0000000..f826206 --- /dev/null +++ b/ports/PortUpdate/PortUpdate/Services/DockerService.cs @@ -0,0 +1,49 @@ +using Docker.DotNet; +using Docker.DotNet.Models; +using Microsoft.Extensions.Logging; +using PortUpdate.Models; +using Port = PortUpdate.Models.Port; + +namespace PortUpdate.Services; + +public class DockerService +{ + private readonly ILogger _logger; + private readonly DockerClient _client; + public DockerService(ILogger logger) + { + _logger = logger; + _client = new DockerClientConfiguration() + .CreateClient(); + + } + + public async Task GetPorts() + { + var containers = await _client.Containers.ListContainersAsync(new ContainersListParameters()); + + PortRequest portsRequest = new PortRequest() + { + Ports = new List() + }; + foreach (var container in containers) + { + foreach (var containerPort in container.Ports) + { + if (containerPort.PublicPort != 0 && containerPort.PublicPort != 443 && containerPort.PublicPort != 80) + { + Port port = new Port() + { + Proto = containerPort.Type, + Dport = containerPort.PublicPort + }; + if(!portsRequest.Ports.Contains(port)) + portsRequest.Ports.Add(port); + } + + } + } + + return portsRequest; + } +} \ No newline at end of file diff --git a/ports/PortUpdate/PortUpdate/Services/ProxmoxService.cs b/ports/PortUpdate/PortUpdate/Services/ProxmoxService.cs new file mode 100644 index 0000000..d6f8e1d --- /dev/null +++ b/ports/PortUpdate/PortUpdate/Services/ProxmoxService.cs @@ -0,0 +1,186 @@ +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using PortUpdate.Models; +using RestSharp; + +namespace PortUpdate.Services; + +public class ProxmoxService +{ + + private readonly ILogger _logger; + + + public ProxmoxService(ILogger logger) + { + _logger = logger; + } + + + public async Task GetTicket() + { + var urls = new string[] + { + "https://192.168.188.40:8006", + "https://192.168.178.66:8006" + }; + foreach (var url in urls) + { + try + { + var options = new RestClientOptions(url) + { + MaxTimeout = -1, + RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true, + }; + var client = new RestClient(options); + var request = new RestRequest("/api2/json/access/ticket", Method.Post); + request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); + request.AddParameter("username", "portsync@pve"); + request.AddParameter("password", "8I*x5Y*gc101F+kS"); + RestResponse response = await client.ExecuteAsync(request); + + if (response.Content != null) + { + var ticket = TicketRequest.FromJson(response.Content); + return ticket; + } + } + catch + { + // ignored + } + } + + return null; + } + + public async Task GetPorts(TicketRequest ticket) + { + var urls = new string[] + { + "https://192.168.188.40:8006", + "https://192.168.178.66:8006" + }; + foreach (var url in urls) + { + try + { + + var options = new RestClientOptions(url) + { + MaxTimeout = -1, + RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true, + }; + var client = new RestClient(options); + var request = new RestRequest("/api2/json/cluster/firewall/groups/dynamic_public_ha/"); + request.AddHeader("Authorization", "PVEAuthCookie=" + ticket.Data.Ticket); + request.AddHeader("CSRFPreventionToken", ticket.Data.CsrfPreventionToken); + RestResponse response = await client.ExecuteAsync(request); + if (response.Content != null) + { + PortRequest? portRequest = JsonConvert.DeserializeObject(response.Content); + + var filterdPorts = new PortRequest(); + filterdPorts.Ports = new List(); + if (portRequest.Ports == null) + { + _logger.LogError("Get Ports request Failed"); + return null; + } + + foreach (var portRequestPort in portRequest.Ports) + { + if (portRequestPort.Dport != 0 && portRequestPort.Dport != 80 && portRequestPort.Dport != 443) + { + filterdPorts.Ports.Add(portRequestPort); + } + + } + + return filterdPorts; + + } + + } + catch + { + // ignored + } + } + return null; + } + + public async void AddPort(Port port, TicketRequest ticket) + { + var urls = new string[] + { + "https://192.168.188.40:8006", + "https://192.168.178.66:8006" + }; + foreach (var url in urls) + { + try + { + var options = new RestClientOptions(url) + { + MaxTimeout = -1, + RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true, + }; + var client = new RestClient(options); + var request = new RestRequest("/api2/json/cluster/firewall/groups/dynamic_public_ha", Method.Post); + request.AddHeader("Authorization", "PVEAuthCookie=" + ticket.Data.Ticket); + request.AddHeader("CSRFPreventionToken", ticket.Data.CsrfPreventionToken); + request.AddHeader("Content-Type", "application/json"); + request.AddStringBody(JsonConvert.SerializeObject(port), DataFormat.Json); + RestResponse response = await client.ExecuteAsync(request); + if (!response.IsSuccessful) + { + _logger.LogError("Add Ports request Failed!"); + } + } + catch + { + // ignored + } + + } + } + + public async void RemovePort(long pos, TicketRequest ticket) + { + //TODO: Move to environment + var urls = new string[] + { + "https://192.168.188.40:8006", + "https://192.168.178.66:8006" + }; + foreach (var url in urls) + { + try + { + var options = new RestClientOptions(url) + { + MaxTimeout = -1, + RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true, + }; + var client = new RestClient(options); + var request = new RestRequest("/api2/json/cluster/firewall/groups/dynamic_public_ha/" + pos, Method.Delete); + request.AddHeader("Authorization", "PVEAuthCookie=" + ticket.Data.Ticket); + request.AddHeader("CSRFPreventionToken", ticket.Data.CsrfPreventionToken); + + RestResponse response = await client.ExecuteAsync(request); + if (!response.IsSuccessful) + { + _logger.LogError("Delete Port " + pos + " Request Failed"); + } + } + catch + { + // ignored + } + } + } + +} \ No newline at end of file diff --git a/ports/PortUpdate/PortUpdate/Services/SyncService.cs b/ports/PortUpdate/PortUpdate/Services/SyncService.cs new file mode 100644 index 0000000..763157e --- /dev/null +++ b/ports/PortUpdate/PortUpdate/Services/SyncService.cs @@ -0,0 +1,98 @@ +using System.Net.Http.Headers; +using PortUpdate.Interfaces; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using PortUpdate.Models; +using RestSharp; +using RestSharp.Serializers; +using Spectre.Console; +using Console = Spectre.Console.AnsiConsole; +using Port = PortUpdate.Models.Port; + +namespace PortUpdate.Services; + +public class SyncService : IPortService +{ + + private readonly ILogger _logger; + private readonly DockerService _docker; + private readonly ProxmoxService _proxmox; + + + public SyncService(ILogger logger, DockerService docker, ProxmoxService proxmox) + { + _logger = logger; + _docker = docker; + _proxmox = proxmox; + } + + + public async void Init() + { + + } + + public async void Update() + { + var newPorts = await _docker.GetPorts(); + var proxmoxTicket = await _proxmox.GetTicket(); + var currentPorts = await _proxmox.GetPorts(proxmoxTicket ?? throw new Exception("Got no Ticket")); + + + + if (newPorts == null || currentPorts == null) + { + _logger.LogError("Update Failed"); + return; + }; + + ProcessPortRequest(currentPorts, newPorts, proxmoxTicket); + } + + private static bool ExistsIn(Port port, PortRequest destination) + { + foreach (var dPort in destination.Ports) + { + if (dPort.Dport == port.Dport && dPort.Proto == port.Proto) return true; + } + + return false; + } + + private void ProcessPortRequest(PortRequest currentPorts,PortRequest newPorts, TicketRequest proxmoxTicket) + { + + // Fetch the current list of ports from Proxmox + + // Remove ports that are present in currentPorts but not in portRequest.Ports (based on Pos and Proto) + foreach (var currentPort in currentPorts.Ports) + { + bool shouldRemove = !newPorts.Ports.Any(requestedPort => + requestedPort.Dport == currentPort.Dport && requestedPort.Proto == currentPort.Proto); + + if (shouldRemove) + { + _proxmox.RemovePort(currentPort.Pos, proxmoxTicket); + } + } + + // Add ports that are present in portRequest.Ports but not in currentPorts (based on Pos and Proto) + foreach (var port in newPorts.Ports) + { + bool shouldAdd = !currentPorts.Ports.Any(currentPort => + currentPort.Dport == port.Dport && currentPort.Proto == port.Proto); + + if (shouldAdd) + { + _proxmox.AddPort(new Port() + { + Dport = port.Dport, + Proto = port.Proto + }, proxmoxTicket); + } + } + } + + + +} diff --git a/ports/PortUpdate/PortUpdate/Services/TimerService.cs b/ports/PortUpdate/PortUpdate/Services/TimerService.cs new file mode 100644 index 0000000..e084633 --- /dev/null +++ b/ports/PortUpdate/PortUpdate/Services/TimerService.cs @@ -0,0 +1,38 @@ +using System; +using System.Threading; +using PortUpdate.Interfaces; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +namespace PortUpdate.Services; + +public class TimerService : ITimerService +{ + private Timer timer; + private readonly ILogger _logger; + private readonly IServiceScopeFactory _factory; + private readonly int intervalSeconds; + + public TimerService(ILogger logger,IServiceScopeFactory factory, IConfiguration configuration) + { + _logger = logger; + _factory = factory; + intervalSeconds = 30; + timer = new Timer(TimerCallback, null, TimeSpan.Zero, TimeSpan.FromSeconds(intervalSeconds)); + } + + private async void TimerCallback(Object o) + { + _logger.LogDebug("Timer callback executed at " + DateTime.Now); + await using var asyncScope = _factory.CreateAsyncScope(); + var portService = asyncScope.ServiceProvider.GetRequiredService(); + portService.Update(); + + } + + public void Start() + { + _logger.LogInformation("Timer service started."); + } +} \ No newline at end of file diff --git a/ports/PortUpdate/global.json b/ports/PortUpdate/global.json new file mode 100644 index 0000000..aaac9e0 --- /dev/null +++ b/ports/PortUpdate/global.json @@ -0,0 +1,7 @@ +{ + "sdk": { + "version": "7.0.0", + "rollForward": "latestMinor", + "allowPrerelease": false + } +} \ No newline at end of file