package io.jenkins.plugins.audit.filter;

import hudson.Extension;
import hudson.init.Initializer;
import hudson.model.User;
import hudson.util.PluginServletFilter;
import io.jenkins.plugins.audit.RequestContext;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;

@Extension
public class RequestContextFilter extends PluginServletFilter {

    /**
     * Registering the filter
     */
    @Initializer
    public static void init() throws ServletException {
        PluginServletFilter.addFilter(new RequestContextFilter());
    }

    /**
     * The filter through which the flow passes is used to set the context level attributes
     */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        User user = User.current();
        if(user != null){
            RequestContext.setUserId(user.getId());
        }
        RequestContext.setIpAddress(request.getRemoteAddr());
        RequestContext.setNodeName(request.getLocalName());
        //RequestContext.setRequestUri(request.getRequestURI());
        chain.doFilter(request, response);
        RequestContext.clear();
    }
}