From 3da627421165d29b2eade0dd4a137528269dbc6a Mon Sep 17 00:00:00 2001 From: Qstick Date: Thu, 17 Aug 2017 21:29:20 -0400 Subject: [PATCH] API Key for signalR connections (#54) --- .../NzbDronePersistentConnection.cs | 23 ++++++++++++++++++- src/UI/Shared/SignalRBroadcaster.js | 4 ++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/NzbDrone.SignalR/NzbDronePersistentConnection.cs b/src/NzbDrone.SignalR/NzbDronePersistentConnection.cs index dfa063a0e..b3342ffba 100644 --- a/src/NzbDrone.SignalR/NzbDronePersistentConnection.cs +++ b/src/NzbDrone.SignalR/NzbDronePersistentConnection.cs @@ -1,5 +1,7 @@ -using Microsoft.AspNet.SignalR; +using Microsoft.AspNet.SignalR; using Microsoft.AspNet.SignalR.Infrastructure; +using NzbDrone.Common.Extensions; +using NzbDrone.Core.Configuration; namespace NzbDrone.SignalR { @@ -12,9 +14,28 @@ namespace NzbDrone.SignalR { private IPersistentConnectionContext Context => ((ConnectionManager)GlobalHost.ConnectionManager).GetConnection(GetType()); + private static string API_KEY; + + public NzbDronePersistentConnection(IConfigFileProvider configFileProvider) + { + API_KEY = configFileProvider.ApiKey; + } + public void BroadcastMessage(SignalRMessage message) { Context.Connection.Broadcast(message); } + + protected override bool AuthorizeRequest(IRequest request) + { + var apiKey = request.QueryString["apiKey"]; + + if (apiKey.IsNotNullOrWhiteSpace() && apiKey.Equals(API_KEY)) + { + return true; + } + + return false; + } } } \ No newline at end of file diff --git a/src/UI/Shared/SignalRBroadcaster.js b/src/UI/Shared/SignalRBroadcaster.js index 2d5292760..204f77ab5 100644 --- a/src/UI/Shared/SignalRBroadcaster.js +++ b/src/UI/Shared/SignalRBroadcaster.js @@ -26,7 +26,7 @@ module.exports = { var tryingToReconnect = false; var messengerId = 'signalR'; - this.signalRconnection = $.connection(StatusModel.get('urlBase') + '/signalr'); + this.signalRconnection = $.connection(StatusModel.get('urlBase') + '/signalr', { apiKey: window.NzbDrone.ApiKey }); this.signalRconnection.stateChanged(function(change) { console.debug('SignalR: [{0}]'.format(getStatus(change.newState))); @@ -73,4 +73,4 @@ module.exports = { return this; } -}; \ No newline at end of file +};