< Summary

Class:Azure.Security.KeyVault.Secrets.SecretProperties
Assembly:Azure.Security.KeyVault.Secrets
File(s):C:\Git\azure-sdk-for-net\sdk\keyvault\Azure.Security.KeyVault.Secrets\src\SecretProperties.cs
Covered lines:47
Uncovered lines:13
Coverable lines:60
Total lines:223
Line coverage:78.3% (47 of 60)
Covered branches:28
Total branches:32
Branch coverage:87.5% (28 of 32)

Metrics

MethodCyclomatic complexity Line coverage Branch coverage
.cctor()-100%100%
.ctor()-100%100%
.ctor(...)-100%100%
.ctor(...)-0%100%
get_Id()-0%100%
get_VaultUri()-0%100%
get_Name()-0%100%
get_Version()-0%100%
get_ContentType()-100%100%
get_Managed()-100%100%
get_KeyId()-100%50%
set_KeyId(...)-0%0%
get_Enabled()-100%100%
get_NotBefore()-100%100%
get_ExpiresOn()-100%100%
get_CreatedOn()-0%100%
get_UpdatedOn()-0%100%
get_RecoverableDays()-0%100%
get_RecoveryLevel()-0%100%
get_Tags()-100%100%
ReadProperties(...)-100%100%
ReadProperty(...)-100%92.86%
WriteProperties(...)-100%100%
Azure.Security.KeyVault.IJsonDeserializable.ReadProperties(...)-100%100%
Azure.Security.KeyVault.IJsonSerializable.WriteProperties(...)-100%100%

File(s)

C:\Git\azure-sdk-for-net\sdk\keyvault\Azure.Security.KeyVault.Secrets\src\SecretProperties.cs

#LineLine coverage
 1// Copyright (c) Microsoft Corporation. All rights reserved.
 2// Licensed under the MIT License.
 3
 4using System;
 5using System.Collections.Generic;
 6using System.Text.Json;
 7using System.Threading;
 8using Azure.Core;
 9
 10namespace Azure.Security.KeyVault.Secrets
 11{
 12    /// <summary>
 13    /// <see cref="SecretProperties"/> is the resource containing all the properties of the secret except its value.
 14    /// </summary>
 15    public class SecretProperties : IJsonDeserializable, IJsonSerializable
 16    {
 17        private const string IdPropertyName = "id";
 18        private const string ContentTypePropertyName = "contentType";
 19        private const string KidPropertyName = "kid";
 20        private const string ManagedPropertyName = "managed";
 21        private const string AttributesPropertyName = "attributes";
 22        private const string TagsPropertyName = "tags";
 23
 424        private static readonly JsonEncodedText s_contentTypePropertyNameBytes = JsonEncodedText.Encode(ContentTypePrope
 425        private static readonly JsonEncodedText s_attributesPropertyNameBytes = JsonEncodedText.Encode(AttributesPropert
 426        private static readonly JsonEncodedText s_tagsPropertyNameBytes = JsonEncodedText.Encode(TagsPropertyName);
 27
 28        private ObjectId _identifier;
 29        private SecretAttributes _attributes;
 30        private Dictionary<string, string> _tags;
 31        private string _keyId;
 32
 162033        internal SecretProperties()
 34        {
 162035        }
 36
 37        /// <summary>
 38        /// Initializes a new instance of the <see cref="SecretProperties"/> class.
 39        /// </summary>
 40        /// <param name="name">The name of the secret.</param>
 41        /// <exception cref="ArgumentException"><paramref name="name"/> is an empty string.</exception>
 42        /// <exception cref="ArgumentNullException"><paramref name="name"/> is null.</exception>
 74443        public SecretProperties(string name)
 44        {
 74445            Argument.AssertNotNullOrEmpty(name, nameof(name));
 46
 73647            _identifier.Name = name;
 73648        }
 49
 50        /// <summary>
 51        /// Initializes a new instance of the <see cref="SecretProperties"/> class.
 52        /// </summary>
 53        /// <param name="id">The identifier of the secret.</param>
 54        /// <exception cref="ArgumentNullException"><paramref name="id"/> is null.</exception>
 055        public SecretProperties(Uri id)
 56        {
 057            Argument.AssertNotNull(id, nameof(id));
 58
 059            _identifier.ParseId("secrets", id);
 060        }
 61
 62        /// <summary>
 63        /// Gets the secret identifier.
 64        /// </summary>
 065        public Uri Id { get => _identifier.Id; internal set => _identifier.Id = value; }
 66
 67        /// <summary>
 68        /// Gets the Key Vault base <see cref="Uri"/>.
 69        /// </summary>
 070        public Uri VaultUri { get => _identifier.VaultUri; internal set => _identifier.VaultUri = value; }
 71
 72        /// <summary>
 73        /// Gets the name of the secret.
 74        /// </summary>
 075        public string Name { get => _identifier.Name; internal set => _identifier.Name = value; }
 76
 77        /// <summary>
 78        /// Gets the version of the secret.
 79        /// </summary>
 080        public string Version { get => _identifier.Version; internal set => _identifier.Version = value; }
 81
 82        /// <summary>
 83        /// Gets or sets the content type of the secret value such as "text/plain" for a password.
 84        /// </summary>
 207285        public string ContentType { get; set; }
 86
 87        /// <summary>
 88        /// Gets a value indicating whether the secret's lifetime is managed by Key Vault.
 89        /// If this secret is backing a Key Vault certificate, the value will be true.
 90        /// </summary>
 129891        public bool Managed { get; internal set; }
 92
 93        /// <summary>
 94        /// Gets the key identifier of a key backing a Key Vault certificate if this secret is backing a Key Vault certi
 95        /// </summary>
 96        public Uri KeyId
 97        {
 128898            get => _keyId is null ? null : new Uri(_keyId);
 099            internal set => _keyId = value?.ToString();
 100        }
 101
 102        /// <summary>
 103        /// Gets or sets a value indicating whether the secret is enabled and useable.
 104        /// </summary>
 1296105        public bool? Enabled { get => _attributes.Enabled; set => _attributes.Enabled = value; }
 106
 107        /// <summary>
 108        /// Gets or sets a <see cref="DateTimeOffset"/> indicating when the secret will be valid and can be used.
 109        /// </summary>
 1296110        public DateTimeOffset? NotBefore { get => _attributes.NotBefore; set => _attributes.NotBefore = value; }
 111
 112        /// <summary>
 113        /// Gets or sets a <see cref="DateTimeOffset"/> indicating when the secret will expire and cannot be used.
 114        /// </summary>
 1300115        public DateTimeOffset? ExpiresOn { get => _attributes.ExpiresOn; set => _attributes.ExpiresOn = value; }
 116
 117        /// <summary>
 118        /// Gets a <see cref="DateTimeOffset"/> indicating when the secret was created.
 119        /// </summary>
 0120        public DateTimeOffset? CreatedOn { get => _attributes.CreatedOn; internal set => _attributes.CreatedOn = value; 
 121
 122        /// <summary>
 123        /// Gets a <see cref="DateTimeOffset"/> indicating when the secret was updated.
 124        /// </summary>
 0125        public DateTimeOffset? UpdatedOn { get => _attributes.UpdatedOn; internal set => _attributes.UpdatedOn = value; 
 126
 127        /// <summary>
 128        /// Gets the number of days a secret is retained before being deleted for a soft delete-enabled Key Vault.
 129        /// </summary>
 0130        public int? RecoverableDays { get => _attributes.RecoverableDays; internal set => _attributes.RecoverableDays = 
 131
 132        /// <summary>
 133        /// Gets the recovery level currently in effect for secrets in the Key Vault.
 134        /// If <c>Purgeable</c>, the secret can be permanently deleted by an authorized user;
 135        /// otherwise, only the service can purge the secrets at the end of the retention interval.
 136        /// </summary>
 137        /// <value>Possible values include <c>Purgeable</c>, <c>Recoverable+Purgeable</c>, <c>Recoverable</c>, and <c>Re
 0138        public string RecoveryLevel { get => _attributes.RecoveryLevel; internal set => _attributes.RecoveryLevel = valu
 139
 140        /// <summary>
 141        /// Gets a dictionary of tags with specific metadata about the secret.
 142        /// </summary>
 104143        public IDictionary<string, string> Tags => LazyInitializer.EnsureInitialized(ref _tags);
 144
 145        internal void ReadProperties(JsonElement json)
 146        {
 2624147            foreach (JsonProperty prop in json.EnumerateObject())
 148            {
 876149                ReadProperty(prop);
 150            }
 436151        }
 152
 153        internal void ReadProperty(JsonProperty prop)
 154        {
 3148155            switch (prop.Name)
 156            {
 157                case IdPropertyName:
 1544158                    _identifier.ParseId("secrets", prop.Value.GetString());
 1544159                    break;
 160
 161                case ContentTypePropertyName:
 16162                    ContentType = prop.Value.GetString();
 16163                    break;
 164
 165                case KidPropertyName:
 12166                    _keyId = prop.Value.GetString();
 12167                    break;
 168
 169                case ManagedPropertyName:
 4170                    Managed = prop.Value.GetBoolean();
 4171                    break;
 172
 173                case AttributesPropertyName:
 1548174                    _attributes.ReadProperties(prop.Value);
 1548175                    break;
 176
 177                case TagsPropertyName:
 144178                    foreach (JsonProperty tag in prop.Value.EnumerateObject())
 179                    {
 48180                        Tags[tag.Name] = tag.Value.GetString();
 181                    }
 182                    break;
 183            }
 24184        }
 185
 186        internal void WriteProperties(Utf8JsonWriter json)
 187        {
 748188            if (ContentType != null)
 189            {
 8190                json.WriteString(s_contentTypePropertyNameBytes, ContentType);
 191            }
 192
 748193            if (_attributes.Enabled.HasValue || _attributes.NotBefore.HasValue || _attributes.ExpiresOn.HasValue)
 194            {
 24195                json.WriteStartObject(s_attributesPropertyNameBytes);
 196
 24197                _attributes.WriteProperties(json);
 198
 24199                json.WriteEndObject();
 200            }
 201
 748202            if (!_tags.IsNullOrEmpty())
 203            {
 16204                json.WriteStartObject(s_tagsPropertyNameBytes);
 205
 96206                foreach (KeyValuePair<string, string> kvp in _tags)
 207                {
 32208                    json.WriteString(kvp.Key, kvp.Value);
 209                }
 210
 16211                json.WriteEndObject();
 212            }
 213
 214            // KeyId is read-only don't serialize
 215
 216            // Managed is read-only don't serialize
 748217        }
 218
 436219        void IJsonDeserializable.ReadProperties(JsonElement json) => ReadProperties(json);
 220
 20221        void IJsonSerializable.WriteProperties(Utf8JsonWriter json) => WriteProperties(json);
 222    }
 223}