11 changed files with 251 additions and 81 deletions
			
			
		@ -0,0 +1,32 @@ | 
				
			|||||
 | 
					using Cloud_Manager.Models.ClientContractModels; | 
				
			||||
 | 
					using Cloud_Manager.Models.CustomModels; | 
				
			||||
 | 
					using Cloud_Manager.Models.Interfaces; | 
				
			||||
 | 
					using Microsoft.AspNetCore.Http; | 
				
			||||
 | 
					using Microsoft.AspNetCore.Mvc; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					namespace Cloud_Manager.Controllers | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    [Route("api/[controller]")]
 | 
				
			||||
 | 
					    [ApiController] | 
				
			||||
 | 
					    public class KeyGeneratorController : ControllerBase | 
				
			||||
 | 
					    { | 
				
			||||
 | 
					        private readonly IKeyService m_keyService; | 
				
			||||
 | 
					        public KeyGeneratorController(IKeyService a_keyService) | 
				
			||||
 | 
					        { | 
				
			||||
 | 
					            m_keyService = a_keyService; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        [HttpPost, Route("generate-key")] | 
				
			||||
 | 
					        public async Task<IActionResult> GenerateKeyAsync(Contract a_contract) | 
				
			||||
 | 
					        { | 
				
			||||
 | 
					            if (await m_keyService.GenerateKey(a_contract)) | 
				
			||||
 | 
					            { | 
				
			||||
 | 
					                return Ok("Key generated"); | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					            else | 
				
			||||
 | 
					            { | 
				
			||||
 | 
					                return BadRequest(); | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
@ -1,33 +0,0 @@ | 
				
			|||||
using Microsoft.AspNetCore.Mvc; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
namespace Cloud_Manager.Controllers | 
					 | 
				
			||||
{ | 
					 | 
				
			||||
    [ApiController] | 
					 | 
				
			||||
    [Route("[controller]")]
 | 
					 | 
				
			||||
    public class WeatherForecastController : ControllerBase | 
					 | 
				
			||||
    { | 
					 | 
				
			||||
        private static readonly string[] Summaries = new[] | 
					 | 
				
			||||
        { | 
					 | 
				
			||||
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" | 
					 | 
				
			||||
    }; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        private readonly ILogger<WeatherForecastController> _logger; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        public WeatherForecastController(ILogger<WeatherForecastController> logger) | 
					 | 
				
			||||
        { | 
					 | 
				
			||||
            _logger = logger; | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        [HttpGet(Name = "GetWeatherForecast")] | 
					 | 
				
			||||
        public IEnumerable<WeatherForecast> 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(); | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
@ -0,0 +1,43 @@ | 
				
			|||||
 | 
					using Cloud_Manager.Models.Enums; | 
				
			||||
 | 
					using Cloud_Manager.Models.Interfaces; | 
				
			||||
 | 
					using Cloud_Manager.Models.ServiceRepo; | 
				
			||||
 | 
					using Microsoft.AspNetCore.Http; | 
				
			||||
 | 
					using Microsoft.EntityFrameworkCore; | 
				
			||||
 | 
					using Microsoft.Extensions.Options; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					namespace Cloud_Manager.Middleware | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    public class KeyValidationMiddleware | 
				
			||||
 | 
					    { | 
				
			||||
 | 
					        private readonly RequestDelegate m_next; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public KeyValidationMiddleware(RequestDelegate next) | 
				
			||||
 | 
					        { | 
				
			||||
 | 
					            m_next = next; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public async Task InvokeAsync(HttpContext a_httpContext, IKeyService a_keyService) | 
				
			||||
 | 
					        { | 
				
			||||
 | 
					            string apiKey = a_httpContext.Request.Headers["BISK-API-KEY"]!; | 
				
			||||
 | 
					            AuthEnums status = a_keyService.ValidateKey(apiKey); | 
				
			||||
 | 
					            if (AuthEnums.Valid != status && a_httpContext.Request.Path != "/api/KeyGenerator/generate-key") | 
				
			||||
 | 
					            { | 
				
			||||
 | 
					                a_httpContext.Response.StatusCode = StatusCodes.Status401Unauthorized; | 
				
			||||
 | 
					                await a_httpContext.Response.WriteAsync("API Key status : " + status); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					                return; | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					            await m_next.Invoke(a_httpContext); | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public static class KeyValidationMiddlewareExtensions | 
				
			||||
 | 
					    { | 
				
			||||
 | 
					        public static IApplicationBuilder UseKeyValidation( | 
				
			||||
 | 
					            this IApplicationBuilder builder) | 
				
			||||
 | 
					        { | 
				
			||||
 | 
					            return builder.UseMiddleware<KeyValidationMiddleware>(); | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
					Loading…
					
					
				
		Reference in new issue