JMAP Registry API implementation - part 6
This commit is contained in:
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user