blob: 42ede2a0e4a78e1ff3348c26a5d93a3268cb7093 [file] [log] [blame]
Michael Hanl50f9e522015-09-25 12:38:17 +02001package de.ids_mannheim.korap.web.filter;
2
margaretha49cb6882018-07-04 04:19:54 +02003import java.security.SecureRandom;
4import java.util.ArrayList;
5import java.util.HashMap;
6import java.util.List;
7import java.util.Locale;
8import java.util.Map;
9import java.util.Random;
10
margaretha49cb6882018-07-04 04:19:54 +020011import org.apache.logging.log4j.LogManager;
12import org.apache.logging.log4j.Logger;
abcpro1d912a2c2022-11-07 17:10:50 +000013import org.glassfish.jersey.client.ClientConfig;
14import org.glassfish.jersey.logging.LoggingFeature;
margarethab156f882023-05-19 14:01:03 +020015import org.springframework.beans.factory.annotation.Autowired;
abcpro1d912a2c2022-11-07 17:10:50 +000016
margaretha34954472018-10-24 20:05:17 +020017import de.ids_mannheim.korap.authentication.AuthenticationManager;
margaretha96c309d2023-08-16 12:24:12 +020018import jakarta.ws.rs.client.Client;
19import jakarta.ws.rs.client.ClientBuilder;
20import jakarta.ws.rs.client.WebTarget;
21import jakarta.ws.rs.container.ContainerRequestContext;
22import jakarta.ws.rs.container.ContainerRequestFilter;
23import jakarta.ws.rs.core.UriBuilder;
Michael Hanl50f9e522015-09-25 12:38:17 +020024import net.minidev.json.JSONArray;
Michael Hanl50f9e522015-09-25 12:38:17 +020025
26/**
27 * @author hanl
28 * @date 13/05/2014
29 */
margarethab156f882023-05-19 14:01:03 +020030@Deprecated
31//@Component
32//@Priority(Priorities.AUTHORIZATION)
abcpro1136ff592022-11-07 18:25:03 +000033public class PiwikFilter implements ContainerRequestFilter {
Michael Hanl50f9e522015-09-25 12:38:17 +020034
abcpro1d912a2c2022-11-07 17:10:50 +000035 private WebTarget service;
Michael Hanl50f9e522015-09-25 12:38:17 +020036 // private static final String SERVICE = "http://localhost:8888";
37 private static final String SERVICE = "http://10.0.10.13";
margaretha49cb6882018-07-04 04:19:54 +020038 private static Logger jlog = LogManager.getLogger(PiwikFilter.class);
Michael Hanl50f9e522015-09-25 12:38:17 +020039 public static boolean ENABLED = false;
40 private Map<String, String> customVars;
margaretha894a7d72017-11-08 19:24:20 +010041 @Autowired
margaretha34954472018-10-24 20:05:17 +020042 private AuthenticationManager authenticationManager;
Michael Hanl50f9e522015-09-25 12:38:17 +020043
Michael Hanl8abaf9e2016-05-23 16:46:35 +020044 public PiwikFilter () {
margaretha35e1ca22023-11-16 22:00:01 +010045 // controller = BeansFactory.getKustvaktContext()
46 // .getAuthenticationManager();
abcpro1d912a2c2022-11-07 17:10:50 +000047 ClientConfig clientConfig = new ClientConfig();
Michael Hanl50f9e522015-09-25 12:38:17 +020048 if (jlog.isDebugEnabled())
abcpro1d912a2c2022-11-07 17:10:50 +000049 clientConfig.register(LoggingFeature.class);
50 Client client = ClientBuilder.newClient(clientConfig);
Michael Hanl50f9e522015-09-25 12:38:17 +020051 UriBuilder b = UriBuilder.fromUri(SERVICE);
abcpro1d912a2c2022-11-07 17:10:50 +000052 service = client.target(b.build());
Michael Hanl50f9e522015-09-25 12:38:17 +020053 this.customVars = new HashMap<>();
54 }
55
abcpro1136ff592022-11-07 18:25:03 +000056 private void send (ContainerRequestContext request) {
Michael Hanl50f9e522015-09-25 12:38:17 +020057 Random random = new SecureRandom();
Michael Hanl50f9e522015-09-25 12:38:17 +020058 Locale l = null;
59 if (request.getAcceptableLanguages() != null)
60 l = request.getAcceptableLanguages().get(0);
61 try {
margaretha35e1ca22023-11-16 22:00:01 +010062 service.path("piwik/piwik.php").queryParam("idsite", "2")
Michael Hanl7d925612016-01-28 16:59:30 +010063 .queryParam("rec", "1")
Michael Hanl50f9e522015-09-25 12:38:17 +020064 //todo check for empty container
65 .queryParam("_cvar", translateCustomData())
abcpro1a94a0422022-11-07 20:07:23 +000066 .queryParam("cip", request.getHeaderString("Host"))
Michael Hanl50f9e522015-09-25 12:38:17 +020067 .queryParam("cookie", "false")
68 .queryParam("r", String.valueOf(random.nextDouble()))
69 .queryParam("action_name",
margaretha35e1ca22023-11-16 22:00:01 +010070 request.getUriInfo().getRequestUri()
71 .toASCIIString())
72 .request().accept("text/html")
abcpro1a94a0422022-11-07 20:07:23 +000073 .header("Host", request.getHeaderString("Host"))
74 .header("User-Agent", request.getHeaderString("User-Agent"))
Michael Hanl50f9e522015-09-25 12:38:17 +020075 .acceptLanguage(l).method("GET");
Michael Hanl8abaf9e2016-05-23 16:46:35 +020076 }
77 catch (Exception e) {
Michael Hanl50f9e522015-09-25 12:38:17 +020078 // do nothing if piwik not available!
79 }
80 }
81
Michael Hanl8abaf9e2016-05-23 16:46:35 +020082 private String translateCustomData () {
Michael Hanl50f9e522015-09-25 12:38:17 +020083 final Map<String, List<String>> customVariables = new HashMap<String, List<String>>();
84 int i = 0;
margaretha35e1ca22023-11-16 22:00:01 +010085 for (final Map.Entry<String, String> entry : this.customVars
86 .entrySet()) {
Michael Hanl50f9e522015-09-25 12:38:17 +020087 i++;
88 final List<String> list = new ArrayList<String>();
89 list.add(entry.getKey());
90 list.add(entry.getValue());
91 customVariables.put(Integer.toString(i), list);
92 }
93
94 final JSONArray json = new JSONArray();
95 json.add(customVariables);
96
97 // remove unnecessary parent square brackets from JSON-string
Michael Hanl8abaf9e2016-05-23 16:46:35 +020098 String jsonString = json.toString().substring(1,
99 json.toString().length() - 1);
Michael Hanl50f9e522015-09-25 12:38:17 +0200100 customVars.clear();
101 return jsonString;
102 }
103
104 @Override
abcpro1136ff592022-11-07 18:25:03 +0000105 public void filter (ContainerRequestContext request) {
Michael Hanl50f9e522015-09-25 12:38:17 +0200106 if (ENABLED) {
margaretha35e1ca22023-11-16 22:00:01 +0100107 // try {
108 // TokenContext context;
109 // SecurityContext securityContext = request.getSecurityContext();
110 // if (securityContext != null) {
111 // context = (TokenContext) securityContext.getUserPrincipal();
112 //
113 // if (context.getUsername() != null){
114 // // since this is cached, not very expensive!
115 // User user = authenticationManager.getUser(context.getUsername());
116 // Userdata data = authenticationManager
117 // .getUserData(user, UserSettingProcessor.class);
118 // if ((Boolean) data.get(Attributes.COLLECT_AUDITING_DATA))
119 // customVars.put("username", context.getUsername());
120 // }
121 // }
122 // }
123 // catch (KustvaktException e) {
124 // //do nothing
125 // }
Michael Hanl50f9e522015-09-25 12:38:17 +0200126 send(request);
127 }
Michael Hanl50f9e522015-09-25 12:38:17 +0200128 }
129}