diff options
author | Hank McCord <Henry.McCord@ewudn.robins.af.mil> | 2020-07-06 12:57:53 -0400 |
---|---|---|
committer | Hank McCord <Henry.McCord@ewudn.robins.af.mil> | 2020-07-06 13:05:08 -0400 |
commit | 789cda2aa2cf2343c7ac7d3923ec12fe2ba1889d (patch) | |
tree | d34e99666f655790f95268b593ba995b13c23662 /src/main.lib/Plugins/ValidationPlugins/Dns/Script/Script.cs | |
parent | 7f3c13e454eff5a3c39d4b20ae662e924baec35a (diff) | |
parent | 25e4ebdadf35a0050eeeacf3cf607fad8ab8a641 (diff) | |
download | letsencrypt-win-simple-789cda2aa2cf2343c7ac7d3923ec12fe2ba1889d.zip letsencrypt-win-simple-789cda2aa2cf2343c7ac7d3923ec12fe2ba1889d.tar.gz letsencrypt-win-simple-789cda2aa2cf2343c7ac7d3923ec12fe2ba1889d.tar.bz2 |
Merge branch 2.1.9 into azure-environment-agnostic
Diffstat (limited to 'src/main.lib/Plugins/ValidationPlugins/Dns/Script/Script.cs')
-rw-r--r-- | src/main.lib/Plugins/ValidationPlugins/Dns/Script/Script.cs | 55 |
1 files changed, 44 insertions, 11 deletions
diff --git a/src/main.lib/Plugins/ValidationPlugins/Dns/Script/Script.cs b/src/main.lib/Plugins/ValidationPlugins/Dns/Script/Script.cs index 6b7b34b..222a7d2 100644 --- a/src/main.lib/Plugins/ValidationPlugins/Dns/Script/Script.cs +++ b/src/main.lib/Plugins/ValidationPlugins/Dns/Script/Script.cs @@ -9,8 +9,7 @@ namespace PKISharp.WACS.Plugins.ValidationPlugins.Dns { private readonly ScriptClient _scriptClient; private readonly ScriptOptions _options; - private readonly string _identifier; - + private readonly DomainParseService _domainParseService; internal const string DefaultCreateArguments = "create {Identifier} {RecordName} {Token}"; internal const string DefaultDeleteArguments = "delete {Identifier} {RecordName} {Token}"; @@ -19,16 +18,16 @@ namespace PKISharp.WACS.Plugins.ValidationPlugins.Dns LookupClientProvider dnsClient, ScriptClient client, ILogService log, - ISettingsService settings, - string identifier) : + DomainParseService domainParseService, + ISettingsService settings) : base(dnsClient, log, settings) { - _identifier = identifier; _options = options; _scriptClient = client; + _domainParseService = domainParseService; } - public override async Task CreateRecord(string recordName, string token) + public override async Task<bool> CreateRecord(DnsValidationRecord record) { var script = _options.Script ?? _options.CreateScript; if (!string.IsNullOrWhiteSpace(script)) @@ -38,15 +37,24 @@ namespace PKISharp.WACS.Plugins.ValidationPlugins.Dns { args = _options.CreateScriptArguments; } - await _scriptClient.RunScript(script, ProcessArguments(recordName, token, args, script.EndsWith(".ps1"))); + await _scriptClient.RunScript( + script, + ProcessArguments( + record.Context.Identifier, + record.Authority.Domain, + record.Value, + args, + script.EndsWith(".ps1"))); + return true; } else { _log.Error("No create script configured"); + return false; } } - public override async Task DeleteRecord(string recordName, string token) + public override async Task DeleteRecord(DnsValidationRecord record) { var script = _options.Script ?? _options.DeleteScript; if (!string.IsNullOrWhiteSpace(script)) @@ -56,7 +64,14 @@ namespace PKISharp.WACS.Plugins.ValidationPlugins.Dns { args = _options.DeleteScriptArguments; } - await _scriptClient.RunScript(script, ProcessArguments(recordName, token, args, script.EndsWith(".ps1"))); + await _scriptClient.RunScript( + script, + ProcessArguments( + record.Context.Identifier, + record.Authority.Domain, + record.Value, + args, + script.EndsWith(".ps1"))); } else { @@ -64,11 +79,29 @@ namespace PKISharp.WACS.Plugins.ValidationPlugins.Dns } } - private string ProcessArguments(string recordName, string token, string args, bool escapeToken) + private string ProcessArguments(string identifier, string recordName, string token, string args, bool escapeToken) { var ret = args; - ret = ret.Replace("{Identifier}", _identifier); + // recordName: _acme-challenge.sub.domain.com + // zoneName: domain.com + // nodeName: _acme-challenge.sub + + // recordName: domain.com + // zoneName: domain.com + // nodeName: @ + + var zoneName = _domainParseService.GetRegisterableDomain(identifier); + var nodeName = "@"; + if (recordName != zoneName) + { + // Offset by one to prevent trailing dot + nodeName = recordName.Substring(0, recordName.Length - zoneName.Length - 1); + } + ret = ret.Replace("{ZoneName}", zoneName); + ret = ret.Replace("{NodeName}", nodeName); + ret = ret.Replace("{Identifier}", identifier); ret = ret.Replace("{RecordName}", recordName); + // Some tokens start with - which confuses Powershell. We did not want to // make a breaking change for .bat or .exe files, so instead escape the // token with double quotes, as Powershell discards the quotes anyway and |