mirror of
https://github.com/bitwarden/server.git
synced 2024-11-22 12:15:36 +01:00
97 lines
3.5 KiB
C#
97 lines
3.5 KiB
C#
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.Linq;
|
|
using Microsoft.AspNetCore.Builder;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.AspNetCore.StaticFiles;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
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()));
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|