Skip to content

Instantly share code, notes, and snippets.

@hendrasyp
Created June 20, 2022 08:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hendrasyp/aaff8018e4205cedda993963514e6654 to your computer and use it in GitHub Desktop.
Save hendrasyp/aaff8018e4205cedda993963514e6654 to your computer and use it in GitHub Desktop.
Swagger Custom Header Parameter
// Swagger Init..
service.AddSwaggerGen(opts =>
{
// Custom header for authorization on swagger
opts.OperationFilter<SwaggerOperationFilter>();
opts.OrderActionsBy((apiDesc) => $"{apiDesc.ActionDescriptor.RouteValues["controller"]}_{apiDesc.RelativePath}");
opts.ExampleFilters();
//jangan dipake, malah bikin versioning ga jalan
//opts.DocInclusionPredicate((name, api) => true);
opts.CustomOperationIds(apiDesc =>
{
return apiDesc.TryGetMethodInfo(out MethodInfo methodInfo) ? methodInfo.Name : null;
});
opts.IgnoreObsoleteActions();
opts.IgnoreObsoleteProperties();
// opts.DocumentFilter<CustomDocumentFilter>();
opts.DocumentFilter<OperationsOrderingFilter>();
// Include Comment
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(System.AppContext.BaseDirectory, xmlFile);
opts.IncludeXmlComments(xmlPath, includeControllerXmlComments: true);
opts.EnableAnnotations();
});
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using System.Collections.Generic;
using System.Linq;
namespace HOM6.API.Settings.SwaggerConfig
{
public class SwaggerOperationFilter : IOperationFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
#region KONFIGURASI API DESCRIPTION
var apiDescription = context.ApiDescription;
if (operation.Parameters == null)
{
return;
}
#endregion
#region KONFIGURASI HEADER PARAMETER
var filterPipeline = context.ApiDescription.ActionDescriptor.FilterDescriptors;
var allowAnonymous = (operation.OperationId == "Authentication_Post") || (operation.OperationId == "Authentication_Get");
if (!allowAnonymous)
{
var _accessor = new HttpContextAccessor();
var env = _accessor.HttpContext.RequestServices.GetRequiredService<Microsoft.AspNetCore.Hosting.IWebHostEnvironment>();
if (operation.Parameters == null)
operation.Parameters = new List<OpenApiParameter>();
if (operation.OperationId.ToString().Contains("BPJS_"))
{
if (operation.OperationId.ToString().Equals("BPJS_Authentication_Get"))
{
if (env.IsDevelopment())
{
operation.Parameters.Add(new OpenApiParameter()
{
Name = "x-username",
In = ParameterLocation.Header,
Required = false,
Description = "Nama user",
Schema = new OpenApiSchema
{
Type = "String",
Example = new OpenApiString("hospital")
}
});
operation.Parameters.Add(new OpenApiParameter()
{
Name = "x-password",
In = ParameterLocation.Header,
Required = false,
Description = "Password User",
Schema = new OpenApiSchema
{
Type = "String",
Example = new OpenApiString("serverh5n")
}
});
}
else
{
operation.Parameters.Add(new OpenApiParameter()
{
Name = "x-username",
In = ParameterLocation.Header,
Required = false,
Description = "Nama user",
Schema = new OpenApiSchema
{
Type = "String",
Example = new OpenApiString("")
}
});
operation.Parameters.Add(new OpenApiParameter()
{
Name = "x-password",
In = ParameterLocation.Header,
Required = false,
Description = "Password User",
Schema = new OpenApiSchema
{
Type = "String",
Example = new OpenApiString("")
}
});
}
}
else
{
if (env.IsDevelopment())
{
operation.Parameters.Add(new OpenApiParameter()
{
Name = "x-username",
In = ParameterLocation.Header,
Required = false,
Description = "Nama user",
Schema = new OpenApiSchema
{
Type = "String",
Example = new OpenApiString("hospital")
}
});
operation.Parameters.Add(new OpenApiParameter()
{
Name = "x-token",
In = ParameterLocation.Header,
Required = false,
Description = "(BPJS Bridging) Didapat pada saat login (string base64)",
Schema = new OpenApiSchema
{
Type = "String",
Example = new OpenApiString(HOM6.API.CoreHelpers.BaseConfiguration.Global_Token)
}
});
}
else
{
operation.Parameters.Add(new OpenApiParameter()
{
Name = "x-username",
In = ParameterLocation.Header,
Required = false,
Description = "(BPJS Bridging) Didapat pada saat login (string base64)",
Schema = new OpenApiSchema
{
Type = "String",
Example = new OpenApiString("")
}
});
operation.Parameters.Add(new OpenApiParameter()
{
Name = "x-token",
In = ParameterLocation.Header,
Required = false,
Description = "(BPJS Bridging) Didapat pada saat login (string base64)",
Schema = new OpenApiSchema
{
Type = "String",
Example = new OpenApiString("")
}
});
}
}
}
else
{
if (env.IsDevelopment())
{
if (operation.OperationId.ToString().Contains("BPJS_"))
{
operation.Parameters.Add(new OpenApiParameter()
{
Name = "x-username",
In = ParameterLocation.Header,
Required = false,
Description = "Nama user",
Schema = new OpenApiSchema
{
Type = "String",
Example = new OpenApiString("hospital")
}
});
operation.Parameters.Add(new OpenApiParameter()
{
Name = "x-token",
In = ParameterLocation.Header,
Required = false,
Description = "(BPJS Bridging) Didapat pada saat login (string base64)",
Schema = new OpenApiSchema
{
Type = "String",
Example = new OpenApiString(HOM6.API.CoreHelpers.BaseConfiguration.Global_Token)
}
});
}
else
{
operation.Parameters.Add(new OpenApiParameter()
{
Name = "token",
In = ParameterLocation.Header,
Description = "Didapat pada saat login",
Required = false,
Schema = new OpenApiSchema
{
Type = "String",
Default = new OpenApiString(HOM6.API.CoreHelpers.BaseConfiguration.Global_Token)
}
});
}
}
else
{
operation.Parameters.Add(new OpenApiParameter()
{
Name = "token",
In = ParameterLocation.Header,
Required = false,
Description = "Didapat pada saat login (string base64)",
Schema = new OpenApiSchema
{
Type = "String",
Example = new OpenApiString("")
}
});
}
var opID = operation.OperationId.ToLower();
//if (opID == "patient_post_savepatientattachment")
//{
// operation.Parameters.Clear();
// operation.RequestBody = new OpenApiRequestBody
// {
// Description = "file to upload",
// Content = new Dictionary<string, OpenApiMediaType>
// {
// {
// "multipart/form-data", new OpenApiMediaType
// {
// Schema = new OpenApiSchema
// {
// Type = "object",
// Required = new HashSet<string>{ "file" },
// Properties = new Dictionary<string, OpenApiSchema>
// {
// {
// "file", new OpenApiSchema()
// {
// // matches our handcrafted yaml
// Type = "string",
// Format = "binary"
// }
// }
// }
// }
// }
// }
// }
// };
// operation.Parameters.Add(new OpenApiParameter()
// {
// Name = "File",
// In = ParameterLocation.
// Description = "File Attachment",
// Required = true,
// Schema = new OpenApiSchema
// {
// Type = "File",
// Example = new OpenApiString("")
// }
// });
// operation.Parameters.Add(new OpenApiParameter()
// {
// Name = "MedicalRecordNo",
// @in = "formData",
// Description = "Nomor Medical Record",
// Required = true,
// type = "string"
// });
// operation.parameters.Add(new Parameter
// {
// name = "StorageType",
// @in = "formData",
// description = "Jenis Storage",
// required = true,
// type = "number",
// });
// operation.parameters.Add(new Parameter
// {
// name = "AttachmentTypeKey",
// @in = "formData",
// description = "Jenis Attachment",
// required = false,
// type = "number",
// });
// operation.parameters.Add(new Parameter
// {
// name = "Description",
// @in = "formData",
// description = "Deskripsi",
// required = false,
// type = "string",
// });
// // operation.consumes.Add("application/form-data");
//}
}
}
#endregion
#region REMOVE API Version Header Parameter
var parametersToRemove = operation.Parameters.Where(x => x.Name == "api-version").ToList();
foreach (var parameter in parametersToRemove)
operation.Parameters.Remove(parameter);
#endregion
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment