aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/HttpServer
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-03-08 15:48:30 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-03-08 15:48:30 -0400
commitccb2dda358a54810d940c0c7ddceb255a82ae947 (patch)
tree0a6a673390bb8f3e88fbe7f69e408f31c99d18ec /MediaBrowser.Server.Implementations/HttpServer
parent55c47e50fc261849c277cb65654d91a8c5a8e308 (diff)
connect to socket with access token
Diffstat (limited to 'MediaBrowser.Server.Implementations/HttpServer')
-rw-r--r--MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs14
-rw-r--r--MediaBrowser.Server.Implementations/HttpServer/IHttpListener.cs8
-rw-r--r--MediaBrowser.Server.Implementations/HttpServer/Security/SessionContext.cs4
-rw-r--r--MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs51
4 files changed, 64 insertions, 13 deletions
diff --git a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs
index 4727e6035..f91054206 100644
--- a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs
+++ b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs
@@ -35,6 +35,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer
private readonly ContainerAdapter _containerAdapter;
public event EventHandler<WebSocketConnectEventArgs> WebSocketConnected;
+ public event EventHandler<WebSocketConnectingEventArgs> WebSocketConnecting;
private readonly List<string> _localEndpoints = new List<string>();
@@ -196,7 +197,8 @@ namespace MediaBrowser.Server.Implementations.HttpServer
_listener = GetListener();
- _listener.WebSocketHandler = WebSocketHandler;
+ _listener.WebSocketConnected = OnWebSocketConnected;
+ _listener.WebSocketConnecting = OnWebSocketConnecting;
_listener.ErrorHandler = ErrorHandler;
_listener.RequestHandler = RequestHandler;
@@ -208,7 +210,15 @@ namespace MediaBrowser.Server.Implementations.HttpServer
return new WebSocketSharpListener(_logger, OnRequestReceived, CertificatePath);
}
- private void WebSocketHandler(WebSocketConnectEventArgs args)
+ private void OnWebSocketConnecting(WebSocketConnectingEventArgs args)
+ {
+ if (WebSocketConnecting != null)
+ {
+ WebSocketConnecting(this, args);
+ }
+ }
+
+ private void OnWebSocketConnected(WebSocketConnectEventArgs args)
{
if (WebSocketConnected != null)
{
diff --git a/MediaBrowser.Server.Implementations/HttpServer/IHttpListener.cs b/MediaBrowser.Server.Implementations/HttpServer/IHttpListener.cs
index e77600e93..dc315601f 100644
--- a/MediaBrowser.Server.Implementations/HttpServer/IHttpListener.cs
+++ b/MediaBrowser.Server.Implementations/HttpServer/IHttpListener.cs
@@ -24,9 +24,15 @@ namespace MediaBrowser.Server.Implementations.HttpServer
/// Gets or sets the web socket handler.
/// </summary>
/// <value>The web socket handler.</value>
- Action<WebSocketConnectEventArgs> WebSocketHandler { get; set; }
+ Action<WebSocketConnectEventArgs> WebSocketConnected { get; set; }
/// <summary>
+ /// Gets or sets the web socket connecting.
+ /// </summary>
+ /// <value>The web socket connecting.</value>
+ Action<WebSocketConnectingEventArgs> WebSocketConnecting { get; set; }
+
+ /// <summary>
/// Starts this instance.
/// </summary>
/// <param name="urlPrefixes">The URL prefixes.</param>
diff --git a/MediaBrowser.Server.Implementations/HttpServer/Security/SessionContext.cs b/MediaBrowser.Server.Implementations/HttpServer/Security/SessionContext.cs
index 9d1ddb7fc..954db3a9d 100644
--- a/MediaBrowser.Server.Implementations/HttpServer/Security/SessionContext.cs
+++ b/MediaBrowser.Server.Implementations/HttpServer/Security/SessionContext.cs
@@ -23,6 +23,10 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security
{
var authorization = _authContext.GetAuthorizationInfo(requestContext);
+ if (!string.IsNullOrWhiteSpace(authorization.Token))
+ {
+ return _sessionManager.GetSessionByAuthenticationToken(authorization.Token);
+ }
return _sessionManager.GetSession(authorization.DeviceId, authorization.Client, authorization.Version);
}
diff --git a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs
index 0c5c9e9bf..a223cf68d 100644
--- a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs
+++ b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Controller.Net;
+using System.Collections.Specialized;
+using MediaBrowser.Controller.Net;
using MediaBrowser.Model.Logging;
using MediaBrowser.Server.Implementations.Logging;
using ServiceStack;
@@ -18,9 +19,9 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp
private readonly ILogger _logger;
private readonly Action<string> _endpointListener;
- private readonly string _certificatePath ;
+ private readonly string _certificatePath;
- public WebSocketSharpListener(ILogger logger, Action<string> endpointListener,
+ public WebSocketSharpListener(ILogger logger, Action<string> endpointListener,
string certificatePath)
{
_logger = logger;
@@ -32,7 +33,9 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp
public Func<IHttpRequest, Uri, Task> RequestHandler { get; set; }
- public Action<WebSocketConnectEventArgs> WebSocketHandler { get; set; }
+ public Action<WebSocketConnectingEventArgs> WebSocketConnecting { get; set; }
+
+ public Action<WebSocketConnectEventArgs> WebSocketConnected { get; set; }
public void Start(IEnumerable<string> urlPrefixes)
{
@@ -115,15 +118,43 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp
{
try
{
- var webSocketContext = ctx.AcceptWebSocket(null);
+ var endpoint = ctx.Request.RemoteEndPoint.ToString();
+ var url = ctx.Request.RawUrl;
+ var queryString = new NameValueCollection(ctx.Request.QueryString);
+
+ var connectingArgs = new WebSocketConnectingEventArgs
+ {
+ Url = url,
+ QueryString = queryString,
+ Endpoint = endpoint
+ };
+
+ if (WebSocketConnecting != null)
+ {
+ WebSocketConnecting(connectingArgs);
+ }
- if (WebSocketHandler != null)
+ if (connectingArgs.AllowConnection)
{
- WebSocketHandler(new WebSocketConnectEventArgs
+ _logger.Debug("Web socket connection allowed");
+
+ var webSocketContext = ctx.AcceptWebSocket(null);
+
+ if (WebSocketConnected != null)
{
- WebSocket = new SharpWebSocket(webSocketContext.WebSocket, _logger),
- Endpoint = ctx.Request.RemoteEndPoint.ToString()
- });
+ WebSocketConnected(new WebSocketConnectEventArgs
+ {
+ Url = url,
+ QueryString = queryString,
+ WebSocket = new SharpWebSocket(webSocketContext.WebSocket, _logger),
+ Endpoint = endpoint
+ });
+ }
+ }
+ else
+ {
+ _logger.Warn("Web socket connection not allowed");
+ ctx.Response.Close();
}
}
catch (Exception ex)