blob: 300c3da7e9fd6b792b703a4cddd0acbba4aefb7d [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
margarethabdde7f42023-02-10 08:24:03 +01005import org.glassfish.jersey.server.ContainerRequest;
margarethaade7d4a2017-07-20 19:53:35 +02006import org.springframework.beans.factory.annotation.Autowired;
7import org.springframework.stereotype.Component;
8
margaretha34954472018-10-24 20:05:17 +02009import de.ids_mannheim.korap.config.KustvaktConfiguration;
10import de.ids_mannheim.korap.constant.TokenType;
11import de.ids_mannheim.korap.security.context.KustvaktContext;
12import de.ids_mannheim.korap.security.context.TokenContext;
13import de.ids_mannheim.korap.user.User;
14import de.ids_mannheim.korap.utils.TimeUtils;
margarethadb5da372023-09-01 11:02:52 +020015import jakarta.annotation.Priority;
margaretha96c309d2023-08-16 12:24:12 +020016import jakarta.ws.rs.Priorities;
17import jakarta.ws.rs.container.ContainerRequestContext;
18import jakarta.ws.rs.container.ContainerRequestFilter;
19import jakarta.ws.rs.core.Context;
20import jakarta.ws.rs.core.SecurityContext;
21import jakarta.ws.rs.core.UriInfo;
Michael Hanl8ee31112016-07-21 14:10:24 +020022
23/**
24 * Created by hanl on 7/15/14.
25 */
margarethaade7d4a2017-07-20 19:53:35 +020026@Component
abcpro12cb86c62022-11-07 18:46:36 +000027@Priority(Priorities.AUTHENTICATION)
abcpro1136ff592022-11-07 18:25:03 +000028public class DemoUserFilter implements ContainerRequestFilter {
Michael Hanl8ee31112016-07-21 14:10:24 +020029
30 @Context
31 UriInfo info;
margarethaade7d4a2017-07-20 19:53:35 +020032 @Autowired
33 private KustvaktConfiguration config;
Michael Hanl8ee31112016-07-21 14:10:24 +020034
Michael Hanl8ee31112016-07-21 14:10:24 +020035 @Override
abcpro1136ff592022-11-07 18:25:03 +000036 public void filter (ContainerRequestContext request) {
abcpro1a94a0422022-11-07 20:07:23 +000037 String host = request.getHeaderString(ContainerRequest.HOST);
38 String ua = request.getHeaderString(ContainerRequest.USER_AGENT);
Michael Hanl8ee31112016-07-21 14:10:24 +020039 String authentication = request
abcpro1a94a0422022-11-07 20:07:23 +000040 .getHeaderString(ContainerRequest.AUTHORIZATION);
Michael Hanl8ee31112016-07-21 14:10:24 +020041
42 // means that this is the public service
43 if (authentication == null || authentication.isEmpty()) {
44 Principal pr = null;
abcpro102984072022-11-07 19:55:21 +000045 SecurityContext securityContext = request.getSecurityContext();
46 if (securityContext != null) {
47 pr = securityContext.getUserPrincipal();
Michael Hanl8ee31112016-07-21 14:10:24 +020048 }
49 if (pr == null)
margaretha35e1ca22023-11-16 22:00:01 +010050 request.setSecurityContext(
51 new KustvaktContext(createShorterToken(host, ua)));
Michael Hanl8ee31112016-07-21 14:10:24 +020052 }
Michael Hanl8ee31112016-07-21 14:10:24 +020053 }
54
Michael Hanl8ee31112016-07-21 14:10:24 +020055 private TokenContext createShorterToken (String host, String agent) {
56 User demo = User.UserFactory.getDemoUser();
57 TokenContext c = new TokenContext();
58 c.setUsername(demo.getUsername());
59 c.setHostAddress(host);
60 c.setUserAgent(agent);
margarethabdde7f42023-02-10 08:24:03 +010061 c.setExpirationTime(
62 TimeUtils.plusSeconds(config.getShortTokenTTL()).getMillis());
margaretha20f31232018-07-09 17:49:39 +020063 c.setTokenType(TokenType.BASIC);
Michael Hanl8ee31112016-07-21 14:10:24 +020064 return c;
65 }
Michael Hanl8ee31112016-07-21 14:10:24 +020066}