#70 - Refactor client cert feature interface.

This commit is contained in:
Chris Ross 2014-06-19 11:46:13 -07:00
parent 2ae3a24a16
commit b6f4207b3b
5 changed files with 21 additions and 13 deletions

View File

@ -8,9 +8,17 @@ using Microsoft.Framework.Runtime;
namespace Microsoft.AspNet.HttpFeature namespace Microsoft.AspNet.HttpFeature
{ {
[AssemblyNeutral] [AssemblyNeutral]
public interface IHttpTransportLayerSecurityFeature public interface IHttpClientCertificateFeature
{ {
/// <summary>
/// Synchronously retrieves the client certificate, if any.
/// </summary>
X509Certificate ClientCertificate { get; set; } X509Certificate ClientCertificate { get; set; }
Task LoadAsync();
/// <summary>
/// Asynchronously retrieves the client certificate, if any.
/// </summary>
/// <returns></returns>
Task<X509Certificate> GetClientCertificateAsync();
} }
} }

View File

@ -29,7 +29,7 @@
<Compile Include="IHttpRequestLifetimeFeature.cs" /> <Compile Include="IHttpRequestLifetimeFeature.cs" />
<Compile Include="IHttpResponseFeature.cs" /> <Compile Include="IHttpResponseFeature.cs" />
<Compile Include="IHttpSendFileFeature.cs" /> <Compile Include="IHttpSendFileFeature.cs" />
<Compile Include="IHttpTransportLayerSecurityFeature.cs" /> <Compile Include="IHttpClientCertificateFeature.cs" />
<Compile Include="IHttpWebSocketFeature.cs" /> <Compile Include="IHttpWebSocketFeature.cs" />
<Compile Include="IWebSocketAcceptContext.cs" /> <Compile Include="IWebSocketAcceptContext.cs" />
<Compile Include="Security\IAuthenticateContext.cs" /> <Compile Include="Security\IAuthenticateContext.cs" />

View File

@ -67,9 +67,9 @@ namespace Microsoft.AspNet.Owin
if (context.Request.IsSecure) if (context.Request.IsSecure)
{ {
_entries.Add(OwinConstants.CommonKeys.ClientCertificate, new FeatureMap<IHttpTransportLayerSecurityFeature>(feature => feature.ClientCertificate, _entries.Add(OwinConstants.CommonKeys.ClientCertificate, new FeatureMap<IHttpClientCertificateFeature>(feature => feature.ClientCertificate,
(feature, value) => feature.ClientCertificate = (X509Certificate)value)); (feature, value) => feature.ClientCertificate = (X509Certificate)value));
_entries.Add(OwinConstants.CommonKeys.LoadClientCertAsync, new FeatureMap<IHttpTransportLayerSecurityFeature>(feature => new Func<Task>(feature.LoadAsync))); _entries.Add(OwinConstants.CommonKeys.LoadClientCertAsync, new FeatureMap<IHttpClientCertificateFeature>(feature => new Func<Task>(feature.GetClientCertificateAsync)));
} }
_context.Items[typeof(HttpContext).FullName] = _context; // Store for lookup when we transition back out of OWIN _context.Items[typeof(HttpContext).FullName] = _context; // Store for lookup when we transition back out of OWIN

View File

@ -24,7 +24,7 @@ namespace Microsoft.AspNet.Owin
IHttpResponseFeature, IHttpResponseFeature,
IHttpConnectionFeature, IHttpConnectionFeature,
IHttpSendFileFeature, IHttpSendFileFeature,
IHttpTransportLayerSecurityFeature, IHttpClientCertificateFeature,
IOwinEnvironmentFeature IOwinEnvironmentFeature
{ {
public IDictionary<string, object> Environment { get; set; } public IDictionary<string, object> Environment { get; set; }
@ -197,13 +197,13 @@ namespace Microsoft.AspNet.Owin
} }
} }
X509Certificate IHttpTransportLayerSecurityFeature.ClientCertificate X509Certificate IHttpClientCertificateFeature.ClientCertificate
{ {
get { return Prop<X509Certificate>(OwinConstants.CommonKeys.ClientCertificate); } get { return Prop<X509Certificate>(OwinConstants.CommonKeys.ClientCertificate); }
set { Prop(OwinConstants.CommonKeys.ClientCertificate, value); } set { Prop(OwinConstants.CommonKeys.ClientCertificate, value); }
} }
Task IHttpTransportLayerSecurityFeature.LoadAsync() Task<X509Certificate> IHttpClientCertificateFeature.GetClientCertificateAsync()
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
@ -228,7 +228,7 @@ namespace Microsoft.AspNet.Owin
{ {
return SupportsSendFile; return SupportsSendFile;
} }
else if (key == typeof(IHttpTransportLayerSecurityFeature)) else if (key == typeof(IHttpClientCertificateFeature))
{ {
return SupportsClientCerts; return SupportsClientCerts;
} }
@ -256,7 +256,7 @@ namespace Microsoft.AspNet.Owin
} }
if (SupportsClientCerts) if (SupportsClientCerts)
{ {
keys.Add(typeof(IHttpTransportLayerSecurityFeature)); keys.Add(typeof(IHttpClientCertificateFeature));
} }
return keys; return keys;
} }

View File

@ -22,7 +22,7 @@ namespace Microsoft.AspNet.PipelineCore
private FeatureReference<IHttpRequestFeature> _request = FeatureReference<IHttpRequestFeature>.Default; private FeatureReference<IHttpRequestFeature> _request = FeatureReference<IHttpRequestFeature>.Default;
private FeatureReference<IHttpConnectionFeature> _connection = FeatureReference<IHttpConnectionFeature>.Default; private FeatureReference<IHttpConnectionFeature> _connection = FeatureReference<IHttpConnectionFeature>.Default;
private FeatureReference<IHttpTransportLayerSecurityFeature> _transportLayerSecurity = FeatureReference<IHttpTransportLayerSecurityFeature>.Default; private FeatureReference<IHttpClientCertificateFeature> _clientCertificate = FeatureReference<IHttpClientCertificateFeature>.Default;
private FeatureReference<IQueryFeature> _query = FeatureReference<IQueryFeature>.Default; private FeatureReference<IQueryFeature> _query = FeatureReference<IQueryFeature>.Default;
private FeatureReference<IFormFeature> _form = FeatureReference<IFormFeature>.Default; private FeatureReference<IFormFeature> _form = FeatureReference<IFormFeature>.Default;
private FeatureReference<IRequestCookiesFeature> _cookies = FeatureReference<IRequestCookiesFeature>.Default; private FeatureReference<IRequestCookiesFeature> _cookies = FeatureReference<IRequestCookiesFeature>.Default;
@ -43,9 +43,9 @@ namespace Microsoft.AspNet.PipelineCore
get { return _connection.Fetch(_features); } get { return _connection.Fetch(_features); }
} }
private IHttpTransportLayerSecurityFeature HttpTransportLayerSecurityFeature private IHttpClientCertificateFeature HttpClientCertificateFeature
{ {
get { return _transportLayerSecurity.Fetch(_features); } get { return _clientCertificate.Fetch(_features); }
} }
private IQueryFeature QueryFeature private IQueryFeature QueryFeature