hickory-dns integrated.
This commit is contained in:
50
src/model.rs
50
src/model.rs
@@ -1,12 +1,37 @@
|
||||
use hickory_proto::rr::RecordData;
|
||||
use http::HeaderMap;
|
||||
use maud::{Markup, Render, html};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::{
|
||||
collections::HashSet,
|
||||
sync::{Arc, Mutex},
|
||||
};
|
||||
use std::{
|
||||
fmt::Display,
|
||||
hash::Hash,
|
||||
time::{SystemTime, UNIX_EPOCH},
|
||||
};
|
||||
|
||||
#[derive(Debug, Default)]
|
||||
pub struct AppState {
|
||||
pub auths: Arc<Mutex<HashSet<User>>>,
|
||||
pub domains: Arc<Mutex<HashSet<DnsRecord>>>,
|
||||
}
|
||||
|
||||
impl AppState {
|
||||
pub fn is_allowed(&self, user: &User, domain: impl Into<String>) -> bool {
|
||||
let domain = domain.into();
|
||||
self.auths.lock().is_ok_and(|a| {
|
||||
a.iter().any(|u| {
|
||||
u.login == user.login
|
||||
&& u.key == user.key
|
||||
&& u.scope.iter().any(|s| domain.contains(s))
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(clippy::upper_case_acronyms)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Hash, Default, Deserialize, Serialize)]
|
||||
pub enum DnsType {
|
||||
A,
|
||||
@@ -32,7 +57,7 @@ pub struct JsonDomain {
|
||||
pub rdata: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize)]
|
||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||
pub struct DnsRecord {
|
||||
domain: String,
|
||||
qname: String,
|
||||
@@ -136,7 +161,28 @@ impl PartialEq for DnsRecord {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
impl RecordData for DnsRecord {
|
||||
fn into_rdata(self) -> hickory_proto::rr::RData {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn is_update(&self) -> bool {
|
||||
true
|
||||
}
|
||||
|
||||
fn record_type(&self) -> hickory_proto::rr::RecordType {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn try_borrow(data: &hickory_proto::rr::RData) -> Option<&Self> {
|
||||
todo!()
|
||||
}
|
||||
fn try_from_rdata(data: hickory_proto::rr::RData) -> Result<Self, hickory_proto::rr::RData> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Clone)]
|
||||
pub struct User {
|
||||
pub login: String,
|
||||
pub key: String,
|
||||
|
||||
Reference in New Issue
Block a user