CORS, Theme, Better flow and dotnet tools

This commit is contained in:
2023-01-04 09:38:00 -07:00
parent a3938d1916
commit 978e698da5
72 changed files with 528 additions and 774 deletions

View File

@ -1,30 +1,22 @@
using Expose.MyIT.Shared.Models.Stateless.Methods;
using Expose.MyIT.Shared.Models.Stateless;
using Microsoft.AspNetCore.Mvc;
using System.Text.Json;
namespace Expose.MyIT.Server.Controllers;
[ApiController]
public class AppSettingsController : ControllerBase, IAppSettingsController
[Route("api/[controller]")]
public class AppSettingsController : ControllerBase, IAppSettingsController<ActionResult>
{
private readonly Models.AppSettings _AppSettings;
private readonly IAppSettingsRepository _AppSettingsRepository;
public AppSettingsController(Models.AppSettings appSettings) => _AppSettings = appSettings;
public AppSettingsController(IAppSettingsRepository AppSettingsRepository) => _AppSettingsRepository = AppSettingsRepository;
[Route("api/[controller]")]
[HttpGet]
public string[] GetAppSettings()
[HttpGet(nameof(IAppSettingsController<ActionResult>.Action.App))]
public ActionResult GetAppSettings()
{
List<string> results = new();
string json = JsonSerializer.Serialize(_AppSettings);
JsonElement jsonElement = JsonSerializer.Deserialize<JsonElement>(json);
JsonProperty[] jsonProperties = jsonElement.EnumerateObject().ToArray();
foreach (JsonProperty jsonProperty in jsonProperties)
results.Add(jsonProperty.Value.ToString());
if (!_AppSettings.IsDevelopment)
throw new Exception("Shouldn't expose!");
return results.ToArray();
List<string> results = _AppSettingsRepository.GetAppSettings();
return Ok(results);
}
}

View File

@ -1,40 +1,29 @@
using Expose.MyIT.Shared.Models.Stateless.Methods;
using Expose.MyIT.Shared.Models.Stateless;
using Microsoft.AspNetCore.Mvc;
namespace Expose.MyIT.Server.Controllers;
[ApiController]
public class ClientSettingsController : ControllerBase, IClientSettingsController
[Route("api/[controller]")]
public class ClientSettingsController : ControllerBase, IClientSettingsController<ActionResult>
{
private readonly Models.AppSettings _AppSettings;
private readonly IClientSettingsRepository _ClientSettingsRepository;
public ClientSettingsController(Models.AppSettings appSettings) => _AppSettings = appSettings;
public ClientSettingsController(IClientSettingsRepository clientSettingsRepository) => _ClientSettingsRepository = clientSettingsRepository;
[Route("api/[controller]")]
[HttpGet]
public string[] GetClientSettings()
[HttpGet(nameof(IClientSettingsController<ActionResult>.Action.Client))]
public ActionResult GetClientSettings()
{
List<string> results = new();
string? remoteIpAddress = Request.HttpContext.Connection?.RemoteIpAddress?.ToString();
if (!string.IsNullOrEmpty(remoteIpAddress))
results.Add(remoteIpAddress);
else
results.Add(nameof(remoteIpAddress));
if (!_AppSettings.IsDevelopment)
throw new Exception("Shouldn't expose!");
return results.ToArray();
List<string> results = _ClientSettingsRepository.GetClientSettings(Request.HttpContext.Connection?.RemoteIpAddress);
return Ok(results);
}
[Route("api/[controller]/IpAddress")]
[HttpGet]
public string GetIpAddress()
[HttpGet(nameof(IClientSettingsController<ActionResult>.Action.IP))]
public ActionResult GetIpAddress()
{
string? result;
result = Request.HttpContext.Connection?.RemoteIpAddress?.ToString();
if (string.IsNullOrEmpty(result))
result = string.Empty;
return result;
string result = _ClientSettingsRepository.GetIpAddress(Request.HttpContext.Connection?.RemoteIpAddress);
return Ok(result);
}
}

View File

@ -1,33 +1,23 @@
using Expose.MyIT.Shared.Models.Methods;
using Expose.MyIT.Shared.Models.Stateless.Methods;
using Expose.MyIT.Shared.Models.Stateless;
using Microsoft.AspNetCore.Mvc;
namespace Expose.MyIT.Server.Controllers;
[ApiController]
[Route("api/[controller]")]
public class ServiceShopOrderController : ControllerBase, IServiceShopOrderController
public class ServiceShopOrderController : ControllerBase, IServiceShopOrderController<ActionResult>
{
private readonly IServiceShopOrderController _ServiceShopOrderController;
private readonly IServiceShopOrderRepository _ServiceShopOrderRepository;
public ServiceShopOrderController(IServiceShopOrderRepository ServiceShopOrderRepository)
{
_ServiceShopOrderController = this;
_ServiceShopOrderRepository = ServiceShopOrderRepository;
}
public ServiceShopOrderController(IServiceShopOrderRepository ServiceShopOrderRepository) => _ServiceShopOrderRepository = ServiceShopOrderRepository;
async Task<Shared.ViewModels.ServiceShopOrder[]> IServiceShopOrderController.GetAllServiceShopOrders() => await _ServiceShopOrderRepository.GetAllServiceShopOrders();
async Task<Shared.ViewModels.ServiceShopOrder[]> IServiceShopOrderController.GetServiceShopOrders(string id) => await _ServiceShopOrderRepository.GetServiceShopOrders(id);
[HttpGet(nameof(Shared.Models.Stateless.IServiceShopOrderController.Action.All))]
[HttpGet(nameof(IServiceShopOrderController<ActionResult>.Action.All))]
public async Task<ActionResult> GetAllServiceShopOrders()
{
try
{
Shared.ViewModels.ServiceShopOrder[] results = await _ServiceShopOrderController.GetAllServiceShopOrders();
Shared.ViewModels.ServiceShopOrder[] results = await _ServiceShopOrderRepository.GetAllServiceShopOrders();
return Ok(results);
}
catch (Exception)
@ -43,7 +33,7 @@ public class ServiceShopOrderController : ControllerBase, IServiceShopOrderContr
{
try
{
Shared.ViewModels.ServiceShopOrder[] results = await _ServiceShopOrderController.GetServiceShopOrders(id);
Shared.ViewModels.ServiceShopOrder[] results = await _ServiceShopOrderRepository.GetServiceShopOrders(id);
return Ok(results);
}
catch (Exception)

View File

@ -1,33 +1,23 @@
using Expose.MyIT.Shared.Models.Methods;
using Expose.MyIT.Shared.Models.Stateless.Methods;
using Expose.MyIT.Shared.Models.Stateless;
using Microsoft.AspNetCore.Mvc;
namespace Expose.MyIT.Server.Controllers;
[ApiController]
[Route("api/[controller]")]
public class SsaOrderController : ControllerBase, ISsaOrderController
public class SsaOrderController : ControllerBase, ISsaOrderController<ActionResult>
{
private readonly ISsaOrderController _SsaOrderController;
private readonly ISsaOrderRepository _SsaOrderRepository;
public SsaOrderController(ISsaOrderRepository SsaOrderRepository)
{
_SsaOrderController = this;
_SsaOrderRepository = SsaOrderRepository;
}
public SsaOrderController(ISsaOrderRepository SsaOrderRepository) => _SsaOrderRepository = SsaOrderRepository;
async Task<Shared.ViewModels.SsaOrder[]> ISsaOrderController.GetAllSsaOrders() => await _SsaOrderRepository.GetAllSsaOrders();
async Task<Shared.ViewModels.SsaOrder[]> ISsaOrderController.GetSsaOrders(string id) => await _SsaOrderRepository.GetSsaOrders(id);
[HttpGet(nameof(Shared.Models.Stateless.ISsaOrderController.Action.All))]
[HttpGet(nameof(ISsaOrderController<ActionResult>.Action.All))]
public async Task<ActionResult> GetAllSsaOrders()
{
try
{
Shared.ViewModels.SsaOrder[] results = await _SsaOrderController.GetAllSsaOrders();
Shared.ViewModels.SsaOrder[] results = await _SsaOrderRepository.GetAllSsaOrders();
return Ok(results);
}
catch (Exception)
@ -43,7 +33,7 @@ public class SsaOrderController : ControllerBase, ISsaOrderController
{
try
{
Shared.ViewModels.SsaOrder[] results = await _SsaOrderController.GetSsaOrders(id);
Shared.ViewModels.SsaOrder[] results = await _SsaOrderRepository.GetSsaOrders(id);
return Ok(results);
}
catch (Exception)

View File

@ -1,4 +1,4 @@
using Expose.MyIT.Shared.Models.Stateless.Methods;
using Expose.MyIT.Shared.Models.Stateless;
using Expose.MyIT.Shared.ViewModels;
using Microsoft.AspNetCore.Mvc;
@ -7,7 +7,7 @@ namespace Expose.MyIT.Server.Controllers;
[ApiController]
[Route("[controller]")]
[Route("api/[controller]")]
public class WeatherForecastController : ControllerBase, IWeatherForecastController
public class WeatherForecastController : ControllerBase, IWeatherForecastController<WeatherForecast[]>
{
private static readonly string[] _Summaries = new[]
{
@ -18,8 +18,6 @@ public class WeatherForecastController : ControllerBase, IWeatherForecastControl
public WeatherForecastController(ILogger<WeatherForecastController> logger) => _Logger = logger;
Task<WeatherForecast[]> IWeatherForecastController.Get() => throw new NotImplementedException();
[HttpGet]
public WeatherForecast[] Get()
{

View File

@ -1,46 +1,19 @@
using System.Text.Json;
using System.Text.Json.Serialization;
namespace Expose.MyIT.Server.Models;
public class AppSettings
public record AppSettings(string BuildNumber,
string Company,
string ConnectionString,
string GitCommitSeven,
bool IsDevelopment,
bool IsStaging,
string MonAResource,
string MonASite,
string Urls,
string WorkingDirectoryName)
{
public string BuildNumber { init; get; }
public string Company { init; get; }
public string ConnectionString { init; get; }
public string GitCommitSeven { init; get; }
public bool IsDevelopment { init; get; }
public bool IsStaging { init; get; }
public string MonAResource { init; get; }
public string MonASite { init; get; }
public string URLs { init; get; }
public string WorkingDirectoryName { init; get; }
[JsonConstructor]
public AppSettings(string buildNumber,
string company,
string connectionString,
string gitCommitSeven,
bool isDevelopment,
bool isStaging,
string monAResource,
string monASite,
string urls,
string workingDirectoryName)
{
BuildNumber = buildNumber;
Company = company;
ConnectionString = connectionString;
GitCommitSeven = gitCommitSeven;
IsDevelopment = isDevelopment;
IsStaging = isStaging;
MonAResource = monAResource;
MonASite = monASite;
URLs = urls;
WorkingDirectoryName = workingDirectoryName;
}
public override string ToString()
{
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });

View File

@ -0,0 +1,28 @@
using Expose.MyIT.Shared.Models.Stateless;
using System.Text.Json;
namespace Expose.MyIT.Server.Models;
public class AppSettingsRepository : IAppSettingsRepository
{
private readonly AppSettings _AppSettings;
public AppSettingsRepository(AppSettings appSettings) => _AppSettings = appSettings;
public List<string> GetAppSettings()
{
List<string> results = new();
string json = JsonSerializer.Serialize(_AppSettings);
JsonElement jsonElement = JsonSerializer.Deserialize<JsonElement>(json);
JsonProperty[] jsonProperties = jsonElement.EnumerateObject().ToArray();
foreach (JsonProperty jsonProperty in jsonProperties)
results.Add(jsonProperty.Value.ToString());
if (!_AppSettings.IsDevelopment)
throw new Exception("Shouldn't expose!");
return results;
}
List<string> IAppSettingsRepository.GetAppSettings() => GetAppSettings();
}

View File

@ -0,0 +1,35 @@
using Expose.MyIT.Shared.Models.Stateless;
using System.Net;
namespace Expose.MyIT.Server.Models;
public class ClientSettingsRepository : IClientSettingsRepository
{
private readonly AppSettings _AppSettings;
public ClientSettingsRepository(AppSettings appSettings) => _AppSettings = appSettings;
public List<string> GetClientSettings(IPAddress? remoteIpAddress)
{
List<string> results = new();
if (remoteIpAddress is null)
results.Add(nameof(remoteIpAddress));
else
results.Add(remoteIpAddress.ToString());
if (!_AppSettings.IsDevelopment)
throw new Exception("Shouldn't expose!");
return results;
}
List<string> IClientSettingsRepository.GetClientSettings(IPAddress? remoteIpAddress) => GetClientSettings(remoteIpAddress);
public string GetIpAddress(IPAddress? remoteIpAddress)
{
string result = remoteIpAddress is null ? string.Empty : remoteIpAddress.ToString();
return result;
}
string IClientSettingsRepository.GetIpAddress(IPAddress? remoteIpAddress) => GetIpAddress(remoteIpAddress);
}

View File

@ -1,4 +1,4 @@
using Expose.MyIT.Shared.Models.Methods;
using Expose.MyIT.Shared.Models.Stateless;
using Expose.MyIT.Shared.ViewModels;
using Serilog.Context;
using System.Text.Json;
@ -12,16 +12,21 @@ public class ServiceShopOrderRepository : IServiceShopOrderRepository
public ServiceShopOrderRepository() => _Log = Serilog.Log.ForContext<ServiceShopOrderRepository>();
private static ServiceShopOrder[] GetServiceShopOrders(Shared.Models.ServiceShop? ServiceShop)
private static ServiceShopOrder[] GetServiceShopOrders(Shared.Models.ServiceShop? serviceShop)
{
ServiceShopOrder[] result = Shared.Models.Stateless.Methods.IServiceShopOrder.GetServiceShopOrders(ServiceShop);
ServiceShopOrder[] result = IServiceShopOrder.GetServiceShopOrders(serviceShop);
return result;
}
private static Shared.Models.ServiceShop? GetServiceShopOrders()
{
Shared.Models.ServiceShop? result;
string jsonFile = Path.Combine(AppContext.BaseDirectory, "service-shop.json");
string jsonFile;
string checkDirectory = Path.Combine(AppContext.BaseDirectory, "Data/Mike");
if (Directory.Exists(checkDirectory))
jsonFile = Path.Combine(checkDirectory, "service-shop.json");
else
jsonFile = Path.Combine(AppContext.BaseDirectory, "service-shop.json");
string json = File.ReadAllText(jsonFile);
result = JsonSerializer.Deserialize<Shared.Models.ServiceShop>(json);
return result;
@ -30,12 +35,12 @@ public class ServiceShopOrderRepository : IServiceShopOrderRepository
async Task<ServiceShopOrder[]> IServiceShopOrderRepository.GetAllServiceShopOrders()
{
ServiceShopOrder[] results;
string? methodName = Shared.Models.Stateless.Methods.IMethodName.GetActualAsyncMethodName();
string? methodName = IMethodName.GetActualAsyncMethodName();
using (LogContext.PushProperty("MethodName", methodName))
{
_Log.Debug("() => ...");
Shared.Models.ServiceShop? ServiceShop = await Task.Run(GetServiceShopOrders);
results = GetServiceShopOrders(ServiceShop);
Shared.Models.ServiceShop? serviceShop = await Task.Run(GetServiceShopOrders);
results = GetServiceShopOrders(serviceShop);
}
return results.ToArray();
}
@ -43,8 +48,8 @@ public class ServiceShopOrderRepository : IServiceShopOrderRepository
async Task<ServiceShopOrder[]> IServiceShopOrderRepository.GetServiceShopOrders(string id)
{
ServiceShopOrder[] results;
Shared.Models.ServiceShop? ServiceShop = await Task.Run(GetServiceShopOrders);
results = GetServiceShopOrders(ServiceShop).Where(l => l.Id == id).ToArray();
Shared.Models.ServiceShop? serviceShop = await Task.Run(GetServiceShopOrders);
results = GetServiceShopOrders(serviceShop).Where(l => l.Id == id).ToArray();
return results;
}

View File

@ -1,4 +1,4 @@
using Expose.MyIT.Shared.Models.Methods;
using Expose.MyIT.Shared.Models.Stateless;
using Expose.MyIT.Shared.ViewModels;
using Serilog.Context;
using System.Text.Json;
@ -12,29 +12,34 @@ public class SsaOrderRepository : ISsaOrderRepository
public SsaOrderRepository() => _Log = Serilog.Log.ForContext<SsaOrderRepository>();
private static SsaOrder[] GetSsaOrders(Shared.Models.SSA? ssa)
private static SsaOrder[] GetSsaOrders(Shared.Models.Ssa? ssa)
{
SsaOrder[] result = Shared.Models.Stateless.Methods.ISsaOrder.GetSsaOrders(ssa);
SsaOrder[] result = ISsaOrder.GetSsaOrders(ssa);
return result;
}
private static Shared.Models.SSA? GetSsaOrders()
private static Shared.Models.Ssa? GetSsaOrders()
{
Shared.Models.SSA? result;
string jsonFile = Path.Combine(AppContext.BaseDirectory, "ssa.json");
Shared.Models.Ssa? result;
string jsonFile;
string checkDirectory = Path.Combine(AppContext.BaseDirectory, "Data/Mike");
if (Directory.Exists(checkDirectory))
jsonFile = Path.Combine(checkDirectory, "ssa.json");
else
jsonFile = Path.Combine(AppContext.BaseDirectory, "ssa.json");
string json = File.ReadAllText(jsonFile);
result = JsonSerializer.Deserialize<Shared.Models.SSA>(json);
result = JsonSerializer.Deserialize<Shared.Models.Ssa>(json);
return result;
}
async Task<SsaOrder[]> ISsaOrderRepository.GetAllSsaOrders()
{
SsaOrder[] results;
string? methodName = Shared.Models.Stateless.Methods.IMethodName.GetActualAsyncMethodName();
string? methodName = IMethodName.GetActualAsyncMethodName();
using (LogContext.PushProperty("MethodName", methodName))
{
_Log.Debug("() => ...");
Shared.Models.SSA? ssa = await Task.Run(GetSsaOrders);
Shared.Models.Ssa? ssa = await Task.Run(GetSsaOrders);
results = GetSsaOrders(ssa);
}
return results.ToArray();
@ -43,7 +48,7 @@ public class SsaOrderRepository : ISsaOrderRepository
async Task<SsaOrder[]> ISsaOrderRepository.GetSsaOrders(string id)
{
SsaOrder[] results;
Shared.Models.SSA? ssa = await Task.Run(GetSsaOrders);
Shared.Models.Ssa? ssa = await Task.Run(GetSsaOrders);
results = GetSsaOrders(ssa).Where(l => l.Id == id).ToArray();
return results;
}

View File

@ -1,5 +1,5 @@
using Expose.MyIT.Server.Models;
using Expose.MyIT.Shared.Models.Methods;
using Expose.MyIT.Shared.Models.Stateless;
using Serilog;
namespace Expose.MyIT.Server;
@ -23,9 +23,13 @@ public class Program
try
{
// Add services to the container.
AppSettingsRepository appSettingsRepository = new(appSettings);
ClientSettingsRepository clientSettingsRepository = new(appSettings);
_ = builder.Services.AddSingleton<AppSettings, AppSettings>(_ => appSettings);
_ = builder.Services.AddSingleton(_ => appSettings);
_ = builder.Services.AddSingleton<ISsaOrderRepository, SsaOrderRepository>();
_ = builder.Services.AddSingleton<IAppSettingsRepository>(_ => appSettingsRepository);
_ = builder.Services.AddSingleton<IClientSettingsRepository>(_ => clientSettingsRepository);
_ = builder.Services.AddSingleton<IServiceShopOrderRepository, ServiceShopOrderRepository>();
_ = builder.Services.AddControllersWithViews();
_ = builder.Services.AddRazorPages();
@ -40,7 +44,7 @@ public class Program
}
else
{
_ = app.UseCors(corsPolicyBuilder => corsPolicyBuilder.WithOrigins("https://localhost:7130", "http://localhost:5055"));
_ = app.UseCors(corsPolicyBuilder => corsPolicyBuilder.WithOrigins("https://localhost:7130", "http://localhost:5055", "http://mestsa008.infineon.com:50199", "http://mestsa008.infineon.com:5055"));
_ = app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
_ = app.UseHsts();