// 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.Security.Cryptography.X509Certificates;
using Microsoft.AspNetCore.Testing;

namespace Microsoft.AspNetCore.DataProtection
{
    [AttributeUsage(AttributeTargets.Method)]
    public class X509StoreIsAvailableAttribute : Attribute, ITestCondition
    {
        public X509StoreIsAvailableAttribute(StoreName name, StoreLocation location)
        {
            Name = name;
            Location = location;
        }

        public bool IsMet
        {
            get
            {
                try
                {
                    using (var store = new X509Store(Name, Location))
                    {
                        store.Open(OpenFlags.ReadWrite);
                        return true;
                    }
                }
                catch
                {
                    return false;
                }
            }
        }

        public string SkipReason => $"Skipping because the X509Store({Name}/{Location}) is not available on this machine.";

        public StoreName Name { get; }
        public StoreLocation Location { get; }
    }
}
