36 lines
1.3 KiB
C#
36 lines
1.3 KiB
C#
using System;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.AspNetCore.Localization;
|
|
using Oqtane.Documentation;
|
|
|
|
namespace Oqtane.Services
|
|
{
|
|
[PrivateApi("Don't show in the documentation, as everything should use the Interface")]
|
|
public class ServerLocalizationCookieService : ILocalizationCookieService
|
|
{
|
|
private readonly IHttpContextAccessor _accessor;
|
|
|
|
public ServerLocalizationCookieService(IHttpContextAccessor accessor)
|
|
{
|
|
_accessor = accessor;
|
|
}
|
|
|
|
public Task SetLocalizationCookieAsync(string culture)
|
|
{
|
|
var localizationCookieValue = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture));
|
|
|
|
_accessor.HttpContext.Response.Cookies.Append(CookieRequestCultureProvider.DefaultCookieName, localizationCookieValue, new CookieOptions
|
|
{
|
|
Path = "/",
|
|
Expires = DateTimeOffset.UtcNow.AddYears(365),
|
|
SameSite = SameSiteMode.Lax,
|
|
Secure = true, // Ensure the cookie is only sent over HTTPS
|
|
HttpOnly = false // cookie is updated using JS Interop in Interactive render mode
|
|
});
|
|
|
|
return Task.CompletedTask;
|
|
}
|
|
}
|
|
}
|