コード例 #1
0
        public void WhenMetadataItemIsEmpty_ThenKeySetIsEmpty()
        {
            var metadata = new Metadata.ItemsData()
            {
                Key   = MetadataAuthorizedKeySet.MetadataKey,
                Value = " "
            };

            CollectionAssert.IsEmpty(MetadataAuthorizedKeySet.FromMetadata(metadata).Keys);
        }
コード例 #2
0
        public void WhenMetadataItemContainsJunk_ThenFromMetadataThrowsArgumentException()
        {
            var metadata = new Metadata.ItemsData()
            {
                Key   = MetadataAuthorizedKeySet.MetadataKey,
                Value = "junk junk junk "
            };

            Assert.Throws <ArgumentException>(
                () => MetadataAuthorizedKeySet.FromMetadata(metadata));
        }
コード例 #3
0
        public void WhenMetadataItemHasWrongKey_ThenFromMetadataThrowsArgumentException()
        {
            var metadata = new Metadata.ItemsData()
            {
                Key   = MetadataAuthorizedKeySet.LegacyMetadataKey,
                Value = " "
            };

            Assert.Throws <ArgumentException>(
                () => MetadataAuthorizedKeySet.FromMetadata(metadata));
        }
コード例 #4
0
        public void WhenMetadataItemContainsData_ThenKeySetIsPopulated()
        {
            var metadata = new Metadata.ItemsData()
            {
                Key   = MetadataAuthorizedKeySet.MetadataKey,
                Value = "alice:ssh-rsa key alice\n" +
                        "bob:ssh-rsa key google-ssh {\"userName\":\"[email protected]\",\"expireOn\":\"2050-01-15T15:22:35Z\"}"
            };

            var keySet = MetadataAuthorizedKeySet.FromMetadata(metadata);

            Assert.AreEqual(2, keySet.Keys.Count());
        }
コード例 #5
0
        public void WhenAddingNewKey_ThenAddReturnsNewSet()
        {
            var metadata = new Metadata.ItemsData()
            {
                Key   = MetadataAuthorizedKeySet.MetadataKey,
                Value = "alice:ssh-rsa key alice"
            };

            var keySet = MetadataAuthorizedKeySet.FromMetadata(metadata)
                         .Add(MetadataAuthorizedKey.Parse("bob:ssh-rsa key notalice"))
                         .Add(MetadataAuthorizedKey.Parse("bob:ssh-rsa key2 bob"));

            Assert.AreEqual(3, keySet.Keys.Count());
        }
コード例 #6
0
        public void WhenAddingDuplicateKey_ThenAddReturnsThis()
        {
            var metadata = new Metadata.ItemsData()
            {
                Key   = MetadataAuthorizedKeySet.MetadataKey,
                Value = "alice:ssh-rsa key alice"
            };

            var keySet = MetadataAuthorizedKeySet.FromMetadata(metadata);

            Assert.AreSame(
                keySet,
                keySet.Add(MetadataAuthorizedKey.Parse("alice:ssh-rsa key notalice")));
        }
コード例 #7
0
        public static MetadataAuthorizedKeySet FromMetadata(Metadata.ItemsData data)
        {
            Utilities.ThrowIfNull(data, nameof(data));
            if (data.Key != MetadataKey)
            {
                throw new ArgumentException("Not a valid metadata key");
            }

            return(new MetadataAuthorizedKeySet(
                       data.Value
                       .Split('\n')
                       .Where(line => !string.IsNullOrWhiteSpace(line))
                       .Select(line => MetadataAuthorizedKey.Parse(line))
                       .ToList()));
        }
コード例 #8
0
        public void WhenKeyExpired_ThenRemoveExpiredKeysStripsKey()
        {
            var metadata = new Metadata.ItemsData()
            {
                Key   = MetadataAuthorizedKeySet.MetadataKey,
                Value = $"alice:ssh-rsa key alice\n" +
                        $"joe:ssh-rsa key2 google-ssh {{\"userName\":\"[email protected]\",\"expireOn\":\"{DateTime.UtcNow.AddMinutes(-1):O}\"}}\n" +
                        $"moe:ssh-rsa key2 google-ssh {{\"userName\":\"[email protected]\",\"expireOn\":\"{DateTime.UtcNow.AddMinutes(1):O}\"}}\n"
            };

            var keySet = MetadataAuthorizedKeySet.FromMetadata(metadata)
                         .RemoveExpiredKeys();

            Assert.AreEqual(2, keySet.Keys.Count());
            Assert.IsFalse(keySet.Keys.Any(k => k.LoginUsername == "joe"));
        }
コード例 #9
0
        public void WhenMetadataItemContainsUnnecessaryWhitespace_ThenKeySetIsPopulated()
        {
            var metadata = new Metadata.ItemsData()
            {
                Key   = MetadataAuthorizedKeySet.MetadataKey,
                Value =
                    "alice:ssh-rsa key alice\r\n" +
                    "bob:ssh-rsa key google-ssh {\"userName\":\"[email protected]\",\"expireOn\":\"2050-01-15T15:22:35Z\"}\n" +
                    "\n" +
                    " carol:ssh-rsa key carol \t\r\n" +
                    "dave:ssh-rsa key dave\r\n"
            };

            var keySet = MetadataAuthorizedKeySet.FromMetadata(metadata);

            Assert.AreEqual(4, keySet.Keys.Count());
        }
コード例 #10
0
        public void WhenSetContainsEntriesWithEmptyUsername_ThenAddMaintainsEntry()
        {
            var metadata = new Metadata.ItemsData()
            {
                Key   = MetadataAuthorizedKeySet.MetadataKey,
                Value = $"alice:ssh-rsa key alice\n" +
                        $":ssh-rsa phantomkey2 phantom\n" +
                        $":ssh-rsa phantomkey3 google-ssh {{\"userName\":\"[email protected]\",\"expireOn\":\"{DateTime.UtcNow.AddMinutes(1):O}\"}}\n" +
                        $"moe:ssh-rsa key2 google-ssh {{\"userName\":\"[email protected]\",\"expireOn\":\"{DateTime.UtcNow.AddMinutes(1):O}\"}}\n"
            };

            var keySet = MetadataAuthorizedKeySet.FromMetadata(metadata)
                         .RemoveExpiredKeys()
                         .Add(MetadataAuthorizedKey.Parse("bob:ssh-rsa key2 bob"));

            Assert.AreEqual(5, keySet.Keys.Count());
            Assert.AreEqual("", keySet.Keys.First(k => k.Key == "phantomkey2").LoginUsername);
            Assert.AreEqual("", keySet.Keys.First(k => k.Key == "phantomkey3").LoginUsername);
        }