Skip to content

Commit 22a1cab

Browse files
committed
#149 - Expose connection information as 1st class.
1 parent c69c289 commit 22a1cab

9 files changed

+159
-14
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using System.Net;
5+
using System.Security.Cryptography.X509Certificates;
6+
using System.Threading;
7+
using System.Threading.Tasks;
8+
using Microsoft.AspNet.FeatureModel;
9+
using Microsoft.AspNet.Http.Core.Infrastructure;
10+
11+
namespace Microsoft.AspNet.Http.Core
12+
{
13+
public class DefaultConnectionInfo : ConnectionInfo
14+
{
15+
private readonly IFeatureCollection _features;
16+
17+
private FeatureReference<IHttpConnectionFeature> _connection = FeatureReference<IHttpConnectionFeature>.Default;
18+
private FeatureReference<IHttpClientCertificateFeature> _clientCertificate = FeatureReference<IHttpClientCertificateFeature>.Default;
19+
20+
public DefaultConnectionInfo(IFeatureCollection features)
21+
{
22+
_features = features;
23+
}
24+
25+
private IHttpConnectionFeature HttpConnectionFeature
26+
{
27+
get { return _connection.Fetch(_features) ?? _connection.Update(_features, new HttpConnectionFeature()); }
28+
}
29+
30+
private IHttpClientCertificateFeature HttpClientCertificateFeature
31+
{
32+
get { return _clientCertificate.Fetch(_features) ?? _clientCertificate.Update(_features, new HttpClientCertificateFeature()); }
33+
}
34+
35+
public override IPAddress RemoteIpAddress
36+
{
37+
get { return HttpConnectionFeature.RemoteIpAddress; }
38+
set { HttpConnectionFeature.RemoteIpAddress = value; }
39+
}
40+
41+
public override int RemotePort
42+
{
43+
get { return HttpConnectionFeature.RemotePort; }
44+
set { HttpConnectionFeature.RemotePort = value; }
45+
}
46+
47+
public override IPAddress LocalIpAddress
48+
{
49+
get { return HttpConnectionFeature.LocalIpAddress; }
50+
set { HttpConnectionFeature.LocalIpAddress = value; }
51+
}
52+
53+
public override int LocalPort
54+
{
55+
get { return HttpConnectionFeature.LocalPort; }
56+
set { HttpConnectionFeature.LocalPort = value; }
57+
}
58+
59+
public override bool IsLocal
60+
{
61+
get { return HttpConnectionFeature.IsLocal; }
62+
set { HttpConnectionFeature.IsLocal = value; }
63+
}
64+
65+
public override X509Certificate ClientCertificate
66+
{
67+
get { return HttpClientCertificateFeature.ClientCertificate; }
68+
set { HttpClientCertificateFeature.ClientCertificate = value; }
69+
}
70+
71+
public override Task<X509Certificate> GetClientCertificateAsync(CancellationToken cancellationToken = new CancellationToken())
72+
{
73+
return HttpClientCertificateFeature.GetClientCertificateAsync(cancellationToken);
74+
}
75+
}
76+
}

src/Microsoft.AspNet.Http.Core/DefaultHttpContext.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public class DefaultHttpContext : HttpContext
2323

2424
private readonly HttpRequest _request;
2525
private readonly HttpResponse _response;
26+
private readonly ConnectionInfo _connection;
2627

2728
private FeatureReference<IItemsFeature> _items;
2829
private FeatureReference<IServiceProvidersFeature> _serviceProviders;
@@ -44,6 +45,7 @@ public DefaultHttpContext(IFeatureCollection features)
4445
_features = features;
4546
_request = new DefaultHttpRequest(this, features);
4647
_response = new DefaultHttpResponse(this, features);
48+
_connection = new DefaultConnectionInfo(features);
4749

4850
_items = FeatureReference<IItemsFeature>.Default;
4951
_serviceProviders = FeatureReference<IServiceProvidersFeature>.Default;
@@ -87,6 +89,8 @@ private ISessionFeature SessionFeature
8789

8890
public override HttpResponse Response { get { return _response; } }
8991

92+
public override ConnectionInfo Connection { get { return _connection; } }
93+
9094
public override ClaimsPrincipal User
9195
{
9296
get

src/Microsoft.AspNet.Http.Core/DefaultHttpRequest.cs

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@ public class DefaultHttpRequest : HttpRequest
1919
private readonly IFeatureCollection _features;
2020

2121
private FeatureReference<IHttpRequestFeature> _request = FeatureReference<IHttpRequestFeature>.Default;
22-
private FeatureReference<IHttpConnectionFeature> _connection = FeatureReference<IHttpConnectionFeature>.Default;
23-
private FeatureReference<IHttpClientCertificateFeature> _clientCertificate = FeatureReference<IHttpClientCertificateFeature>.Default;
2422
private FeatureReference<IQueryFeature> _query = FeatureReference<IQueryFeature>.Default;
2523
private FeatureReference<IFormFeature> _form = FeatureReference<IFormFeature>.Default;
2624
private FeatureReference<IRequestCookiesFeature> _cookies = FeatureReference<IRequestCookiesFeature>.Default;
@@ -36,16 +34,6 @@ private IHttpRequestFeature HttpRequestFeature
3634
get { return _request.Fetch(_features); }
3735
}
3836

39-
private IHttpConnectionFeature HttpConnectionFeature
40-
{
41-
get { return _connection.Fetch(_features); }
42-
}
43-
44-
private IHttpClientCertificateFeature HttpClientCertificateFeature
45-
{
46-
get { return _clientCertificate.Fetch(_features); }
47-
}
48-
4937
private IQueryFeature QueryFeature
5038
{
5139
get { return _query.Fetch(_features) ?? _query.Update(_features, new QueryFeature(_features)); }
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using System.Security.Cryptography.X509Certificates;
5+
using System.Threading;
6+
using System.Threading.Tasks;
7+
8+
namespace Microsoft.AspNet.Http.Core
9+
{
10+
public class HttpClientCertificateFeature : IHttpClientCertificateFeature
11+
{
12+
public HttpClientCertificateFeature()
13+
{
14+
}
15+
16+
public X509Certificate ClientCertificate { get; set; }
17+
18+
public Task<X509Certificate> GetClientCertificateAsync(CancellationToken cancellationToken)
19+
{
20+
return Task.FromResult(ClientCertificate);
21+
}
22+
}
23+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using System.Net;
5+
6+
namespace Microsoft.AspNet.Http.Core
7+
{
8+
public class HttpConnectionFeature : IHttpConnectionFeature
9+
{
10+
public HttpConnectionFeature()
11+
{
12+
}
13+
14+
public bool IsLocal { get; set; }
15+
16+
public IPAddress LocalIpAddress { get; set; }
17+
18+
public int LocalPort { get; set; }
19+
20+
public IPAddress RemoteIpAddress { get; set; }
21+
22+
public int RemotePort { get; set; }
23+
}
24+
}

src/Microsoft.AspNet.Http.Core/project.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
"Microsoft.AspNet.Http.Interfaces": "1.0.0-*",
88
"Microsoft.AspNet.WebUtilities": "1.0.0-*",
99
"Microsoft.Framework.NotNullAttribute.Internal": { "type": "build", "version": "1.0.0-*" },
10-
"Microsoft.Framework.WebEncoders.Core": "1.0.0-*",
1110
"Microsoft.Net.Http.Headers": "1.0.0-*"
1211
},
1312
"frameworks": {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using System.Net;
5+
using System.Security.Cryptography.X509Certificates;
6+
using System.Threading;
7+
using System.Threading.Tasks;
8+
9+
namespace Microsoft.AspNet.Http
10+
{
11+
public abstract class ConnectionInfo
12+
{
13+
public abstract IPAddress RemoteIpAddress { get; set; }
14+
15+
public abstract int RemotePort { get; set; }
16+
17+
public abstract IPAddress LocalIpAddress { get; set; }
18+
19+
public abstract int LocalPort { get; set; }
20+
21+
public abstract bool IsLocal { get; set; }
22+
23+
public abstract X509Certificate ClientCertificate { get; set; }
24+
25+
public abstract Task<X509Certificate> GetClientCertificateAsync(CancellationToken cancellationToken = new CancellationToken());
26+
}
27+
}

src/Microsoft.AspNet.Http/HttpContext.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ public abstract class HttpContext : IDisposable
1818

1919
public abstract HttpResponse Response { get; }
2020

21+
public abstract ConnectionInfo Connection { get; }
22+
2123
public abstract ClaimsPrincipal User { get; set; }
22-
24+
2325
public abstract IDictionary<object, object> Items { get; }
2426

2527
public abstract IServiceProvider ApplicationServices { get; set; }

src/Microsoft.AspNet.Http/project.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@
1414
"System.Globalization": "4.0.10-beta-*",
1515
"System.Globalization.Extensions": "4.0.0-beta-*",
1616
"System.Linq": "4.0.0-beta-*",
17+
"System.Net.Primitives": "4.0.10-beta-*",
1718
"System.Net.WebSockets" : "4.0.0-beta-*",
1819
"System.Runtime": "4.0.20-beta-*",
1920
"System.Runtime.InteropServices": "4.0.20-beta-*",
2021
"System.Security.Claims": "4.0.0-beta-*",
22+
"System.Security.Cryptography.X509Certificates": "4.0.0-beta-*",
2123
"System.Security.Principal": "4.0.0-beta-*",
2224
"System.Threading.Tasks": "4.0.10-beta-*"
2325
}

0 commit comments

Comments
 (0)