server/email_notifications: do not panic on template registration
instead print an error and continue, the rendering functions will error out if one of the templates could not be registered if we `.unwrap()` here, it can lead to problems if the templates are not correct, i.e. we could panic while holding a lock, if something holds a mutex while this is called for the first time add a test to catch registration issues during package build Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
		
				
					committed by
					
						 Dietmar Maurer
						Dietmar Maurer
					
				
			
			
				
	
			
			
			
						parent
						
							2729d134bd
						
					
				
				
					commit
					25b4d52dce
				
			| @ -1,10 +1,11 @@ | ||||
| use anyhow::Error; | ||||
| use serde_json::json; | ||||
|  | ||||
| use handlebars::{Handlebars, Helper, Context, RenderError, RenderContext, Output, HelperResult}; | ||||
| use handlebars::{Handlebars, Helper, Context, RenderError, RenderContext, Output, HelperResult, TemplateError}; | ||||
|  | ||||
| use proxmox::tools::email::sendmail; | ||||
| use proxmox::api::schema::parse_property_string; | ||||
| use proxmox::try_block; | ||||
|  | ||||
| use crate::{ | ||||
|     config::datastore::DataStoreConfig, | ||||
| @ -181,25 +182,33 @@ lazy_static::lazy_static!{ | ||||
|  | ||||
|     static ref HANDLEBARS: Handlebars<'static> = { | ||||
|         let mut hb = Handlebars::new(); | ||||
|         let result: Result<(), TemplateError> = try_block!({ | ||||
|  | ||||
|         hb.set_strict_mode(true); | ||||
|             hb.set_strict_mode(true); | ||||
|  | ||||
|         hb.register_helper("human-bytes", Box::new(handlebars_humam_bytes_helper)); | ||||
|         hb.register_helper("relative-percentage", Box::new(handlebars_relative_percentage_helper)); | ||||
|             hb.register_helper("human-bytes", Box::new(handlebars_humam_bytes_helper)); | ||||
|             hb.register_helper("relative-percentage", Box::new(handlebars_relative_percentage_helper)); | ||||
|  | ||||
|         hb.register_template_string("gc_ok_template", GC_OK_TEMPLATE).unwrap(); | ||||
|         hb.register_template_string("gc_err_template", GC_ERR_TEMPLATE).unwrap(); | ||||
|             hb.register_template_string("gc_ok_template", GC_OK_TEMPLATE)?; | ||||
|             hb.register_template_string("gc_err_template", GC_ERR_TEMPLATE)?; | ||||
|  | ||||
|         hb.register_template_string("verify_ok_template", VERIFY_OK_TEMPLATE).unwrap(); | ||||
|         hb.register_template_string("verify_err_template", VERIFY_ERR_TEMPLATE).unwrap(); | ||||
|             hb.register_template_string("verify_ok_template", VERIFY_OK_TEMPLATE)?; | ||||
|             hb.register_template_string("verify_err_template", VERIFY_ERR_TEMPLATE)?; | ||||
|  | ||||
|         hb.register_template_string("sync_ok_template", SYNC_OK_TEMPLATE).unwrap(); | ||||
|         hb.register_template_string("sync_err_template", SYNC_ERR_TEMPLATE).unwrap(); | ||||
|             hb.register_template_string("sync_ok_template", SYNC_OK_TEMPLATE)?; | ||||
|             hb.register_template_string("sync_err_template", SYNC_ERR_TEMPLATE)?; | ||||
|  | ||||
|         hb.register_template_string("tape_backup_ok_template", TAPE_BACKUP_OK_TEMPLATE).unwrap(); | ||||
|         hb.register_template_string("tape_backup_err_template", TAPE_BACKUP_ERR_TEMPLATE).unwrap(); | ||||
|             hb.register_template_string("tape_backup_ok_template", TAPE_BACKUP_OK_TEMPLATE)?; | ||||
|             hb.register_template_string("tape_backup_err_template", TAPE_BACKUP_ERR_TEMPLATE)?; | ||||
|  | ||||
|         hb.register_template_string("package_update_template", PACKAGE_UPDATES_TEMPLATE).unwrap(); | ||||
|             hb.register_template_string("package_update_template", PACKAGE_UPDATES_TEMPLATE)?; | ||||
|  | ||||
|             Ok(()) | ||||
|         }); | ||||
|  | ||||
|         if let Err(err) = result { | ||||
|             eprintln!("error during template registration: {}", err); | ||||
|         } | ||||
|  | ||||
|         hb | ||||
|     }; | ||||
| @ -600,3 +609,23 @@ fn handlebars_relative_percentage_helper( | ||||
|     } | ||||
|     Ok(()) | ||||
| } | ||||
|  | ||||
| #[test] | ||||
| fn test_template_register() { | ||||
|     HANDLEBARS.get_helper("human-bytes").unwrap(); | ||||
|     HANDLEBARS.get_helper("relative-percentage").unwrap(); | ||||
|  | ||||
|     assert!(HANDLEBARS.has_template("gc_ok_template")); | ||||
|     assert!(HANDLEBARS.has_template("gc_err_template")); | ||||
|  | ||||
|     assert!(HANDLEBARS.has_template("verify_ok_template")); | ||||
|     assert!(HANDLEBARS.has_template("verify_err_template")); | ||||
|  | ||||
|     assert!(HANDLEBARS.has_template("sync_ok_template")); | ||||
|     assert!(HANDLEBARS.has_template("sync_err_template")); | ||||
|  | ||||
|     assert!(HANDLEBARS.has_template("tape_backup_ok_template")); | ||||
|     assert!(HANDLEBARS.has_template("tape_backup_err_template")); | ||||
|  | ||||
|     assert!(HANDLEBARS.has_template("package_update_template")); | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user