blob: 22b43f07a792ece93643acd7bbac0b866cf996ec [file] [log] [blame]
Michael Hanl8ee31112016-07-21 14:10:24 +02001package de.ids_mannheim.korap.web.filter;
2
margaretha34954472018-10-24 20:05:17 +02003import java.security.Principal;
Michael Hanl8ee31112016-07-21 14:10:24 +02004
abcpro12cb86c62022-11-07 18:46:36 +00005import javax.annotation.Priority;
6import javax.ws.rs.Priorities;
abcpro1136ff592022-11-07 18:25:03 +00007import javax.ws.rs.container.ContainerRequestContext;
8import javax.ws.rs.container.ContainerRequestFilter;
Michael Hanl8ee31112016-07-21 14:10:24 +02009import javax.ws.rs.core.Context;
abcpro102984072022-11-07 19:55:21 +000010import javax.ws.rs.core.SecurityContext;
Michael Hanl8ee31112016-07-21 14:10:24 +020011import javax.ws.rs.core.UriInfo;
margarethaade7d4a2017-07-20 19:53:35 +020012
margarethabdde7f42023-02-10 08:24:03 +010013import org.glassfish.jersey.server.ContainerRequest;
margarethaade7d4a2017-07-20 19:53:35 +020014import org.springframework.beans.factory.annotation.Autowired;
15import org.springframework.stereotype.Component;
16
margaretha34954472018-10-24 20:05:17 +020017import de.ids_mannheim.korap.config.KustvaktConfiguration;
18import de.ids_mannheim.korap.constant.TokenType;
19import de.ids_mannheim.korap.security.context.KustvaktContext;
20import de.ids_mannheim.korap.security.context.TokenContext;
21import de.ids_mannheim.korap.user.User;
22import de.ids_mannheim.korap.utils.TimeUtils;
Michael Hanl8ee31112016-07-21 14:10:24 +020023
24/**
25 * Created by hanl on 7/15/14.
26 */
margarethaade7d4a2017-07-20 19:53:35 +020027@Component
abcpro12cb86c62022-11-07 18:46:36 +000028@Priority(Priorities.AUTHENTICATION)
abcpro1136ff592022-11-07 18:25:03 +000029public class DemoUserFilter implements ContainerRequestFilter {
Michael Hanl8ee31112016-07-21 14:10:24 +020030
31 @Context
32 UriInfo info;
margarethaade7d4a2017-07-20 19:53:35 +020033 @Autowired
34 private KustvaktConfiguration config;
Michael Hanl8ee31112016-07-21 14:10:24 +020035
36
37 @Override
abcpro1136ff592022-11-07 18:25:03 +000038 public void filter (ContainerRequestContext request) {
abcpro1a94a0422022-11-07 20:07:23 +000039 String host = request.getHeaderString(ContainerRequest.HOST);
40 String ua = request.getHeaderString(ContainerRequest.USER_AGENT);
Michael Hanl8ee31112016-07-21 14:10:24 +020041 String authentication = request
abcpro1a94a0422022-11-07 20:07:23 +000042 .getHeaderString(ContainerRequest.AUTHORIZATION);
Michael Hanl8ee31112016-07-21 14:10:24 +020043
44 // means that this is the public service
45 if (authentication == null || authentication.isEmpty()) {
46 Principal pr = null;
abcpro102984072022-11-07 19:55:21 +000047 SecurityContext securityContext = request.getSecurityContext();
48 if (securityContext != null) {
49 pr = securityContext.getUserPrincipal();
Michael Hanl8ee31112016-07-21 14:10:24 +020050 }
51 if (pr == null)
52 request.setSecurityContext(new KustvaktContext(
53 createShorterToken(host, ua)));
Michael Hanl8ee31112016-07-21 14:10:24 +020054 }
Michael Hanl8ee31112016-07-21 14:10:24 +020055 }
56
57
58 private TokenContext createShorterToken (String host, String agent) {
59 User demo = User.UserFactory.getDemoUser();
60 TokenContext c = new TokenContext();
61 c.setUsername(demo.getUsername());
62 c.setHostAddress(host);
63 c.setUserAgent(agent);
margarethabdde7f42023-02-10 08:24:03 +010064 c.setExpirationTime(
65 TimeUtils.plusSeconds(config.getShortTokenTTL()).getMillis());
margaretha20f31232018-07-09 17:49:39 +020066 c.setTokenType(TokenType.BASIC);
Michael Hanl8ee31112016-07-21 14:10:24 +020067 return c;
68 }
Michael Hanl8ee31112016-07-21 14:10:24 +020069}