Masked email: upstream's x:MaskedEmail API (ME-2, ME-3, ME-6a, ME-7a, ME-12 to ME-19)

x:MaskedEmail is no longer refused as unbuilt. Creates generate the address
on an allowed domain and check the prefix, maxMaskedAddresses and the create
rate; updates keep server-set fields; enabled reads and writes map to the
shared state; query filters on enabled, forDomain and text; a tenant
administrator reaches its tenant's accounts' masks.
This commit is contained in:
2026-09-18 16:20:39 -07:00
parent aaca8fe537
commit 3b052a57da
8 changed files with 444 additions and 6 deletions
+31
View File
@@ -500,6 +500,23 @@ impl RegistrySet for Server {
)
.await?
}
// inbuxa: ME-12 to ME-17
ObjectInner::MaskedEmail(mask) => {
let old = match &modification {
Modification::Update { object, .. } => match &object.inner {
ObjectInner::MaskedEmail(old) => Some(old),
_ => None,
},
Modification::Create { .. } => None,
};
crate::inbuxa::masked_email::validate(
&set,
mask,
old,
unpatched_properties,
)
.await?
}
ObjectInner::AcmeProvider(provider) if is_create => {
validate_acme_provider(&set, provider, unpatched_properties).await?
}
@@ -629,6 +646,12 @@ impl RegistrySet for Server {
{
cache_invalidator.process_update(id, &old, &new);
}
// inbuxa: ME-1, ME-2
if let (ObjectInner::MaskedEmail(old), ObjectInner::MaskedEmail(new)) =
(&object.inner, &new_object.inner)
{
crate::inbuxa::masked_email::updated(self, id, old, new).await?;
}
if let (
ObjectInner::Application(previous),
ObjectInner::Application(updated),
@@ -656,6 +679,10 @@ impl RegistrySet for Server {
RegistryWriteResult::Success(id),
) => {
cache_invalidator.process_create(&new_object);
// inbuxa: ME-7a
if let ObjectInner::MaskedEmail(mask) = &new_object.inner {
crate::inbuxa::masked_email::created(self, id, mask).await?;
}
response.object.insert(Property::Id, RegistryValue::Id(id));
set.response
.created
@@ -746,6 +773,10 @@ impl RegistrySet for Server {
);
}
// inbuxa: ME-3
if let ObjectInner::MaskedEmail(mask) = &object.inner {
crate::inbuxa::masked_email::destroyed(self, id, mask).await?;
}
cache_invalidator.process_delete(id, &object);
set.response.destroyed.push(id);
}