1 //------------------------------------------------------------ 2 // Copyright (c) Microsoft Corporation. All rights reserved. 3 //------------------------------------------------------------ 4 namespace System.ServiceModel.Channels 5 { 6 using System.Xml; 7 using System.ServiceModel.Description; 8 using System.ServiceModel.Configuration; 9 10 static class PrivacyNoticePolicyStrings 11 { 12 public const string PrivacyNoticeName = "PrivacyNotice"; 13 public const string PrivacyNoticeVersionAttributeName = "Version"; 14 public const string PrivacyNoticeNamespace = "http://schemas.xmlsoap.org/ws/2005/05/identity"; 15 public const string PrivacyNoticePrefix = "ic"; 16 } 17 18 public sealed class PrivacyNoticeBindingElementImporter : IPolicyImportExtension 19 { IPolicyImportExtension.ImportPolicy(MetadataImporter importer, PolicyConversionContext policyContext)20 void IPolicyImportExtension.ImportPolicy(MetadataImporter importer, PolicyConversionContext policyContext) 21 { 22 if (policyContext == null) 23 throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("policyContext"); 24 25 XmlElement privacyNoticeAssertion = PolicyConversionContext.FindAssertion(policyContext.GetBindingAssertions(), 26 PrivacyNoticePolicyStrings.PrivacyNoticeName, PrivacyNoticePolicyStrings.PrivacyNoticeNamespace, true); 27 if (privacyNoticeAssertion != null) 28 { 29 PrivacyNoticeBindingElement settings = 30 policyContext.BindingElements.Find<PrivacyNoticeBindingElement>(); 31 32 if (null == settings) 33 { 34 settings = new PrivacyNoticeBindingElement(); 35 policyContext.BindingElements.Add(settings); 36 } 37 38 settings.Url = new Uri(privacyNoticeAssertion.InnerText); 39 string versionString = privacyNoticeAssertion.GetAttribute(PrivacyNoticePolicyStrings.PrivacyNoticeVersionAttributeName, PrivacyNoticePolicyStrings.PrivacyNoticeNamespace); 40 if (string.IsNullOrEmpty(versionString)) 41 { 42 throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.CannotImportPrivacyNoticeElementWithoutVersionAttribute))); 43 } 44 45 int version = 0; 46 if (!Int32.TryParse(versionString, out version)) 47 { 48 throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.PrivacyNoticeElementVersionAttributeInvalid))); 49 } 50 settings.Version = version; 51 } 52 } 53 } 54 } 55