IdpConfigurationException.java

package access.exception;

import jakarta.servlet.http.HttpServletRequest;
import lombok.Getter;
import org.springframework.http.HttpStatus;
import org.springframework.security.core.AuthenticationException;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.server.ResponseStatusException;

@Getter
public class IdpConfigurationException extends ResponseStatusException {

    private final String reference;

    public IdpConfigurationException(HttpStatus status, String reason) {
        super(status, reason);
        this.reference = String.valueOf(Math.round(Math.random() * 10000));
    }

    @Override
    public String toString() {
        HttpServletRequest request =
            ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
        String xff = request.getHeader("X-Forwarded-For");
        String ip = (xff != null && !xff.isBlank())
            ? xff.split(",")[0].trim()   // first entry = original client
            : request.getRemoteAddr();
        return String.format("reference='%s', IP-address=%s, msg:%s", reference, ip, super.toString());
    }
}