public void CanDeserializeJson() { const string json = @"[ {""Identity"": ""BUILTIN\\Administrators"", ""Access"": ""FullControl""}, {""Identity"": ""BUILTIN\\Users"", ""Access"": ""ReadOnly""} ]"; var result = PrivateKeyAccessRule.FromJson(json).ToList(); Assert.AreEqual(2, result.Count); Assert.AreEqual("BUILTIN\\Administrators", result[0].Identity.ToString()); Assert.AreEqual(PrivateKeyAccess.FullControl, result[0].Access); Assert.AreEqual("BUILTIN\\Users", result[1].Identity.ToString()); Assert.AreEqual(PrivateKeyAccess.ReadOnly, result[1].Access); }
internal static ICollection<PrivateKeyAccessRule> GetPrivateKeyAccessRules(IVariables variables) { // The private-key access-rules are stored as escaped JSON. However, they may contain nested // variables (for example the user-name may be an Octopus variable) which may not be escaped, // causing JSON parsing to fail. // So, we get the raw text var raw = variables.GetRaw(SpecialVariables.Certificate.PrivateKeyAccessRules); if (string.IsNullOrWhiteSpace(raw)) return new List<PrivateKeyAccessRule>(); // Unescape it (we only care about backslashes) var unescaped = raw.Replace(@"\\", @"\"); // Perform variable-substitution and re-escape var escapedAndSubstituted = variables.Evaluate(unescaped).Replace(@"\", @"\\"); return PrivateKeyAccessRule.FromJson(escapedAndSubstituted); }