diff --git a/Apis/IServerDiscordApi.cs b/DiscordBot.App/Apis/IServerDiscordApi.cs similarity index 95% rename from Apis/IServerDiscordApi.cs rename to DiscordBot.App/Apis/IServerDiscordApi.cs index a56fb98..6391500 100644 --- a/Apis/IServerDiscordApi.cs +++ b/DiscordBot.App/Apis/IServerDiscordApi.cs @@ -1,7 +1,7 @@ -using app.Models; +using DiscordBot.Models; using Refit; -namespace app.Apis; +namespace DiscordBot.Apis; public interface IServerDiscordApi { diff --git a/Commands/GeneralCommands.cs b/DiscordBot.App/Commands/GeneralCommands.cs similarity index 99% rename from Commands/GeneralCommands.cs rename to DiscordBot.App/Commands/GeneralCommands.cs index 262d3ef..35478ee 100644 --- a/Commands/GeneralCommands.cs +++ b/DiscordBot.App/Commands/GeneralCommands.cs @@ -1,12 +1,12 @@ -using app.Apis; -using app.Services; +using DiscordBot.Apis; +using DiscordBot.Services; using DSharpPlus.CommandsNext; using DSharpPlus.CommandsNext.Attributes; using DSharpPlus.Entities; using DSharpPlus.SlashCommands; using Serilog; -namespace app.Commands; +namespace DiscordBot.Commands; public class GeneralCommands : ApplicationCommandModule { diff --git a/Commands/RestartCommands.cs b/DiscordBot.App/Commands/RestartCommands.cs similarity index 97% rename from Commands/RestartCommands.cs rename to DiscordBot.App/Commands/RestartCommands.cs index 810eec1..8aefbc7 100644 --- a/Commands/RestartCommands.cs +++ b/DiscordBot.App/Commands/RestartCommands.cs @@ -1,9 +1,9 @@ -using app.Apis; -using app.Services; +using DiscordBot.Apis; +using DiscordBot.Services; using DSharpPlus.Entities; using Serilog; -namespace app.Commands; +namespace DiscordBot.Commands; using DSharpPlus.SlashCommands; public class RestartCommands : ApplicationCommandModule diff --git a/Controllers/DiscordController.cs b/DiscordBot.App/Controllers/DiscordController.cs similarity index 97% rename from Controllers/DiscordController.cs rename to DiscordBot.App/Controllers/DiscordController.cs index 0f0cdca..719b74d 100644 --- a/Controllers/DiscordController.cs +++ b/DiscordBot.App/Controllers/DiscordController.cs @@ -1,10 +1,10 @@ -using app.Models; -using app.Services; +using DiscordBot.Models; +using DiscordBot.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Serilog; -namespace app.Controllers; +namespace DiscordBot.Controllers; [ApiController] [Authorize] diff --git a/Controllers/FeedsController.cs b/DiscordBot.App/Controllers/FeedsController.cs similarity index 96% rename from Controllers/FeedsController.cs rename to DiscordBot.App/Controllers/FeedsController.cs index a33a94d..055dc86 100644 --- a/Controllers/FeedsController.cs +++ b/DiscordBot.App/Controllers/FeedsController.cs @@ -1,9 +1,9 @@ -using app.Services; +using DiscordBot.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Serilog; -namespace app.Controllers; +namespace DiscordBot.Controllers; [ApiController] [Authorize] diff --git a/Controllers/PresenceController.cs b/DiscordBot.App/Controllers/PresenceController.cs similarity index 91% rename from Controllers/PresenceController.cs rename to DiscordBot.App/Controllers/PresenceController.cs index e3c5eb1..1dffeaa 100644 --- a/Controllers/PresenceController.cs +++ b/DiscordBot.App/Controllers/PresenceController.cs @@ -1,10 +1,10 @@ -using app.Services; +using DiscordBot.Services; using DSharpPlus.Entities; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Serilog; -namespace app.Controllers; +namespace DiscordBot.Controllers; [ApiController] [Authorize] diff --git a/app.csproj b/DiscordBot.App/DiscordBot.App.csproj similarity index 92% rename from app.csproj rename to DiscordBot.App/DiscordBot.App.csproj index ce6337a..2a05e63 100644 --- a/app.csproj +++ b/DiscordBot.App/DiscordBot.App.csproj @@ -26,4 +26,8 @@ + + + + diff --git a/Dockerfile b/DiscordBot.App/Dockerfile similarity index 100% rename from Dockerfile rename to DiscordBot.App/Dockerfile diff --git a/Middlewares/BasicAuthenticationHandler.cs b/DiscordBot.App/Middlewares/BasicAuthenticationHandler.cs similarity index 96% rename from Middlewares/BasicAuthenticationHandler.cs rename to DiscordBot.App/Middlewares/BasicAuthenticationHandler.cs index 995eb91..9d2ca6d 100644 --- a/Middlewares/BasicAuthenticationHandler.cs +++ b/DiscordBot.App/Middlewares/BasicAuthenticationHandler.cs @@ -1,11 +1,11 @@ -using app.Models; +using DiscordBot.Models; using Microsoft.AspNetCore.Authentication; using Microsoft.Extensions.Options; using System.Security.Claims; using System.Text; using System.Text.Encodings.Web; -namespace app.Middlewares; +namespace DiscordBot.Middlewares; public class BasicAuthenticationHandler : AuthenticationHandler { diff --git a/Program.cs b/DiscordBot.App/Program.cs similarity index 93% rename from Program.cs rename to DiscordBot.App/Program.cs index 1124f86..edcd618 100644 --- a/Program.cs +++ b/DiscordBot.App/Program.cs @@ -1,8 +1,8 @@ -using app.Services; -using app.Settings; -using app; -using app.Models; -using app.Middlewares; +using DiscordBot.Services; +using DiscordBot.Settings; +using DiscordBot; +using DiscordBot.Models; +using DiscordBot.Middlewares; using Microsoft.AspNetCore.Authentication; using Serilog; @@ -17,8 +17,6 @@ var serverApiSettings = new ServerApiSettings(); builder.Configuration.GetSection(nameof(ServerApiSettings)).Bind(serverApiSettings); - - builder.Services.Configure(options => builder.Configuration.GetSection(nameof(DiscordSettings)).Bind(options)); builder.Services.Configure(options => builder.Configuration.GetSection(nameof(ServerApiSettings)).Bind(options)); builder.Services.Configure(options => builder.Configuration.GetSection(nameof(Credentials)).Bind(options)); @@ -31,6 +29,7 @@ builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddHostedService(provider => provider.GetService()); + builder.Services.AddAuthentication("BasicAuthentication") .AddScheme("BasicAuthentication", null); diff --git a/Properties/launchSettings.json b/DiscordBot.App/Properties/launchSettings.json similarity index 100% rename from Properties/launchSettings.json rename to DiscordBot.App/Properties/launchSettings.json diff --git a/ServiceExtensions.cs b/DiscordBot.App/ServiceExtensions.cs similarity index 95% rename from ServiceExtensions.cs rename to DiscordBot.App/ServiceExtensions.cs index b6392a4..3e126de 100644 --- a/ServiceExtensions.cs +++ b/DiscordBot.App/ServiceExtensions.cs @@ -1,11 +1,11 @@ -using app.Apis; -using app.Settings; +using DiscordBot.Apis; +using DiscordBot.Settings; using Microsoft.OpenApi.Models; using Refit; using System.Net.Http.Headers; using System.Text; -namespace app; +namespace DiscordBot; public static class ServiceExtensions { diff --git a/Services/DiscordService.cs b/DiscordBot.App/Services/DiscordService.cs similarity index 98% rename from Services/DiscordService.cs rename to DiscordBot.App/Services/DiscordService.cs index cc97a9d..cb5e11f 100644 --- a/Services/DiscordService.cs +++ b/DiscordBot.App/Services/DiscordService.cs @@ -1,14 +1,14 @@ -using app.Settings; +using DiscordBot.Settings; using DSharpPlus; using DSharpPlus.CommandsNext; using DSharpPlus.Entities; -using app.Commands; +using DiscordBot.Commands; using Serilog; using DSharpPlus.EventArgs; using Microsoft.Extensions.Options; using DSharpPlus.SlashCommands; -namespace app.Services; +namespace DiscordBot.Services; public class DiscordService { diff --git a/Services/GuildJoinService.cs b/DiscordBot.App/Services/GuildJoinService.cs similarity index 95% rename from Services/GuildJoinService.cs rename to DiscordBot.App/Services/GuildJoinService.cs index b7ded6e..614d57f 100644 --- a/Services/GuildJoinService.cs +++ b/DiscordBot.App/Services/GuildJoinService.cs @@ -1,8 +1,8 @@ -using app.Apis; +using DiscordBot.Apis; using DSharpPlus; using DSharpPlus.EventArgs; -namespace app.Services; +namespace DiscordBot.Services; public class GuildJoinService { diff --git a/Services/LoginService.cs b/DiscordBot.App/Services/LoginService.cs similarity index 97% rename from Services/LoginService.cs rename to DiscordBot.App/Services/LoginService.cs index 026a788..c6b35c8 100644 --- a/Services/LoginService.cs +++ b/DiscordBot.App/Services/LoginService.cs @@ -1,8 +1,8 @@ -using app.Apis; +using DiscordBot.Apis; using DSharpPlus; using DSharpPlus.EventArgs; -namespace app.Services; +namespace DiscordBot.Services; public class LoginService { diff --git a/Services/RunnerService.cs b/DiscordBot.App/Services/RunnerService.cs similarity index 96% rename from Services/RunnerService.cs rename to DiscordBot.App/Services/RunnerService.cs index a5bb52d..ab5c845 100644 --- a/Services/RunnerService.cs +++ b/DiscordBot.App/Services/RunnerService.cs @@ -1,8 +1,8 @@ -using app.Apis; +using DiscordBot.Apis; using DSharpPlus.Entities; using Serilog; -namespace app.Services; +namespace DiscordBot.Services; public class RunnerService : BackgroundService { diff --git a/Settings/DiscordSettings.cs b/DiscordBot.App/Settings/DiscordSettings.cs similarity index 96% rename from Settings/DiscordSettings.cs rename to DiscordBot.App/Settings/DiscordSettings.cs index 89b1db2..ab8bbb8 100644 --- a/Settings/DiscordSettings.cs +++ b/DiscordBot.App/Settings/DiscordSettings.cs @@ -1,4 +1,4 @@ -namespace app.Settings; +namespace DiscordBot.Settings; public class Roles { diff --git a/Settings/ServerApiSettings.cs b/DiscordBot.App/Settings/ServerApiSettings.cs similarity index 81% rename from Settings/ServerApiSettings.cs rename to DiscordBot.App/Settings/ServerApiSettings.cs index b6bda3b..f816758 100644 --- a/Settings/ServerApiSettings.cs +++ b/DiscordBot.App/Settings/ServerApiSettings.cs @@ -1,4 +1,4 @@ -namespace app.Settings; +namespace DiscordBot.Settings; public class ServerApiSettings { diff --git a/appsettings.Development.json b/DiscordBot.App/appsettings.Development.json similarity index 100% rename from appsettings.Development.json rename to DiscordBot.App/appsettings.Development.json diff --git a/appsettings.json b/DiscordBot.App/appsettings.json similarity index 95% rename from appsettings.json rename to DiscordBot.App/appsettings.json index 9ccba03..0a4060a 100644 --- a/appsettings.json +++ b/DiscordBot.App/appsettings.json @@ -11,7 +11,7 @@ "Password": "your_password" }, "ServerApiSettings": { - "Url": "http://localhost:9696/api/", + "Url": "http://localhost:9697/", "Username": "admin", "Password": "test" }, diff --git a/DiscordBot.Data/DiscordBot.Data.csproj b/DiscordBot.Data/DiscordBot.Data.csproj new file mode 100644 index 0000000..cfadb03 --- /dev/null +++ b/DiscordBot.Data/DiscordBot.Data.csproj @@ -0,0 +1,9 @@ + + + + net7.0 + enable + enable + + + diff --git a/Models/Credentials.cs b/DiscordBot.Data/Models/Credentials.cs similarity index 77% rename from Models/Credentials.cs rename to DiscordBot.Data/Models/Credentials.cs index 0f307b3..860b531 100644 --- a/Models/Credentials.cs +++ b/DiscordBot.Data/Models/Credentials.cs @@ -1,4 +1,4 @@ -namespace app.Models; +namespace DiscordBot.Models; public class Credentials { diff --git a/Models/DiscordUserDto.cs b/DiscordBot.Data/Models/DiscordUserDto.cs similarity index 86% rename from Models/DiscordUserDto.cs rename to DiscordBot.Data/Models/DiscordUserDto.cs index def9361..45bc155 100644 --- a/Models/DiscordUserDto.cs +++ b/DiscordBot.Data/Models/DiscordUserDto.cs @@ -1,4 +1,4 @@ -namespace app.Models; +namespace DiscordBot.Models; public class DiscordUserDto { diff --git a/Models/ResponsePairDto.cs b/DiscordBot.Data/Models/ResponsePairDto.cs similarity index 89% rename from Models/ResponsePairDto.cs rename to DiscordBot.Data/Models/ResponsePairDto.cs index aa27934..8ce50bb 100644 --- a/Models/ResponsePairDto.cs +++ b/DiscordBot.Data/Models/ResponsePairDto.cs @@ -1,4 +1,4 @@ -namespace app.Models; +namespace DiscordBot.Models; public class ResponsePairDto { diff --git a/DiscordBot.FakeServer/Controllers/ServerController.cs b/DiscordBot.FakeServer/Controllers/ServerController.cs new file mode 100644 index 0000000..007f2d4 --- /dev/null +++ b/DiscordBot.FakeServer/Controllers/ServerController.cs @@ -0,0 +1,74 @@ +using DiscordBot.Models; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace DiscordBot.FakeServer.Controllers; + +[ApiController] +[Authorize] +[Route("[action]")] +public class ServerController : ControllerBase +{ + [HttpPost("/remove-read-only")] + public bool PostRemoveReadOnly(string channel, ulong senderId, string senderName, ulong targetId, string targetName) + { + return true; + } + + [HttpPost("/read-only")] + public bool PostReadOnly(string channel, ulong senderId, string senderName, ulong targetId, string targetName, string reason) + { + return true; + } + + [HttpGet("/apps")] + public string GetApps() + { + return "Currently no apps..."; + } + + [HttpGet("/account-status")] + public string GetAccountStatus(ulong id) + { + return "[]"; + } + + [HttpPost("/announce")] + public void PostAnnouncement(string text) + { + } + + [HttpPost("/save")] + public bool PostSave() + { + return true; + } + + [HttpGet("/ping")] + public bool GetPing() + { + return true; + } + + [HttpPost("/kick")] + public bool PostKick(string channel, ulong senderId, string senderName, ulong targetId, string targetName, string reason) + { + return true; + } + + [HttpPost("/ban")] + public bool PostBan(string channel, ulong senderId, string senderName, ulong targetId, string targetName, string reason) + { + return true; + } + + [HttpPost("/login")] + public ResponsePairDto PostLogin(string name, ulong id, string username, string discriminator, string avatarurl, string password) + { + return new ResponsePairDto() + { + Message = "Success", + Status = true + }; + } +} \ No newline at end of file diff --git a/DiscordBot.FakeServer/DiscordBot.FakeServer.csproj b/DiscordBot.FakeServer/DiscordBot.FakeServer.csproj new file mode 100644 index 0000000..0fa0b59 --- /dev/null +++ b/DiscordBot.FakeServer/DiscordBot.FakeServer.csproj @@ -0,0 +1,18 @@ + + + + net7.0 + enable + enable + + + + + + + + + + + + diff --git a/DiscordBot.FakeServer/Middlewares/BasicAuthenticationHandler.cs b/DiscordBot.FakeServer/Middlewares/BasicAuthenticationHandler.cs new file mode 100644 index 0000000..d4e2f8d --- /dev/null +++ b/DiscordBot.FakeServer/Middlewares/BasicAuthenticationHandler.cs @@ -0,0 +1,51 @@ +using DiscordBot.Models; +using Microsoft.AspNetCore.Authentication; +using Microsoft.Extensions.Options; +using System.Security.Claims; +using System.Text; +using System.Text.Encodings.Web; + +namespace DiscordBot.Middlewares; + +public class BasicAuthenticationHandler : AuthenticationHandler +{ + private readonly IConfiguration _configuration; + private readonly Credentials _credentials; + + public BasicAuthenticationHandler( + IOptionsMonitor options, + ILoggerFactory logger, + UrlEncoder encoder, + ISystemClock clock, + IOptions credentials, + IConfiguration configuration) : base(options, logger, encoder, clock) + { + _configuration = configuration; + _credentials = credentials.Value; + } + + protected override async Task HandleAuthenticateAsync() + { + string authHeader = Request.Headers["Authorization"]; + if (authHeader != null && authHeader.StartsWith("Basic", StringComparison.InvariantCultureIgnoreCase)) + { + + var authHeaderValue = authHeader.Replace("Basic ", "", StringComparison.InvariantCultureIgnoreCase); + var decodedAuthHeaderValue = Encoding.UTF8.GetString(Convert.FromBase64String(authHeaderValue)); + var userPassArray = decodedAuthHeaderValue.Split(":"); + var extractedUsername = userPassArray[0]; + var extractedPassword = userPassArray[1]; + + if (string.Equals(_credentials.Username, extractedUsername) && string.Equals(extractedPassword, _credentials.Password)) + { + var claims = new[] { new Claim(ClaimTypes.Name, _credentials.Username) }; + var identity = new ClaimsIdentity(claims, Scheme.Name); + var principal = new ClaimsPrincipal(identity); + var ticket = new AuthenticationTicket(principal, Scheme.Name); + + return AuthenticateResult.Success(ticket); + } + } + return AuthenticateResult.Fail("Failed to authenticate"); + } +} diff --git a/DiscordBot.FakeServer/Program.cs b/DiscordBot.FakeServer/Program.cs new file mode 100644 index 0000000..27b0d4e --- /dev/null +++ b/DiscordBot.FakeServer/Program.cs @@ -0,0 +1,33 @@ +using DiscordBot.FakeServer; +using DiscordBot.Middlewares; +using DiscordBot.Models; +using Microsoft.AspNetCore.Authentication; + +var builder = WebApplication.CreateBuilder(args); +builder.Services.Configure(options => builder.Configuration.GetSection(nameof(Credentials)).Bind(options)); + +builder.Services.AddControllers(); +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(); +builder.Services.AddAuthentication("BasicAuthentication") + .AddScheme("BasicAuthentication", null); +builder.Services.AddSwaggerServices(); + + +var app = builder.Build(); + +if (app.Environment.IsDevelopment()) +{ + app.UseSwagger(); + app.UseSwaggerUI(); +} + +app.UseHttpsRedirection(); + +app.UseAuthentication(); +app.UseAuthorization(); + + +app.MapControllers(); + +app.Run(); diff --git a/DiscordBot.FakeServer/Properties/launchSettings.json b/DiscordBot.FakeServer/Properties/launchSettings.json new file mode 100644 index 0000000..b1733ff --- /dev/null +++ b/DiscordBot.FakeServer/Properties/launchSettings.json @@ -0,0 +1,41 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:9697", + "sslPort": 44382 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "http://localhost:9697", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "https://localhost:9698;http://localhost:9697", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "swagger", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/DiscordBot.FakeServer/ServiceExtensions.cs b/DiscordBot.FakeServer/ServiceExtensions.cs new file mode 100644 index 0000000..aca6828 --- /dev/null +++ b/DiscordBot.FakeServer/ServiceExtensions.cs @@ -0,0 +1,33 @@ +using Microsoft.OpenApi.Models; + +namespace DiscordBot.FakeServer; + +public static class ServiceExtensions +{ + public static IServiceCollection AddSwaggerServices(this IServiceCollection collection) + { + collection.AddSwaggerGen(c => + { + c.SwaggerDoc("v1", new OpenApiInfo { Title = "Your API", Version = "v1" }); + c.AddSecurityDefinition("Basic", new OpenApiSecurityScheme + { + Name = "Authorization", + Type = SecuritySchemeType.Http, + Scheme = "basic", + In = ParameterLocation.Header, + Description = "Basic Authorization header." + }); + c.AddSecurityRequirement(new OpenApiSecurityRequirement + { + { + new OpenApiSecurityScheme + { + Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Basic" } + }, + Array.Empty() + } + }); + }); + return collection; + } +} diff --git a/DiscordBot.FakeServer/appsettings.Development.json b/DiscordBot.FakeServer/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/DiscordBot.FakeServer/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/DiscordBot.FakeServer/appsettings.json b/DiscordBot.FakeServer/appsettings.json new file mode 100644 index 0000000..14d47aa --- /dev/null +++ b/DiscordBot.FakeServer/appsettings.json @@ -0,0 +1,13 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "Credentials": { + "Username": "admin", + "Password": "test" + } +} diff --git a/DiscordBot.sln b/DiscordBot.sln new file mode 100644 index 0000000..9262871 --- /dev/null +++ b/DiscordBot.sln @@ -0,0 +1,37 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.7.34202.233 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DiscordBot.App", "DiscordBot.App\DiscordBot.App.csproj", "{0C50FDF8-9B8D-453B-933D-AD0D7ADC7F94}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscordBot.FakeServer", "DiscordBot.FakeServer\DiscordBot.FakeServer.csproj", "{07F2AE8C-6471-4AD7-99A8-1C017935EC5C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscordBot.Data", "DiscordBot.Data\DiscordBot.Data.csproj", "{377974DC-9816-4674-947B-58052946D481}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0C50FDF8-9B8D-453B-933D-AD0D7ADC7F94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0C50FDF8-9B8D-453B-933D-AD0D7ADC7F94}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0C50FDF8-9B8D-453B-933D-AD0D7ADC7F94}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0C50FDF8-9B8D-453B-933D-AD0D7ADC7F94}.Release|Any CPU.Build.0 = Release|Any CPU + {07F2AE8C-6471-4AD7-99A8-1C017935EC5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {07F2AE8C-6471-4AD7-99A8-1C017935EC5C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {07F2AE8C-6471-4AD7-99A8-1C017935EC5C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {07F2AE8C-6471-4AD7-99A8-1C017935EC5C}.Release|Any CPU.Build.0 = Release|Any CPU + {377974DC-9816-4674-947B-58052946D481}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {377974DC-9816-4674-947B-58052946D481}.Debug|Any CPU.Build.0 = Debug|Any CPU + {377974DC-9816-4674-947B-58052946D481}.Release|Any CPU.ActiveCfg = Release|Any CPU + {377974DC-9816-4674-947B-58052946D481}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {E2E4773C-C24E-4416-B1BA-74362A08A2E2} + EndGlobalSection +EndGlobal diff --git a/app.sln b/app.sln deleted file mode 100644 index b6db22b..0000000 --- a/app.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.7.34202.233 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "app", "app.csproj", "{0C50FDF8-9B8D-453B-933D-AD0D7ADC7F94}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {0C50FDF8-9B8D-453B-933D-AD0D7ADC7F94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0C50FDF8-9B8D-453B-933D-AD0D7ADC7F94}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0C50FDF8-9B8D-453B-933D-AD0D7ADC7F94}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0C50FDF8-9B8D-453B-933D-AD0D7ADC7F94}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {E2E4773C-C24E-4416-B1BA-74362A08A2E2} - EndGlobalSection -EndGlobal