24d8701b65
Native per-endpoint identity instead of the schtasks bridge: - Service (default) keeps the existing path - hooks inherit the service account (SYSTEM by default, or whatever you installed under). - SpecificUser binds ProcessStartInfo.UserName / Password / Domain so the hook runs in a batch logon session as the named account. Useful for AD-write hooks that should NOT run as SYSTEM. - InteractiveUser uses WTSQueryUserToken(WTSGetActiveConsoleSessionId) + DuplicateTokenEx + CreateProcessAsUser to drop the child into the logged-in user's session with their environment block. This is the real fix for "calc.exe should pop up on my desktop" - no Task Scheduler bridge required. Stdio is captured via inheritable anonymous pipes so the hook still returns stdout/stderr to the caller normally. Implementation: - New RunAsMode enum + RunAsConfig model on EndpointConfig - ConfigStore round-trips RunAs.Password through DPAPI alongside bearer/HMAC/PFX secrets - AdminPipeServer's secret-merge logic preserves the encrypted blob when the GUI saves an endpoint without re-typing the password - New WebhookServer.Core.Execution.Native namespace with NativeMethods (P/Invoke) and InteractiveProcessLauncher (token-based launcher) - ProcessExecutor branches on RunAs.Mode; the Service/SpecificUser paths share .NET's Process; InteractiveUser uses the launcher - GUI editor gets a "Run as" section: dropdown + conditional username/password/load-profile fields under SpecificUser Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
71 lines
1.1 KiB
C#
71 lines
1.1 KiB
C#
namespace WebhookServer.Core.Models;
|
|
|
|
public enum AuthMode
|
|
{
|
|
None = 0,
|
|
Bearer = 1,
|
|
Hmac = 2,
|
|
}
|
|
|
|
public enum HmacAlgorithm
|
|
{
|
|
Sha1 = 1,
|
|
Sha256 = 2,
|
|
Sha512 = 3,
|
|
}
|
|
|
|
public enum HmacEncoding
|
|
{
|
|
Hex = 0,
|
|
Base64 = 1,
|
|
}
|
|
|
|
public enum ExecutorType
|
|
{
|
|
WindowsPowerShell = 0,
|
|
PwshCore = 1,
|
|
Cmd = 2,
|
|
Executable = 3,
|
|
}
|
|
|
|
public enum ResponseMode
|
|
{
|
|
Sync = 0,
|
|
Async = 1,
|
|
}
|
|
|
|
public enum CallbackTrigger
|
|
{
|
|
OnComplete = 0,
|
|
OnSuccess = 1,
|
|
OnFailure = 2,
|
|
}
|
|
|
|
public enum CallbackHttpMethod
|
|
{
|
|
Post = 0,
|
|
Put = 1,
|
|
}
|
|
|
|
public enum HttpsBindingKind
|
|
{
|
|
None = 0,
|
|
PfxFile = 1,
|
|
CertStoreThumbprint = 2,
|
|
}
|
|
|
|
public enum RunAsMode
|
|
{
|
|
/// <summary>Run as whatever account the service itself runs under (default).</summary>
|
|
Service = 0,
|
|
|
|
/// <summary>Run as a specific username + password (batch logon, no UI).</summary>
|
|
SpecificUser = 1,
|
|
|
|
/// <summary>
|
|
/// Run in the active console session under whoever is logged in at the keyboard.
|
|
/// Lets hooks pop interactive UI on the user's desktop.
|
|
/// </summary>
|
|
InteractiveUser = 2,
|
|
}
|