Ящики из веб-почты: администратор создаёт no-reply@, monitor@, support@, задаёт новый пароль, выключает
continuous-integration/drone/pr Build is passing
continuous-integration/drone/pr Build is passing
Регистрация остаётся закрытой. Администраторы — MAIL_ADMINS (по умолчанию первый ящик); роль не в базе, укравший ящик себя админом не сделает. API /api/admin/mailboxes, сгенерированный пароль — один раз в ответе, в лог не пишется. Настройки → MAILBOXES (видно только администратору). Тесты: MailboxAdminControllerTest (5), всего 73. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
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<String> 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));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user