firewall_objects/service/application/
catalog.rs1use super::{ApplicationDefinition, ApplicationIndicators};
4use crate::service::TransportService;
5
6pub const APPLICATIONS: &[ApplicationDefinition<'static>] = &[
9 ApplicationDefinition {
10 name: "github",
11 category: "developer-tools",
12 transports: &[TransportService::tcp(443), TransportService::tcp(22)],
13 indicators: ApplicationIndicators {
14 dns_suffixes: &[".github.com", ".githubusercontent.com"],
15 tls_sni_suffixes: &[".github.com"],
16 http_hosts: &["api.github.com", "github.com"],
17 },
18 },
19 ApplicationDefinition {
20 name: "zoom",
21 category: "collaboration",
22 transports: &[TransportService::tcp(443), TransportService::udp(3478)],
23 indicators: ApplicationIndicators {
24 dns_suffixes: &[".zoom.us"],
25 tls_sni_suffixes: &[".zoom.us"],
26 http_hosts: &["zoom.us"],
27 },
28 },
29];
30
31pub fn find(name: &str) -> Option<&'static ApplicationDefinition<'static>> {
33 APPLICATIONS
34 .iter()
35 .find(|app| app.name.eq_ignore_ascii_case(name))
36}
37
38#[cfg(test)]
39mod tests {
40 use super::*;
41 use crate::service::application::ApplicationMatchInput;
42
43 #[test]
44 fn catalog_lookup_finds_app() {
45 let app = find("GITHUB").unwrap();
46 let input = ApplicationMatchInput {
47 dns_query: Some("status.github.com"),
48 ..Default::default()
49 };
50 assert!(app.matches(&input));
51 }
52}