mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-03-06 10:16:18 +00:00
connect to socket with access token
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -24,8 +24,14 @@ 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>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
if (WebSocketHandler != null)
|
||||
var connectingArgs = new WebSocketConnectingEventArgs
|
||||
{
|
||||
WebSocketHandler(new WebSocketConnectEventArgs
|
||||
Url = url,
|
||||
QueryString = queryString,
|
||||
Endpoint = endpoint
|
||||
};
|
||||
|
||||
if (WebSocketConnecting != null)
|
||||
{
|
||||
WebSocketConnecting(connectingArgs);
|
||||
}
|
||||
|
||||
if (connectingArgs.AllowConnection)
|
||||
{
|
||||
_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)
|
||||
|
||||
Reference in New Issue
Block a user