// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System;
using System.Xml.Linq;

namespace Microsoft.AspNetCore.DataProtection
{
    /// <summary>
    /// Contains helpers to work with XElement objects.
    /// </summary>
    internal static class XmlExtensions
    {
        /// <summary>
        /// Returns a new XElement which is a carbon copy of the provided element,
        /// but with no child nodes. Useful for writing exception messages without
        /// inadvertently disclosing secret key material. It is assumed that the
        /// element name itself and its attribute values are not secret.
        /// </summary>
        public static XElement WithoutChildNodes(this XElement element)
        {
            var newElement = new XElement(element.Name);
            foreach (var attr in element.Attributes())
            {
                newElement.SetAttributeValue(attr.Name, attr.Value);
            }
            return newElement;
        }
    }
}
