diff options
Diffstat (limited to 'src/main.lib/Plugins/ValidationPlugins/Http/Ftp')
3 files changed, 132 insertions, 0 deletions
diff --git a/src/main.lib/Plugins/ValidationPlugins/Http/Ftp/Ftp.cs b/src/main.lib/Plugins/ValidationPlugins/Http/Ftp/Ftp.cs new file mode 100644 index 0000000..8ad5ab7 --- /dev/null +++ b/src/main.lib/Plugins/ValidationPlugins/Http/Ftp/Ftp.cs @@ -0,0 +1,43 @@ +using PKISharp.WACS.Clients; +using System.Linq; + +namespace PKISharp.WACS.Plugins.ValidationPlugins.Http +{ + internal class Ftp : HttpValidation<FtpOptions, Ftp> + { + private FtpClient _ftpClient; + + public Ftp(FtpOptions options, HttpValidationParameters pars, RunLevel runLevel) : base(options, runLevel, pars) + { + _ftpClient = new FtpClient(_options.Credential, pars.LogService); + } + + protected override char PathSeparator => '/'; + + protected override void DeleteFile(string path) + { + _ftpClient.Delete(path, FtpClient.FileType.File); + } + + protected override void DeleteFolder(string path) + { + _ftpClient.Delete(path, FtpClient.FileType.Directory); + } + + protected override bool IsEmpty(string path) + { + return !_ftpClient.GetFiles(path).Any(); + } + + protected override void WriteFile(string path, string content) + { + _ftpClient.Upload(path, content); + } + + public override void CleanUp() + { + base.CleanUp(); + _ftpClient = null; + } + } +} diff --git a/src/main.lib/Plugins/ValidationPlugins/Http/Ftp/FtpOptions.cs b/src/main.lib/Plugins/ValidationPlugins/Http/Ftp/FtpOptions.cs new file mode 100644 index 0000000..889dbe1 --- /dev/null +++ b/src/main.lib/Plugins/ValidationPlugins/Http/Ftp/FtpOptions.cs @@ -0,0 +1,31 @@ +using PKISharp.WACS.Configuration; +using PKISharp.WACS.Plugins.Base; +using PKISharp.WACS.Services; + +namespace PKISharp.WACS.Plugins.ValidationPlugins.Http +{ + [Plugin("bc27d719-dcf2-41ff-bf08-54db7ea49c48")] + internal class FtpOptions : HttpValidationOptions<Ftp> + { + public override string Name { get => "FTP"; } + public override string Description { get => "Upload verification files via FTP(S)"; } + + public FtpOptions() : base() { } + public FtpOptions(HttpValidationOptions<Ftp> source) : base(source) { } + + /// <summary> + /// Credentials to use for WebDav connection + /// </summary> + public NetworkCredentialOptions Credential { get; set; } + + /// <summary> + /// Show settings to user + /// </summary> + /// <param name="input"></param> + public override void Show(IInputService input) + { + base.Show(input); + Credential.Show(input); + } + } +} diff --git a/src/main.lib/Plugins/ValidationPlugins/Http/Ftp/FtpOptionsFactory.cs b/src/main.lib/Plugins/ValidationPlugins/Http/Ftp/FtpOptionsFactory.cs new file mode 100644 index 0000000..ef6897f --- /dev/null +++ b/src/main.lib/Plugins/ValidationPlugins/Http/Ftp/FtpOptionsFactory.cs @@ -0,0 +1,58 @@ +using PKISharp.WACS.Configuration; +using PKISharp.WACS.DomainObjects; +using PKISharp.WACS.Services; +using System; + +namespace PKISharp.WACS.Plugins.ValidationPlugins.Http +{ + internal class FtpOptionsFactory : HttpValidationOptionsFactory<Ftp, FtpOptions> + { + private readonly ILogService _log; + + public FtpOptionsFactory( + ILogService log, IArgumentsService arguments) : + base(arguments) + { + _log = log; + } + + public override bool PathIsValid(string path) + { + try + { + var uri = new Uri(path); + return uri.Scheme == "ftp" || uri.Scheme == "ftps"; + } + catch (Exception ex) + { + _log.Error(ex, "Invalid path"); + return false; + } + } + + public override string[] WebrootHint(bool allowEmpty) + { + return new[] { + "Enter an ftp path that leads to the web root of the host for http authentication", + " Example, ftp://domain.com:21/site/wwwroot/", + " Example, ftps://domain.com:990/site/wwwroot/" + }; + } + + public override FtpOptions Default(Target target) + { + return new FtpOptions(BaseDefault(target)) + { + Credential = new NetworkCredentialOptions(_arguments) + }; + } + + public override FtpOptions Aquire(Target target, IInputService inputService, RunLevel runLevel) + { + return new FtpOptions(BaseAquire(target, inputService, runLevel)) + { + Credential = new NetworkCredentialOptions(_arguments, inputService) + }; + } + } +} |