Updates referencesource to .NET 4.7
[mono.git] / mcs / class / referencesource / System.ServiceModel / System / ServiceModel / Configuration / IdentityElement.cs
1 //------------------------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation.  All rights reserved.
3 //------------------------------------------------------------------------------
4
5 namespace System.ServiceModel.Configuration
6 {
7     using System;
8     using System.ServiceModel;
9     using System.Configuration;
10     using System.IdentityModel.Claims;
11     using System.IdentityModel.Policy;
12     using System.Security.Cryptography;
13     using System.Security.Cryptography.X509Certificates;
14     using System.Xml;
15
16     public sealed partial class IdentityElement : ConfigurationElement
17     {
18         public IdentityElement()
19         {
20         }
21
22         [ConfigurationProperty(ConfigurationStrings.UserPrincipalName)]
23         public UserPrincipalNameElement UserPrincipalName
24         {
25             get { return (UserPrincipalNameElement)base[ConfigurationStrings.UserPrincipalName]; }
26         }
27
28         [ConfigurationProperty(ConfigurationStrings.ServicePrincipalName)]
29         public ServicePrincipalNameElement ServicePrincipalName
30         {
31             get { return (ServicePrincipalNameElement)base[ConfigurationStrings.ServicePrincipalName]; }
32         }
33
34         [ConfigurationProperty(ConfigurationStrings.Dns)]
35         public DnsElement Dns
36         {
37             get { return (DnsElement)base[ConfigurationStrings.Dns]; }
38         }
39
40         [ConfigurationProperty(ConfigurationStrings.Rsa)]
41         public RsaElement Rsa
42         {
43             get { return (RsaElement)base[ConfigurationStrings.Rsa]; }
44         }
45
46         [ConfigurationProperty(ConfigurationStrings.Certificate)]
47         public CertificateElement Certificate
48         {
49             get { return (CertificateElement)base[ConfigurationStrings.Certificate]; }
50         }
51
52         [ConfigurationProperty(ConfigurationStrings.CertificateReference)]
53         public CertificateReferenceElement CertificateReference
54         {
55             get { return (CertificateReferenceElement)base[ConfigurationStrings.CertificateReference]; }
56         }
57
58         internal void Copy(IdentityElement source)
59         {
60             if (null == source)
61             {
62                 throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("source");
63             }
64
65             PropertyInformationCollection properties = source.ElementInformation.Properties;
66             if (properties[ConfigurationStrings.UserPrincipalName].ValueOrigin != PropertyValueOrigin.Default)
67             {
68                 this.UserPrincipalName.Value = source.UserPrincipalName.Value;
69             }
70             if (properties[ConfigurationStrings.ServicePrincipalName].ValueOrigin != PropertyValueOrigin.Default)
71             {
72                 this.ServicePrincipalName.Value = source.ServicePrincipalName.Value;
73             }
74             if (properties[ConfigurationStrings.Certificate].ValueOrigin != PropertyValueOrigin.Default)
75             {
76                 this.Certificate.EncodedValue = source.Certificate.EncodedValue;
77             }
78             if (properties[ConfigurationStrings.CertificateReference].ValueOrigin != PropertyValueOrigin.Default)
79             {
80                 this.CertificateReference.StoreName = source.CertificateReference.StoreName;
81                 this.CertificateReference.StoreLocation = source.CertificateReference.StoreLocation;
82                 this.CertificateReference.X509FindType = source.CertificateReference.X509FindType;
83                 this.CertificateReference.FindValue = source.CertificateReference.FindValue;
84             }
85         }
86
87         public void InitializeFrom(EndpointIdentity identity)
88         {
89             if (identity == null)
90             {
91                 throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("identity");
92             }
93
94             Claim claim = identity.IdentityClaim;
95             if (ClaimTypes.Dns.Equals(claim.ClaimType))
96             {
97                 this.Dns.Value = (string)claim.Resource;
98             }
99             else if (ClaimTypes.Spn.Equals(claim.ClaimType))
100             {
101                 this.ServicePrincipalName.Value = (string)claim.Resource;
102             }
103             else if (ClaimTypes.Upn.Equals(claim.ClaimType))
104             {
105                 this.UserPrincipalName.Value = (string)claim.Resource;
106             }
107             else if (ClaimTypes.Rsa.Equals(claim.ClaimType))
108             {
109                 this.Rsa.Value = ((RSA)claim.Resource).ToXmlString(false);
110             }
111             else if (identity is X509CertificateEndpointIdentity)
112             {
113                 X509Certificate2Collection certs = ((X509CertificateEndpointIdentity)identity).Certificates;
114 #pragma warning suppress 56506 //Microsoft; this.Certificate can never be null (underlying configuration system guarantees)
115                 this.Certificate.EncodedValue = Convert.ToBase64String(certs.Export(certs.Count == 1 ? X509ContentType.SerializedCert : X509ContentType.SerializedStore));
116             }
117         }
118     }
119 }