Initial commit: mail-server with WebFlux backend and Angular v22 Synthwave frontend
Co-authored-by: Junie <junie@jetbrains.com>
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
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)
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user