Replaced some code with nuget packages
parent
fa1d531a89
commit
5c514ae649
|
@ -10,6 +10,7 @@
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="$(MicrosoftExtensionsPackageVersion)" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="$(MicrosoftExtensionsPackageVersion)" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="$(MicrosoftExtensionsPackageVersion)" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="$(MicrosoftExtensionsPackageVersion)" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="$(MicrosoftExtensionsPackageVersion)" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="$(MicrosoftExtensionsPackageVersion)" />
|
||||||
|
<PackageReference Include="NDB.Extensions.Swagger" Version="$(NDBExtensionsPackageVersion)" />
|
||||||
<PackageReference Include="Serilog.AspNetCore" Version="$(SerilogPackageVersion)" />
|
<PackageReference Include="Serilog.AspNetCore" Version="$(SerilogPackageVersion)" />
|
||||||
<PackageReference Include="Serilog.Extensions.Logging" Version="$(SerilogExtensionsPackageVersion)" />
|
<PackageReference Include="Serilog.Extensions.Logging" Version="$(SerilogExtensionsPackageVersion)" />
|
||||||
<PackageReference Include="Serilog.Sinks.Console" Version="$(SerilogSinksConsolePackageVersion)" />
|
<PackageReference Include="Serilog.Sinks.Console" Version="$(SerilogSinksConsolePackageVersion)" />
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using IdentityServer.Api.Swagger;
|
|
||||||
using IdentityServer.Application;
|
using IdentityServer.Application;
|
||||||
using IdentityServer.Domain.Data;
|
using IdentityServer.Domain.Data;
|
||||||
using MediatR;
|
using MediatR;
|
||||||
|
@ -9,6 +8,8 @@ using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Hosting;
|
using Microsoft.Extensions.Hosting;
|
||||||
|
using NDB.Extensions.Swagger;
|
||||||
|
using NDB.Extensions.Swagger.Constants;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
|
@ -39,7 +40,7 @@ namespace IdentityServer.Api
|
||||||
typeof(Application.Mappings.MappingProfile).Assembly);
|
typeof(Application.Mappings.MappingProfile).Assembly);
|
||||||
|
|
||||||
// Swagger
|
// Swagger
|
||||||
services.AddSwagger();
|
services.AddSwagger("Identity Server API", AuthorizationType.None);
|
||||||
|
|
||||||
// Data access
|
// Data access
|
||||||
services.AddDataAccess();
|
services.AddDataAccess();
|
||||||
|
@ -74,7 +75,7 @@ namespace IdentityServer.Api
|
||||||
{
|
{
|
||||||
endpoints.MapControllers();
|
endpoints.MapControllers();
|
||||||
});
|
});
|
||||||
app.ConfigureSwagger();
|
app.ConfigureSwagger("IdentityServer API");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
using IdentityServer.Application.Commands;
|
|
||||||
using Microsoft.OpenApi.Models;
|
|
||||||
using Swashbuckle.AspNetCore.SwaggerGen;
|
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace IdentityServer.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,42 +0,0 @@
|
||||||
using Microsoft.OpenApi.Models;
|
|
||||||
using Swashbuckle.AspNetCore.SwaggerGen;
|
|
||||||
using System;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
|
|
||||||
namespace IdentityServer.Api.Swagger
|
|
||||||
{
|
|
||||||
public class PathParamsOperationFilter : IOperationFilter
|
|
||||||
{
|
|
||||||
public void Apply(OpenApiOperation operation, OperationFilterContext context)
|
|
||||||
{
|
|
||||||
const string paramCaptureGroup = "param";
|
|
||||||
|
|
||||||
foreach (var parameter in operation.Parameters.ToList())
|
|
||||||
{
|
|
||||||
if (parameter.Name.ToLowerInvariant().StartsWith("metadata"))
|
|
||||||
{
|
|
||||||
operation.Parameters.Remove(parameter);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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,86 +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 IdentityServer.Api.Swagger
|
|
||||||
{
|
|
||||||
public static class SwaggerExtensions
|
|
||||||
{
|
|
||||||
public static IServiceCollection AddSwagger(this IServiceCollection services)
|
|
||||||
{
|
|
||||||
services.AddSwaggerGen(c =>
|
|
||||||
{
|
|
||||||
c.SwaggerDoc("v1",
|
|
||||||
new OpenApiInfo
|
|
||||||
{
|
|
||||||
Title = "Identity Server API",
|
|
||||||
Version = "v1"
|
|
||||||
});
|
|
||||||
|
|
||||||
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", "IdentityServer 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,4 +1,5 @@
|
||||||
using IdentityServer.PublishedLanguage.Dto;
|
using IdentityServer.PublishedLanguage.Dto;
|
||||||
|
using NDB.Application.DataContracts;
|
||||||
|
|
||||||
namespace IdentityServer.Application.Commands
|
namespace IdentityServer.Application.Commands
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using IdentityServer.PublishedLanguage.Dto;
|
using IdentityServer.PublishedLanguage.Dto;
|
||||||
|
using NDB.Application.DataContracts;
|
||||||
|
|
||||||
namespace IdentityServer.Application.Commands
|
namespace IdentityServer.Application.Commands
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
using MediatR;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace IdentityServer.Application.Commands
|
|
||||||
{
|
|
||||||
public abstract class Command<TResponse> : ICommand, IRequest<TResponse>
|
|
||||||
{
|
|
||||||
public Metadata Metadata { get; }
|
|
||||||
|
|
||||||
protected Command()
|
|
||||||
{
|
|
||||||
Metadata = new Metadata() { CorrelationId = Guid.NewGuid() };
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Command(Metadata metadata)
|
|
||||||
{
|
|
||||||
Metadata = metadata;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface ICommand
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -11,6 +11,7 @@
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="$(MicrosoftExtensionsPackageVersion)" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="$(MicrosoftExtensionsPackageVersion)" />
|
||||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="$(MicrosoftExtensionsPackageVersion)" />
|
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="$(MicrosoftExtensionsPackageVersion)" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="$(MicrosoftExtensionsPackageVersion)" />
|
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="$(MicrosoftExtensionsPackageVersion)" />
|
||||||
|
<PackageReference Include="NDB.Application.DataContracts" Version="$(NDBApplicationPackageVersion)" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
using MediatR;
|
|
||||||
|
|
||||||
namespace IdentityServer.Application.Queries
|
|
||||||
{
|
|
||||||
public abstract class Query<TResponse> : IRequest<TResponse>, IBaseRequest { }
|
|
||||||
}
|
|
|
@ -12,16 +12,17 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
|
||||||
dependencies.props = dependencies.props
|
dependencies.props = dependencies.props
|
||||||
Directory.Build.props = Directory.Build.props
|
Directory.Build.props = Directory.Build.props
|
||||||
Notes.txt = Notes.txt
|
Notes.txt = Notes.txt
|
||||||
|
NuGet.config = NuGet.config
|
||||||
ReleaseNotes.xml = ReleaseNotes.xml
|
ReleaseNotes.xml = ReleaseNotes.xml
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IdentityServer.Application", "IdentityServer.Application\IdentityServer.Application.csproj", "{6556D255-AF22-478E-A71A-BE37C16D5EE4}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IdentityServer.Application", "IdentityServer.Application\IdentityServer.Application.csproj", "{6556D255-AF22-478E-A71A-BE37C16D5EE4}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IdentityServer.Domain", "IdentityServer.Domain\IdentityServer.Domain.csproj", "{5890B079-3CB0-4AD6-8809-BB2E081590B1}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IdentityServer.Domain", "IdentityServer.Domain\IdentityServer.Domain.csproj", "{5890B079-3CB0-4AD6-8809-BB2E081590B1}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IdentityServer.Domain.Data", "IdentityServer.Domain.Data\IdentityServer.Domain.Data.csproj", "{CE81A435-49AC-4544-A381-FAC91BEB3C49}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IdentityServer.Domain.Data", "IdentityServer.Domain.Data\IdentityServer.Domain.Data.csproj", "{CE81A435-49AC-4544-A381-FAC91BEB3C49}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IdentityServer.PublishedLanguage", "IdentityServer.PublishedLanguage\IdentityServer.PublishedLanguage.csproj", "{67B4D1FF-D02E-4DA6-9FB8-F71667360448}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IdentityServer.PublishedLanguage", "IdentityServer.PublishedLanguage\IdentityServer.PublishedLanguage.csproj", "{67B4D1FF-D02E-4DA6-9FB8-F71667360448}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
|
|
@ -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>
|
|
@ -10,5 +10,7 @@
|
||||||
<MediatRPackageVersion>6.0.0</MediatRPackageVersion>
|
<MediatRPackageVersion>6.0.0</MediatRPackageVersion>
|
||||||
<SwashbucklePackageVersion>5.3.1</SwashbucklePackageVersion>
|
<SwashbucklePackageVersion>5.3.1</SwashbucklePackageVersion>
|
||||||
<EntityFrameworkCorePackageVersion>3.1.3</EntityFrameworkCorePackageVersion>
|
<EntityFrameworkCorePackageVersion>3.1.3</EntityFrameworkCorePackageVersion>
|
||||||
|
<NDBExtensionsPackageVersion>1.0.0</NDBExtensionsPackageVersion>
|
||||||
|
<NDBApplicationPackageVersion>1.0.0</NDBApplicationPackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
Loading…
Reference in New Issue