You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
3.0 KiB
89 lines
3.0 KiB
using System.Globalization; |
|
using Microsoft.AspNetCore.StaticFiles; |
|
|
|
namespace Bit.Server; |
|
|
|
public class Startup |
|
{ |
|
private readonly List<string> _longCachedPaths = new List<string> |
|
{ |
|
"/app/", "/locales/", "/fonts/", "/connectors/", "/scripts/" |
|
}; |
|
private readonly List<string> _mediumCachedPaths = new List<string> |
|
{ |
|
"/images/" |
|
}; |
|
|
|
public Startup() |
|
{ |
|
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US"); |
|
} |
|
|
|
public void ConfigureServices(IServiceCollection services) |
|
{ |
|
services.AddRouting(); |
|
} |
|
|
|
public void Configure( |
|
IApplicationBuilder app, |
|
IConfiguration configuration) |
|
{ |
|
if (configuration.GetValue<bool?>("serveUnknown") ?? false) |
|
{ |
|
app.UseStaticFiles(new StaticFileOptions |
|
{ |
|
ServeUnknownFileTypes = true, |
|
DefaultContentType = "application/octet-stream" |
|
}); |
|
app.UseRouting(); |
|
app.UseEndpoints(endpoints => |
|
{ |
|
endpoints.MapGet("/alive", |
|
async context => await context.Response.WriteAsync(System.DateTime.UtcNow.ToString())); |
|
}); |
|
} |
|
else if (configuration.GetValue<bool?>("webVault") ?? false) |
|
{ |
|
// TODO: This should be removed when asp.net natively support avif |
|
var provider = new FileExtensionContentTypeProvider { Mappings = { [".avif"] = "image/avif" } }; |
|
|
|
var options = new DefaultFilesOptions(); |
|
options.DefaultFileNames.Clear(); |
|
options.DefaultFileNames.Add("index.html"); |
|
app.UseDefaultFiles(options); |
|
app.UseStaticFiles(new StaticFileOptions |
|
{ |
|
ContentTypeProvider = provider, |
|
OnPrepareResponse = ctx => |
|
{ |
|
if (!ctx.Context.Request.Path.HasValue || |
|
ctx.Context.Response.Headers.ContainsKey("Cache-Control")) |
|
{ |
|
return; |
|
} |
|
var path = ctx.Context.Request.Path.Value; |
|
if (_longCachedPaths.Any(ext => path.StartsWith(ext))) |
|
{ |
|
// 14 days |
|
ctx.Context.Response.Headers.Append("Cache-Control", "max-age=1209600"); |
|
} |
|
if (_mediumCachedPaths.Any(ext => path.StartsWith(ext))) |
|
{ |
|
// 7 days |
|
ctx.Context.Response.Headers.Append("Cache-Control", "max-age=604800"); |
|
} |
|
} |
|
}); |
|
} |
|
else |
|
{ |
|
app.UseFileServer(); |
|
app.UseRouting(); |
|
app.UseEndpoints(endpoints => |
|
{ |
|
endpoints.MapGet("/alive", |
|
async context => await context.Response.WriteAsync(System.DateTime.UtcNow.ToString())); |
|
}); |
|
} |
|
} |
|
}
|
|
|