profileShare

rasmusjy / splitapp-backend-modular-monolith

Read-only snapshot

No repository description.

main default branch 418 files Expires Sep 13, 2026, 9:06 AM
ConfigureSwaggerOptions.cs 2,019 bytes
1 using Asp.Versioning.ApiExplorer;
2 using Microsoft.Extensions.Options;
3 using Microsoft.OpenApi;
4 using Swashbuckle.AspNetCore.SwaggerGen;
5
6 namespace SplitApp.WebApp.Hosting;
7
8 public class ConfigureSwaggerOptions : IConfigureOptions<SwaggerGenOptions>
9 {
10 private readonly IApiVersionDescriptionProvider _descriptionProvider;
11
12 public ConfigureSwaggerOptions(IApiVersionDescriptionProvider descriptionProvider)
13 {
14 _descriptionProvider = descriptionProvider;
15 }
16
17 public void Configure(SwaggerGenOptions options)
18 {
19 foreach (var description in _descriptionProvider.ApiVersionDescriptions)
20 {
21 options.SwaggerDoc(
22 description.GroupName,
23 new OpenApiInfo
24 {
25 Title = $"SplitApp API {description.ApiVersion}",
26 Version = description.ApiVersion.ToString(),
27 });
28 }
29
30 options.CustomSchemaIds(t => t.FullName);
31
32 options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
33 {
34 Description =
35 "JWT Authorization header using the Bearer scheme.\r\n<br/>" +
36 "Enter your token in the text box below.\r\n<br/>" +
37 "You will get the bearer from the <i>account/login</i> or <i>account/register</i> endpoint.",
38 Name = "Authorization",
39 In = ParameterLocation.Header,
40 Type = SecuritySchemeType.Http,
41 Scheme = "Bearer",
42 BearerFormat = "JWT",
43 });
44
45 options.DocumentFilter<BearerSecurityRequirementDocumentFilter>();
46 }
47 }
48
49 public class BearerSecurityRequirementDocumentFilter : IDocumentFilter
50 {
51 public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
52 {
53 swaggerDoc.Security = new List<OpenApiSecurityRequirement>
54 {
55 new()
56 {
57 [new OpenApiSecuritySchemeReference("Bearer", swaggerDoc)] = new List<string>(),
58 },
59 };
60 }
61 }
62