57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| use std::sync::Arc;
 | |
| 
 | |
| use opnsense_config_xml::{Caddy, OPNsense, Pischem};
 | |
| 
 | |
| use crate::{config::OPNsenseShell, Error};
 | |
| 
 | |
| pub struct CaddyConfig<'a> {
 | |
|     opnsense: &'a mut OPNsense,
 | |
|     opnsense_shell: Arc<dyn OPNsenseShell>,
 | |
| }
 | |
| 
 | |
| impl<'a> CaddyConfig<'a> {
 | |
|     pub fn new(opnsense: &'a mut OPNsense, opnsense_shell: Arc<dyn OPNsenseShell>) -> Self {
 | |
|         Self {
 | |
|             opnsense,
 | |
|             opnsense_shell,
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     pub fn get_full_config(&self) -> &Option<Pischem> {
 | |
|         &self.opnsense.pischem
 | |
|     }
 | |
| 
 | |
|     fn with_caddy<F, R>(&mut self, f: F) -> R
 | |
|     where
 | |
|         F: FnOnce(&mut Caddy) -> R,
 | |
|     {
 | |
|         match &mut self.opnsense.pischem.as_mut() {
 | |
|             Some(pischem) => f(&mut pischem.caddy),
 | |
|             None => {
 | |
|                 unimplemented!("Accessing caddy config is not supported when not available yet")
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     pub fn enable(&mut self, enabled: bool) {
 | |
|         self.with_caddy(|caddy| {
 | |
|             caddy.general.enabled = enabled as u8;
 | |
|             caddy.general.http_port = Some(8080);
 | |
|             caddy.general.https_port = Some(8443);
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     pub async fn reload_restart(&self) -> Result<(), Error> {
 | |
|         self.opnsense_shell.exec("configctl caddy stop").await?;
 | |
|         self.opnsense_shell
 | |
|             .exec("configctl template reload OPNsense/Caddy")
 | |
|             .await?;
 | |
|         self.opnsense_shell
 | |
|             .exec("configctl template reload OPNsense/Caddy/rc.conf.d")
 | |
|             .await?;
 | |
|         self.opnsense_shell.exec("configctl caddy validate").await?;
 | |
|         self.opnsense_shell.exec("configctl caddy start").await?;
 | |
|         Ok(())
 | |
|     }
 | |
| }
 |