From 2ccc56a0974c9da8360f53225ced7fe732ab83a2 Mon Sep 17 00:00:00 2001 From: Adrian Heine Date: Wed, 26 Apr 2017 09:19:02 +0200 Subject: [PATCH] Prereqs --- src/resources/mod.rs | 9 +++++++++ src/symbols/acme/cert.rs | 9 +++++---- src/symbols/hook.rs | 8 ++++++++ src/symbols/tls/csr.rs | 5 +++++ src/symbols/tls/self_signed_cert.rs | 5 +++++ 5 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/resources/mod.rs b/src/resources/mod.rs index 8358845..420dd72 100644 --- a/src/resources/mod.rs +++ b/src/resources/mod.rs @@ -22,3 +22,12 @@ impl<'a> Resource for DirResource<'a> { fn get_type(&self) -> &str { "dir" } fn get_value(&self) -> &str { &*self.path } } + +pub struct FileResource<'a> { + pub path: Cow<'a, str> +} + +impl<'a> Resource for FileResource<'a> { + fn get_type(&self) -> &str { "file" } + fn get_value(&self) -> &str { &*self.path } +} diff --git a/src/symbols/acme/cert.rs b/src/symbols/acme/cert.rs index fd05c24..49257b2 100644 --- a/src/symbols/acme/cert.rs +++ b/src/symbols/acme/cert.rs @@ -6,6 +6,7 @@ use std::io::{self, Write}; use command_runner::CommandRunner; use symbols::Symbol; +use resources::{FileResource, Resource}; pub struct AcmeCert<'a> { domain: Cow<'a, str>, @@ -20,10 +21,6 @@ impl<'a> AcmeCert<'a> { } } - fn get_key_path(&self) -> String { - format!("/etc/ssl/private/{}.key", self.domain) - } - fn get_csr_path(&self) -> String { format!("/etc/ssl/local_certs/{}.csr", self.domain) } @@ -74,6 +71,10 @@ impl<'a> Symbol for AcmeCert<'a> { try!(file.write_all(&output.stdout)); Ok(()) } + + fn get_prerequisites(&self) -> Vec> { + vec![Box::new(FileResource { path: self.get_csr_path().into() })] + } } #[cfg(test)] diff --git a/src/symbols/hook.rs b/src/symbols/hook.rs index 30a8ed8..e1ad0df 100644 --- a/src/symbols/hook.rs +++ b/src/symbols/hook.rs @@ -1,6 +1,7 @@ use std::error::Error; use std::fmt; +use resources::Resource; use symbols::Symbol; pub struct Hook where A: Symbol, B: Symbol { @@ -23,6 +24,13 @@ impl Symbol for Hook where A: Symbol, B: Symbol { try!(self.a.execute()); self.b.execute() } + + fn get_prerequisites(&self) -> Vec> { + let mut r = vec![]; + r.extend(self.a.get_prerequisites().into_iter()); + r.extend(self.b.get_prerequisites().into_iter()); + r + } } impl fmt::Display for Hook where A: Symbol, B: Symbol { diff --git a/src/symbols/tls/csr.rs b/src/symbols/tls/csr.rs index 935d4c6..9cc24b1 100644 --- a/src/symbols/tls/csr.rs +++ b/src/symbols/tls/csr.rs @@ -3,6 +3,7 @@ use std::error::Error; use std::fmt; use command_runner::CommandRunner; +use resources::{Resource, FileResource}; use symbols::Symbol; pub struct TlsCsr<'a> { @@ -50,6 +51,10 @@ impl<'a> Symbol for TlsCsr<'a> { let output = try!(self.command_runner.run_with_args("openssl", &["req", "-new", "-sha256", "-key", &self.get_key_path(), "-out", &self.get_csr_path(), "-subj", &format!("/CN={}", self.domain)]).map_err(|e| Box::new(e))); Ok(()) } + + fn get_prerequisites(&self) -> Vec> { + vec![Box::new(FileResource { path: self.get_key_path().into() })] + } } #[cfg(test)] diff --git a/src/symbols/tls/self_signed_cert.rs b/src/symbols/tls/self_signed_cert.rs index 438ea8f..9987dbd 100644 --- a/src/symbols/tls/self_signed_cert.rs +++ b/src/symbols/tls/self_signed_cert.rs @@ -3,6 +3,7 @@ use std::error::Error; use std::fmt; use command_runner::CommandRunner; +use resources::{Resource, FileResource}; use symbols::Symbol; pub struct SelfSignedTlsCert<'a> { @@ -55,6 +56,10 @@ impl<'a> Symbol for SelfSignedTlsCert<'a> { Ok(_) => Ok(()) } } + + fn get_prerequisites(&self) -> Vec> { + vec![Box::new(FileResource { path: self.get_key_path().into() })] + } } #[cfg(test)]