From 913585a8f7171849bc803e9d7bb1ba6f0ff05d84 Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Wed, 29 Nov 2017 22:22:23 +0300 Subject: www: purge avatar cache from Cloudflare --- .../java/com/juick/service/CloudflareCache.java | 56 ++++++++++++++++++++++ .../com/juick/service/cloudflare/FilesPayload.java | 20 ++++++++ 2 files changed, 76 insertions(+) create mode 100644 juick-www/src/main/java/com/juick/service/CloudflareCache.java create mode 100644 juick-www/src/main/java/com/juick/service/cloudflare/FilesPayload.java (limited to 'juick-www/src/main/java/com/juick/service') diff --git a/juick-www/src/main/java/com/juick/service/CloudflareCache.java b/juick-www/src/main/java/com/juick/service/CloudflareCache.java new file mode 100644 index 00000000..00e1f684 --- /dev/null +++ b/juick-www/src/main/java/com/juick/service/CloudflareCache.java @@ -0,0 +1,56 @@ +package com.juick.service; + +import com.juick.service.cloudflare.FilesPayload; +import com.juick.User; +import com.juick.server.component.UserUpdatedEvent; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.ApplicationListener; +import org.springframework.http.*; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponents; +import org.springframework.web.util.UriComponentsBuilder; + +import java.util.Arrays; +import java.util.Collections; + +public class CloudflareCache implements ApplicationListener { + private static final Logger logger = LoggerFactory.getLogger(CloudflareCache.class); + @Value("${cloudflare_auth_email}") + private String authEmail; + @Value("${cloudflare_api_key}") + private String apiKey; + @Value("${cloudflare_zone_id}") + private String zoneId; + private final static String baseUri = "https://api.cloudflare.com/client/v4"; + @Override + public void onApplicationEvent(UserUpdatedEvent event) { + User user = event.getUser(); + logger.debug("Purging Cloudflare cache for {} avatar", user.getName()); + UriComponents uriComponents = UriComponentsBuilder.fromUriString("{baseUri}/zones/{zoneId}/purge_cache") + .buildAndExpand(baseUri, zoneId); + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.add("X-Auth-Email", authEmail); + httpHeaders.add("X-Auth-Key", apiKey); + httpHeaders.setContentType(MediaType.APPLICATION_JSON); + FilesPayload payload = new FilesPayload(); + payload.setFiles(Arrays.asList( + String.format("http://i.juick.com/a/%d.png", user.getUid()), + String.format("http://i.juick.com/as/%d.png", user.getUid()), + String.format("http://i.juick.com/a/%d.jpg", user.getUid()), + String.format("http://i.juick.com/as/%d.jpg", user.getUid()), + String.format("https://i.juick.com/a/%d.png", user.getUid()), + String.format("https://i.juick.com/as/%d.png", user.getUid()), + String.format("https://i.juick.com/a/%d.jpg", user.getUid()), + String.format("https://i.juick.com/as/%d.jpg", user.getUid()) + )); + RestTemplate api = new RestTemplate(); + api.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); + ResponseEntity response = api.exchange(uriComponents.toUri(), + HttpMethod.DELETE, + new HttpEntity<>(payload, httpHeaders), String.class); + logger.info("Cloudflare response: {}", response.getBody()); + } +} diff --git a/juick-www/src/main/java/com/juick/service/cloudflare/FilesPayload.java b/juick-www/src/main/java/com/juick/service/cloudflare/FilesPayload.java new file mode 100644 index 00000000..35d9e72f --- /dev/null +++ b/juick-www/src/main/java/com/juick/service/cloudflare/FilesPayload.java @@ -0,0 +1,20 @@ +package com.juick.service.cloudflare; + +import java.util.ArrayList; +import java.util.List; + +public class FilesPayload { + private List files; + + public FilesPayload() { + files = new ArrayList<>(); + } + + public List getFiles() { + return files; + } + + public void setFiles(List files) { + this.files = files; + } +} -- cgit v1.2.3