diff --git a/windows/welcome/src/SilverOS.Welcome.Core/Class1.cs b/windows/welcome/src/SilverOS.Welcome.Core/Class1.cs deleted file mode 100644 index fa8f040..0000000 --- a/windows/welcome/src/SilverOS.Welcome.Core/Class1.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace SilverOS.Welcome.Core; - -public class Class1 -{ - -} diff --git a/windows/welcome/src/SilverOS.Welcome.Core/Flavours/FlavourManifest.cs b/windows/welcome/src/SilverOS.Welcome.Core/Flavours/FlavourManifest.cs new file mode 100644 index 0000000..38b62f8 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.Core/Flavours/FlavourManifest.cs @@ -0,0 +1,30 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace SilverOS.Welcome.Core.Flavours; + +public sealed record FlavourManifest +{ + public string Id { get; init; } = ""; + public string Label { get; init; } = ""; + public string Description { get; init; } = ""; + public bool IsDefault { get; init; } + public HardeningSpec Hardening { get; init; } = new(); + public IReadOnlyList AppSet { get; init; } = Array.Empty(); + public IReadOnlyDictionary Settings { get; init; } + = new Dictionary(); + + public static readonly JsonSerializerOptions JsonOptions = new() + { + PropertyNameCaseInsensitive = true, + ReadCommentHandling = JsonCommentHandling.Skip, + AllowTrailingCommas = true + }; +} + +public sealed record HardeningSpec +{ + public IReadOnlyList Modules { get; init; } = Array.Empty(); + public IReadOnlyDictionary Params { get; init; } + = new Dictionary(); +} diff --git a/windows/welcome/tests/SilverOS.Welcome.Tests/FlavourManifestTests.cs b/windows/welcome/tests/SilverOS.Welcome.Tests/FlavourManifestTests.cs new file mode 100644 index 0000000..c2b66f5 --- /dev/null +++ b/windows/welcome/tests/SilverOS.Welcome.Tests/FlavourManifestTests.cs @@ -0,0 +1,25 @@ +using System.Text.Json; +using SilverOS.Welcome.Core.Flavours; +using Xunit; + +public class FlavourManifestTests +{ + [Fact] + public void Deserializes_a_full_manifest() + { + var json = """ + { + "id": "daily-driver", "label": "Daily-Driver", + "description": "Balanced.", "isDefault": true, + "hardening": { "modules": ["00","03","05"], "params": { "wdac": "audit" } }, + "appSet": ["SilverBrowser"], "settings": { "autoLock": 120 } + } + """; + var m = JsonSerializer.Deserialize(json, FlavourManifest.JsonOptions)!; + Assert.Equal("daily-driver", m.Id); + Assert.True(m.IsDefault); + Assert.Equal(new[] { "00", "03", "05" }, m.Hardening.Modules); + Assert.Equal("audit", m.Hardening.Params["wdac"]); + Assert.Contains("SilverBrowser", m.AppSet); + } +}