rrdcached_client/
sanitisation.rs1use crate::errors::RRDCachedClientError;
2
3pub fn check_data_source_name(name: &str) -> Result<(), RRDCachedClientError> {
4 if name.is_empty() || name.len() > 64 {
5 return Err(RRDCachedClientError::InvalidDataSourceName(
6 "name must be between 1 and 64 characters".to_string(),
7 ));
8 }
9 if !name
10 .chars()
11 .all(|c| c.is_alphanumeric() || c == '_' || c == '-')
12 {
13 return Err(RRDCachedClientError::InvalidDataSourceName(
14 "name must only contain alphanumeric characters and underscores".to_string(),
15 ));
16 }
17 Ok(())
18}
19
20pub fn check_rrd_path(name: &str) -> Result<(), RRDCachedClientError> {
21 if name.is_empty() || name.len() > 64 {
22 return Err(RRDCachedClientError::InvalidCreateDataSerie(
23 "name must be between 1 and 64 characters".to_string(),
24 ));
25 }
26 if !name
27 .chars()
28 .all(|c| c.is_alphanumeric() || c == '_' || c == '-')
29 {
30 return Err(RRDCachedClientError::InvalidCreateDataSerie(
31 "name must only contain alphanumeric characters and underscores".to_string(),
32 ));
33 }
34 Ok(())
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[test]
42 fn test_check_data_source_name() {
43 let result = check_data_source_name("test");
44 assert!(result.is_ok());
45
46 let result = check_data_source_name("test_");
47 assert!(result.is_ok());
48
49 let result = check_data_source_name("test-");
50 assert!(result.is_ok());
51
52 let result = check_data_source_name("test_1_a");
53 assert!(result.is_ok());
54
55 let result = check_data_source_name("");
56 assert!(result.is_err());
57
58 let result = check_data_source_name("a".repeat(65).as_str());
59 assert!(result.is_err());
60
61 let result = check_data_source_name("test!");
62 assert!(result.is_err());
63
64 let result = check_data_source_name("test\n");
65 assert!(result.is_err());
66
67 let result = check_data_source_name("test:GAUGE");
68 assert!(result.is_err());
69 }
70
71 #[test]
72 fn test_check_rrd_path() {
73 let result = check_rrd_path("test");
74 assert!(result.is_ok());
75
76 let result = check_rrd_path("test_");
77 assert!(result.is_ok());
78
79 let result = check_rrd_path("test-");
80 assert!(result.is_ok());
81
82 let result = check_rrd_path("test_1_a");
83 assert!(result.is_ok());
84
85 let result = check_rrd_path("");
86 assert!(result.is_err());
87
88 let result = check_rrd_path("a".repeat(65).as_str());
89 assert!(result.is_err());
90
91 let result = check_rrd_path("test!");
92 assert!(result.is_err());
93
94 let result = check_rrd_path("test\n");
95 assert!(result.is_err());
96
97 let result = check_rrd_path("test.rrd");
98 assert!(result.is_err());
99 }
100}