using HanaToolbox.Services.Interfaces;
namespace HanaToolbox.Services;
///
/// Wraps a shell command to run as <sid>adm using `su - <sid>adm -c '...'`.
/// If the current OS user is already <sid>adm, the command is executed directly.
///
public sealed class SuUserSwitcher(IProcessRunner runner) : IUserSwitcher
{
public async Task RunAsAsync(
string sid, string shellCommand,
CancellationToken ct = default)
{
var sidAdm = $"{sid.ToLowerInvariant()}adm";
if (string.Equals(Environment.UserName, sidAdm, StringComparison.OrdinalIgnoreCase))
{
// Already running as the correct user — run directly via bash
return await runner.RunAsync("/bin/bash", ["-c", shellCommand], ct);
}
// Use `su -` to inherit the user's environment (HOME, PATH, etc.)
return await runner.RunAsync("/bin/su", ["-", sidAdm, "-c", shellCommand], ct);
}
}