package com.mailserver.config; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.util.Arrays; import java.util.Locale; import java.util.Set; import java.util.stream.Collectors; /** * Who manages mailboxes (Settings → Mailboxes): {@code mailserver.admins} (comma separated), by default the first * mailbox — {@code mailserver.admin.email}, or admin@<first domain>. No role in the database: the list lives in * the configuration, so a stolen mailbox can not make itself an administrator. */ @Component public class MailAdmins { private final Set admins; public MailAdmins(@Value("${mailserver.admins:}") String admins, @Value("${mailserver.admin.email:}") String firstMailbox, MailDomains domains) { String list = !admins.isBlank() ? admins : !firstMailbox.isBlank() ? firstMailbox : "admin@" + domains.domains().iterator().next(); this.admins = Arrays.stream(list.split(",")) .map(a -> a.trim().toLowerCase(Locale.ROOT)) .filter(a -> !a.isEmpty()) .collect(Collectors.toUnmodifiableSet()); } public boolean isAdmin(String email) { return email != null && admins.contains(email.toLowerCase(Locale.ROOT)); } }