/* * Copyright (C) 2008-2023, Juick * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ package com.juick.config; import com.juick.service.activities.DeleteUserEvent; import okhttp3.Interceptor; import okhttp3.Response; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationEventPublisher; import org.springframework.http.HttpStatus; import java.io.IOException; public class ActivityPubClientErrorHandler implements Interceptor { private static final Logger logger = LoggerFactory.getLogger("ActivityPub"); private final ApplicationEventPublisher applicationEventPublisher; public ActivityPubClientErrorHandler(ApplicationEventPublisher applicationEventPublisher) { this.applicationEventPublisher = applicationEventPublisher; } @NotNull @Override public Response intercept(@NotNull Interceptor.Chain chain) throws IOException { var request = chain.request(); var response = chain.proceed(request); var url = request.url(); if (!response.isSuccessful()) { var code = response.code(); var body = response.body() != null ? response.body().string() : ""; if (response.code() == HttpStatus.GONE.value()) { logger.debug("Server report {} is gone, deleting", url); applicationEventPublisher.publishEvent(new DeleteUserEvent(this, url.toString())); } else if (response.code() == HttpStatus.NOT_FOUND.value()) { logger.debug("HTTP ERROR {} on {} : {}", code, url, body); } else { logger.warn("HTTP ERROR {} on {} : {}", code, url, body); } } return response; } }