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