package com.juick.server.configuration; import com.juick.service.activities.DeleteUserEvent; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationEventPublisher; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.client.ClientHttpResponse; import org.springframework.stereotype.Component; import org.springframework.web.client.DefaultResponseErrorHandler; import javax.annotation.Nonnull; import javax.inject.Inject; import java.io.IOException; import java.net.URI; import java.nio.charset.StandardCharsets; @Component public class ActivityPubClientErrorHandler extends DefaultResponseErrorHandler { private static final Logger logger = LoggerFactory.getLogger("ActivityPub"); @Inject private ApplicationEventPublisher applicationEventPublisher; @Override public void handleError(URI contextUri, HttpMethod method, @Nonnull ClientHttpResponse response) throws IOException { logger.warn("HTTP ERROR {} {} : {}", response.getStatusCode().value(), response.getStatusText(), IOUtils.toString(response.getBody(), StandardCharsets.UTF_8)); if (response.getStatusCode().equals(HttpStatus.GONE)) { logger.warn("Server report {} is gone, deleting", contextUri.toASCIIString()); applicationEventPublisher.publishEvent(new DeleteUserEvent(this, contextUri.toASCIIString())); } } }