Separate admin access from finance lock
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Nodes;
|
||||
using Microsoft.Extensions.Options;
|
||||
using TrafagSalesExporter.Security;
|
||||
|
||||
namespace TrafagSalesExporter.Services;
|
||||
|
||||
public interface ILandingPageSettingsService
|
||||
{
|
||||
bool ShowWalkingLabFigure { get; }
|
||||
void SetShowWalkingLabFigure(bool value);
|
||||
}
|
||||
|
||||
public sealed class LandingPageSettingsService : ILandingPageSettingsService
|
||||
{
|
||||
private static readonly object FileLock = new();
|
||||
private readonly LandingPageOptions _options;
|
||||
private readonly IHostEnvironment _environment;
|
||||
|
||||
public LandingPageSettingsService(IOptions<LandingPageOptions> options, IHostEnvironment environment)
|
||||
{
|
||||
_options = options.Value;
|
||||
_environment = environment;
|
||||
}
|
||||
|
||||
public bool ShowWalkingLabFigure => _options.ShowWalkingLabFigure;
|
||||
|
||||
public void SetShowWalkingLabFigure(bool value)
|
||||
{
|
||||
_options.ShowWalkingLabFigure = value;
|
||||
SaveSetting(value);
|
||||
}
|
||||
|
||||
private void SaveSetting(bool value)
|
||||
{
|
||||
var path = Path.Combine(_environment.ContentRootPath, "appsettings.json");
|
||||
|
||||
lock (FileLock)
|
||||
{
|
||||
var json = File.Exists(path)
|
||||
? File.ReadAllText(path, Encoding.UTF8)
|
||||
: "{}";
|
||||
|
||||
var root = JsonNode.Parse(json)?.AsObject() ?? new JsonObject();
|
||||
var section = root[LandingPageOptions.SectionName] as JsonObject;
|
||||
if (section is null)
|
||||
{
|
||||
section = new JsonObject();
|
||||
root[LandingPageOptions.SectionName] = section;
|
||||
}
|
||||
|
||||
section[nameof(LandingPageOptions.ShowWalkingLabFigure)] = value;
|
||||
var options = new JsonSerializerOptions { WriteIndented = true };
|
||||
File.WriteAllText(path, root.ToJsonString(options), new UTF8Encoding(false));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user