示例#1
0
        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);
        }