62 lines
2.4 KiB
Java
62 lines
2.4 KiB
Java
package com.mailserver.controller;
|
|
|
|
import com.mailserver.domain.BlacklistEntry;
|
|
import com.mailserver.service.SpamFilterService;
|
|
import org.springframework.security.core.Authentication;
|
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
|
import org.springframework.web.bind.annotation.GetMapping;
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
import org.springframework.web.bind.annotation.RequestParam;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
import reactor.core.publisher.Flux;
|
|
import reactor.core.publisher.Mono;
|
|
|
|
import java.util.Map;
|
|
|
|
/**
|
|
* Контроллер для управления чёрным списком отправителей.
|
|
*/
|
|
@RestController
|
|
@RequestMapping("/api/spam")
|
|
public class SpamController {
|
|
|
|
private final SpamFilterService spamFilterService;
|
|
|
|
public SpamController(SpamFilterService spamFilterService) {
|
|
this.spamFilterService = spamFilterService;
|
|
}
|
|
|
|
private String getCurrentUserEmail(Authentication authentication) {
|
|
return authentication.getName();
|
|
}
|
|
|
|
@GetMapping("/blacklist")
|
|
public Flux<BlacklistEntry> getBlacklist(Mono<Authentication> authenticationMono) {
|
|
return authenticationMono.flatMapMany(auth ->
|
|
spamFilterService.getBlacklist(getCurrentUserEmail(auth))
|
|
);
|
|
}
|
|
|
|
@PostMapping("/blacklist")
|
|
public Mono<BlacklistEntry> addToBlacklist(Mono<Authentication> authenticationMono, @RequestBody Mono<Map<String, String>> requestMono) {
|
|
return authenticationMono.zipWith(requestMono).flatMap(pair -> {
|
|
String email = getCurrentUserEmail(pair.getT1());
|
|
String senderEmail = pair.getT2().get("senderEmail");
|
|
String reason = pair.getT2().get("reason");
|
|
if (senderEmail == null || senderEmail.trim().isEmpty()) {
|
|
return Mono.error(new IllegalArgumentException("senderEmail is required"));
|
|
}
|
|
return spamFilterService.addToBlacklist(email, senderEmail.trim(), reason);
|
|
});
|
|
}
|
|
|
|
@DeleteMapping("/blacklist")
|
|
public Mono<Void> removeFromBlacklist(Mono<Authentication> authenticationMono, @RequestParam String senderEmail) {
|
|
return authenticationMono.flatMap(auth ->
|
|
spamFilterService.removeFromBlacklist(getCurrentUserEmail(auth), senderEmail)
|
|
);
|
|
}
|
|
}
|