소스 검색

Add support for chaning passwords

release/3.x.x
Christian Kratky 7 년 전
부모
커밋
a9b394401b
15개의 변경된 파일52개의 추가작업 그리고 46개의 파일을 삭제
  1. +1
    -2
      Frameworks/MQTTnet.NetStandard/Implementations/MqttServerAdapter.cs
  2. +1
    -1
      Frameworks/MQTTnet.UniversalWindows/Implementations/MqttTcpChannel.cs
  3. +1
    -1
      Frameworks/MQTTnet.UniversalWindows/MqttFactory.cs
  4. +3
    -5
      MQTTnet.Core/Client/BaseMqttClientOptions.cs
  5. +8
    -0
      MQTTnet.Core/Client/IMqttClientCredentials.cs
  6. +4
    -4
      MQTTnet.Core/Client/IMqttClientOptions.cs
  7. +2
    -2
      MQTTnet.Core/Client/MqttClient.cs
  8. +9
    -0
      MQTTnet.Core/Client/MqttClientCredentials.cs
  9. +1
    -1
      MQTTnet.Core/Client/MqttClientTcpOptions.cs
  10. +1
    -1
      MQTTnet.Core/Client/MqttClientWebSocketOptions.cs
  11. +0
    -2
      MQTTnet.Core/ManagedClient/IManagedMqttClientOptions.cs
  12. +0
    -2
      MQTTnet.Core/ManagedClient/ManagedMqttClient.cs
  13. +0
    -3
      MQTTnet.Core/ManagedClient/ManagedMqttClientOptions.cs
  14. +14
    -19
      Tests/MQTTnet.TestApp.NetCore/ManagedClientTest.cs
  15. +7
    -3
      Tests/MQTTnet.TestApp.UniversalWindows/MainPage.xaml.cs

+ 1
- 2
Frameworks/MQTTnet.NetStandard/Implementations/MqttServerAdapter.cs 파일 보기

@@ -7,10 +7,8 @@ using System.Security.Cryptography.X509Certificates;
using System.Threading;
using System.Threading.Tasks;
using MQTTnet.Core.Adapter;
using MQTTnet.Core.Serializer;
using MQTTnet.Core.Server;
using Microsoft.Extensions.Logging;
using MQTTnet.Core.Client;

namespace MQTTnet.Implementations
{
@@ -18,6 +16,7 @@ namespace MQTTnet.Implementations
{
private readonly ILogger<MqttServerAdapter> _logger;
private readonly IMqttCommunicationAdapterFactory _mqttCommunicationAdapterFactory;

private CancellationTokenSource _cancellationTokenSource;
private Socket _defaultEndpointSocket;
private Socket _tlsEndpointSocket;


+ 1
- 1
Frameworks/MQTTnet.UniversalWindows/Implementations/MqttTcpChannel.cs 파일 보기

@@ -89,7 +89,7 @@ namespace MQTTnet.Implementations
RawReceiveStream = ReceiveStream;
}

private static Certificate LoadCertificate(BaseMqttClientOptions options)
private static Certificate LoadCertificate(MqttClientOptions options)
{
if (options.TlsOptions.Certificates == null || !options.TlsOptions.Certificates.Any())
{


+ 1
- 1
Frameworks/MQTTnet.UniversalWindows/MqttFactory.cs 파일 보기

@@ -79,7 +79,7 @@ namespace MQTTnet

public MqttPacketSerializer CreateSerializer(MqttProtocolVersion protocolVersion)
{
return new MqttPacketSerializer()
return new MqttPacketSerializer
{
ProtocolVersion = protocolVersion
};


+ 3
- 5
MQTTnet.Core/Client/BaseMqttClientOptions.cs 파일 보기

@@ -3,20 +3,18 @@ using MQTTnet.Core.Serializer;

namespace MQTTnet.Core.Client
{
public abstract class BaseMqttClientOptions : IMqttClientOptions
public class MqttClientOptions : IMqttClientOptions
{
public MqttClientTlsOptions TlsOptions { get; set; } = new MqttClientTlsOptions();

public MqttApplicationMessage WillMessage { get; set; }

public string UserName { get; set; }

public string Password { get; set; }

public string ClientId { get; set; } = Guid.NewGuid().ToString("N");

public bool CleanSession { get; set; } = true;

public IMqttClientCredentials Credentials { get; set; } = new MqttClientCredentials();

public TimeSpan KeepAlivePeriod { get; set; } = TimeSpan.FromSeconds(5);

public TimeSpan DefaultCommunicationTimeout { get; set; } = TimeSpan.FromSeconds(10);


+ 8
- 0
MQTTnet.Core/Client/IMqttClientCredentials.cs 파일 보기

@@ -0,0 +1,8 @@
namespace MQTTnet.Core.Client
{
public interface IMqttClientCredentials
{
string Password { get; }
string Username { get; }
}
}

+ 4
- 4
MQTTnet.Core/Client/IMqttClientOptions.cs 파일 보기

@@ -5,14 +5,14 @@ namespace MQTTnet.Core.Client
{
public interface IMqttClientOptions
{
bool CleanSession { get; }
string ClientId { get; }
bool CleanSession { get; }
MqttApplicationMessage WillMessage { get; }
IMqttClientCredentials Credentials { get; }

TimeSpan DefaultCommunicationTimeout { get; }
TimeSpan KeepAlivePeriod { get; }
string Password { get; }
MqttProtocolVersion ProtocolVersion { get; }
MqttClientTlsOptions TlsOptions { get; }
string UserName { get; }
MqttApplicationMessage WillMessage { get; }
}
}

+ 2
- 2
MQTTnet.Core/Client/MqttClient.cs 파일 보기

@@ -186,8 +186,8 @@ namespace MQTTnet.Core.Client
var connectPacket = new MqttConnectPacket
{
ClientId = _options.ClientId,
Username = _options.UserName,
Password = _options.Password,
Username = _options.Credentials?.Username,
Password = _options.Credentials?.Password,
CleanSession = _options.CleanSession,
KeepAlivePeriod = (ushort)_options.KeepAlivePeriod.TotalSeconds,
WillMessage = willApplicationMessage


+ 9
- 0
MQTTnet.Core/Client/MqttClientCredentials.cs 파일 보기

@@ -0,0 +1,9 @@
namespace MQTTnet.Core.Client
{
public class MqttClientCredentials : IMqttClientCredentials
{
public string Username { get; set; }

public string Password { get; set; }
}
}

+ 1
- 1
MQTTnet.Core/Client/MqttClientTcpOptions.cs 파일 보기

@@ -1,6 +1,6 @@
namespace MQTTnet.Core.Client
{
public class MqttClientTcpOptions : BaseMqttClientOptions
public class MqttClientTcpOptions : MqttClientOptions
{
public string Server { get; set; }



+ 1
- 1
MQTTnet.Core/Client/MqttClientWebSocketOptions.cs 파일 보기

@@ -3,7 +3,7 @@ using System.Net;

namespace MQTTnet.Core.Client
{
public class MqttClientWebSocketOptions : BaseMqttClientOptions
public class MqttClientWebSocketOptions : MqttClientOptions
{
public string Uri { get; set; }



+ 0
- 2
MQTTnet.Core/ManagedClient/IManagedMqttClientOptions.cs 파일 보기

@@ -10,7 +10,5 @@ namespace MQTTnet.Core.ManagedClient
TimeSpan AutoReconnectDelay { get; }

IManagedMqttClientStorage Storage { get; }

Func<IManagedMqttClientOptions, string> PasswordProvider { get; }
}
}

+ 0
- 2
MQTTnet.Core/ManagedClient/ManagedMqttClient.cs 파일 보기

@@ -6,7 +6,6 @@ using System.Threading;
using System.Threading.Tasks;
using MQTTnet.Core.Client;
using MQTTnet.Core.Exceptions;
using MQTTnet.Core.Packets;
using MQTTnet.Core.Protocol;
using Microsoft.Extensions.Logging;

@@ -277,7 +276,6 @@ namespace MQTTnet.Core.ManagedClient

try
{
_options.PasswordProvider?.Invoke(_options);
await _mqttClient.ConnectAsync(_options.ClientOptions).ConfigureAwait(false);
return ReconnectionResult.Reconnected;
}


+ 0
- 3
MQTTnet.Core/ManagedClient/ManagedMqttClientOptions.cs 파일 보기

@@ -10,8 +10,5 @@ namespace MQTTnet.Core.ManagedClient
public TimeSpan AutoReconnectDelay { get; set; } = TimeSpan.FromSeconds(5);

public IManagedMqttClientStorage Storage { get; set; }

public Func<IManagedMqttClientOptions, string> PasswordProvider { get; set; }

}
}

+ 14
- 19
Tests/MQTTnet.TestApp.NetCore/ManagedClientTest.cs 파일 보기

@@ -3,7 +3,6 @@ using System.Threading.Tasks;
using MQTTnet.Core;
using MQTTnet.Core.Client;
using MQTTnet.Core.ManagedClient;
using MQTTnet.Core.Packets;
using MQTTnet.Core.Protocol;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
@@ -25,32 +24,21 @@ namespace MQTTnet.TestApp.NetCore
services.GetService<ILoggerFactory>()
.AddConsole();

ClientRetainedMessageHandler ms = new ClientRetainedMessageHandler();
Func<ManagedMqttClientOptions, string> func = delegate (ManagedMqttClientOptions managedMqttClientOptions)
{
return "password";
};

var ms = new ClientRetainedMessageHandler();
var options = new ManagedMqttClientOptions
{
ClientOptions = new MqttClientTcpOptions
{
Server = "broker.hivemq.com",
ClientId = "MQTTnetManagedClientTest",
Password = "pippo",
Credentials = new RandomPassword()
},

AutoReconnectDelay = TimeSpan.FromSeconds(1),
Storage = ms,
PasswordProvider = o =>
{
//o.ClientOptions.Password = GetPassword();
return o.ClientOptions.Password;
}
Storage = ms
};


try
{
var managedClient = services.GetRequiredService<ManagedMqttClient>();
@@ -78,11 +66,18 @@ namespace MQTTnet.TestApp.NetCore
}


public static string GetPassword()
public class RandomPassword : IMqttClientCredentials
{
return "password";
}
public string Password
{
get
{
return Guid.NewGuid().ToString(); // The random password.
}
}

public string Username => "the_static_user";
}

public class ClientRetainedMessageHandler : IManagedMqttClientStorage
{


+ 7
- 3
Tests/MQTTnet.TestApp.UniversalWindows/MainPage.xaml.cs 파일 보기

@@ -42,7 +42,7 @@ namespace MQTTnet.TestApp.UniversalWindows

private async void Connect(object sender, RoutedEventArgs e)
{
BaseMqttClientOptions options = null;
MqttClientOptions options = null;
if (UseTcp.IsChecked == true)
{
options = new MqttClientTcpOptions
@@ -64,8 +64,12 @@ namespace MQTTnet.TestApp.UniversalWindows
throw new InvalidOperationException();
}

options.UserName = User.Text;
options.Password = Password.Text;
options.Credentials = new MqttClientCredentials
{
Username = User.Text,
Password = Password.Text
};

options.ClientId = ClientId.Text;
options.TlsOptions.UseTls = UseTls.IsChecked == true;
options.TlsOptions.IgnoreCertificateChainErrors = true;


불러오는 중...
취소
저장