Redo mac bans - reduce amount of db queries on login

Works just like ip and hwid bans in that they are loaded on startup
This commit is contained in:
P0nk
2024-10-01 22:12:10 +02:00
parent af02f8b744
commit 5d81e05458
18 changed files with 217 additions and 49 deletions

View File

@@ -0,0 +1,44 @@
package server.ban;
import database.ban.MacBan;
import database.ban.MacBanRepository;
import lombok.extern.slf4j.Slf4j;
import net.jcip.annotations.ThreadSafe;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* @author Ponk
*/
@ThreadSafe
@Slf4j
public class MacBanManager {
private final MacBanRepository macBanRepository;
private final Set<String> bannedMacs = new HashSet<>();
public MacBanManager(MacBanRepository macBanRepository) {
this.macBanRepository = macBanRepository;
}
public synchronized void loadMacBans() {
List<MacBan> macBans = macBanRepository.getAllMacBans();
log.debug("Loaded {} mac bans", macBans.size());
bannedMacs.addAll(macBans.stream().map(MacBan::mac).toList());
}
public synchronized boolean isBanned(String mac) {
return bannedMacs.contains(mac);
}
public synchronized void banMac(String mac, int accountId) {
if (mac == null) {
throw new IllegalArgumentException("mac cannot be null");
}
// TODO: validate mac format. Or create "Mac" model class.
bannedMacs.add(mac);
macBanRepository.saveMacBan(accountId, mac);
}
}