JMAP Registry API implementation - part 6

This commit is contained in:
mdecimus
2026-03-01 18:30:04 +01:00
parent 07d5748f6b
commit 9ccc2ed6f0
74 changed files with 2417 additions and 785 deletions

View File

@@ -9,7 +9,25 @@ use utils::snowflake::SnowflakeIdGenerator;
pub struct MaskedAddress;
const U32_MAX: u128 = u32::MAX as u128;
impl MaskedAddress {
pub fn generate(address_id: u64, expires: Option<u32>, prefix: &str, domain: &str) -> String {
let expires = expires.unwrap_or(0) as u128 & U32_MAX;
let address_id = address_id as u128;
let ids = (address_id << 64)
| (expires << 32)
| ((address_id & U32_MAX) ^ (address_id >> 32) ^ expires);
let mut address = String::with_capacity(prefix.len() + domain.len() + 30);
address.push_str(prefix);
address.push('.');
address.push_str(&base36_encode(ids));
address.push('@');
address.push_str(domain);
address
}
pub fn parse(local_part: &str) -> Option<u64> {
let mut parts = local_part.split('.');
let _prefix = parts.next().filter(|v| !v.is_empty())?;
@@ -33,3 +51,16 @@ impl MaskedAddress {
}
}
}
fn base36_encode(mut n: u128) -> String {
const CHARS: &[u8] = b"0123456789abcdefghijklmnopqrstuvwxyz";
let mut buf = Vec::with_capacity(25);
while n > 0 {
buf.push(CHARS[(n % 36) as usize]);
n /= 36;
}
buf.reverse();
String::from_utf8(buf).unwrap()
}

View File

@@ -12,7 +12,7 @@ use crate::{
use ahash::AHashSet;
use registry::{
schema::{
enums::BlockReason,
enums::{BlockReason, PasswordHashAlgorithm},
prelude::{Object, ObjectType},
structs::{self, AllowedIp, BlockedIp, Rate},
},
@@ -49,6 +49,8 @@ pub struct Security {
pub default_role_ids_user: Vec<Id>,
pub default_role_ids_group: Vec<Id>,
pub default_role_ids_tenant: Vec<Id>,
pub password_hash_algorithm: PasswordHashAlgorithm,
}
#[derive(Default)]
@@ -144,6 +146,7 @@ impl Security {
default_role_ids_user: auth.default_user_role_ids,
default_role_ids_group: auth.default_group_role_ids,
default_role_ids_tenant: auth.default_tenant_role_ids,
password_hash_algorithm: auth.password_hash_algorithm,
}
}
}