From a172f05269c07a86949730b68f466dbb39efd35c Mon Sep 17 00:00:00 2001 From: Riccardo Usardi Date: Sun, 6 Jul 2025 21:37:41 +0200 Subject: [PATCH] new init api and start auth --- .vs/uWine/DesignTimeBuild/.dtbcache.v2 | Bin 169893 -> 169911 bytes .vs/uWine/v17/.suo | Bin 75776 -> 113664 bytes .vs/uWine/v17/DocumentLayout.backup.json | 177 +++++++++++++----- .vs/uWine/v17/DocumentLayout.json | 177 +++++++++++++----- .../Controllers/WeatherForecastController.cs | 33 ++++ test.api3/Program.cs | 34 ++++ test.api3/Properties/launchSettings.json | 31 +++ test.api3/WeatherForecast.cs | 13 ++ test.api3/appsettings.Development.json | 8 + test.api3/appsettings.json | 9 + test.api3/test.api3.csproj | 13 ++ test.api3/test.api3.http | 6 + uWine.Api/Controllers/UserController.cs | 14 ++ uWine.Api/Program.cs | 34 ++++ uWine.Api/Properties/launchSettings.json | 31 +++ uWine.Api/appsettings.Development.json | 8 + uWine.Api/appsettings.json | 9 + uWine.Api/uWine.Api.csproj | 13 ++ uWine.Api/uWine.Api.csproj.user | 7 + .../Repositories/IAuthenticationRepository.cs | 10 + .../net8.0/uWine.Core.Domain.AssemblyInfo.cs | 2 +- ...uWine.Core.Domain.AssemblyInfoInputs.cache | 2 +- .../MariaDbAuthenticationRepository.cs | 40 ++++ .../Services/AuthenticationService.cs | 25 +++ .../Services/OwnerService.cs | 40 ++++ uWine.sln | 6 + 26 files changed, 640 insertions(+), 102 deletions(-) create mode 100644 test.api3/Controllers/WeatherForecastController.cs create mode 100644 test.api3/Program.cs create mode 100644 test.api3/Properties/launchSettings.json create mode 100644 test.api3/WeatherForecast.cs create mode 100644 test.api3/appsettings.Development.json create mode 100644 test.api3/appsettings.json create mode 100644 test.api3/test.api3.csproj create mode 100644 test.api3/test.api3.http create mode 100644 uWine.Api/Controllers/UserController.cs create mode 100644 uWine.Api/Program.cs create mode 100644 uWine.Api/Properties/launchSettings.json create mode 100644 uWine.Api/appsettings.Development.json create mode 100644 uWine.Api/appsettings.json create mode 100644 uWine.Api/uWine.Api.csproj create mode 100644 uWine.Api/uWine.Api.csproj.user create mode 100644 uWine.Core.Domain/Repositories/IAuthenticationRepository.cs create mode 100644 uWine.Core.Infrastructure/Repository/MariaDbAuthenticationRepository.cs create mode 100644 uWine.Core.Infrastructure/Services/AuthenticationService.cs create mode 100644 uWine.Core.Infrastructure/Services/OwnerService.cs diff --git a/.vs/uWine/DesignTimeBuild/.dtbcache.v2 b/.vs/uWine/DesignTimeBuild/.dtbcache.v2 index 9ad15d2fa9d61f0d4c6163bbea4a33c28d7d1735..7fa485b40c01f114a1f446834f9cf9a16cda8509 100644 GIT binary patch delta 15530 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

f-h3=WeUDZ!PhDHCI#Q7;CmGOkb<93 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

nOuDxJziHPdLyDzHJQcv<)rai@_r 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 PwAbbF|21zSPfYwjwcjT> diff --git a/.vs/uWine/v17/.suo b/.vs/uWine/v17/.suo index 1d285c0760e0a762dc023d891fe1fd4408b617d6..2e3d3c51f6bcece0a38065d363e7e8f65f877214 100644 GIT binary patch literal 113664 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 _logger; + + public WeatherForecastController(ILogger logger) + { + _logger = logger; + } + + [HttpGet(Name = "GetWeatherForecast")] + public IEnumerable Get() + { + return Enumerable.Range(1, 5).Select(index => new WeatherForecast + { + Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), + TemperatureC = Random.Shared.Next(-20, 55), + Summary = Summaries[Random.Shared.Next(Summaries.Length)] + }) + .ToArray(); + } + } +} diff --git a/test.api3/Program.cs b/test.api3/Program.cs new file mode 100644 index 0000000..bd834c1 --- /dev/null +++ b/test.api3/Program.cs @@ -0,0 +1,34 @@ + +namespace test.api3 +{ + public class Program + { + public static void Main(string[] args) + { + var builder = WebApplication.CreateBuilder(args); + + // Add services to the container. + + builder.Services.AddControllers(); + // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle + builder.Services.AddEndpointsApiExplorer(); + builder.Services.AddSwaggerGen(); + + var app = builder.Build(); + + // Configure the HTTP request pipeline. + if (app.Environment.IsDevelopment()) + { + app.UseSwagger(); + app.UseSwaggerUI(); + } + + app.UseAuthorization(); + + + app.MapControllers(); + + app.Run(); + } + } +} diff --git a/test.api3/Properties/launchSettings.json b/test.api3/Properties/launchSettings.json new file mode 100644 index 0000000..2c73b12 --- /dev/null +++ b/test.api3/Properties/launchSettings.json @@ -0,0 +1,31 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:2824", + "sslPort": 0 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "http://localhost:5228", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "swagger", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/test.api3/WeatherForecast.cs b/test.api3/WeatherForecast.cs new file mode 100644 index 0000000..d46bde7 --- /dev/null +++ b/test.api3/WeatherForecast.cs @@ -0,0 +1,13 @@ +namespace test.api3 +{ + public class WeatherForecast + { + public DateOnly Date { get; set; } + + public int TemperatureC { get; set; } + + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + + public string? Summary { get; set; } + } +} diff --git a/test.api3/appsettings.Development.json b/test.api3/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/test.api3/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/test.api3/appsettings.json b/test.api3/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/test.api3/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/test.api3/test.api3.csproj b/test.api3/test.api3.csproj new file mode 100644 index 0000000..9daa180 --- /dev/null +++ b/test.api3/test.api3.csproj @@ -0,0 +1,13 @@ + + + + net8.0 + enable + enable + + + + + + + diff --git a/test.api3/test.api3.http b/test.api3/test.api3.http new file mode 100644 index 0000000..874614d --- /dev/null +++ b/test.api3/test.api3.http @@ -0,0 +1,6 @@ +@test.api3_HostAddress = http://localhost:5228 + +GET {{test.api3_HostAddress}}/weatherforecast/ +Accept: application/json + +### diff --git a/uWine.Api/Controllers/UserController.cs b/uWine.Api/Controllers/UserController.cs new file mode 100644 index 0000000..76f155e --- /dev/null +++ b/uWine.Api/Controllers/UserController.cs @@ -0,0 +1,14 @@ +using Microsoft.AspNetCore.Mvc; + +namespace uWine.Api.Controllers +{ + [ApiController] + [Route("/login/")] + public class UserController : Controller + { + public IActionResult Index() + { + return View(); + } + } +} diff --git a/uWine.Api/Program.cs b/uWine.Api/Program.cs new file mode 100644 index 0000000..d2926ce --- /dev/null +++ b/uWine.Api/Program.cs @@ -0,0 +1,34 @@ + +namespace uWine.Api +{ + public class Program + { + public static void Main(string[] args) + { + var builder = WebApplication.CreateBuilder(args); + + // Add services to the container. + + builder.Services.AddControllers(); + // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle + builder.Services.AddEndpointsApiExplorer(); + builder.Services.AddSwaggerGen(); + + var app = builder.Build(); + + // Configure the HTTP request pipeline. + if (app.Environment.IsDevelopment()) + { + app.UseSwagger(); + app.UseSwaggerUI(); + } + + app.UseAuthorization(); + + + app.MapControllers(); + + app.Run(); + } + } +} diff --git a/uWine.Api/Properties/launchSettings.json b/uWine.Api/Properties/launchSettings.json new file mode 100644 index 0000000..a22ca1c --- /dev/null +++ b/uWine.Api/Properties/launchSettings.json @@ -0,0 +1,31 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:54397", + "sslPort": 0 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "http://localhost:5185", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "swagger", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/uWine.Api/appsettings.Development.json b/uWine.Api/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/uWine.Api/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/uWine.Api/appsettings.json b/uWine.Api/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/uWine.Api/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/uWine.Api/uWine.Api.csproj b/uWine.Api/uWine.Api.csproj new file mode 100644 index 0000000..9daa180 --- /dev/null +++ b/uWine.Api/uWine.Api.csproj @@ -0,0 +1,13 @@ + + + + net8.0 + enable + enable + + + + + + + diff --git a/uWine.Api/uWine.Api.csproj.user b/uWine.Api/uWine.Api.csproj.user new file mode 100644 index 0000000..e4f6e71 --- /dev/null +++ b/uWine.Api/uWine.Api.csproj.user @@ -0,0 +1,7 @@ + + + + MvcControllerEmptyScaffolder + root/Common/MVC/Controller + + \ No newline at end of file diff --git a/uWine.Core.Domain/Repositories/IAuthenticationRepository.cs b/uWine.Core.Domain/Repositories/IAuthenticationRepository.cs new file mode 100644 index 0000000..83119c5 --- /dev/null +++ b/uWine.Core.Domain/Repositories/IAuthenticationRepository.cs @@ -0,0 +1,10 @@ + +using uWine.Core.Domain.Entities; + +namespace uWine.Core.Domain.Repositories +{ + public interface IAuthenticationRepository + { + bool Valid(User user); + } +} \ No newline at end of file diff --git a/uWine.Core.Domain/obj/Debug/net8.0/uWine.Core.Domain.AssemblyInfo.cs b/uWine.Core.Domain/obj/Debug/net8.0/uWine.Core.Domain.AssemblyInfo.cs index 4a4e4c2..47d505d 100644 --- a/uWine.Core.Domain/obj/Debug/net8.0/uWine.Core.Domain.AssemblyInfo.cs +++ b/uWine.Core.Domain/obj/Debug/net8.0/uWine.Core.Domain.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("uWine.Core.Domain")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+6a932ea9625b3b0150299907bcc067c09d1dde0e")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+7941a858fdaae67757b9b4caff965d2721e9b28d")] [assembly: System.Reflection.AssemblyProductAttribute("uWine.Core.Domain")] [assembly: System.Reflection.AssemblyTitleAttribute("uWine.Core.Domain")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/uWine.Core.Domain/obj/Debug/net8.0/uWine.Core.Domain.AssemblyInfoInputs.cache b/uWine.Core.Domain/obj/Debug/net8.0/uWine.Core.Domain.AssemblyInfoInputs.cache index c76cce9..f9eff68 100644 --- a/uWine.Core.Domain/obj/Debug/net8.0/uWine.Core.Domain.AssemblyInfoInputs.cache +++ b/uWine.Core.Domain/obj/Debug/net8.0/uWine.Core.Domain.AssemblyInfoInputs.cache @@ -1 +1 @@ -67fc4d6d9d7af6985718ca4ad6711476c64cffe719bfe66906e3d039ca26750b +d2610517bddbb48769c9f8f62bd9f8107a8dab356a5412c7a5c3dfc9b3ba2edd diff --git a/uWine.Core.Infrastructure/Repository/MariaDbAuthenticationRepository.cs b/uWine.Core.Infrastructure/Repository/MariaDbAuthenticationRepository.cs new file mode 100644 index 0000000..78bda1f --- /dev/null +++ b/uWine.Core.Infrastructure/Repository/MariaDbAuthenticationRepository.cs @@ -0,0 +1,40 @@ +using Microsoft.Extensions.Configuration; +using MySqlConnector; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using uWine.Core.Domain.Entities; +using uWine.Core.Domain.Repositories; + +namespace uWine.Core.Infrastructure.Repository +{ + public class MariaDbAuthenticationRepository : MariaDbServerRepository, IAuthenticationRepository + { + public MariaDbAuthenticationRepository(IConfiguration configuration) : base(configuration) + { + } + + public bool Valid(User user) + { + if (user == null || string.IsNullOrEmpty(user.Username) || string.IsNullOrEmpty(user.Password)) return false; + using (var conn = Connection()) + { + var cmd = new MySqlCommand("sp_check_login", conn); + cmd.CommandType = CommandType.StoredProcedure; + cmd.Parameters.AddWithValue("@Username", user.Username); + cmd.Parameters.AddWithValue("@Password", user.Password); + using (var reader = cmd.ExecuteReader()) + { + if (reader.Read()) + { + return reader.GetBoolean("valid"); + } + } + } + return false; + } + } +} diff --git a/uWine.Core.Infrastructure/Services/AuthenticationService.cs b/uWine.Core.Infrastructure/Services/AuthenticationService.cs new file mode 100644 index 0000000..46afc30 --- /dev/null +++ b/uWine.Core.Infrastructure/Services/AuthenticationService.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using uWine.Core.Domain.Entities; +using uWine.Core.Domain.Repositories; + +namespace uWine.Core.Infrastructure.Services +{ + public class AuthenticationService + { + readonly IAuthenticationRepository _authenticationRepository; + + public AuthenticationService(IAuthenticationRepository authenticationRepository) + { + _authenticationRepository = authenticationRepository; + } + + public bool IsAuthenticated(User user) + { + return _authenticationRepository.Valid(user); + } + } +} diff --git a/uWine.Core.Infrastructure/Services/OwnerService.cs b/uWine.Core.Infrastructure/Services/OwnerService.cs new file mode 100644 index 0000000..20a97c7 --- /dev/null +++ b/uWine.Core.Infrastructure/Services/OwnerService.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using uWine.Core.Domain.Entities; +using uWine.Core.Domain.Repositories; + +namespace uWine.Core.Infrastructure.Services +{ + public class OwnerService + { + IOwnerRepository _ownerRepository; + IAddressRepository _addressRepository; + IContactRepository _contactRepository; + IVineyardRepository _vineyardRepository; + + public OwnerService( + IOwnerRepository ownerRepository, + IAddressRepository addressRepository, + IContactRepository contactRepository, + IVineyardRepository vineyardRepository + ) + { + _ownerRepository = ownerRepository; + _addressRepository = addressRepository; + _contactRepository = contactRepository; + _vineyardRepository = vineyardRepository; + } + + public Owner FillData(Owner owner) + { + owner.Addresses =_addressRepository.OwnerAddresses(owner.Id); + owner.Contacts = _contactRepository.OwnerContacts(owner.Id); + owner.Vineyards = _vineyardRepository.GetOwnerVineyards(owner.Id); + + return owner; + } + } +} diff --git a/uWine.sln b/uWine.sln index b7ed1d8..28f43b7 100644 --- a/uWine.sln +++ b/uWine.sln @@ -7,6 +7,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "uWine.Core.Domain", "uWine. EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "uWine.Core.Infrastructure", "uWine.Core.Infrastructure\uWine.Core.Infrastructure.csproj", "{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "uWine.Api", "uWine.Api\uWine.Api.csproj", "{8E5D260E-7395-4875-8A4F-16205F92AD38}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -21,6 +23,10 @@ Global {50360CEE-B38B-4729-ACA3-ABC3ED3538E9}.Debug|Any CPU.Build.0 = Debug|Any CPU {50360CEE-B38B-4729-ACA3-ABC3ED3538E9}.Release|Any CPU.ActiveCfg = Release|Any CPU {50360CEE-B38B-4729-ACA3-ABC3ED3538E9}.Release|Any CPU.Build.0 = Release|Any CPU + {8E5D260E-7395-4875-8A4F-16205F92AD38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8E5D260E-7395-4875-8A4F-16205F92AD38}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8E5D260E-7395-4875-8A4F-16205F92AD38}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8E5D260E-7395-4875-8A4F-16205F92AD38}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE