using Newtonsoft.Json; using PepperDash.Core; using PepperDash.Essentials.Core; namespace PepperDash.Essentials.AppServer.Messengers { /// /// Represents a ITechPasswordMessenger /// public class ITechPasswordMessenger : MessengerBase { private readonly ITechPassword _room; public ITechPasswordMessenger(string key, string messagePath, ITechPassword room) : base(key, messagePath, room as IKeyName) { _room = room; } protected override void RegisterActions() { AddAction("/status", (id, content) => SendFullStatus(id)); AddAction("/techPasswordStatus", (id, content) => SendFullStatus(id)); AddAction("/validateTechPassword", (id, content) => { var password = content.Value("password"); _room.ValidateTechPassword(password); }); AddAction("/setTechPassword", (id, content) => { var response = content.ToObject(); _room.SetTechPassword(response.OldPassword, response.NewPassword); }); _room.TechPasswordChanged += (sender, args) => { PostEventMessage("passwordChangedSuccessfully"); }; _room.TechPasswordValidateResult += (sender, args) => { var evt = new ITechPasswordEventMessage { IsValid = args.IsValid }; PostEventMessage(evt, "passwordValidationResult"); }; } private void SendFullStatus(string id = null) { var status = new ITechPasswordStateMessage { TechPasswordLength = _room.TechPasswordLength }; PostStatusMessage(status, id); } } /// /// Represents a ITechPasswordStateMessage /// public class ITechPasswordStateMessage : DeviceStateMessageBase { [JsonProperty("techPasswordLength", NullValueHandling = NullValueHandling.Ignore)] public int? TechPasswordLength { get; set; } } /// /// Represents a ITechPasswordEventMessage /// public class ITechPasswordEventMessage : DeviceEventMessageBase { [JsonProperty("isValid", NullValueHandling = NullValueHandling.Ignore)] public bool? IsValid { get; set; } } internal class SetTechPasswordContent { [JsonProperty("oldPassword")] /// /// Gets or sets the OldPassword /// public string OldPassword { get; set; } [JsonProperty("newPassword")] /// /// Gets or sets the NewPassword /// public string NewPassword { get; set; } } }