package com.github.dreamhead.moco.extractor;
import com.github.dreamhead.moco.HttpRequest;
import com.github.dreamhead.moco.HttpRequestExtractor;
import com.github.dreamhead.moco.RequestExtractor;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableMap;
import io.netty.handler.codec.http.cookie.Cookie;
import io.netty.handler.codec.http.cookie.ServerCookieDecoder;
import java.util.Set;
import static com.google.common.base.Optional.absent;
import static com.google.common.base.Optional.of;
import static com.google.common.net.HttpHeaders.COOKIE;
public class CookiesRequestExtractor extends HttpRequestExtractor<ImmutableMap<String, String>> {
private final RequestExtractor<String[]> extractor = new HeaderRequestExtractor(COOKIE);
@Override
protected Optional<ImmutableMap<String, String>> doExtract(final HttpRequest request) {
Optional<String[]> cookieString = extractor.extract(request);
if (!cookieString.isPresent()) {
return absent();
}
return of(doExtractCookies(cookieString.get()));
}
private static ImmutableMap<String, String> doExtractCookies(final String[] cookieStrings) {
ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
for (String cookie : cookieStrings) {
Set<Cookie> decodeCookies = ServerCookieDecoder.STRICT.decode(cookie);
for (Cookie decodeCookie : decodeCookies) {
builder.put(decodeCookie.name(), decodeCookie.value());
}
}
return builder.build();
}
}