summaryrefslogtreecommitdiffstats
path: root/src/main.lib/Plugins/ValidationPlugins/Http/Ftp
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.lib/Plugins/ValidationPlugins/Http/Ftp')
-rw-r--r--src/main.lib/Plugins/ValidationPlugins/Http/Ftp/Ftp.cs43
-rw-r--r--src/main.lib/Plugins/ValidationPlugins/Http/Ftp/FtpOptions.cs31
-rw-r--r--src/main.lib/Plugins/ValidationPlugins/Http/Ftp/FtpOptionsFactory.cs58
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)
+ };
+ }
+ }
+}