package handlers.lgtm;
import com.github.masahitojp.botan.Robot;
import com.github.masahitojp.botan.handler.BotanMessageHandlers;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
@SuppressWarnings("unused")
public class LGTMHandlers implements BotanMessageHandlers {
private static Logger log = LoggerFactory.getLogger(LGTMHandlers.class);
private static String ERROR_PREFIX = "LGTM image request failed : ";
@Override
public final void register(final Robot robot) {
robot.respond(
"(?i)lgtm\\z",
"fetching an image from www.lgtm.in.",
message -> {
final OkHttpClient client = new OkHttpClient();
final String url = "https://www.lgtm.in/g";
final Request request = new Request.Builder()
.url(url)
.header("Accept", "application/json")
.build();
try {
// 自己証明書対応
final TrustManager[] trustManagers = new TrustManager[]{
new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}
@Override
public X509Certificate[] getAcceptedIssuers() {return null;}
}
};
final SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustManagers, new java.security.SecureRandom());
final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
// リクエスト送信
final Response response = client
.setSslSocketFactory(sslSocketFactory)
.newCall(request)
.execute();
if (response.isSuccessful()) {
final String src = response.body().string();
final JsonObject jsonObject = new Gson().fromJson(src, JsonObject.class);
final String imageUrl = jsonObject.get("imageUrl").getAsString();
message.reply(imageUrl);
} else {
message.reply(ERROR_PREFIX + String.format("http request failed (%d)", response.code()));
}
} catch (Exception e) {
log.warn(e.getMessage());
message.reply(ERROR_PREFIX + e.getMessage());
}
}
);
}
}