add: littleweb full

This commit is contained in:
trisua 2025-07-08 13:35:23 -04:00
parent 3fc0872867
commit d67e7c9c33
32 changed files with 1699 additions and 71 deletions

View file

@ -1,8 +1,11 @@
use crate::model::{
auth::User,
littleweb::{Domain, DomainData, DomainTld},
permissions::{FinePermission, SecondaryPermission},
Error, Result,
use crate::{
database::NAME_REGEX,
model::{
auth::User,
littleweb::{Domain, DomainData, DomainTld},
permissions::{FinePermission, SecondaryPermission},
Error, Result,
},
};
use crate::{auto_method, DataManager};
use oiseau::{cache::Cache, execute, get, params, query_row, query_rows, PostgresRow};
@ -71,6 +74,8 @@ impl DataManager {
Ok(res.unwrap())
}
const MAXIMUM_FREE_DOMAINS: usize = 5;
/// Create a new domain in the database.
///
/// # Arguments
@ -83,6 +88,31 @@ impl DataManager {
return Err(Error::DataTooLong("name".to_string()));
}
// check number of domains
let owner = self.get_user_by_id(data.owner).await?;
if !owner.permissions.check(FinePermission::SUPPORTER) {
let domains = self.get_domains_by_user(data.owner).await?;
if domains.len() >= Self::MAXIMUM_FREE_DOMAINS {
return Err(Error::MiscError(
"You already have the maximum number of domains you can have".to_string(),
));
}
}
// check name
let regex = regex::RegexBuilder::new(NAME_REGEX)
.multi_line(true)
.build()
.unwrap();
if regex.captures(&data.name).is_some() {
return Err(Error::MiscError(
"Domain name contains invalid characters".to_string(),
));
}
// check for existing
if self
.get_domain_by_name_tld(&data.name, &data.tld)

View file

@ -126,5 +126,6 @@ impl DataManager {
Ok(())
}
auto_method!(update_service_files(Vec<ServiceFsEntry>)@get_service_by_id:FinePermission::MANAGE_USERS; -> "UPDATE services SET data = $1 WHERE id = $2" --serde --cache-key-tmpl="atto.service:{}");
auto_method!(update_service_name(&str)@get_service_by_id:FinePermission::MANAGE_USERS; -> "UPDATE services SET name = $1 WHERE id = $2" --cache-key-tmpl="atto.service:{}");
auto_method!(update_service_files(Vec<ServiceFsEntry>)@get_service_by_id:FinePermission::MANAGE_USERS; -> "UPDATE services SET files = $1 WHERE id = $2" --serde --cache-key-tmpl="atto.service:{}");
}