package org.rx.util;
import lombok.SneakyThrows;
import okhttp3.HttpUrl;
import org.openqa.selenium.Cookie;
import org.rx.core.NQuery;
import org.rx.socks.http.HttpClient;
import java.util.Date;
import java.util.Set;
import static org.rx.core.Contract.require;
public class CookieExtend {
public static void saveFromResponse(String url, Set<Cookie> cookieSet) {
require(url, cookieSet);
HttpClient.CookieContainer.getCookieJar().saveFromResponse(HttpUrl.get(url), NQuery.of(cookieSet).select(p -> {
String domain = p.getDomain();
if (domain.startsWith(".")) {
domain = domain.substring(1);
}
okhttp3.Cookie.Builder builder = new okhttp3.Cookie.Builder().name(p.getName()).value(p.getValue())
.domain(domain)
.path(p.getPath());
if (p.getExpiry() != null) {
builder = builder.expiresAt(p.getExpiry().getTime());
}
if (p.isSecure()) {
builder = builder.secure();
}
if (p.isHttpOnly()) {
builder = builder.httpOnly();
}
return fill(builder.build(), p.getDomain());
}).toList());
}
@SneakyThrows
private static okhttp3.Cookie fill(okhttp3.Cookie cookie, String domain) {
// Field field = Cookie.class.getDeclaredField("domain");
// field.setAccessible(true);
// field.set(cookie, domain);
return cookie;
}
public static Set<org.openqa.selenium.Cookie> loadForRequest(String url) {
require(url);
return NQuery.of(HttpClient.CookieContainer.getCookieJar().loadForRequest(HttpUrl.get(url)))
.select(p -> new org.openqa.selenium.Cookie(p.name(), p.value(), p.domain(), p.path(), new Date(p.expiresAt()), p.secure(), p.httpOnly())).toSet();
}
}
HttpServletRequest request = getCurrentRequest();
if (request == null) {
return supplier.invoke(key);
}
v = request.getAttribute(k);
if (v == null) {
request.setAttribute(k, v = supplier.invoke(k));
}