public HpkpMiddleware(RequestDelegate next, HpkpOptions options) { if (options == null) { throw new ArgumentNullException(nameof(options)); } this.next = next; List <string> parts = new List <string>(); parts.AddRange(options.Pins); if (options.ReportingGroup != null) { string rgJson = JsonConvert.SerializeObject(options.ReportingGroup); this.reportingGroupJson = rgJson; parts.Add($"report-to {options.ReportingGroup.Group}"); } parts.Add($"max-age={options.MaxAge}"); if (options.IncludeSubdomains) { parts.Add("includeSubDomains"); } headerValue = string.Join("; ", parts); }
/// <summary> /// Adds middleware for using HPKP, which adds the Public-Key-Pins header. /// </summary> /// <param name="app">The <see cref="IApplicationBuilder"/> instance this method extends.</param> /// <param name="optionsAction">A delegate used for setting up the <see cref="HpkpOptionsBuilder"/>.</param> public static IApplicationBuilder UseHpkp(this IApplicationBuilder app, Action <HpkpOptionsBuilder> optionsAction) { HpkpOptionsBuilder optionsBuilder = new HpkpOptionsBuilder(); optionsAction(optionsBuilder); HpkpOptions options = optionsBuilder.Build(); return(app.UseMiddleware <HpkpMiddleware>(options)); }
internal HpkpOptionsBuilder() { options = new HpkpOptions(); }