package restx.specs;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import restx.factory.Component;
import restx.security.RestxSessionCookieDescriptor;
import restx.security.Signer;
/**
* @author fcamblor
*/
@Component
public class WhenRestxSessionHeaderLoader implements RestxSpecLoader.WhenHeaderLoader {
private static final Logger logger = LoggerFactory.getLogger(WhenRestxSessionHeaderLoader.class);
private final RestxSessionCookieDescriptor restxSessionCookieDescriptor;
private final Signer signer;
public WhenRestxSessionHeaderLoader(RestxSessionCookieDescriptor restxSessionCookieDescriptor, Signer signer) {
this.restxSessionCookieDescriptor = restxSessionCookieDescriptor;
this.signer = signer;
}
@Override
public String detectionPattern() {
return "$RestxSession:";
}
@Override
public void loadHeader(String headerValue, WhenHttpRequest.Builder whenHttpRequestBuilder) {
String sessionContent = headerValue.trim();
if(whenHttpRequestBuilder.containsCookie(restxSessionCookieDescriptor.getCookieName())
|| whenHttpRequestBuilder.containsCookie(restxSessionCookieDescriptor.getCookieSignatureName())){
logger.warn("Restx session cookie will be overwritten by {} special header !", detectionPattern());
}
whenHttpRequestBuilder.addCookie(restxSessionCookieDescriptor.getCookieName(), sessionContent);
whenHttpRequestBuilder.addCookie(restxSessionCookieDescriptor.getCookieSignatureName(), signer.sign(sessionContent));
}
}