CREATE OR ALTER VIEW [Partner].[SettingWithDomainTrust] AS
WITH Users AS(
SELECT DISTINCT
COALESCE(Partner.Setting.LocalPart, Partner.CryptographicKey.LocalPart) AS LocalPart,
COALESCE(Partner.Setting.DomainId, Partner.CryptographicKey.DomainId) AS DomainId,
COALESCE(Partner.Setting.TenantId, Partner.CryptographicKey.TenantId) AS TenantId
FROM Partner.CryptographicKey
FULL OUTER JOIN Partner.Setting ON Partner.Setting.DomainId = Partner.CryptographicKey.DomainId
AND Partner.Setting.LocalPart = Partner.CryptographicKey.LocalPart And Partner.Setting.TenantId = Partner.CryptographicKey.TenantId
WHERE (Partner.CryptographicKey.LocalPart IS NULL OR Partner.CryptographicKey.LocalPart <> '*')
AND(Partner.Setting.LocalPart IS NULL OR Partner.Setting.LocalPart <> '*')
)
SELECT
Partner.Domain.Id AS DomainId,
Partner.Domain.TenantId,
Partner.Domain.Domain,
Partner.Domain.Gravity,
Partner.CalculateTrustLevel(LevelOfTrust, Gravity, Created) as LevelOfTrust,
LevelOfTrust as StoredLevelOfTrust,
Partner.Domain.Created,
Partner.Domain.TrustedSubnetsData,
Partner.Domain.RequiredConnectionSecurity,
Partner.Domain.Certificates,
PartnerSetting.SignatureAlgorithm,
PartnerSetting.EncryptionAlgorithm,
PartnerSetting.PreferredTechnology,
PartnerSetting.SymmetricEncryptionPassword,
PartnerSetting.InboundContentFilterSet,
PartnerSetting.OutboundContentFilterSet,
PartnerSetting.AreAlgorithmsPinned,
PartnerSetting.EncryptionPaddingAlgorithm,
PartnerSetting.SignaturePaddingAlgorithm,
PartnerSetting.UrlProtectionUntrustedMails,
PartnerSetting.UrlProtectionTrustedMails,
PartnerSetting.IsLinkTrackingEnabled,
PartnerSetting.RewriteUrlsInAttachmentsTrustedMails,
PartnerSetting.RewriteUrlsInAttachmentsUntrustedMails,
PartnerSetting.RewriteHostnamesTrustedMails,
PartnerSetting.RewriteHostnamesUntrustedMails,
STUFF((SELECT DISTINCT ',' + PartnerSettingLanguage.Language
FROM Configuration.NotificationLanguage PartnerSettingLanguage
LEFT JOIN Partner.SettingNotificationLanguage ON SettingNotificationLanguage.NotificationLanguageId = PartnerSettingLanguage.Id
WHERE SettingNotificationLanguage.PartnerSettingId = PartnerSetting.Id FOR XML PATH('')),1,1,'') NotificationLanguages,
EmailHintLanguage.[Language] EmailHintLanguage,
COALESCE(UserCount.Count, 0) AS UserCount,
COALESCE(DomainCertificateCount.Count, 0) AS DomainCertificateCount
FROM Partner.Domain
LEFT JOIN Partner.Setting AS PartnerSetting ON PartnerSetting.DomainId = Partner.Domain.Id AND PartnerSetting.LocalPart = '*' and PartnerSetting.TenantId = Partner.Domain.TenantId
LEFT JOIN [Configuration].[NotificationLanguage] EmailHintLanguage ON EmailHintLanguage.Id = PartnerSetting.EmailHintLanguageId
OUTER APPLY (
-- Count users per domain using partner settings and keys
SELECT DomainId, COUNT(*) AS Count FROM Users
WHERE Partner.Domain.Domain <> '*' AND LocalPart <> '*' AND DomainId = Partner.Domain.Id AND Users.TenantId = Partner.Domain.TenantId
GROUP BY DomainId
) AS UserCount
OUTER APPLY (
-- Count domain keys per domain
SELECT DomainId, COUNT(*) AS Count
FROM Partner.CryptographicKey
WHERE Partner.CryptographicKey.LocalPart = '*' AND Partner.CryptographicKey.DomainId = Partner.Domain.Id and Partner.Domain.TenantId = Partner.CryptographicKey.TenantId
GROUP BY DomainId
) AS DomainCertificateCount
WHERE Partner.Domain.Domain <> '*'
GO