Author: bendewey
Date: Thu Jul  9 23:27:37 2009
New Revision: 792747

URL: http://svn.apache.org/viewvc?rev=792747&view=rev
Log:
commit for STONEHENGE-72

Added:
    
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/ConfigCertificatePolicy.cs
    
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/CustomCertificateValidator.cs
    
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/CustomUserNameValidator.cs
Modified:
    
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/Utility.cs
    
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/Utility.csproj

Added: 
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/ConfigCertificatePolicy.cs
URL: 
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/ConfigCertificatePolicy.cs?rev=792747&view=auto
==============================================================================
--- 
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/ConfigCertificatePolicy.cs
 (added)
+++ 
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/ConfigCertificatePolicy.cs
 Thu Jul  9 23:27:37 2009
@@ -0,0 +1,66 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+using System.Net.Security;
+using System.Security.Cryptography.X509Certificates;
+
+namespace Trade.Utility
+{
+    
//======================================================================================================
+    //This class contains abstract classes that can be optionally used to 
authenticate clients when using
+    //advanced Web Services security modes.  Three abstract classes are 
provided, such that any can be
+    //overridden and customized.  The first ConfigCertificatePolicy, allows 
the developer to set a custom
+    //policy for certificates.  This is necessary to allow 
test/dev/self-signed certificates, or else
+    //all WCF operations secured with such a cert would be rejected by WCf 
clients.  Note that the base
+    //SettingsBase class provides a stock instance of this class, which allows 
all certs if the repository
+    //setting "Accept All Certificates for Development Testing" is set to 
true.  The base instance, which
+    //can be overridden itself within any Settings class (use the new keyword 
to define the field certificatePolicy
+    //with your implementation class if you want. 
+    //
+    //The next two classes are custom validators that are provided.  The first 
class (CustomUserNameValidator)
+    //works with message level security (which always requires a service X.509 
certificate) and Username
+    //client credentials.  It overrides the default Validate method of the 
Windows UserNamePassWordValidator to
+    //instead validate against the ConfigService Users table. See StockTrader 
Business Services for an example with
+    //Message security and Username client credentials. 
+    //The second class (CustomCertificateValidator) overrides the Validate 
method of the Windows X509CertificateValidator 
+    //to only allow specified set of client certificates to have access to 
secured endpoints.
+    
//======================================================================================================
+
+    /// <summary>
+    /// This class is used when repository setting 'ACCEPT_ALL_CERTIFICATES' 
is set to true, to allow service
+    /// connections via Test (dev-created) certificates.  You can override the 
CheckValidationResult as desired,
+    /// to add a more restrictive/custom policy.
+    /// </summary>
+    public abstract class ConfigCertificatePolicy
+    {
+        /// <summary>
+        /// As advertised, always OK.  Do not have 'ACCEPT_ALL_CERTIFICATES' 
set to true for production; or override for more restrictive,
+        /// custom policy.
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="certificate"></param>
+        /// <param name="chain"></param>
+        /// <param name="sslPolicyErrors"></param>
+        /// <returns></returns>
+        public virtual bool CheckValidationResult(object sender, 
X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
+        {
+            bool validationResult = true;
+            //Optional add a more restrictive policy here.
+            return validationResult;
+        }
+    }
+}
\ No newline at end of file

Added: 
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/CustomCertificateValidator.cs
URL: 
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/CustomCertificateValidator.cs?rev=792747&view=auto
==============================================================================
--- 
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/CustomCertificateValidator.cs
 (added)
+++ 
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/CustomCertificateValidator.cs
 Thu Jul  9 23:27:37 2009
@@ -0,0 +1,100 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+using System;
+using System.IdentityModel.Selectors;
+using System.IdentityModel.Tokens;
+using System.Security.Cryptography.X509Certificates;
+
+namespace Trade.Utility
+{
+    /// <summary>
+    /// Provides a base class that allows customization of certificate 
validation.
+    /// Specifically, enables certificates to be identified specifically based 
on a list of
+    /// authorized cert thumbprints.  See StockTrader Order Processor Service 
for an example of
+    /// use, as this sample component uses it to ensure only clients using the 
authorized 
+    /// BSLClient certificate are accepted.
+    /// </summary>
+    public abstract class CustomCertificateValidator : X509CertificateValidator
+    {
+        /// <summary>
+        /// Override with a provided method that returns an array 
+        /// of thumbprints as strings.
+        /// </summary>
+        /// <returns></returns>
+        protected abstract string[] getAllowedThumbprints();
+
+        public override void Validate(X509Certificate2 certificate)
+        {
+            // create chain and set validation options
+            X509Chain chain = new X509Chain();
+            SetValidationSettings(chain);
+
+            // optional check if cert is valid 
+            if (!chain.Build(certificate))
+            {
+                throw new SecurityTokenValidationException("Client certificate 
is not valid!");
+            }
+
+            // check if cert is from our trusted list
+            if (!isTrusted(chain, getAllowedThumbprints()))
+            {
+                throw new SecurityTokenValidationException("Client certificate 
is not trusted!");
+            }
+        }
+
+        /// <summary>
+        /// The base goes with default settings, you could override this 
method to change them, however.
+        /// </summary>
+        /// <param name="chain"></param>
+        protected virtual void SetValidationSettings(X509Chain chain)
+        {
+            //override to set customer settings.
+        }
+
+        /// <summary>
+        /// Determines if the end certificate in a chain is in the list of 
trusted certs.
+        /// You could add logic to perform checks across the whole chain if 
desired.
+        /// </summary>
+        /// <param name="chain"></param>
+        /// <param name="trustedThumbprints"></param>
+        /// <returns></returns>
+        protected virtual bool isTrusted(X509Chain chain, string[] 
trustedThumbprints)
+        {
+            return CheckThumbprint(chain.ChainElements[0].Certificate, 
trustedThumbprints);
+        }
+
+        /// <summary>
+        /// Check if a cert is in the trust list.
+        /// </summary>
+        /// <param name="certificate">Cert to check.</param>
+        /// <param name="trustedThumbprints">List of authorized certs' 
thumbprints</param>
+        /// <returns></returns>
+        private bool CheckThumbprint(X509Certificate2 certificate, string[] 
trustedThumbprints)
+        {
+            foreach (string thumbprint in trustedThumbprints)
+            {
+                if (string.Equals(certificate.Thumbprint, thumbprint, 
StringComparison.OrdinalIgnoreCase))
+                {
+                    return true;
+                }
+            }
+
+            return false;
+        }
+    }
+}
\ No newline at end of file

Added: 
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/CustomUserNameValidator.cs
URL: 
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/CustomUserNameValidator.cs?rev=792747&view=auto
==============================================================================
--- 
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/CustomUserNameValidator.cs
 (added)
+++ 
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/CustomUserNameValidator.cs
 Thu Jul  9 23:27:37 2009
@@ -0,0 +1,38 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+using System.IdentityModel.Selectors;
+
+namespace Trade.Utility
+{
+    /// <summary>
+    /// Note how this class is tied in via a ServiceBehavior, defined in 
config, to override default Windows auth validation.
+    /// </summary>
+    public abstract class CustomUserNameValidator : UserNamePasswordValidator
+    {
+        /// <summary>
+        /// Overrides to instead validate the username/password against the 
Configuration DB Users table.
+        /// </summary>
+        /// <param name="userName">User id coming in as UserName credentials 
from client.</param>
+        /// <param name="password">Password coming in as UserName credentials 
from client.</param>
+        public override void Validate(string userName, string password)
+        {
+            //Add custom user name validation if desired here.  Will only be 
activated if binding security is
+            //set for ClientCredentials = UserName.
+        }
+    }
+}
\ No newline at end of file

Modified: 
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/Utility.cs
URL: 
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/Utility.cs?rev=792747&r1=792746&r2=792747&view=diff
==============================================================================
--- 
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/Utility.cs
 (original)
+++ 
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/Utility.cs
 Thu Jul  9 23:27:37 2009
@@ -34,15 +34,9 @@
 
 using System;
 using System.Collections.Generic;
-using System.Text;
 using System.Diagnostics;
-using System.Net.Security;
 using System.ServiceModel;
 using System.ServiceModel.Description;
-using System.ServiceModel.Configuration;
-using System.IdentityModel.Tokens;
-using System.IdentityModel.Selectors;
-using System.Security.Cryptography.X509Certificates;
 
 namespace Trade.Utility
 {
@@ -198,7 +192,7 @@
         /// <param name="message">String with message to display/log.</param> 
         /// <param name="messageType">Event Log entry type code</param> 
         /// <param name="logEntry">Whether to log entry.  Entry will be logged 
if configuration database is set for detailed logging and this parameter is 
true</param> 
-        /// <param name="settingsInstance">Instance of the Settings class for 
the service host. Used to determine if detailed logging is on and Event Log 
Source name.</param> 
+        /// <param name="eventLog">The event log source name</param> 
         public static void writeConsoleMessage(string message, 
EventLogEntryType messageType, bool logEntry, string eventLog)
         {
             try
@@ -217,7 +211,7 @@
         /// <param name="message">String with message to display/log.</param> 
         /// <param name="messageType">Event Log entry type code</param> 
         /// <param name="logEntry">Whether to log entry.  Entry will be logged 
if configuration database is set for detailed logging and this parameter is 
true</param> 
-        /// <param name="settingsInstance">Instance of the Settings class for 
the service host. Used to determine if detailed logging is on and Event Log 
Source name.</param> 
+        /// <param name="eventLog">The event log source name</param>
         public static void writeErrorConsoleMessage(string message, 
EventLogEntryType messageType, bool logEntry, string eventLog)
         {
             try
@@ -229,11 +223,11 @@
             }
         }
 
-        /// <summary>Writes to event log. </summary>
+        /// <summary>Writes to event log.</summary>
         /// <param name="message">String with message to display/log.</param> 
         /// <param name="messageType">Event Log entry type code</param> 
         /// <param name="logEntry">Whether to log entry.  Entry will be logged 
if configuration database is set for detailed logging and this parameter is 
true</param> 
-        /// <param name="settingsInstance">Instance of the Settings class for 
the service host. Used to determine if detailed logging is on and Event Log 
Source name.</param> 
+        /// <param name="eventLog">The event log source name</param>
         public static void LogMessage(string message, EventLogEntryType 
messageType, bool logEntry, string eventLog)
         {
             if (!logEntry)
@@ -323,153 +317,5 @@
             Console.WriteLine();
         }
     }
-
-
-//======================================================================================================
-//This class contains abstract classes that can be optionally used to 
authenticate clients when using
-//advanced Web Services security modes.  Three abstract classes are provided, 
such that any can be
-//overridden and customized.  The first ConfigCertificatePolicy, allows the 
developer to set a custom
-//policy for certificates.  This is necessary to allow test/dev/self-signed 
certificates, or else
-//all WCF operations secured with such a cert would be rejected by WCf 
clients.  Note that the base
-//SettingsBase class provides a stock instance of this class, which allows all 
certs if the repository
-//setting "Accept All Certificates for Development Testing" is set to true.  
The base instance, which
-//can be overridden itself within any Settings class (use the new keyword to 
define the field certificatePolicy
-//with your implementation class if you want. 
-//
-//The next two classes are custom validators that are provided.  The first 
class (CustomUserNameValidator)
-//works with message level security (which always requires a service X.509 
certificate) and Username
-//client credentials.  It overrides the default Validate method of the Windows 
UserNamePassWordValidator to
-//instead validate against the ConfigService Users table. See StockTrader 
Business Services for an example with
-//Message security and Username client credentials. 
-//The second class (CustomCertificateValidator) overrides the Validate method 
of the Windows X509CertificateValidator 
-//to only allow specified set of client certificates to have access to secured 
endpoints.
-//======================================================================================================
-
-    /// <summary>
-    /// This class is used when repository setting 'ACCEPT_ALL_CERTIFICATES' 
is set to true, to allow service
-    /// connections via Test (dev-created) certificates.  You can override the 
CheckValidationResult as desired,
-    /// to add a more restrictive/custom policy.
-    /// </summary>
-    public abstract class ConfigCertificatePolicy
-    {
-        public ConfigCertificatePolicy()
-        {
-        }
-
-        /// <summary>
-        /// As advertised, always OK.  Do not have 'ACCEPT_ALL_CERTIFICATES' 
set to true for production; or override for more restrictive,
-        /// custom policy.
-        /// </summary>
-        /// <param name="sender"></param>
-        /// <param name="certificate"></param>
-        /// <param name="chain"></param>
-        /// <param name="sslPolicyErrors"></param>
-        /// <returns></returns>
-        public virtual bool CheckValidationResult(object sender, 
X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
-        {
-            bool validationResult = true;
-            //Optional add a more restrictive policy here.
-            return validationResult;
-        }
-    }
-
-
-    /// <summary>
-    /// Note how this class is tied in via a ServiceBehavior, defined in 
config, to override default Windows auth validation.
-    /// </summary>
-    public abstract class CustomUserNameValidator : UserNamePasswordValidator
-    {
-        /// <summary>
-        /// Overrides to instead validate the username/password against the 
Configuration DB Users table.
-        /// </summary>
-        /// <param name="userName">User id coming in as UserName credentials 
from client.</param>
-        /// <param name="password">Password coming in as UserName credentials 
from client.</param>
-        public override void Validate(string userName, string password)
-        {
-            //Add custom user name validation if desired here.  Will only be 
activated if binding security is
-            //set for ClientCredentials = UserName.
-        }
-    }
-
-    /// <summary>
-    /// Provides a base class that allows customization of certificate 
validation.
-    /// Specifically, enables certificates to be identified specifically based 
on a list of
-    /// authorized cert thumbprints.  See StockTrader Order Processor Service 
for an example of
-    /// use, as this sample component uses it to ensure only clients using the 
authorized 
-    /// BSLClient certificate are accepted.
-    /// </summary>
-    public abstract class CustomCertificateValidator : X509CertificateValidator
-    {
-        /// <summary>
-        /// Override with a provided method that returns an array 
-        /// of thumbprints as strings.
-        /// </summary>
-        /// <returns></returns>
-        protected abstract string[] getAllowedThumbprints();
-
-        public override void Validate(X509Certificate2 certificate)
-        {
-            // create chain and set validation options
-            X509Chain chain = new X509Chain();
-            SetValidationSettings(chain);
-
-            // optional check if cert is valid 
-            if (!chain.Build(certificate))
-            {
-                throw new SecurityTokenValidationException("Client certificate 
is not valid!");
-            }
-
-            // check if cert is from our trusted list
-            if (!isTrusted(chain, getAllowedThumbprints()))
-            {
-                throw new SecurityTokenValidationException("Client certificate 
is not trusted!");
-            }
-        }
-
-        /// <summary>
-        /// The base goes with default settings, you could override this 
method to change them, however.
-        /// </summary>
-        /// <param name="chain"></param>
-        protected virtual void SetValidationSettings(X509Chain chain)
-        {
-            //override to set customer settings.
-        }
-
-        /// <summary>
-        /// Determines if the end certificate in a chain is in the list of 
trusted certs.
-        /// You could add logic to perform checks across the whole chain if 
desired.
-        /// </summary>
-        /// <param name="chain"></param>
-        /// <param name="trustedThumbprints"></param>
-        /// <returns></returns>
-        protected virtual bool isTrusted(X509Chain chain, string[] 
trustedThumbprints)
-        {
-            return CheckThumbprint(chain.ChainElements[0].Certificate, 
trustedThumbprints);
-        }
-
-        /// <summary>
-        /// Check if a cert is in the trust list.
-        /// </summary>
-        /// <param name="certificate">Cert to check.</param>
-        /// <param name="trustedThumbprints">List of authorized certs' 
thumbprints</param>
-        /// <returns></returns>
-        private bool CheckThumbprint(X509Certificate2 certificate, string[] 
trustedThumbprints)
-        {
-            foreach (string thumbprint in trustedThumbprints)
-            {
-                if (string.Equals(certificate.Thumbprint, thumbprint, 
StringComparison.OrdinalIgnoreCase))
-                {
-                    return true;
-                }
-            }
-
-            return false;
-        }
-
- 
-
-    }
-
- 
 }
 

Modified: 
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/Utility.csproj
URL: 
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/Utility.csproj?rev=792747&r1=792746&r2=792747&view=diff
==============================================================================
--- 
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/Utility.csproj
 (original)
+++ 
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderUtility/Utility.csproj
 Thu Jul  9 23:27:37 2009
@@ -61,6 +61,9 @@
     <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="ConfigCertificatePolicy.cs" />
+    <Compile Include="CustomCertificateValidator.cs" />
+    <Compile Include="CustomUserNameValidator.cs" />
     <Compile Include="SQLHelper.cs" />
     <Compile Include="Utility.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />


Reply via email to