Replaced Swagger and MediatR implementations with inhouse nuget packages
parent
a7cda905bc
commit
e3ce6fc694
|
@ -1,7 +1,7 @@
|
|||
<Project>
|
||||
<Import Project="dependencies.props" />
|
||||
<PropertyGroup>
|
||||
<Version>1.0.0.1</Version>
|
||||
<Version>1.0.2.0</Version>
|
||||
<Authors>Tudor Stanciu</Authors>
|
||||
<Company>STA</Company>
|
||||
<PackageTags>NetworkResurrector</PackageTags>
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="$(MicrosoftExtensionsPackageVersion)" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="$(MicrosoftExtensionsPackageVersion)" />
|
||||
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.9.5" />
|
||||
<PackageReference Include="NDB.Extensions.Swagger" Version="$(NDBExtensionsPackageVersion)" />
|
||||
<PackageReference Include="Serilog.AspNetCore" Version="$(SerilogPackageVersion)" />
|
||||
<PackageReference Include="Serilog.Extensions.Logging" Version="$(SerilogExtensionsPackageVersion)" />
|
||||
<PackageReference Include="Serilog.Sinks.Console" Version="$(SerilogSinksConsolePackageVersion)" />
|
||||
|
|
|
@ -7,9 +7,9 @@ using Microsoft.AspNetCore.Hosting;
|
|||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using NDB.Extensions.Swagger;
|
||||
using NetworkResurrector.Api.Authentication;
|
||||
using NetworkResurrector.Api.Extensions;
|
||||
using NetworkResurrector.Api.Swagger;
|
||||
using NetworkResurrector.Application;
|
||||
using Newtonsoft.Json;
|
||||
using System.Reflection;
|
||||
|
@ -45,7 +45,7 @@ namespace NetworkResurrector.Api
|
|||
typeof(Application.Mappings.MappingProfile).Assembly);
|
||||
|
||||
// Swagger
|
||||
services.AddSwagger();
|
||||
services.AddSwagger("NetworkResurrector API");
|
||||
|
||||
// Application
|
||||
services.AddApplicationServices();
|
||||
|
@ -75,7 +75,7 @@ namespace NetworkResurrector.Api
|
|||
{
|
||||
endpoints.MapControllers();
|
||||
});
|
||||
app.ConfigureSwagger();
|
||||
app.ConfigureSwagger("NetworkResurrector API");
|
||||
}
|
||||
|
||||
private Assembly[] GetMediatRAssemblies()
|
||||
|
|
|
@ -1,36 +0,0 @@
|
|||
using Microsoft.OpenApi.Models;
|
||||
using NetworkResurrector.Application.Commands;
|
||||
using Swashbuckle.AspNetCore.SwaggerGen;
|
||||
using System.Linq;
|
||||
|
||||
namespace NetworkResurrector.Api.Swagger
|
||||
{
|
||||
public class DtoSchemaFilter : ISchemaFilter
|
||||
{
|
||||
public void Apply(OpenApiSchema schema, SchemaFilterContext context)
|
||||
{
|
||||
var targetType = context.Type;
|
||||
while (targetType != null)
|
||||
{
|
||||
if (typeof(ICommand).IsAssignableFrom(targetType))
|
||||
{
|
||||
foreach (var property in schema.Properties.ToList())
|
||||
{
|
||||
property.Value.ReadOnly = false;
|
||||
|
||||
switch (property.Key)
|
||||
{
|
||||
case "metadata":
|
||||
schema.Properties.Remove(property.Key);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
targetType = targetType.DeclaringType;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
using Microsoft.OpenApi.Models;
|
||||
using Swashbuckle.AspNetCore.SwaggerGen;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace NetworkResurrector.Api.Swagger
|
||||
{
|
||||
public class PathParamsOperationFilter : IOperationFilter
|
||||
{
|
||||
public void Apply(OpenApiOperation operation, OperationFilterContext context)
|
||||
{
|
||||
const string paramCaptureGroup = "param";
|
||||
|
||||
var openApiPathParameters = operation.Parameters.Where(param => param.In == ParameterLocation.Path).ToList();
|
||||
var pathParamRegEx = $@"\{{(?<{paramCaptureGroup}>[^\}}]+)\}}";
|
||||
|
||||
if (openApiPathParameters.Any())
|
||||
{
|
||||
var pathParameterMatches = Regex.Matches(context.ApiDescription.RelativePath, pathParamRegEx, RegexOptions.Compiled);
|
||||
var pathParameters = pathParameterMatches.Select(x => x.Groups[paramCaptureGroup].Value);
|
||||
|
||||
foreach (var openApiPathParameter in openApiPathParameters)
|
||||
{
|
||||
var correspondingPathParameter = pathParameters.FirstOrDefault(x =>
|
||||
string.Equals(x, openApiPathParameter.Name, StringComparison.InvariantCultureIgnoreCase));
|
||||
|
||||
if (correspondingPathParameter != null)
|
||||
openApiPathParameter.Name = correspondingPathParameter;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,114 +0,0 @@
|
|||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.OpenApi.Models;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace NetworkResurrector.Api.Swagger
|
||||
{
|
||||
public static class SwaggerExtensions
|
||||
{
|
||||
public static IServiceCollection AddSwagger(this IServiceCollection services)
|
||||
{
|
||||
services.AddSwaggerGen(c =>
|
||||
{
|
||||
c.SwaggerDoc("v1",
|
||||
new OpenApiInfo
|
||||
{
|
||||
Title = "NetworkResurrector API",
|
||||
Version = "v1"
|
||||
});
|
||||
|
||||
c.AddSecurityDefinition("Basic",
|
||||
new OpenApiSecurityScheme
|
||||
{
|
||||
In = ParameterLocation.Header,
|
||||
Description = @"JWT Authorization header using the Basic scheme. Enter 'Basic' [space] and then your token in the text input below. Example: 'Basic 12345abcdef'",
|
||||
Name = "Authorization",
|
||||
Scheme = "Basic",
|
||||
Type = SecuritySchemeType.ApiKey
|
||||
});
|
||||
|
||||
c.AddSecurityRequirement(new OpenApiSecurityRequirement()
|
||||
{
|
||||
{
|
||||
new OpenApiSecurityScheme
|
||||
{
|
||||
Reference = new OpenApiReference
|
||||
{
|
||||
Type = ReferenceType.SecurityScheme,
|
||||
Id = "Basic"
|
||||
},
|
||||
Scheme = "Basic",
|
||||
Name = "Authorization",
|
||||
In = ParameterLocation.Header
|
||||
},
|
||||
new List<string>()
|
||||
}
|
||||
});
|
||||
|
||||
c.OperationFilter<PathParamsOperationFilter>();
|
||||
c.SchemaFilter<DtoSchemaFilter>();
|
||||
c.CustomSchemaIds(type => type.ToString());
|
||||
});
|
||||
|
||||
return services;
|
||||
}
|
||||
|
||||
public static IApplicationBuilder ConfigureSwagger(this IApplicationBuilder applicationBuilder)
|
||||
{
|
||||
applicationBuilder.UseSwagger(c =>
|
||||
{
|
||||
c.PreSerializeFilters.Add((swagger, httpRequest) =>
|
||||
{
|
||||
var (host, basePath, scheme) = GetUrlComponents(httpRequest);
|
||||
|
||||
swagger.Servers = new List<OpenApiServer>
|
||||
{
|
||||
new OpenApiServer {Url = $"{scheme}://{host}{basePath}"}
|
||||
};
|
||||
});
|
||||
c.RouteTemplate = "swagger/{documentName}/swagger.json";
|
||||
});
|
||||
|
||||
applicationBuilder.UseSwaggerUI(c =>
|
||||
{
|
||||
c.SwaggerEndpoint("v1/swagger.json", "NetworkResurrector API");
|
||||
c.RoutePrefix = $"swagger";
|
||||
});
|
||||
|
||||
return applicationBuilder;
|
||||
}
|
||||
|
||||
private static (string host, string basePath, string scheme) GetUrlComponents(HttpRequest request)
|
||||
{
|
||||
var host = ExtractHost(request);
|
||||
var basePath = ExtractBasePath(request);
|
||||
var scheme = ExtractScheme(request);
|
||||
|
||||
return (host, basePath, scheme);
|
||||
}
|
||||
|
||||
private static string ExtractHost(HttpRequest request)
|
||||
{
|
||||
if (request.Headers.ContainsKey("X-Forwarded-Host"))
|
||||
return request.Headers["X-Forwarded-Host"].First();
|
||||
|
||||
return request.Host.Value;
|
||||
}
|
||||
|
||||
private static string ExtractBasePath(HttpRequest request)
|
||||
{
|
||||
if (request.Headers.ContainsKey("X-Forwarded-PathBase"))
|
||||
return request.Headers["X-Forwarded-PathBase"].First();
|
||||
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
private static string ExtractScheme(HttpRequest request)
|
||||
{
|
||||
return request.Headers["X-Forwarded-Proto"].FirstOrDefault() ?? request.Scheme;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
using MediatR;
|
||||
|
||||
namespace NetworkResurrector.Application.Commands
|
||||
{
|
||||
public abstract class Command<TResponse> : ICommand, IRequest<TResponse>
|
||||
{
|
||||
public Metadata Metadata { get; }
|
||||
|
||||
protected Command(Metadata metadata)
|
||||
{
|
||||
Metadata = metadata;
|
||||
}
|
||||
}
|
||||
|
||||
public interface ICommand
|
||||
{
|
||||
}
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace NetworkResurrector.Application.Commands
|
||||
{
|
||||
public class Metadata : Dictionary<string, string>
|
||||
{
|
||||
public const string CorrelationIdKey = "CorrelationId";
|
||||
|
||||
public Guid CorrelationId
|
||||
{
|
||||
get
|
||||
{
|
||||
return Guid.Parse(this[CorrelationIdKey]);
|
||||
}
|
||||
set
|
||||
{
|
||||
if (ContainsKey(CorrelationIdKey))
|
||||
this[CorrelationIdKey] = value.ToString();
|
||||
else
|
||||
Add(CorrelationIdKey, value.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,4 +1,5 @@
|
|||
using NetworkResurrector.Application.Events;
|
||||
using NDB.Application.DataContracts;
|
||||
using NetworkResurrector.Application.Events;
|
||||
using System;
|
||||
|
||||
namespace NetworkResurrector.Application.Commands
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using NetworkResurrector.Application.Events;
|
||||
using NDB.Application.DataContracts;
|
||||
using NetworkResurrector.Application.Events;
|
||||
using System;
|
||||
|
||||
namespace NetworkResurrector.Application.Commands
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using NetworkResurrector.Application.Events;
|
||||
using NDB.Application.DataContracts;
|
||||
using NetworkResurrector.Application.Events;
|
||||
using System;
|
||||
|
||||
namespace NetworkResurrector.Application.Commands
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="$(MicrosoftExtensionsPackageVersion)" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="$(MicrosoftExtensionsPackageVersion)" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="$(MicrosoftExtensionsPackageVersion)" />
|
||||
<PackageReference Include="NDB.Application.DataContracts" Version="$(NDBApplicationPackageVersion)" />
|
||||
<PackageReference Include="System.Management" Version="5.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
using AutoMapper;
|
||||
using MediatR;
|
||||
using NDB.Application.DataContracts;
|
||||
using NetworkResurrector.Application.Services;
|
||||
using System;
|
||||
using System.Threading;
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
using MediatR;
|
||||
|
||||
namespace NetworkResurrector.Application.Queries
|
||||
{
|
||||
public abstract class Query<TResponse> : IRequest<TResponse>, IBaseRequest { }
|
||||
}
|
|
@ -12,6 +12,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
|
|||
dependencies.props = dependencies.props
|
||||
Directory.Build.props = Directory.Build.props
|
||||
Notes.txt = Notes.txt
|
||||
NuGet.config = NuGet.config
|
||||
ReleaseNotes.xml = ReleaseNotes.xml
|
||||
EndProjectSection
|
||||
EndProject
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<packageSources>
|
||||
<clear />
|
||||
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
|
||||
<add key="sta.nuget" value="http://***REMOVED***/nugetserver/nuget" />
|
||||
</packageSources>
|
||||
</configuration>
|
|
@ -13,4 +13,10 @@
|
|||
Has been added "ping" and "shutdown" support. Routes with same names have also been added to the controller.
|
||||
</Content>
|
||||
</Note>
|
||||
<Note>
|
||||
<Version>1.0.2.0</Version>
|
||||
<Content>
|
||||
Replaced Swagger and MediatR implementations with inhouse nuget packages.
|
||||
</Content>
|
||||
</Note>
|
||||
</ReleaseNotes>
|
|
@ -9,5 +9,7 @@
|
|||
<AutoMapperExtensionsPackageVersion>7.0.0</AutoMapperExtensionsPackageVersion>
|
||||
<MediatRPackageVersion>6.0.0</MediatRPackageVersion>
|
||||
<SwashbucklePackageVersion>5.3.1</SwashbucklePackageVersion>
|
||||
<NDBExtensionsPackageVersion>1.0.0</NDBExtensionsPackageVersion>
|
||||
<NDBApplicationPackageVersion>1.0.0</NDBApplicationPackageVersion>
|
||||
</PropertyGroup>
|
||||
</Project>
|
Loading…
Reference in New Issue