aboutsummaryrefslogtreecommitdiff
path: root/juick-www/src/main/java/com/juick/service
diff options
context:
space:
mode:
authorGravatar Vitaly Takmazov2017-11-29 22:22:23 +0300
committerGravatar Vitaly Takmazov2017-11-29 19:41:55 +0000
commit913585a8f7171849bc803e9d7bb1ba6f0ff05d84 (patch)
treedf61d71b750ae4687e58f9f0712593c60f38eef5 /juick-www/src/main/java/com/juick/service
parenta32e22d8d8f2bd2dbfde1c066780556d6e1e0026 (diff)
www: purge avatar cache from Cloudflare
Diffstat (limited to 'juick-www/src/main/java/com/juick/service')
-rw-r--r--juick-www/src/main/java/com/juick/service/CloudflareCache.java56
-rw-r--r--juick-www/src/main/java/com/juick/service/cloudflare/FilesPayload.java20
2 files changed, 76 insertions, 0 deletions
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<UserUpdatedEvent> {
+ 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<String> 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<String> files;
+
+ public FilesPayload() {
+ files = new ArrayList<>();
+ }
+
+ public List<String> getFiles() {
+ return files;
+ }
+
+ public void setFiles(List<String> files) {
+ this.files = files;
+ }
+}