private string ToString(SensitiveDataType dataType)
        {
            switch (dataType)
            {
            case SensitiveDataType.LastFmServiceCredentials:
                return("last-fm-service");

            default:
                return(null);
            }
        }
        public void StoreSensitiveData(SensitiveDataType dataType, string username, string password)
        {
            if (username == null)
            {
                throw new ArgumentNullException(nameof(username));
            }
            if (password == null)
            {
                throw new ArgumentNullException(nameof(password));
            }

            var dataTypeKey = ToString(dataType);

            if (string.IsNullOrEmpty(dataTypeKey))
            {
                throw new InvalidOperationException("Unknown sensitive data type.");
            }

            // add them to the vault
            _vault.Add(new PasswordCredential(dataTypeKey, username, password));
        }
        public void RemoveSensitiveData(SensitiveDataType dataType)
        {
            var dataTypeKey = ToString(dataType);

            if (string.IsNullOrEmpty(dataTypeKey))
            {
                throw new InvalidOperationException("Unknown sensitive data type.");
            }

            // get data from the vault
            var credentialList = _vault.FindAllByResource(dataTypeKey);

            if (credentialList.Count == 0)
            {
                return;
            }

            var credentials = credentialList[0];

            // remove from the vault
            _vault.Remove(credentials);
        }
        public (string Username, string Password) GetSensitiveData(SensitiveDataType dataType)
        {
            var dataTypeKey = ToString(dataType);

            if (string.IsNullOrEmpty(dataTypeKey))
            {
                throw new InvalidOperationException("Unknown sensitive data type.");
            }

            // get data from the vault
            var credentialList = _vault.FindAllByResource(dataTypeKey);

            if (credentialList.Count == 0)
            {
                throw new InvalidOperationException("Storage does not contain any data for this type.");
            }

            var credentials = credentialList[0];

            // retrieve password
            credentials.RetrievePassword();

            return(credentials.UserName, credentials.Password);
        }