## Summary - Add Spec 435 backend-only Exchange structured output envelope and target normalizer readiness helpers for transportRule, remoteDomain, and inboundConnector. - Add deterministic hash input/readiness handling and no-promotion guard coverage. - Add Spec 435 spec, plan, tasks, checklist, and implementation report artifacts. ## Validation - git diff --cached --check - cd apps/platform && php artisan test --filter=Spec435 --compact ## Product Surface / Deployment - Livewire v4 compliance unchanged. - Filament provider registration unchanged under apps/platform/bootstrap/providers.php. - Global search unchanged; no resources added or modified. - Destructive/high-impact actions: none. - Asset strategy: none; no filament:assets requirement for this slice. - Browser proof: N/A - no rendered UI surface changed. - Deployment impact: no env vars, migrations, queues, scheduler, storage, assets, or Dokploy runtime behavior changes. Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #502
76 lines
1.9 KiB
PHP
76 lines
1.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Services\TenantConfiguration;
|
|
|
|
final class ExchangeRemoteDomainEvidenceNormalizer extends ExchangePowerShellTargetEvidenceNormalizer
|
|
{
|
|
public function resourceType(): string
|
|
{
|
|
return 'remoteDomain';
|
|
}
|
|
|
|
public function normalizerVersion(): string
|
|
{
|
|
return 'exchange-remote-domain-readiness-v1';
|
|
}
|
|
|
|
/**
|
|
* @return list<string>
|
|
*/
|
|
protected function materialFields(): array
|
|
{
|
|
return [
|
|
'Guid',
|
|
'RemoteDomainId',
|
|
'Identity',
|
|
'DomainName',
|
|
'Name',
|
|
'DisplayName',
|
|
'IsDefault',
|
|
'AllowedOOFType',
|
|
'AutoReplyEnabled',
|
|
'AutoForwardEnabled',
|
|
'MailTipsAccessLevel',
|
|
'MailTipsAccessScope',
|
|
'TargetDeliveryDomain',
|
|
'TNEFEnabled',
|
|
'TrustedMailOutboundEnabled',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @return list<list<string>>
|
|
*/
|
|
protected function identityAliasGroups(): array
|
|
{
|
|
return [
|
|
['id', 'sourceId'],
|
|
['Guid', 'RemoteDomainId', 'Identity'],
|
|
];
|
|
}
|
|
|
|
protected function normalizePayload(array $payload, array $identity): array
|
|
{
|
|
$normalized = parent::normalizePayload($payload, $identity);
|
|
|
|
$normalized['remote_domain_class'] = [
|
|
'is_default' => $this->normalizeSettingValue($payload['IsDefault'] ?? $payload['isDefault'] ?? null),
|
|
'domain_name_is_identity' => false,
|
|
];
|
|
$normalized['settings'] = $this->settingGroup($payload, [], [
|
|
'AllowedOOFType',
|
|
'AutoReplyEnabled',
|
|
'AutoForwardEnabled',
|
|
'MailTipsAccessLevel',
|
|
'MailTipsAccessScope',
|
|
'TargetDeliveryDomain',
|
|
'TNEFEnabled',
|
|
'TrustedMailOutboundEnabled',
|
|
]);
|
|
|
|
return $this->sortAssociative($normalized);
|
|
}
|
|
}
|