/*     */ package com.picc.grab.controller.login;
/*     */ 
/*     */ import java.io.BufferedReader;
/*     */ import java.io.BufferedWriter;
/*     */ import java.io.IOException;
/*     */ import java.io.InputStream;
/*     */ import java.io.InputStreamReader;
/*     */ import java.io.OutputStreamWriter;
/*     */ import java.net.HttpURLConnection;
/*     */ import java.net.InetAddress;
/*     */ import java.net.Socket;
/*     */ import java.net.URL;
/*     */ import java.security.MessageDigest;
/*     */ import java.security.NoSuchAlgorithmException;
/*     */ import java.util.ArrayList;
/*     */ import java.util.HashMap;
/*     */ 
/*     */ public class GeetestLib {
/*  19 */   protected final String verName = "3.2.0";
/*  20 */   protected final String sdkLang = "java";
/*     */   
/*  22 */   protected final String apiUrl = "http://api.geetest.com";
/*  23 */   protected final String baseUrl = "api.geetest.com";
/*     */   
/*  25 */   protected final String registerUrl = "/register.php";
/*  26 */   protected final String validateUrl = "/validate.php";
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static final String fn_geetest_challenge = "geetest_challenge";
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static final String fn_geetest_validate = "geetest_validate";
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static final String fn_geetest_seccode = "geetest_seccode";
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*  46 */   private String captchaId = "";
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*  52 */   private String privateKey = "";
/*     */   
/*  54 */   private String userId = "";
/*     */   
/*  56 */   private String responseStr = "";
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public boolean debugCode = true;
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*  66 */   public String gtServerStatusSessionKey = "gt_server_status";
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public GeetestLib(String captchaId, String privateKey) {
/*  75 */     this.captchaId = captchaId;
/*  76 */     this.privateKey = privateKey;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public String getResponseStr() {
/*  85 */     return this.responseStr;
/*     */   }
/*     */   
/*     */   public String getVersionInfo() {
/*  89 */     return "3.2.0";
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   private String getFailPreProcessRes() {
/*  99 */     Long rnd1 = Long.valueOf(Math.round(Math.random() * 100.0D));
/* 100 */     Long rnd2 = Long.valueOf(Math.round(Math.random() * 100.0D));
/* 101 */     String md5Str1 = md5Encode(rnd1 + "");
/* 102 */     String md5Str2 = md5Encode(rnd2 + "");
/* 103 */     String challenge = md5Str1 + md5Str2.substring(0, 2);
/*     */     
/* 105 */     return String.format("{\"success\":%s,\"gt\":\"%s\",\"challenge\":\"%s\"}", new Object[] {
/* 106 */           Integer.valueOf(0), this.captchaId, challenge
/*     */         });
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   private String getSuccessPreProcessRes(String challenge) {
/* 116 */     gtlog("challenge:" + challenge);
/* 117 */     return String.format("{\"success\":%s,\"gt\":\"%s\",\"challenge\":\"%s\"}", new Object[] {
/* 118 */           Integer.valueOf(1), this.captchaId, challenge
/*     */         });
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public int preProcess() {
/* 129 */     if (registerChallenge() != 1) {
/*     */       
/* 131 */       this.responseStr = getFailPreProcessRes();
/* 132 */       return 0;
/*     */     } 
/*     */     
/* 135 */     return 1;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public int preProcess(String userid) {
/* 147 */     this.userId = userid;
/* 148 */     return preProcess();
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   private int registerChallenge() {
/*     */     try {
/* 160 */       String GET_URL = "http://api.geetest.com/register.php?gt=" + this.captchaId;
/* 161 */       if (this.userId != "") {
/* 162 */         GET_URL = GET_URL + "&user_id=" + this.userId;
/* 163 */         this.userId = "";
/*     */       } 
/* 165 */       gtlog("GET_URL:" + GET_URL);
/* 166 */       String result_str = readContentFromGet(GET_URL);
/* 167 */       gtlog("register_result:" + result_str);
/* 168 */       if (32 == result_str.length()) {
/*     */         
/* 170 */         this.responseStr = getSuccessPreProcessRes(md5Encode(result_str + this.privateKey));
/*     */         
/* 172 */         return 1;
/*     */       } 
/* 174 */       gtlog("gtServer register challenge failed");
/* 175 */       return 0;
/*     */     }
/* 177 */     catch (Exception e) {
/* 178 */       gtlog("exception:register api");
/*     */       
/* 180 */       return 0;
/*     */     } 
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   private String readContentFromGet(String getURL) throws IOException {
/* 192 */     URL getUrl = new URL(getURL);
/*     */     
/* 194 */     HttpURLConnection connection = (HttpURLConnection)getUrl.openConnection();
/*     */     
/* 196 */     connection.setConnectTimeout(2000);
/* 197 */     connection.setReadTimeout(2000);
/*     */ 
/*     */     
/* 200 */     connection.connect();
/*     */ 
/*     */     
/* 203 */     StringBuffer sBuffer = new StringBuffer();
/*     */     
/* 205 */     InputStream inStream = null;
/* 206 */     byte[] buf = new byte[1024];
/* 207 */     inStream = connection.getInputStream(); int n;
/* 208 */     while ((n = inStream.read(buf)) != -1) {
/* 209 */       sBuffer.append(new String(buf, 0, n, "UTF-8"));
/*     */     }
/* 211 */     inStream.close();
/* 212 */     connection.disconnect();
/*     */     
/* 214 */     return sBuffer.toString();
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   protected boolean objIsEmpty(Object gtObj) {
/* 227 */     if (gtObj == null) {
/* 228 */       return true;
/*     */     }
/*     */     
/* 231 */     if (gtObj.toString().trim().length() == 0) {
/* 232 */       return true;
/*     */     }
/*     */     
/* 235 */     return false;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   private boolean resquestIsLegal(String challenge, String validate, String seccode) {
/* 246 */     if (objIsEmpty(challenge)) {
/* 247 */       return false;
/*     */     }
/*     */     
/* 250 */     if (objIsEmpty(validate)) {
/* 251 */       return false;
/*     */     }
/*     */     
/* 254 */     if (objIsEmpty(seccode)) {
/* 255 */       return false;
/*     */     }
/*     */     
/* 258 */     return true;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public int enhencedValidateRequest(String challenge, String validate, String seccode) {
/* 272 */     if (!resquestIsLegal(challenge, validate, seccode)) {
/* 273 */       return 0;
/*     */     }
/* 275 */     gtlog("request legitimate");
/*     */     
/* 277 */     String host = "api.geetest.com";
/* 278 */     String path = "/validate.php";
/* 279 */     int port = 80;
/* 280 */     (new Object[2])[0] = seccode; getClass(); getClass(); String query = String.format("seccode=%s&sdk=%s", new Object[] { null, "java" + "_" + "3.2.0" });
/*     */     
/* 282 */     String response = "";
/*     */     
/* 284 */     if (this.userId != "") {
/* 285 */       query = query + "&user_id=" + this.userId;
/* 286 */       this.userId = "";
/*     */     } 
/* 288 */     gtlog(query);
/*     */     try {
/* 290 */       if (validate.length() <= 0) {
/* 291 */         return 0;
/*     */       }
/*     */       
/* 294 */       if (!checkResultByPrivate(challenge, validate)) {
/* 295 */         return 0;
/*     */       }
/* 297 */       gtlog("checkResultByPrivate");
/* 298 */       response = postValidate(host, path, query, port);
/*     */       
/* 300 */       gtlog("response: " + response);
/* 301 */     } catch (Exception e) {
/* 302 */       e.printStackTrace();
/*     */     } 
/*     */     
/* 305 */     gtlog("md5: " + md5Encode(seccode));
/*     */     
/* 307 */     if (response.equals(md5Encode(seccode))) {
/* 308 */       return 1;
/*     */     }
/* 310 */     return 0;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public int enhencedValidateRequest(String challenge, String validate, String seccode, String userid) {
/* 325 */     this.userId = userid;
/* 326 */     return enhencedValidateRequest(challenge, validate, seccode);
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public int failbackValidateRequest(String challenge, String validate, String seccode) {
/* 339 */     gtlog("in failback validate");
/*     */     
/* 341 */     if (!resquestIsLegal(challenge, validate, seccode)) {
/* 342 */       return 0;
/*     */     }
/* 344 */     gtlog("request legitimate");
/*     */     
/* 346 */     String[] validateStr = validate.split("_");
/* 347 */     String encodeAns = validateStr[0];
/* 348 */     String encodeFullBgImgIndex = validateStr[1];
/* 349 */     String encodeImgGrpIndex = validateStr[2];
/*     */     
/* 351 */     gtlog(String.format("encode----challenge:%s--ans:%s,bg_idx:%s,grp_idx:%s", new Object[] { challenge, encodeAns, encodeFullBgImgIndex, encodeImgGrpIndex }));
/*     */ 
/*     */ 
/*     */     
/* 355 */     int decodeAns = decodeResponse(challenge, encodeAns);
/* 356 */     int decodeFullBgImgIndex = decodeResponse(challenge, encodeFullBgImgIndex);
/* 357 */     int decodeImgGrpIndex = decodeResponse(challenge, encodeImgGrpIndex);
/*     */     
/* 359 */     gtlog(String.format("decode----ans:%s,bg_idx:%s,grp_idx:%s", new Object[] { Integer.valueOf(decodeAns), 
/* 360 */             Integer.valueOf(decodeFullBgImgIndex), Integer.valueOf(decodeImgGrpIndex) }));
/*     */     
/* 362 */     int validateResult = validateFailImage(decodeAns, decodeFullBgImgIndex, decodeImgGrpIndex);
/*     */     
/* 364 */     return validateResult;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   private int validateFailImage(int ans, int full_bg_index, int img_grp_index) {
/* 378 */     int thread = 3;
/*     */     
/* 380 */     String full_bg_name = md5Encode(full_bg_index + "").substring(0, 9);
/* 381 */     String bg_name = md5Encode(img_grp_index + "").substring(10, 19);
/*     */     
/* 383 */     String answer_decode = "";
/*     */ 
/*     */     
/* 386 */     for (int i = 0; i < 9; i++) {
/* 387 */       if (i % 2 == 0) {
/* 388 */         answer_decode = answer_decode + full_bg_name.charAt(i);
/* 389 */       } else if (i % 2 == 1) {
/* 390 */         answer_decode = answer_decode + bg_name.charAt(i);
/*     */       } else {
/* 392 */         gtlog("exception");
/*     */       } 
/*     */     } 
/*     */     
/* 396 */     String x_decode = answer_decode.substring(4, answer_decode.length());
/*     */     
/* 398 */     int x_int = Integer.valueOf(x_decode, 16).intValue();
/*     */     
/* 400 */     int result = x_int % 200;
/* 401 */     if (result < 40) {
/* 402 */       result = 40;
/*     */     }
/*     */     
/* 405 */     if (Math.abs(ans - result) <= 3) {
/* 406 */       return 1;
/*     */     }
/* 408 */     return 0;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   private int decodeResponse(String challenge, String string) {
/* 423 */     if (string.length() > 100) {
/* 424 */       return 0;
/*     */     }
/*     */     
/* 427 */     int[] shuzi = { 1, 2, 5, 10, 50 };
/* 428 */     String chongfu = "";
/* 429 */     HashMap<String, Integer> key = new HashMap<>();
/* 430 */     int count = 0;
/*     */     
/* 432 */     for (int i = 0; i < challenge.length(); i++) {
/* 433 */       String item = challenge.charAt(i) + "";
/*     */       
/* 435 */       if (chongfu.contains(item) != true) {
/*     */ 
/*     */         
/* 438 */         int value = shuzi[count % 5];
/* 439 */         chongfu = chongfu + item;
/* 440 */         count++;
/* 441 */         key.put(item, Integer.valueOf(value));
/*     */       } 
/*     */     } 
/*     */     
/* 445 */     int res = 0;
/*     */     
/* 447 */     for (int j = 0; j < string.length(); j++) {
/* 448 */       res += ((Integer)key.get(string.charAt(j) + "")).intValue();
/*     */     }
/*     */     
/* 451 */     res -= decodeRandBase(challenge);
/*     */     
/* 453 */     return res;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   private int decodeRandBase(String challenge) {
/* 465 */     String base = challenge.substring(32, 34);
/* 466 */     ArrayList<Integer> tempArray = new ArrayList<>();
/*     */     
/* 468 */     for (int i = 0; i < base.length(); i++) {
/* 469 */       char tempChar = base.charAt(i);
/* 470 */       Integer tempAscii = Integer.valueOf(tempChar);
/*     */       
/* 472 */       Integer result = Integer.valueOf((tempAscii.intValue() > 57) ? (tempAscii.intValue() - 87) : (tempAscii
/* 473 */           .intValue() - 48));
/*     */       
/* 475 */       tempArray.add(result);
/*     */     } 
/*     */     
/* 478 */     int decodeRes = ((Integer)tempArray.get(0)).intValue() * 36 + ((Integer)tempArray.get(1)).intValue();
/* 479 */     return decodeRes;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public void gtlog(String message) {
/* 491 */     if (this.debugCode) {
/* 492 */       System.out.println("gtlog: " + message);
/*     */     }
/*     */   }
/*     */   
/*     */   protected boolean checkResultByPrivate(String challenge, String validate) {
/* 497 */     String encodeStr = md5Encode(this.privateKey + "geetest" + challenge);
/* 498 */     return validate.equals(encodeStr);
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   protected String postValidate(String host, String path, String data, int port) throws Exception {
/* 513 */     String response = "error";
/*     */     
/* 515 */     InetAddress addr = InetAddress.getByName(host);
/* 516 */     Socket socket = new Socket(addr, port);
/*     */     
/* 518 */     BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF8"));
/* 519 */     wr.write("POST " + path + " HTTP/1.0\r\n");
/* 520 */     wr.write("Host: " + host + "\r\n");
/* 521 */     wr.write("Content-Type: application/x-www-form-urlencoded\r\n");
/* 522 */     wr.write("Content-Length: " + data.length() + "\r\n");
/* 523 */     wr.write("\r\n");
/*     */ 
/*     */     
/* 526 */     wr.write(data);
/* 527 */     wr.flush();
/*     */ 
/*     */ 
/*     */     
/* 531 */     BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
/*     */     String line;
/* 533 */     while ((line = rd.readLine()) != null) {
/* 534 */       response = line;
/*     */     }
/* 536 */     wr.close();
/* 537 */     rd.close();
/* 538 */     socket.close();
/* 539 */     return response;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   private String md5Encode(String plainText) {
/* 551 */     String re_md5 = new String();
/*     */     try {
/* 553 */       MessageDigest md = MessageDigest.getInstance("MD5");
/* 554 */       md.update(plainText.getBytes());
/* 555 */       byte[] b = md.digest();
/*     */       
/* 557 */       StringBuffer buf = new StringBuffer("");
/* 558 */       for (int offset = 0; offset < b.length; offset++) {
/* 559 */         int i = b[offset];
/* 560 */         if (i < 0)
/* 561 */           i += 256; 
/* 562 */         if (i < 16)
/* 563 */           buf.append("0"); 
/* 564 */         buf.append(Integer.toHexString(i));
/*     */       } 
/*     */       
/* 567 */       re_md5 = buf.toString();
/*     */     }
/* 569 */     catch (NoSuchAlgorithmException e) {
/* 570 */       e.printStackTrace();
/*     */     } 
/* 572 */     return re_md5;
/*     */   }
/*     */ }


/* Location:              C:\Users\Administrator\Desktop\ROOT\WEB-INF\classes\!\com\picc\grab\controller\login\GeetestLib.class
 * Java compiler version: 8 (52.0)
 * JD-Core Version:       1.1.3
 */