blob: 88961f289b8e1be79d65bd369060ceb80d704d66 [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
45 public PiwikFilter () {
margaretha894a7d72017-11-08 19:24:20 +010046// controller = BeansFactory.getKustvaktContext()
47// .getAuthenticationManager();
abcpro1d912a2c2022-11-07 17:10:50 +000048 ClientConfig clientConfig = new ClientConfig();
Michael Hanl50f9e522015-09-25 12:38:17 +020049 if (jlog.isDebugEnabled())
abcpro1d912a2c2022-11-07 17:10:50 +000050 clientConfig.register(LoggingFeature.class);
51 Client client = ClientBuilder.newClient(clientConfig);
Michael Hanl50f9e522015-09-25 12:38:17 +020052 UriBuilder b = UriBuilder.fromUri(SERVICE);
abcpro1d912a2c2022-11-07 17:10:50 +000053 service = client.target(b.build());
Michael Hanl50f9e522015-09-25 12:38:17 +020054 this.customVars = new HashMap<>();
55 }
56
Michael Hanl8abaf9e2016-05-23 16:46:35 +020057
abcpro1136ff592022-11-07 18:25:03 +000058 private void send (ContainerRequestContext request) {
Michael Hanl50f9e522015-09-25 12:38:17 +020059 Random random = new SecureRandom();
Michael Hanl50f9e522015-09-25 12:38:17 +020060 Locale l = null;
61 if (request.getAcceptableLanguages() != null)
62 l = request.getAcceptableLanguages().get(0);
63 try {
Michael Hanl8abaf9e2016-05-23 16:46:35 +020064 service.path("piwik/piwik.php")
65 .queryParam("idsite", "2")
Michael Hanl7d925612016-01-28 16:59:30 +010066 .queryParam("rec", "1")
Michael Hanl50f9e522015-09-25 12:38:17 +020067 //todo check for empty container
68 .queryParam("_cvar", translateCustomData())
abcpro1a94a0422022-11-07 20:07:23 +000069 .queryParam("cip", request.getHeaderString("Host"))
Michael Hanl50f9e522015-09-25 12:38:17 +020070 .queryParam("cookie", "false")
71 .queryParam("r", String.valueOf(random.nextDouble()))
72 .queryParam("action_name",
abcpro196687242022-11-07 20:00:19 +000073 request.getUriInfo().getRequestUri().toASCIIString())
abcpro1241bc4f2022-11-07 20:13:57 +000074 .request()
abcpro18e5ff512022-11-07 17:27:13 +000075 .accept("text/html")
abcpro1a94a0422022-11-07 20:07:23 +000076 .header("Host", request.getHeaderString("Host"))
77 .header("User-Agent", request.getHeaderString("User-Agent"))
Michael Hanl50f9e522015-09-25 12:38:17 +020078 .acceptLanguage(l).method("GET");
Michael Hanl8abaf9e2016-05-23 16:46:35 +020079 }
80 catch (Exception e) {
Michael Hanl50f9e522015-09-25 12:38:17 +020081 // do nothing if piwik not available!
82 }
83 }
84
Michael Hanl8abaf9e2016-05-23 16:46:35 +020085
86 private String translateCustomData () {
Michael Hanl50f9e522015-09-25 12:38:17 +020087 final Map<String, List<String>> customVariables = new HashMap<String, List<String>>();
88 int i = 0;
Michael Hanl8abaf9e2016-05-23 16:46:35 +020089 for (final Map.Entry<String, String> entry : this.customVars.entrySet()) {
Michael Hanl50f9e522015-09-25 12:38:17 +020090 i++;
91 final List<String> list = new ArrayList<String>();
92 list.add(entry.getKey());
93 list.add(entry.getValue());
94 customVariables.put(Integer.toString(i), list);
95 }
96
97 final JSONArray json = new JSONArray();
98 json.add(customVariables);
99
100 // remove unnecessary parent square brackets from JSON-string
Michael Hanl8abaf9e2016-05-23 16:46:35 +0200101 String jsonString = json.toString().substring(1,
102 json.toString().length() - 1);
Michael Hanl50f9e522015-09-25 12:38:17 +0200103 customVars.clear();
104 return jsonString;
105 }
106
Michael Hanl8abaf9e2016-05-23 16:46:35 +0200107
Michael Hanl50f9e522015-09-25 12:38:17 +0200108 @Override
abcpro1136ff592022-11-07 18:25:03 +0000109 public void filter (ContainerRequestContext request) {
Michael Hanl50f9e522015-09-25 12:38:17 +0200110 if (ENABLED) {
margarethab156f882023-05-19 14:01:03 +0200111// try {
112// TokenContext context;
113// SecurityContext securityContext = request.getSecurityContext();
114// if (securityContext != null) {
115// context = (TokenContext) securityContext.getUserPrincipal();
116//
117// if (context.getUsername() != null){
118// // since this is cached, not very expensive!
119// User user = authenticationManager.getUser(context.getUsername());
120// Userdata data = authenticationManager
121// .getUserData(user, UserSettingProcessor.class);
122// if ((Boolean) data.get(Attributes.COLLECT_AUDITING_DATA))
123// customVars.put("username", context.getUsername());
124// }
125// }
126// }
127// catch (KustvaktException e) {
128// //do nothing
129// }
Michael Hanl50f9e522015-09-25 12:38:17 +0200130 send(request);
131 }
Michael Hanl50f9e522015-09-25 12:38:17 +0200132 }
133}