MainServer.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. package com.vvvtimes.server;
  2. import com.vvvtimes.JrebelUtil.JrebelSign;
  3. import com.vvvtimes.util.rsasign;
  4. import net.sf.json.JSONObject;
  5. import java.io.IOException;
  6. import java.text.SimpleDateFormat;
  7. import java.util.*;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import org.eclipse.jetty.server.Request;
  12. import org.eclipse.jetty.server.Server;
  13. import org.eclipse.jetty.server.handler.AbstractHandler;
  14. public class MainServer extends AbstractHandler {
  15. public static Map<String, String> parseArguments(String[] args) {
  16. Map<String, String> params = new HashMap<String, String>();
  17. String option = null;
  18. for (final String arg : args) {
  19. if (arg.charAt(0) == '-') {
  20. if (arg.length() < 2) {
  21. throw new IllegalArgumentException("Error at argument " + arg);
  22. }
  23. option = arg.substring(1);
  24. } else {
  25. params.put(option, arg);
  26. }
  27. }
  28. return params;
  29. }
  30. public static void main(String[] args) throws Exception {
  31. Map<String, String> arguments = parseArguments(args);
  32. String port = arguments.get("p");
  33. if (port == null || !port.matches("\\d+")) {
  34. port = "8081";
  35. }
  36. Server server = new Server(Integer.parseInt(port));
  37. server.setHandler(new MainServer());
  38. server.start();
  39. System.out.println("License Server started at http://localhost:" + port);
  40. System.out.println("JetBrains Activation address was: http://localhost:" + port + "/");
  41. System.out.println("JRebel 7.1 and earlier version Activation address was: http://localhost:" + port + "/{tokenname}, with any email.");
  42. System.out.println("JRebel 2018.1 and later version Activation address was: http://localhost:" + port + "/{guid}(eg:http://localhost:" + port + "/"+ UUID.randomUUID().toString()+"), with any email.");
  43. server.join();
  44. }
  45. public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
  46. throws IOException, ServletException {
  47. System.out.println(target);
  48. if (target.equals("/")) {
  49. indexHandler(target, baseRequest, request, response);
  50. } else if (target.equals("/jrebel/leases")) {
  51. jrebelLeasesHandler(target, baseRequest, request, response);
  52. } else if (target.equals("/jrebel/leases/1")) {
  53. jrebelLeases1Handler(target, baseRequest, request, response);
  54. } else if (target.equals("/agent/leases")) {
  55. jrebelLeasesHandler(target, baseRequest, request, response);
  56. } else if (target.equals("/agent/leases/1")) {
  57. jrebelLeases1Handler(target, baseRequest, request, response);
  58. } else if (target.equals("/jrebel/validate-connection")) {
  59. jrebelValidateHandler(target, baseRequest, request, response);
  60. } else if (target.equals("/rpc/ping.action")) {
  61. pingHandler(target, baseRequest, request, response);
  62. } else if (target.equals("/rpc/obtainTicket.action")) {
  63. obtainTicketHandler(target, baseRequest, request, response);
  64. } else if (target.equals("/rpc/releaseTicket.action")) {
  65. releaseTicketHandler(target, baseRequest, request, response);
  66. } else {
  67. response.setStatus(HttpServletResponse.SC_FORBIDDEN);
  68. }
  69. }
  70. private void jrebelValidateHandler(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException {
  71. response.setContentType("application/json; charset=utf-8");
  72. response.setStatus(HttpServletResponse.SC_OK);
  73. baseRequest.setHandled(true);
  74. String jsonStr = "{\n" +
  75. " \"serverVersion\": \"3.2.4\",\n" +
  76. " \"serverProtocolVersion\": \"1.1\",\n" +
  77. " \"serverGuid\": \"a1b4aea8-b031-4302-b602-670a990272cb\",\n" +
  78. " \"groupType\": \"managed\",\n" +
  79. " \"statusCode\": \"SUCCESS\",\n" +
  80. " \"company\": \"Administrator\",\n" +
  81. " \"canGetLease\": true,\n" +
  82. " \"licenseType\": 1,\n" +
  83. " \"evaluationLicense\": false,\n" +
  84. " \"seatPoolType\": \"standalone\"\n" +
  85. "}\n";
  86. JSONObject jsonObject = JSONObject.fromObject(jsonStr);
  87. String body = jsonObject.toString();
  88. response.getWriter().print(body);
  89. }
  90. private void jrebelLeases1Handler(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException {
  91. response.setContentType("application/json; charset=utf-8");
  92. response.setStatus(HttpServletResponse.SC_OK);
  93. String username = request.getParameter("username");
  94. baseRequest.setHandled(true);
  95. String jsonStr = "{\n" +
  96. " \"serverVersion\": \"3.2.4\",\n" +
  97. " \"serverProtocolVersion\": \"1.1\",\n" +
  98. " \"serverGuid\": \"a1b4aea8-b031-4302-b602-670a990272cb\",\n" +
  99. " \"groupType\": \"managed\",\n" +
  100. " \"statusCode\": \"SUCCESS\",\n" +
  101. " \"msg\": null,\n" +
  102. " \"statusMessage\": null\n" +
  103. "}\n";
  104. JSONObject jsonObject = JSONObject.fromObject(jsonStr);
  105. if (username != null ) {
  106. jsonObject.put("company", username);
  107. }
  108. String body = jsonObject.toString();
  109. response.getWriter().print(body);
  110. }
  111. private void jrebelLeasesHandler(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException {
  112. response.setContentType("application/json; charset=utf-8");
  113. response.setStatus(HttpServletResponse.SC_OK);
  114. String clientRandomness = request.getParameter("randomness");
  115. String username = request.getParameter("username");
  116. String guid = request.getParameter("guid");
  117. System.out.println(((Request) request).getParameters());
  118. boolean offline = Boolean.parseBoolean(request.getParameter("offline"));
  119. String validFrom = "null";
  120. String validUntil = "null";
  121. if (offline) {
  122. String clientTime = request.getParameter("clientTime");
  123. String offlineDays = request.getParameter("offlineDays");
  124. //long clinetTimeUntil = Long.parseLong(clientTime) + Long.parseLong(offlineDays) * 24 * 60 * 60 * 1000;
  125. long clinetTimeUntil = Long.parseLong(clientTime) + 180L * 24 * 60 * 60 * 1000;
  126. validFrom = clientTime;
  127. validUntil = String.valueOf(clinetTimeUntil);
  128. }
  129. baseRequest.setHandled(true);
  130. String jsonStr = "{\n" +
  131. " \"serverVersion\": \"3.2.4\",\n" +
  132. " \"serverProtocolVersion\": \"1.1\",\n" +
  133. " \"serverGuid\": \"a1b4aea8-b031-4302-b602-670a990272cb\",\n" +
  134. " \"groupType\": \"managed\",\n" +
  135. " \"id\": 1,\n" +
  136. " \"licenseType\": 1,\n" +
  137. " \"evaluationLicense\": false,\n" +
  138. " \"signature\": \"OJE9wGg2xncSb+VgnYT+9HGCFaLOk28tneMFhCbpVMKoC/Iq4LuaDKPirBjG4o394/UjCDGgTBpIrzcXNPdVxVr8PnQzpy7ZSToGO8wv/KIWZT9/ba7bDbA8/RZ4B37YkCeXhjaixpmoyz/CIZMnei4q7oWR7DYUOlOcEWDQhiY=\",\n" +
  139. " \"serverRandomness\": \"H2ulzLlh7E0=\",\n" +
  140. " \"seatPoolType\": \"standalone\",\n" +
  141. " \"statusCode\": \"SUCCESS\",\n" +
  142. " \"offline\": " + String.valueOf(offline) + ",\n" +
  143. " \"validFrom\": " + validFrom + ",\n" +
  144. " \"validUntil\": " + validUntil + ",\n" +
  145. " \"company\": \"Administrator\",\n" +
  146. " \"orderId\": \"\",\n" +
  147. " \"zeroIds\": [\n" +
  148. " \n" +
  149. " ],\n" +
  150. " \"licenseValidFrom\": 1490544001000,\n" +
  151. " \"licenseValidUntil\": 1691839999000\n" +
  152. "}";
  153. JSONObject jsonObject = JSONObject.fromObject(jsonStr);
  154. if (clientRandomness == null || username == null || guid == null) {
  155. response.setStatus(HttpServletResponse.SC_FORBIDDEN);
  156. } else {
  157. JrebelSign jrebelSign = new JrebelSign();
  158. jrebelSign.toLeaseCreateJson(clientRandomness, guid, offline, validFrom, validUntil);
  159. String signature = jrebelSign.getSignature();
  160. jsonObject.put("signature", signature);
  161. jsonObject.put("company", username);
  162. String body = jsonObject.toString();
  163. response.getWriter().print(body);
  164. }
  165. }
  166. private void releaseTicketHandler(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException{
  167. response.setContentType("text/html; charset=utf-8");
  168. response.setStatus(HttpServletResponse.SC_OK);
  169. String salt = request.getParameter("salt");
  170. baseRequest.setHandled(true);
  171. if(salt==null){
  172. response.setStatus(HttpServletResponse.SC_FORBIDDEN);
  173. }else{
  174. String xmlContent = "<ReleaseTicketResponse><message></message><responseCode>OK</responseCode><salt>" + salt + "</salt></ReleaseTicketResponse>";
  175. String xmlSignature = rsasign.Sign(xmlContent);
  176. String body = "<!-- " + xmlSignature + " -->\n" + xmlContent;
  177. response.getWriter().print(body);
  178. }
  179. }
  180. private void obtainTicketHandler ( String target , Request baseRequest , HttpServletRequest request ,
  181. HttpServletResponse response ) throws IOException
  182. {
  183. response.setContentType("text/html; charset=utf-8");
  184. response.setStatus(HttpServletResponse.SC_OK);
  185. SimpleDateFormat fm=new SimpleDateFormat("EEE,d MMM yyyy hh:mm:ss Z", Locale.ENGLISH);
  186. String date =fm.format(new Date())+" GMT";
  187. //response.setHeader("Date", date);
  188. //response.setHeader("Server", "fasthttp");
  189. String salt = request.getParameter("salt");
  190. String username = request.getParameter("userName");
  191. String prolongationPeriod = "607875500";
  192. baseRequest.setHandled(true);
  193. if(salt==null||username==null){
  194. response.setStatus(HttpServletResponse.SC_FORBIDDEN);
  195. }else{
  196. String xmlContent = "<ObtainTicketResponse><message></message><prolongationPeriod>" + prolongationPeriod + "</prolongationPeriod><responseCode>OK</responseCode><salt>" + salt + "</salt><ticketId>1</ticketId><ticketProperties>licensee=" + username + "\tlicenseType=0\t</ticketProperties></ObtainTicketResponse>";
  197. String xmlSignature = rsasign.Sign(xmlContent);
  198. String body = "<!-- " + xmlSignature + " -->\n" + xmlContent;
  199. response.getWriter().print(body);
  200. }
  201. }
  202. private void pingHandler ( String target , Request baseRequest , HttpServletRequest request , HttpServletResponse response ) throws IOException
  203. {
  204. response.setContentType("text/html; charset=utf-8");
  205. response.setStatus(HttpServletResponse.SC_OK);
  206. String salt = request.getParameter("salt");
  207. baseRequest.setHandled(true);
  208. if(salt==null){
  209. response.setStatus(HttpServletResponse.SC_FORBIDDEN);
  210. }else{
  211. String xmlContent = "<PingResponse><message></message><responseCode>OK</responseCode><salt>" + salt + "</salt></PingResponse>";
  212. String xmlSignature = rsasign.Sign(xmlContent);
  213. String body = "<!-- " + xmlSignature + " -->\n" + xmlContent;
  214. response.getWriter().print(body);
  215. }
  216. }
  217. private void indexHandler(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException {
  218. response.setContentType("text/html; charset=utf-8");
  219. response.setStatus(HttpServletResponse.SC_OK);
  220. baseRequest.setHandled(true);
  221. response.getWriter().println("<h1>Hello,This is a Jrebel & JetBrains License Server!</h1>");
  222. }
  223. }