Add authorization for MQTTnet.Server

This commit is contained in:
Christian Kratky
2019-06-09 00:10:26 +02:00
parent 1c004ead6d
commit ffc1d950da
27 changed files with 480 additions and 113 deletions
+17 -16
View File
@@ -14,27 +14,28 @@ namespace MQTTnet.Server.Mqtt
{
private readonly List<MqttApplicationMessage> _messages = new List<MqttApplicationMessage>();
private readonly SettingsModel _settings;
private readonly MqttSettingsModel _mqttSettings;
private readonly ILogger<MqttServerStorage> _logger;
private string _filename;
private string _path;
private bool _messagesHaveChanged;
public MqttServerStorage(SettingsModel settings, ILogger<MqttServerStorage> logger)
public MqttServerStorage(MqttSettingsModel mqttSettings, ILogger<MqttServerStorage> logger)
{
_settings = settings ?? throw new ArgumentNullException(nameof(settings));
_mqttSettings = mqttSettings ?? throw new ArgumentNullException(nameof(mqttSettings));
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
public void Configure()
{
if (_settings.RetainedApplicationMessages?.Persist != true)
if (_mqttSettings.RetainedApplicationMessages?.Persist != true ||
string.IsNullOrEmpty(_mqttSettings.RetainedApplicationMessages.Path))
{
_logger.LogInformation("Persisting of retained application messages is disabled.");
return;
}
_filename = ExpandFilename();
_path = ExpandPath();
// The retained application messages are stored in a separate thread.
// This is mandatory because writing them to a slow storage (like RaspberryPi SD card)
@@ -61,7 +62,7 @@ namespace MQTTnet.Server.Mqtt
{
try
{
await Task.Delay(TimeSpan.FromSeconds(_settings.RetainedApplicationMessages.WriteInterval)).ConfigureAwait(false);
await Task.Delay(TimeSpan.FromSeconds(_mqttSettings.RetainedApplicationMessages.WriteInterval)).ConfigureAwait(false);
List<MqttApplicationMessage> messages;
lock (_messages)
@@ -76,7 +77,7 @@ namespace MQTTnet.Server.Mqtt
}
var json = JsonConvert.SerializeObject(messages);
await File.WriteAllTextAsync(_filename, json, Encoding.UTF8).ConfigureAwait(false);
await File.WriteAllTextAsync(_path, json, Encoding.UTF8).ConfigureAwait(false);
_logger.LogInformation($"{messages.Count} retained MQTT messages written.");
}
@@ -89,19 +90,19 @@ namespace MQTTnet.Server.Mqtt
public async Task<IList<MqttApplicationMessage>> LoadRetainedMessagesAsync()
{
if (_settings.RetainedApplicationMessages?.Persist != true)
if (_mqttSettings.RetainedApplicationMessages?.Persist != true)
{
return null;
}
if (!File.Exists(_filename))
if (!File.Exists(_path))
{
return null;
}
try
{
var json = await File.ReadAllTextAsync(_filename).ConfigureAwait(false);
var json = await File.ReadAllTextAsync(_path).ConfigureAwait(false);
var applicationMessages = JsonConvert.DeserializeObject<List<MqttApplicationMessage>>(json);
_logger.LogInformation($"{applicationMessages.Count} retained MQTT messages loaded.");
@@ -115,17 +116,17 @@ namespace MQTTnet.Server.Mqtt
}
}
private string ExpandFilename()
private string ExpandPath()
{
var filename = _settings.RetainedApplicationMessages.Filename;
var path = _mqttSettings.RetainedApplicationMessages.Path;
var uri = new Uri(filename, UriKind.RelativeOrAbsolute);
var uri = new Uri(path, UriKind.RelativeOrAbsolute);
if (!uri.IsAbsoluteUri)
{
filename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, filename);
path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, path);
}
return filename;
return path;
}
}
}