blob: 330ece2c4e778a4841665c54ccac6f99afc88ded [file] [log] [blame]
package de.ids_mannheim.korap.web.filter;
import java.security.Principal;
import org.glassfish.jersey.server.ContainerRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import de.ids_mannheim.korap.config.KustvaktConfiguration;
import de.ids_mannheim.korap.constant.TokenType;
import de.ids_mannheim.korap.security.context.KustvaktContext;
import de.ids_mannheim.korap.security.context.TokenContext;
import de.ids_mannheim.korap.user.User;
import de.ids_mannheim.korap.utils.TimeUtils;
import jakarta.annotation.Priority;
import jakarta.ws.rs.Priorities;
import jakarta.ws.rs.container.ContainerRequestContext;
import jakarta.ws.rs.container.ContainerRequestFilter;
import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.SecurityContext;
import jakarta.ws.rs.core.UriInfo;
/**
* Created by hanl on 7/15/14.
*/
@Component
@Priority(Priorities.AUTHENTICATION)
public class DemoUserFilter implements ContainerRequestFilter {
@Context
UriInfo info;
@Autowired
private KustvaktConfiguration config;
@Override
public void filter (ContainerRequestContext request) {
String host = request.getHeaderString(ContainerRequest.HOST);
String ua = request.getHeaderString(ContainerRequest.USER_AGENT);
String authentication = request
.getHeaderString(ContainerRequest.AUTHORIZATION);
// means that this is the public service
if (authentication == null || authentication.isEmpty()) {
Principal pr = null;
SecurityContext securityContext = request.getSecurityContext();
if (securityContext != null) {
pr = securityContext.getUserPrincipal();
}
if (pr == null)
request.setSecurityContext(new KustvaktContext(
createShorterToken(host, ua)));
}
}
private TokenContext createShorterToken (String host, String agent) {
User demo = User.UserFactory.getDemoUser();
TokenContext c = new TokenContext();
c.setUsername(demo.getUsername());
c.setHostAddress(host);
c.setUserAgent(agent);
c.setExpirationTime(
TimeUtils.plusSeconds(config.getShortTokenTTL()).getMillis());
c.setTokenType(TokenType.BASIC);
return c;
}
}