use crate::custom_deserializers;
use crate::fake_hash_map;
use crate::ftl_types::*;
use chrono::prelude::*;
use serde::{Deserialize, Serialize};
use serde_tuple::*;
use std::collections::HashMap;
use std::net::IpAddr;
use std::time::Duration;
#[derive(Deserialize, Serialize, Debug)]
pub struct SummaryRaw {
pub domains_being_blocked: u64,
pub dns_queries_today: u64,
pub ads_blocked_today: u64,
pub ads_percentage_today: f64,
pub unique_domains: u64,
pub queries_forwarded: u64,
pub queries_cached: u64,
pub clients_ever_seen: u64,
pub unique_clients: u64,
pub dns_queries_all_types: u64,
#[serde(rename = "reply_NODATA")]
pub reply_nodata: u64,
#[serde(rename = "reply_NXDOMAIN")]
pub reply_nxdomain: u64,
#[serde(rename = "reply_CNAME")]
pub reply_cname: u64,
#[serde(rename = "reply_IP")]
pub reply_ip: u64,
pub privacy_level: u64,
pub status: String,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct Summary {
pub domains_being_blocked: String,
pub dns_queries_today: String,
pub ads_blocked_today: String,
pub ads_percentage_today: String,
pub unique_domains: String,
pub queries_forwarded: String,
pub queries_cached: String,
pub clients_ever_seen: String,
pub unique_clients: String,
pub dns_queries_all_types: String,
#[serde(rename = "reply_NODATA")]
pub reply_nodata: String,
#[serde(rename = "reply_NXDOMAIN")]
pub reply_nxdomain: String,
#[serde(rename = "reply_CNAME")]
pub reply_cname: String,
#[serde(rename = "reply_IP")]
pub reply_ip: String,
pub privacy_level: String,
pub status: String,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct OverTimeData {
#[serde(deserialize_with = "fake_hash_map::deserialize_fake_hash_map")]
pub domains_over_time: HashMap<String, u64>,
#[serde(deserialize_with = "fake_hash_map::deserialize_fake_hash_map")]
pub ads_over_time: HashMap<String, u64>,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct TopItems {
#[serde(deserialize_with = "fake_hash_map::deserialize_fake_hash_map")]
pub top_queries: HashMap<String, u64>,
#[serde(deserialize_with = "fake_hash_map::deserialize_fake_hash_map")]
pub top_ads: HashMap<String, u64>,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct TopClients {
#[serde(deserialize_with = "fake_hash_map::deserialize_fake_hash_map")]
pub top_sources: HashMap<String, u64>,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct TopClientsBlocked {
#[serde(deserialize_with = "fake_hash_map::deserialize_fake_hash_map")]
pub top_sources_blocked: HashMap<String, u64>,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct ForwardDestinations {
#[serde(deserialize_with = "fake_hash_map::deserialize_fake_hash_map")]
pub forward_destinations: HashMap<String, f64>,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct QueryTypes {
#[serde(deserialize_with = "fake_hash_map::deserialize_fake_hash_map")]
pub querytypes: HashMap<String, f64>,
}
#[derive(Deserialize, Serialize_tuple, Debug)]
pub struct Query {
#[serde(deserialize_with = "custom_deserializers::deserialize_string_to_naive_datetime")]
pub timestring: NaiveDateTime,
pub query_type: QueryType,
pub domain: String,
pub client: String,
#[serde(deserialize_with = "custom_deserializers::deserialize_string_to_query_status")]
pub status: QueryStatus,
#[serde(deserialize_with = "custom_deserializers::deserialize_string_to_dnssec_status")]
pub dnssec_status: DNSSECStatus,
#[serde(deserialize_with = "custom_deserializers::deserialize_string_to_reply_type")]
pub reply_type: ReplyType,
#[serde(
deserialize_with = "custom_deserializers::deserialize_string_to_duration_100_microseconds"
)]
pub response_time: Duration,
pub cname_domain: String,
#[serde(deserialize_with = "custom_deserializers::deserialize_string_to_i32")]
pub regex_id: i32,
pub upstream_destination: String,
pub ede: String,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct AllQueries {
pub data: Vec<Query>,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct Status {
pub status: String,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct Version {
pub version: u32,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct Versions {
pub core_update: bool,
pub web_update: bool,
#[serde(rename = "FTL_update")]
pub ftl_update: bool,
pub core_current: String,
pub web_current: String,
#[serde(rename = "FTL_current")]
pub ftl_current: String,
pub core_latest: String,
pub web_latest: String,
#[serde(rename = "FTL_latest")]
pub ftl_latest: String,
pub core_branch: String,
pub web_branch: String,
#[serde(rename = "FTL_branch")]
pub ftl_branch: String,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct CacheInfo {
#[serde(rename = "cache-size")]
pub cache_size: u64,
#[serde(rename = "cache-live-freed")]
pub cache_live_freed: u64,
#[serde(rename = "cache-inserted")]
pub cache_inserted: u64,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct ClientName {
pub name: String,
pub ip: IpAddr,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct NetworkClient {
pub id: u64,
pub ip: Vec<IpAddr>,
pub hwaddr: String,
pub interface: String,
pub name: Vec<String>,
#[serde(rename = "firstSeen", with = "chrono::naive::serde::ts_seconds")]
pub first_seen: NaiveDateTime,
#[serde(rename = "lastQuery", with = "chrono::naive::serde::ts_seconds")]
pub last_query: NaiveDateTime,
#[serde(rename = "numQueries")]
pub num_queries: u64,
#[serde(rename = "macVendor")]
pub mac_vendor: String,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct Network {
pub network: Vec<NetworkClient>,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct ListModificationResponse {
pub success: bool,
pub message: Option<String>,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct CustomListDomainDetails {
pub id: u64,
#[serde(rename = "type")]
pub domain_type: u64,
pub domain: String,
#[serde(deserialize_with = "custom_deserializers::deserialize_uint_to_bool")]
pub enabled: bool,
#[serde(with = "chrono::naive::serde::ts_seconds")]
pub date_added: NaiveDateTime,
#[serde(with = "chrono::naive::serde::ts_seconds")]
pub date_modified: NaiveDateTime,
pub comment: String,
pub groups: Vec<u64>,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct CustomDNSRecord {
pub domain: String,
pub ip_address: IpAddr,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct CustomCNAMERecord {
pub domain: String,
pub target_domain: String,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct FTLNotRunning {
#[serde(rename = "FTLnotrunning")]
pub ftl_not_running: bool,
}