Files
server/util/Server/Startup.cs

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

90 lines
3.0 KiB
C#
Raw Normal View History

using System.Globalization;
2022-01-18 18:50:59 +01:00
using Microsoft.AspNetCore.StaticFiles;
2017-09-08 11:45:20 -04:00
namespace Bit.Server;
2022-08-29 14:53:16 -04:00
public class Startup
{
private readonly List<string> _longCachedPaths = new List<string>
{
2018-08-07 12:49:00 -04:00
"/app/", "/locales/", "/fonts/", "/connectors/", "/scripts/"
};
private readonly List<string> _mediumCachedPaths = new List<string>
{
"/images/"
};
2019-07-11 15:03:17 -04:00
public Startup()
{
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US");
}
public void ConfigureServices(IServiceCollection services)
2020-01-13 11:14:50 -05:00
{
services.AddRouting();
}
public void Configure(
IApplicationBuilder app,
IConfiguration configuration)
2022-08-29 14:53:16 -04:00
{
if (configuration.GetValue<bool?>("serveUnknown") ?? false)
{
app.UseStaticFiles(new StaticFileOptions
{
ServeUnknownFileTypes = true,
DefaultContentType = "application/octet-stream"
});
2020-01-10 08:33:13 -05:00
app.UseRouting();
app.UseEndpoints(endpoints =>
{
2020-01-10 08:33:13 -05:00
endpoints.MapGet("/alive",
async context => await context.Response.WriteAsync(System.DateTime.UtcNow.ToString()));
2022-08-29 14:53:16 -04:00
});
}
else if (configuration.GetValue<bool?>("webVault") ?? false)
2022-08-29 14:53:16 -04:00
{
2022-01-18 18:50:59 +01:00
// TODO: This should be removed when asp.net natively support avif
var provider = new FileExtensionContentTypeProvider { Mappings = { [".avif"] = "image/avif" } };
2018-08-07 12:49:00 -04:00
var options = new DefaultFilesOptions();
options.DefaultFileNames.Clear();
options.DefaultFileNames.Add("index.html");
app.UseDefaultFiles(options);
app.UseStaticFiles(new StaticFileOptions
2022-08-29 14:53:16 -04:00
{
2022-01-18 18:50:59 +01:00
ContentTypeProvider = provider,
2018-08-07 12:49:00 -04:00
OnPrepareResponse = ctx =>
{
2022-01-18 18:50:59 +01:00
if (!ctx.Context.Request.Path.HasValue ||
2018-08-07 12:49:00 -04:00
ctx.Context.Response.Headers.ContainsKey("Cache-Control"))
2022-08-29 14:53:16 -04:00
{
2018-08-07 12:49:00 -04:00
return;
2022-08-29 14:53:16 -04:00
}
2018-08-07 12:49:00 -04:00
var path = ctx.Context.Request.Path.Value;
if (_longCachedPaths.Any(ext => path.StartsWith(ext)))
2022-08-29 14:53:16 -04:00
{
2018-08-07 12:49:00 -04:00
// 14 days
ctx.Context.Response.Headers.Append("Cache-Control", "max-age=1209600");
2022-08-29 14:53:16 -04:00
}
if (_mediumCachedPaths.Any(ext => path.StartsWith(ext)))
2018-08-07 12:49:00 -04:00
{
// 7 days
ctx.Context.Response.Headers.Append("Cache-Control", "max-age=604800");
}
2022-08-29 14:53:16 -04:00
}
2018-08-07 12:49:00 -04:00
});
}
2018-08-07 15:04:11 -04:00
else
2022-08-29 14:53:16 -04:00
{
2018-08-07 15:04:11 -04:00
app.UseFileServer();
2020-01-10 08:33:13 -05:00
app.UseRouting();
app.UseEndpoints(endpoints =>
2018-08-07 15:04:11 -04:00
{
2020-01-10 08:33:13 -05:00
endpoints.MapGet("/alive",
async context => await context.Response.WriteAsync(System.DateTime.UtcNow.ToString()));
});
}
}
}